diff options
Diffstat (limited to 'drivers/input/keyboard/gpio_keys.c')
| -rw-r--r-- | drivers/input/keyboard/gpio_keys.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index eb3006361ee..6e6145b9a4c 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; @@ -468,7 +473,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, ddata);  	input_set_drvdata(input, ddata); -	input->name = pdev->name; +	input->name = pdata->name ? : pdev->name;  	input->phys = "gpio-keys/input0";  	input->dev.parent = &pdev->dev;  	input->open = gpio_keys_open;  |