From 25874b15e6227dedbbd3eba650b1150c9e0846a1 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 27 Sep 2011 19:00:54 +0200 Subject: [PATCH] --- yaml --- r: 268571 b: refs/heads/master c: ff169c1487381aa522b92b9f0c87bd92577bfc80 h: refs/heads/master i: 268569: a4a150325d54179f75e9a648e3d056c629643fc8 268567: eb7479cd86c86cb60c6f60a76499f5e2e3f76063 v: v3 --- [refs] | 2 +- trunk/drivers/staging/nvec/nvec_kbd.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ee4e42f74a15..e679a33993e2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 791c4a642721552204d8defdbd6a3e93cd411f79 +refs/heads/master: ff169c1487381aa522b92b9f0c87bd92577bfc80 diff --git a/trunk/drivers/staging/nvec/nvec_kbd.c b/trunk/drivers/staging/nvec/nvec_kbd.c index 167eac098094..a4ce5a740e2b 100644 --- a/trunk/drivers/staging/nvec/nvec_kbd.c +++ b/trunk/drivers/staging/nvec/nvec_kbd.c @@ -23,6 +23,8 @@ #define ACK_KBD_EVENT {'\x05', '\xed', '\x01'} +static const char led_on[3] = "\x05\xed\x07"; +static const char led_off[3] = "\x05\xed\x00"; static unsigned char keycodes[ARRAY_SIZE(code_tab_102us) + ARRAY_SIZE(extcode_tab_us102)]; @@ -30,10 +32,21 @@ struct nvec_keys { struct input_dev *input; struct notifier_block notifier; struct nvec_chip *nvec; + bool caps_lock; }; static struct nvec_keys keys_dev; +static void nvec_kbd_toggle_led(void) +{ + keys_dev.caps_lock = !keys_dev.caps_lock; + + if (keys_dev.caps_lock) + nvec_write_async(keys_dev.nvec, led_on, sizeof(led_on)); + else + nvec_write_async(keys_dev.nvec, led_off, sizeof(led_off)); +} + static int nvec_keys_notifier(struct notifier_block *nb, unsigned long event_type, void *data) { @@ -53,6 +66,9 @@ static int nvec_keys_notifier(struct notifier_block *nb, code = msg[1] & 0x7f; state = msg[1] & 0x80; + if (code_tabs[_size][code] == KEY_CAPSLOCK && state) + nvec_kbd_toggle_led(); + input_report_key(keys_dev.input, code_tabs[_size][code], !state); input_sync(keys_dev.input); @@ -133,6 +149,9 @@ static int __devinit nvec_kbd_probe(struct platform_device *pdev) or until we have a sync write */ mdelay(1000); + /* Disable caps lock LED */ + nvec_write_async(nvec, led_off, sizeof(led_off)); + return 0; fail: