Lines Matching refs:bdata

132 	struct gpio_button_data *bdata = data;  in gpio_keys_quiesce_key()  local
134 if (!bdata->gpiod) in gpio_keys_quiesce_key()
135 hrtimer_cancel(&bdata->release_timer); in gpio_keys_quiesce_key()
136 else if (bdata->debounce_use_hrtimer) in gpio_keys_quiesce_key()
137 hrtimer_cancel(&bdata->debounce_timer); in gpio_keys_quiesce_key()
139 cancel_delayed_work_sync(&bdata->work); in gpio_keys_quiesce_key()
155 static void gpio_keys_disable_button(struct gpio_button_data *bdata) in gpio_keys_disable_button() argument
157 if (!bdata->disabled) { in gpio_keys_disable_button()
161 disable_irq(bdata->irq); in gpio_keys_disable_button()
162 gpio_keys_quiesce_key(bdata); in gpio_keys_disable_button()
163 bdata->disabled = true; in gpio_keys_disable_button()
177 static void gpio_keys_enable_button(struct gpio_button_data *bdata) in gpio_keys_enable_button() argument
179 if (bdata->disabled) { in gpio_keys_enable_button()
180 enable_irq(bdata->irq); in gpio_keys_enable_button()
181 bdata->disabled = false; in gpio_keys_enable_button()
213 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_show_helper() local
215 if (bdata->button->type != type) in gpio_keys_attr_show_helper()
218 if (only_disabled && !bdata->disabled) in gpio_keys_attr_show_helper()
221 __set_bit(*bdata->code, bits); in gpio_keys_attr_show_helper()
264 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_store_helper() local
266 if (bdata->button->type != type) in gpio_keys_attr_store_helper()
269 if (test_bit(*bdata->code, bits) && in gpio_keys_attr_store_helper()
270 !bdata->button->can_disable) { in gpio_keys_attr_store_helper()
278 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_store_helper() local
280 if (bdata->button->type != type) in gpio_keys_attr_store_helper()
283 if (test_bit(*bdata->code, bits)) in gpio_keys_attr_store_helper()
284 gpio_keys_disable_button(bdata); in gpio_keys_attr_store_helper()
286 gpio_keys_enable_button(bdata); in gpio_keys_attr_store_helper()
360 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) in gpio_keys_gpio_report_event() argument
362 const struct gpio_keys_button *button = bdata->button; in gpio_keys_gpio_report_event()
363 struct input_dev *input = bdata->input; in gpio_keys_gpio_report_event()
367 state = bdata->debounce_use_hrtimer ? in gpio_keys_gpio_report_event()
368 gpiod_get_value(bdata->gpiod) : in gpio_keys_gpio_report_event()
369 gpiod_get_value_cansleep(bdata->gpiod); in gpio_keys_gpio_report_event()
380 input_event(input, type, *bdata->code, state); in gpio_keys_gpio_report_event()
384 static void gpio_keys_debounce_event(struct gpio_button_data *bdata) in gpio_keys_debounce_event() argument
386 gpio_keys_gpio_report_event(bdata); in gpio_keys_debounce_event()
387 input_sync(bdata->input); in gpio_keys_debounce_event()
389 if (bdata->button->wakeup) in gpio_keys_debounce_event()
390 pm_relax(bdata->input->dev.parent); in gpio_keys_debounce_event()
395 struct gpio_button_data *bdata = in gpio_keys_gpio_work_func() local
398 gpio_keys_debounce_event(bdata); in gpio_keys_gpio_work_func()
403 struct gpio_button_data *bdata = in gpio_keys_debounce_timer() local
406 gpio_keys_debounce_event(bdata); in gpio_keys_debounce_timer()
413 struct gpio_button_data *bdata = dev_id; in gpio_keys_gpio_isr() local
415 BUG_ON(irq != bdata->irq); in gpio_keys_gpio_isr()
417 if (bdata->button->wakeup) { in gpio_keys_gpio_isr()
418 const struct gpio_keys_button *button = bdata->button; in gpio_keys_gpio_isr()
420 pm_stay_awake(bdata->input->dev.parent); in gpio_keys_gpio_isr()
421 if (bdata->suspended && in gpio_keys_gpio_isr()
428 input_report_key(bdata->input, button->code, 1); in gpio_keys_gpio_isr()
432 if (bdata->debounce_use_hrtimer) { in gpio_keys_gpio_isr()
433 hrtimer_start(&bdata->debounce_timer, in gpio_keys_gpio_isr()
434 ms_to_ktime(bdata->software_debounce), in gpio_keys_gpio_isr()
438 &bdata->work, in gpio_keys_gpio_isr()
439 msecs_to_jiffies(bdata->software_debounce)); in gpio_keys_gpio_isr()
447 struct gpio_button_data *bdata = container_of(t, in gpio_keys_irq_timer() local
450 struct input_dev *input = bdata->input; in gpio_keys_irq_timer()
452 if (bdata->key_pressed) { in gpio_keys_irq_timer()
453 input_report_key(input, *bdata->code, 0); in gpio_keys_irq_timer()
455 bdata->key_pressed = false; in gpio_keys_irq_timer()
463 struct gpio_button_data *bdata = dev_id; in gpio_keys_irq_isr() local
464 struct input_dev *input = bdata->input; in gpio_keys_irq_isr()
466 BUG_ON(irq != bdata->irq); in gpio_keys_irq_isr()
468 guard(spinlock_irqsave)(&bdata->lock); in gpio_keys_irq_isr()
470 if (!bdata->key_pressed) { in gpio_keys_irq_isr()
471 if (bdata->button->wakeup) in gpio_keys_irq_isr()
472 pm_wakeup_event(bdata->input->dev.parent, 0); in gpio_keys_irq_isr()
474 input_report_key(input, *bdata->code, 1); in gpio_keys_irq_isr()
477 if (!bdata->release_delay) { in gpio_keys_irq_isr()
478 input_report_key(input, *bdata->code, 0); in gpio_keys_irq_isr()
483 bdata->key_pressed = true; in gpio_keys_irq_isr()
486 if (bdata->release_delay) in gpio_keys_irq_isr()
487 hrtimer_start(&bdata->release_timer, in gpio_keys_irq_isr()
488 ms_to_ktime(bdata->release_delay), in gpio_keys_irq_isr()
503 struct gpio_button_data *bdata = &ddata->data[idx]; in gpio_keys_setup_key() local
510 bdata->input = input; in gpio_keys_setup_key()
511 bdata->button = button; in gpio_keys_setup_key()
512 spin_lock_init(&bdata->lock); in gpio_keys_setup_key()
515 bdata->gpiod = devm_fwnode_gpiod_get(dev, child, in gpio_keys_setup_key()
517 if (IS_ERR(bdata->gpiod)) { in gpio_keys_setup_key()
518 error = PTR_ERR(bdata->gpiod); in gpio_keys_setup_key()
527 bdata->gpiod = NULL; in gpio_keys_setup_key()
541 bdata->gpiod = gpio_to_desc(button->gpio); in gpio_keys_setup_key()
542 if (!bdata->gpiod) in gpio_keys_setup_key()
545 if (button->active_low ^ gpiod_is_active_low(bdata->gpiod)) in gpio_keys_setup_key()
546 gpiod_toggle_active_low(bdata->gpiod); in gpio_keys_setup_key()
549 if (bdata->gpiod) { in gpio_keys_setup_key()
550 bool active_low = gpiod_is_active_low(bdata->gpiod); in gpio_keys_setup_key()
553 error = gpiod_set_debounce(bdata->gpiod, in gpio_keys_setup_key()
557 bdata->software_debounce = in gpio_keys_setup_key()
565 bdata->debounce_use_hrtimer = in gpio_keys_setup_key()
566 !gpiod_cansleep(bdata->gpiod); in gpio_keys_setup_key()
578 bdata->irq = button->irq; in gpio_keys_setup_key()
580 irq = gpiod_to_irq(bdata->gpiod); in gpio_keys_setup_key()
588 bdata->irq = irq; in gpio_keys_setup_key()
591 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func); in gpio_keys_setup_key()
593 hrtimer_init(&bdata->debounce_timer, in gpio_keys_setup_key()
595 bdata->debounce_timer.function = gpio_keys_debounce_timer; in gpio_keys_setup_key()
602 bdata->wakeup_trigger_type = active_low ? in gpio_keys_setup_key()
606 bdata->wakeup_trigger_type = active_low ? in gpio_keys_setup_key()
623 bdata->irq = button->irq; in gpio_keys_setup_key()
630 bdata->release_delay = button->debounce_interval; in gpio_keys_setup_key()
631 hrtimer_init(&bdata->release_timer, in gpio_keys_setup_key()
633 bdata->release_timer.function = gpio_keys_irq_timer; in gpio_keys_setup_key()
644 bdata->code = &ddata->keymap[idx]; in gpio_keys_setup_key()
645 *bdata->code = button->code; in gpio_keys_setup_key()
646 input_set_capability(input, button->type ?: EV_KEY, *bdata->code); in gpio_keys_setup_key()
652 error = devm_add_action(dev, gpio_keys_quiesce_key, bdata); in gpio_keys_setup_key()
666 error = devm_request_any_context_irq(dev, bdata->irq, isr, irqflags, in gpio_keys_setup_key()
667 desc, bdata); in gpio_keys_setup_key()
670 bdata->irq, error); in gpio_keys_setup_key()
682 bdata->wakeirq = button->wakeirq; in gpio_keys_setup_key()
690 error = devm_request_any_context_irq(dev, bdata->wakeirq, isr, in gpio_keys_setup_key()
691 irqflags, wakedesc, bdata); in gpio_keys_setup_key()
694 bdata->irq, error); in gpio_keys_setup_key()
702 disable_irq(bdata->wakeirq); in gpio_keys_setup_key()
713 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_report_state() local
714 if (bdata->gpiod) in gpio_keys_report_state()
715 gpio_keys_gpio_report_event(bdata); in gpio_keys_report_state()
937 gpio_keys_button_enable_wakeup(struct gpio_button_data *bdata) in gpio_keys_button_enable_wakeup() argument
941 error = enable_irq_wake(bdata->irq); in gpio_keys_button_enable_wakeup()
943 dev_err(bdata->input->dev.parent, in gpio_keys_button_enable_wakeup()
945 bdata->irq, error); in gpio_keys_button_enable_wakeup()
949 if (bdata->wakeup_trigger_type) { in gpio_keys_button_enable_wakeup()
950 error = irq_set_irq_type(bdata->irq, in gpio_keys_button_enable_wakeup()
951 bdata->wakeup_trigger_type); in gpio_keys_button_enable_wakeup()
953 dev_err(bdata->input->dev.parent, in gpio_keys_button_enable_wakeup()
955 bdata->wakeup_trigger_type, bdata->irq, error); in gpio_keys_button_enable_wakeup()
956 disable_irq_wake(bdata->irq); in gpio_keys_button_enable_wakeup()
961 if (bdata->wakeirq) { in gpio_keys_button_enable_wakeup()
962 enable_irq(bdata->wakeirq); in gpio_keys_button_enable_wakeup()
963 disable_irq(bdata->irq); in gpio_keys_button_enable_wakeup()
970 gpio_keys_button_disable_wakeup(struct gpio_button_data *bdata) in gpio_keys_button_disable_wakeup() argument
974 if (bdata->wakeirq) { in gpio_keys_button_disable_wakeup()
975 enable_irq(bdata->irq); in gpio_keys_button_disable_wakeup()
976 disable_irq(bdata->wakeirq); in gpio_keys_button_disable_wakeup()
983 if (bdata->wakeup_trigger_type) { in gpio_keys_button_disable_wakeup()
984 error = irq_set_irq_type(bdata->irq, IRQ_TYPE_EDGE_BOTH); in gpio_keys_button_disable_wakeup()
986 dev_warn(bdata->input->dev.parent, in gpio_keys_button_disable_wakeup()
988 bdata->irq, error); in gpio_keys_button_disable_wakeup()
991 error = disable_irq_wake(bdata->irq); in gpio_keys_button_disable_wakeup()
993 dev_warn(bdata->input->dev.parent, in gpio_keys_button_disable_wakeup()
995 bdata->irq, error); in gpio_keys_button_disable_wakeup()
1001 struct gpio_button_data *bdata; in gpio_keys_enable_wakeup() local
1006 bdata = &ddata->data[i]; in gpio_keys_enable_wakeup()
1007 if (bdata->button->wakeup) { in gpio_keys_enable_wakeup()
1008 error = gpio_keys_button_enable_wakeup(bdata); in gpio_keys_enable_wakeup()
1012 bdata->suspended = true; in gpio_keys_enable_wakeup()
1019 bdata = &ddata->data[i]; in gpio_keys_enable_wakeup()
1020 if (bdata->button->wakeup) in gpio_keys_enable_wakeup()
1021 gpio_keys_button_disable_wakeup(bdata); in gpio_keys_enable_wakeup()
1022 bdata->suspended = false; in gpio_keys_enable_wakeup()
1031 struct gpio_button_data *bdata; in gpio_keys_disable_wakeup() local
1035 bdata = &ddata->data[i]; in gpio_keys_disable_wakeup()
1036 bdata->suspended = false; in gpio_keys_disable_wakeup()
1037 if (irqd_is_wakeup_set(irq_get_irq_data(bdata->irq))) in gpio_keys_disable_wakeup()
1038 gpio_keys_button_disable_wakeup(bdata); in gpio_keys_disable_wakeup()