aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-08-03 11:49:50 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-08-03 11:49:50 +0000
commit4281026dda5fa10857aae302405baa3ee5fae0d1 (patch)
tree0f81a3144f09a8a7ca5ac763c031f590e2f1a773
parent36cc8cc8564e8f208c5d490cb3c8996c99250399 (diff)
downloadupstream-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.c17
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;