Selaa lähdekoodia

gpio-button-hotplug: fix active_low handling, possibly broken in r37643

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 37664
Felix Fietkau 12 vuotta sitten
vanhempi
sitoutus
4281026dda
1 muutettua tiedostoa jossa 9 lisäystä ja 8 poistoa
  1. 9 8
      package/kernel/gpio-button-hotplug/src/gpio-button-hotplug.c

+ 9 - 8
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;