gpio-button-hotplug: fix active_low handling, possibly broken in r37643
authorFelix Fietkau <nbd@openwrt.org>
Sat, 3 Aug 2013 11:49:50 +0000 (11:49 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 3 Aug 2013 11:49:50 +0000 (11:49 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 37664

package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c

index 74c2ecaa2edba76a49cce168a2233ecef42d708b..012cd228dc32dfe63292406be800a44437f2674d 100644 (file)
@@ -274,23 +274,24 @@ struct gpio_keys_polled_dev {
        struct gpio_keys_button_data data[0];
 };
 
        struct gpio_keys_button_data data[0];
 };
 
-static inline int gpio_button_get_value(struct gpio_keys_button *button,
-                         struct gpio_keys_button_data *bdata)
+static int gpio_button_get_value(struct gpio_keys_button *button,
+                                struct gpio_keys_button_data *bdata)
 {
 {
+       int val;
+
        if (bdata->can_sleep)
        if (bdata->can_sleep)
-               return !!gpio_get_value_cansleep(button->gpio);
+               val = !!gpio_get_value_cansleep(button->gpio);
        else
        else
-               return !!gpio_get_value(button->gpio);
+               val = !!gpio_get_value(button->gpio);
+
+       return val ^ button->active_low;
 }
 
 static void gpio_keys_polled_check_state(struct gpio_keys_button *button,
                                         struct gpio_keys_button_data *bdata)
 {
 }
 
 static void gpio_keys_polled_check_state(struct gpio_keys_button *button,
                                         struct gpio_keys_button_data *bdata)
 {
-       int state;
-
-       state = gpio_button_get_value(button, bdata);
+       int state = gpio_button_get_value(button, bdata);
 
 
-       state = !!(state ^ button->active_low);
        if (state != bdata->last_state) {
                unsigned int type = button->type ?: EV_KEY;
 
        if (state != bdata->last_state) {
                unsigned int type = button->type ?: EV_KEY;