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

Reply via email to