Input: gpio_keys - add support for EV_ABS
authorAlexander Stein <alexander.stein@informatik.tu-chemnitz.de>
Tue, 12 Apr 2011 06:34:37 +0000 (23:34 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 12 Apr 2011 06:53:09 +0000 (23:53 -0700)
With this patch you can setup a group of GPIOs representing a specific
position on an EV_ABS axis.

Signed-off-by: Alexander Stein <alexander.stein@informatik.tu-chemnitz.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/keyboard/gpio_keys.c
include/linux/gpio_keys.h

index eb30063..73e58a9 100644 (file)
@@ -324,7 +324,12 @@ static void gpio_keys_report_event(struct gpio_button_data *bdata)
        unsigned int type = button->type ?: EV_KEY;
        int state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ button->active_low;
 
-       input_event(input, type, button->code, !!state);
+       if (type == EV_ABS) {
+               if (state)
+                       input_event(input, type, button->code, button->value);
+       } else {
+               input_event(input, type, button->code, !!state);
+       }
        input_sync(input);
 }
 
@@ -363,7 +368,7 @@ static int __devinit gpio_keys_setup_key(struct platform_device *pdev,
                                         struct gpio_button_data *bdata,
                                         struct gpio_keys_button *button)
 {
-       char *desc = button->desc ? button->desc : "gpio_keys";
+       const char *desc = button->desc ? button->desc : "gpio_keys";
        struct device *dev = &pdev->dev;
        unsigned long irqflags;
        int irq, error;
index dd1a56f..3204edf 100644 (file)
@@ -3,14 +3,15 @@
 
 struct gpio_keys_button {
        /* Configuration parameters */
-       int code;               /* input event code (KEY_*, SW_*) */
+       unsigned int code;      /* input event code (KEY_*, SW_*) */
        int gpio;
        int active_low;
-       char *desc;
-       int type;               /* input event type (EV_KEY, EV_SW) */
+       const char *desc;
+       unsigned int type;      /* input event type (EV_KEY, EV_SW, EV_ABS) */
        int wakeup;             /* configure the button as a wake-up source */
        int debounce_interval;  /* debounce ticks interval in msecs */
        bool can_disable;
+       int value;              /* axis value for EV_ABS */
 };
 
 struct gpio_keys_platform_data {