static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) { const struct gpio_keys_button *button = bdata->button; struct input_dev *input = bdata->input; unsigned int type = button->type ?: EV_KEY; int state = (gpio_keys_getval(button->gpio) ? 1 : 0) ^ button->active_low; if (type == EV_ABS) { if (state) input_event(input, type, button->code, button->value); } else { input_event(input, type, button->code, !!state); } input_sync(input); }
static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) { const struct gpio_keys_button *button = bdata->button; struct input_dev *input = bdata->input; unsigned int type = button->type ?: EV_KEY; int state = (gpio_keys_getval(button->gpio) ? 1 : 0) ^ button->active_low; printk(KERN_INFO "Keycode:%d, state:%d, type:%d\n", button->code, state, type); if (type == EV_ABS) { if (state) input_event(input, type, button->code, button->value); } else { pr_info("%s:%d. type = %d, keycode = %d.\n", __FUNCTION__, __LINE__, type, button->code); input_event(input, type, button->code, !!state); } input_sync(input); }
static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id) { struct gpio_button_data *bdata = dev_id; const struct gpio_keys_button *button; struct input_dev *input; unsigned int type; int state; BUG_ON(!bdata); BUG_ON(!bdata->button); BUG_ON(irq != bdata->irq); button = bdata->button; input = bdata->input; state = (gpio_keys_getval(button->gpio) ? 1 : 0) ^ button->active_low; if (bdata->ddata->force_trigger && !state) { type = button->type ?: EV_KEY; input_event(input, type, button->code, !state); bdata->ddata->force_trigger = 0; }
static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id) { struct gpio_button_data *bdata = dev_id; struct gpio_keys_button *button; struct input_dev *input; unsigned int type; int state; BUG_ON(!bdata); pr_info("%s:%d. irq = %d, key_pressed = %d, gpio = %d.\n", __FUNCTION__, __LINE__, bdata->irq, bdata->key_pressed, bdata->button->gpio); BUG_ON(!bdata->button); BUG_ON(irq != bdata->irq); button = bdata->button; input = bdata->input; state = (gpio_keys_getval(button->gpio) ? 1 : 0) ^ button->active_low; if (bdata->ddata->force_trigger && !state) { type = button->type ?: EV_KEY; input_event(input, type, button->code, !state); bdata->ddata->force_trigger = 0; }