Lines Matching defs:bdata

132 	struct gpio_button_data *bdata = data;
134 if (!bdata->gpiod)
135 hrtimer_cancel(&bdata->release_timer);
136 else if (bdata->debounce_use_hrtimer)
137 hrtimer_cancel(&bdata->debounce_timer);
139 cancel_delayed_work_sync(&bdata->work);
144 * @bdata: button data for button to be disabled
146 * Disables button pointed by @bdata. This is done by masking
151 * Make sure that @bdata->disable_lock is locked when entering
155 static void gpio_keys_disable_button(struct gpio_button_data *bdata)
157 if (!bdata->disabled) {
161 disable_irq(bdata->irq);
162 gpio_keys_quiesce_key(bdata);
163 bdata->disabled = true;
169 * @bdata: button data for button to be disabled
171 * Enables given button pointed by @bdata.
173 * Make sure that @bdata->disable_lock is locked when entering
177 static void gpio_keys_enable_button(struct gpio_button_data *bdata)
179 if (bdata->disabled) {
180 enable_irq(bdata->irq);
181 bdata->disabled = false;
213 struct gpio_button_data *bdata = &ddata->data[i];
215 if (bdata->button->type != type)
218 if (only_disabled && !bdata->disabled)
221 __set_bit(*bdata->code, bits);
267 struct gpio_button_data *bdata = &ddata->data[i];
269 if (bdata->button->type != type)
272 if (test_bit(*bdata->code, bits) &&
273 !bdata->button->can_disable) {
282 struct gpio_button_data *bdata = &ddata->data[i];
284 if (bdata->button->type != type)
287 if (test_bit(*bdata->code, bits))
288 gpio_keys_disable_button(bdata);
290 gpio_keys_enable_button(bdata);
368 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
370 const struct gpio_keys_button *button = bdata->button;
371 struct input_dev *input = bdata->input;
375 state = bdata->debounce_use_hrtimer ?
376 gpiod_get_value(bdata->gpiod) :
377 gpiod_get_value_cansleep(bdata->gpiod);
388 input_event(input, type, *bdata->code, state);
392 static void gpio_keys_debounce_event(struct gpio_button_data *bdata)
394 gpio_keys_gpio_report_event(bdata);
395 input_sync(bdata->input);
397 if (bdata->button->wakeup)
398 pm_relax(bdata->input->dev.parent);
403 struct gpio_button_data *bdata =
406 gpio_keys_debounce_event(bdata);
411 struct gpio_button_data *bdata =
414 gpio_keys_debounce_event(bdata);
421 struct gpio_button_data *bdata = dev_id;
423 BUG_ON(irq != bdata->irq);
425 if (bdata->button->wakeup) {
426 const struct gpio_keys_button *button = bdata->button;
428 pm_stay_awake(bdata->input->dev.parent);
429 if (bdata->suspended &&
436 input_report_key(bdata->input, button->code, 1);
440 if (bdata->debounce_use_hrtimer) {
441 hrtimer_start(&bdata->debounce_timer,
442 ms_to_ktime(bdata->software_debounce),
446 &bdata->work,
447 msecs_to_jiffies(bdata->software_debounce));
455 struct gpio_button_data *bdata = container_of(t,
458 struct input_dev *input = bdata->input;
460 if (bdata->key_pressed) {
461 input_report_key(input, *bdata->code, 0);
463 bdata->key_pressed = false;
471 struct gpio_button_data *bdata = dev_id;
472 struct input_dev *input = bdata->input;
475 BUG_ON(irq != bdata->irq);
477 spin_lock_irqsave(&bdata->lock, flags);
479 if (!bdata->key_pressed) {
480 if (bdata->button->wakeup)
481 pm_wakeup_event(bdata->input->dev.parent, 0);
483 input_report_key(input, *bdata->code, 1);
486 if (!bdata->release_delay) {
487 input_report_key(input, *bdata->code, 0);
492 bdata->key_pressed = true;
495 if (bdata->release_delay)
496 hrtimer_start(&bdata->release_timer,
497 ms_to_ktime(bdata->release_delay),
500 spin_unlock_irqrestore(&bdata->lock, flags);
513 struct gpio_button_data *bdata = &ddata->data[idx];
520 bdata->input = input;
521 bdata->button = button;
522 spin_lock_init(&bdata->lock);
525 bdata->gpiod = devm_fwnode_gpiod_get(dev, child,
527 if (IS_ERR(bdata->gpiod)) {
528 error = PTR_ERR(bdata->gpiod);
537 bdata->gpiod = NULL;
556 bdata->gpiod = gpio_to_desc(button->gpio);
557 if (!bdata->gpiod)
561 if (bdata->gpiod) {
562 bool active_low = gpiod_is_active_low(bdata->gpiod);
565 error = gpiod_set_debounce(bdata->gpiod,
569 bdata->software_debounce =
577 bdata->debounce_use_hrtimer =
578 !gpiod_cansleep(bdata->gpiod);
587 * for bdata->wakeirq setup.
590 bdata->irq = button->irq;
592 irq = gpiod_to_irq(bdata->gpiod);
600 bdata->irq = irq;
603 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func);
605 hrtimer_init(&bdata->debounce_timer,
607 bdata->debounce_timer.function = gpio_keys_debounce_timer;
614 bdata->wakeup_trigger_type = active_low ?
618 bdata->wakeup_trigger_type = active_low ?
635 bdata->irq = button->irq;
642 bdata->release_delay = button->debounce_interval;
643 hrtimer_init(&bdata->release_timer,
645 bdata->release_timer.function = gpio_keys_irq_timer;
656 bdata->code = &ddata->keymap[idx];
657 *bdata->code = button->code;
658 input_set_capability(input, button->type ?: EV_KEY, *bdata->code);
664 error = devm_add_action(dev, gpio_keys_quiesce_key, bdata);
678 error = devm_request_any_context_irq(dev, bdata->irq, isr, irqflags,
679 desc, bdata);
682 bdata->irq, error);
694 bdata->wakeirq = button->wakeirq;
702 error = devm_request_any_context_irq(dev, bdata->wakeirq, isr,
703 irqflags, wakedesc, bdata);
706 bdata->irq, error);
714 disable_irq(bdata->wakeirq);
725 struct gpio_button_data *bdata = &ddata->data[i];
726 if (bdata->gpiod)
727 gpio_keys_gpio_report_event(bdata);
951 gpio_keys_button_enable_wakeup(struct gpio_button_data *bdata)
955 error = enable_irq_wake(bdata->irq);
957 dev_err(bdata->input->dev.parent,
959 bdata->irq, error);
963 if (bdata->wakeup_trigger_type) {
964 error = irq_set_irq_type(bdata->irq,
965 bdata->wakeup_trigger_type);
967 dev_err(bdata->input->dev.parent,
969 bdata->wakeup_trigger_type, bdata->irq, error);
970 disable_irq_wake(bdata->irq);
975 if (bdata->wakeirq) {
976 enable_irq(bdata->wakeirq);
977 disable_irq(bdata->irq);
984 gpio_keys_button_disable_wakeup(struct gpio_button_data *bdata)
988 if (bdata->wakeirq) {
989 enable_irq(bdata->irq);
990 disable_irq(bdata->wakeirq);
997 if (bdata->wakeup_trigger_type) {
998 error = irq_set_irq_type(bdata->irq, IRQ_TYPE_EDGE_BOTH);
1000 dev_warn(bdata->input->dev.parent,
1002 bdata->irq, error);
1005 error = disable_irq_wake(bdata->irq);
1007 dev_warn(bdata->input->dev.parent,
1009 bdata->irq, error);
1015 struct gpio_button_data *bdata;
1020 bdata = &ddata->data[i];
1021 if (bdata->button->wakeup) {
1022 error = gpio_keys_button_enable_wakeup(bdata);
1026 bdata->suspended = true;
1033 bdata = &ddata->data[i];
1034 if (bdata->button->wakeup)
1035 gpio_keys_button_disable_wakeup(bdata);
1036 bdata->suspended = false;
1045 struct gpio_button_data *bdata;
1049 bdata = &ddata->data[i];
1050 bdata->suspended = false;
1051 if (irqd_is_wakeup_set(irq_get_irq_data(bdata->irq)))
1052 gpio_keys_button_disable_wakeup(bdata);