Thread (6 messages) 6 messages, 2 authors, 2009-11-26

Re: keyboard leds not restored after s2ram in 2.6.32-rc6-00166-g799dd75

From: Mikko Vinni <hidden>
Date: 2009-11-11 20:05:42
Also in: lkml

Hi,

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
quoted
my laptop shows the caps lock and scroll lock leds as being on after s2ram
(and resume), even though they are off. If I press the caps lock key, the caps
lock led stays on, the num lock led turns off, and the screen unlock screen
warns about the caps lock being on.
Thank you for the report. Could youplease tell me if the patch below
fixes the problem?
Yes, it does. Thanks, now my HP-dv5 is happy.

I did some tests suspending with the caps lock actually on, and it seems that
in that case the user might still be confused (caps lock is on but led is off).
At least on this machine this patch doesn't affect this theoretical problem
either way (2.6.31 behaves similarly), so it is ok.


Mikko

quoted hunk ↗ jump to hunk
Thanks!

-- 
Dmitry


Input: force LED reset on resume

From: Dmitry Torokhov 

We should be sending EV_LED event down to drivers upon resume even in cases
when in-kernel state of the LED is off since device could come up with some
leds turned on.

Reported-by: Mikko Vinni 
Signed-off-by: Dmitry Torokhov 
---

drivers/input/input.c |   29 ++++++++++++++++++-----------
1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/drivers/input/input.c b/drivers/input/input.c
index 61069b2..77b6efe 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -1298,17 +1298,24 @@ static int input_dev_uevent(struct device *device, 
struct kobj_uevent_env *env)
    return 0;
}

-#define INPUT_DO_TOGGLE(dev, type, bits, on)            \
-    do {                            \
-        int i;                        \
-        if (!test_bit(EV_##type, dev->evbit))        \
-            break;                    \
-        for (i = 0; i < type##_MAX; i++) {        \
-            if (!test_bit(i, dev->bits##bit) ||    \
-                !test_bit(i, dev->bits))        \
-                continue;            \
-            dev->event(dev, EV_##type, i, on);    \
-        }                        \
+#define INPUT_DO_TOGGLE(dev, type, bits, on)                \
+    do {                                \
+        int i;                            \
+        bool active;                        \
+                                    \
+        if (!test_bit(EV_##type, dev->evbit))            \
+            break;                        \
+                                    \
+        for (i = 0; i < type##_MAX; i++) {            \
+            if (!test_bit(i, dev->bits##bit))        \
+                continue;                \
+                                    \
+            active = test_bit(i, dev->bits);        \
+            if (!active && !on)                \
+                continue;                \
+                                    \
+            dev->event(dev, EV_##type, i, on ? active : 0);    \
+        }                            \
    } while (0)

#ifdef CONFIG_PM


      
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help