Use the correct gpio_set_value function based on whether the chip can sleep.
Signed-off-by: Kristen Carlson Accardi <[email protected]> --- drivers/input/keyboard/gpio_keys.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index 6069abe..f405d95 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -33,6 +33,7 @@ struct gpio_button_data { struct work_struct work; int timer_debounce; /* in msecs */ bool disabled; + bool can_sleep; }; struct gpio_keys_drvdata { @@ -322,7 +323,14 @@ static void gpio_keys_report_event(struct gpio_button_data *bdata) struct gpio_keys_button *button = bdata->button; struct input_dev *input = bdata->input; unsigned int type = button->type ?: EV_KEY; - int state = (gpio_get_value(button->gpio) ? 1 : 0) ^ button->active_low; + int state; + + if (bdata->can_sleep) + state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ + button->active_low; + else + state = (gpio_get_value(button->gpio) ? 1 : 0) ^ + button->active_low; input_event(input, type, button->code, !!state); input_sync(input); @@ -498,6 +506,8 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev) if (button->wakeup) wakeup = 1; + bdata->can_sleep = gpio_cansleep(button->gpio); + input_set_capability(input, type, button->code); } -- 1.7.3.1 _______________________________________________ MeeGo-kernel mailing list [email protected] http://lists.meego.com/listinfo/meego-kernel
