diff options
| -rw-r--r-- | drivers/input/keyboard/gpio_keys.c | 9 | ||||
| -rw-r--r-- | include/linux/gpio_keys.h | 7 | 
2 files changed, 11 insertions, 5 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index eb3006361ee..73e58a96ab9 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -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; diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h index dd1a56fbe92..3204edfe6b1 100644 --- a/include/linux/gpio_keys.h +++ b/include/linux/gpio_keys.h @@ -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 {  |