diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-08-03 11:49:50 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-08-03 11:49:50 +0000 |
commit | 4281026dda5fa10857aae302405baa3ee5fae0d1 (patch) | |
tree | 0f81a3144f09a8a7ca5ac763c031f590e2f1a773 | |
parent | 36cc8cc8564e8f208c5d490cb3c8996c99250399 (diff) | |
download | upstream-4281026dda5fa10857aae302405baa3ee5fae0d1.tar.gz upstream-4281026dda5fa10857aae302405baa3ee5fae0d1.tar.bz2 upstream-4281026dda5fa10857aae302405baa3ee5fae0d1.zip |
gpio-button-hotplug: fix active_low handling, possibly broken in r37643
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 37664
-rw-r--r-- | package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c index 74c2ecaa2e..012cd228dc 100644 --- a/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c +++ b/package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c @@ -274,23 +274,24 @@ struct gpio_keys_polled_dev { 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) - return !!gpio_get_value_cansleep(button->gpio); + val = !!gpio_get_value_cansleep(button->gpio); 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) { - 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; |