Re: [PATCH] gpio_keys ev_sw support

From: Roman Moravcik <roman.moravcik_at_gmail.com>
Date: Wed, 11 Apr 2007 10:06:17 +0200

Hi Dmitry,

Dmitry Torokhov wrote / napísal(a):
>> This patch adds software event support to gpio_keys driver.
>>
>
> Just for the record EV_SW is not software event but switch event.
> Switch, as opposed to a key that returns to "off" state when released,
> keeps it's state until toggled again.

Ops, sorry. Yes, EV_SW is switch event not software event.
I don't why i wrote software.
>>
>> - input->evbit[0] = BIT(EV_KEY);
>> + input->evbit[0] = BIT(EV_KEY) | BIT(EV_SW);
>>
>
> You should not set these bits unconditionally but rather scan supplied
> keymap and set appropriately.
>
Ok, EV_SW bit is set conditionally now.

>> --- a/include/linux/gpio_keys.h 2007-02-25 16:21:52.000000000 +0100
>> +++ b/include/linux/gpio_keys.h 2007-04-05 20:23:31.000000000 +0200
>> @@ -6,6 +6,7 @@
>> int gpio;
>> int active_low;
>> char *desc;
>> + int type;
>
> Would not it make sense to keep type close to keycode element?
>
Moved behind the keycode.

Roman

This patch adds switch event support to gpio_keys driver.

Signed-off-by: Roman Moravcik <roman.moravcik_at_gmail.com>

diff -Naur a/drivers/input/keyboard/gpio_keys.c
b/drivers/input/keyboard/gpio_keys.c
--- a/drivers/input/keyboard/gpio_keys.c 2007-02-25
19:50:43.000000000 +0100
+++ b/drivers/input/keyboard/gpio_keys.c 2007-04-10
20:42:31.000000000 +0200
@@ -39,7 +39,10 @@
         if (irq == gpio_to_irq(gpio)) {
             int state = (gpio_get_value(gpio) ? 1 : 0) ^
(pdata->buttons[i].active_low);
 
- input_report_key(input, pdata->buttons[i].keycode, state);
+ if (pdata->buttons[i].type == EV_SW)
+ input_report_switch(input, pdata->buttons[i].keycode,
state);
+ else
+ input_report_key(input, pdata->buttons[i].keycode, state);
             input_sync(input);
         }
     }
@@ -84,7 +87,12 @@
                 irq, error);
             goto fail;
         }
- set_bit(code, input->keybit);
+ if (pdata->buttons[i].type == EV_SW) {
+ input->evbit[0] |= BIT(EV_SW);
+ set_bit(code, input->swbit);
+ } else {
+ set_bit(code, input->keybit);
+ }
     }
 
     error = input_register_device(input);
diff -Naur a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h
--- a/include/linux/gpio_keys.h 2007-02-25 16:21:52.000000000 +0100
+++ b/include/linux/gpio_keys.h 2007-04-10 20:31:25.000000000 +0200
@@ -3,6 +3,7 @@
 struct gpio_keys_button {
     /* Configuration parameters */
     int keycode;
+ int type;
     int gpio;
     int active_low;
     char *desc;
Received on Wed Apr 11 2007 - 04:08:22 EDT

This archive was generated by hypermail 2.2.0 : Wed Apr 11 2007 - 04:10:38 EDT