BH_MAP(BTN_7, "BTN_7"),
BH_MAP(BTN_8, "BTN_8"),
BH_MAP(BTN_9, "BTN_9"),
+ BH_MAP(KEY_POWER, "power"),
BH_MAP(KEY_RESTART, "reset"),
BH_MAP(KEY_RFKILL, "rfkill"),
BH_MAP(KEY_WPS_BUTTON, "wps"),
static int button_hotplug_fill_event(struct bh_event *event)
{
+ char *s;
int ret;
ret = bh_event_add_var(event, 0, "HOME=%s", "/");
if (ret)
return ret;
- char *s;
switch (event->type) {
- case EV_KEY:
- s = "button";
- break;
case EV_SW:
s = "switch";
break;
+ case EV_KEY:
default:
s = "button";
break;
struct gpio_keys_button_data data[0];
};
-static void gpio_keys_polled_check_state(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 state;
+ int val;
if (bdata->can_sleep)
- state = !!gpio_get_value_cansleep(button->gpio);
+ val = !!gpio_get_value_cansleep(button->gpio);
else
- state = !!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 = gpio_button_get_value(button, bdata);
- state = !!(state ^ button->active_low);
if (state != bdata->last_state) {
unsigned int type = button->type ?: EV_KEY;
return;
}
- button_hotplug_event(bdata, type, button->code, state);
+ if (bdata->last_state != -1)
+ button_hotplug_event(bdata, type, button->code, state);
+
bdata->last_state = state;
}
}
bdata->can_sleep = gpio_cansleep(gpio);
- bdata->last_state = 0;
+ bdata->last_state = -1;
bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
pdata->poll_interval);
}