Lines Matching refs:bdata

127  * @bdata: button data for button to be disabled
129 * Disables button pointed by @bdata. This is done by masking
134 * Make sure that @bdata->disable_lock is locked when entering
138 static void gpio_keys_disable_button(struct gpio_button_data *bdata)
140 if (!bdata->disabled) {
144 disable_irq(bdata->irq);
146 if (bdata->gpiod)
147 cancel_delayed_work_sync(&bdata->work);
149 del_timer_sync(&bdata->release_timer);
151 bdata->disabled = true;
157 * @bdata: button data for button to be disabled
159 * Enables given button pointed by @bdata.
161 * Make sure that @bdata->disable_lock is locked when entering
165 static void gpio_keys_enable_button(struct gpio_button_data *bdata)
167 if (bdata->disabled) {
168 enable_irq(bdata->irq);
169 bdata->disabled = false;
201 struct gpio_button_data *bdata = &ddata->data[i];
203 if (bdata->button->type != type)
206 if (only_disabled && !bdata->disabled)
209 __set_bit(*bdata->code, bits);
255 struct gpio_button_data *bdata = &ddata->data[i];
257 if (bdata->button->type != type)
260 if (test_bit(*bdata->code, bits) &&
261 !bdata->button->can_disable) {
270 struct gpio_button_data *bdata = &ddata->data[i];
272 if (bdata->button->type != type)
275 if (test_bit(*bdata->code, bits))
276 gpio_keys_disable_button(bdata);
278 gpio_keys_enable_button(bdata);
356 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
358 const struct gpio_keys_button *button = bdata->button;
359 struct input_dev *input = bdata->input;
363 state = gpiod_get_value_cansleep(bdata->gpiod);
374 input_event(input, type, *bdata->code, state);
381 struct gpio_button_data *bdata =
384 gpio_keys_gpio_report_event(bdata);
386 if (bdata->button->wakeup)
387 pm_relax(bdata->input->dev.parent);
392 struct gpio_button_data *bdata = dev_id;
394 BUG_ON(irq != bdata->irq);
396 if (bdata->button->wakeup) {
397 const struct gpio_keys_button *button = bdata->button;
399 pm_stay_awake(bdata->input->dev.parent);
400 if (bdata->suspended &&
407 input_report_key(bdata->input, button->code, 1);
412 &bdata->work,
413 msecs_to_jiffies(bdata->software_debounce));
420 struct gpio_button_data *bdata = from_timer(bdata, t, release_timer);
421 struct input_dev *input = bdata->input;
424 spin_lock_irqsave(&bdata->lock, flags);
425 if (bdata->key_pressed) {
426 input_event(input, EV_KEY, *bdata->code, 0);
428 bdata->key_pressed = false;
430 spin_unlock_irqrestore(&bdata->lock, flags);
435 struct gpio_button_data *bdata = dev_id;
436 struct input_dev *input = bdata->input;
439 BUG_ON(irq != bdata->irq);
441 spin_lock_irqsave(&bdata->lock, flags);
443 if (!bdata->key_pressed) {
444 if (bdata->button->wakeup)
445 pm_wakeup_event(bdata->input->dev.parent, 0);
447 input_event(input, EV_KEY, *bdata->code, 1);
450 if (!bdata->release_delay) {
451 input_event(input, EV_KEY, *bdata->code, 0);
456 bdata->key_pressed = true;
459 if (bdata->release_delay)
460 mod_timer(&bdata->release_timer,
461 jiffies + msecs_to_jiffies(bdata->release_delay));
463 spin_unlock_irqrestore(&bdata->lock, flags);
469 struct gpio_button_data *bdata = data;
471 if (bdata->gpiod)
472 cancel_delayed_work_sync(&bdata->work);
474 del_timer_sync(&bdata->release_timer);
486 struct gpio_button_data *bdata = &ddata->data[idx];
492 bdata->input = input;
493 bdata->button = button;
494 spin_lock_init(&bdata->lock);
497 bdata->gpiod = devm_fwnode_gpiod_get(dev, child,
499 if (IS_ERR(bdata->gpiod)) {
500 error = PTR_ERR(bdata->gpiod);
506 bdata->gpiod = NULL;
531 bdata->gpiod = gpio_to_desc(button->gpio);
532 if (!bdata->gpiod)
536 if (bdata->gpiod) {
537 bool active_low = gpiod_is_active_low(bdata->gpiod);
540 error = gpiod_set_debounce(bdata->gpiod,
544 bdata->software_debounce =
549 bdata->irq = button->irq;
551 irq = gpiod_to_irq(bdata->gpiod);
559 bdata->irq = irq;
562 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func);
569 bdata->wakeup_trigger_type = active_low ?
573 bdata->wakeup_trigger_type = active_low ?
590 bdata->irq = button->irq;
597 bdata->release_delay = button->debounce_interval;
598 timer_setup(&bdata->release_timer, gpio_keys_irq_timer, 0);
609 bdata->code = &ddata->keymap[idx];
610 *bdata->code = button->code;
611 input_set_capability(input, button->type ?: EV_KEY, *bdata->code);
617 error = devm_add_action(dev, gpio_keys_quiesce_key, bdata);
631 error = devm_request_any_context_irq(dev, bdata->irq, isr, irqflags,
632 desc, bdata);
635 bdata->irq, error);
648 struct gpio_button_data *bdata = &ddata->data[i];
649 if (bdata->gpiod)
650 gpio_keys_gpio_report_event(bdata);
861 gpio_keys_button_enable_wakeup(struct gpio_button_data *bdata)
865 error = enable_irq_wake(bdata->irq);
867 dev_err(bdata->input->dev.parent,
869 bdata->irq, error);
873 if (bdata->wakeup_trigger_type) {
874 error = irq_set_irq_type(bdata->irq,
875 bdata->wakeup_trigger_type);
877 dev_err(bdata->input->dev.parent,
879 bdata->wakeup_trigger_type, bdata->irq, error);
880 disable_irq_wake(bdata->irq);
889 gpio_keys_button_disable_wakeup(struct gpio_button_data *bdata)
897 if (bdata->wakeup_trigger_type) {
898 error = irq_set_irq_type(bdata->irq, IRQ_TYPE_EDGE_BOTH);
900 dev_warn(bdata->input->dev.parent,
902 bdata->irq, error);
905 error = disable_irq_wake(bdata->irq);
907 dev_warn(bdata->input->dev.parent,
909 bdata->irq, error);
915 struct gpio_button_data *bdata;
920 bdata = &ddata->data[i];
921 if (bdata->button->wakeup) {
922 error = gpio_keys_button_enable_wakeup(bdata);
926 bdata->suspended = true;
933 bdata = &ddata->data[i];
934 if (bdata->button->wakeup)
935 gpio_keys_button_disable_wakeup(bdata);
936 bdata->suspended = false;
945 struct gpio_button_data *bdata;
949 bdata = &ddata->data[i];
950 bdata->suspended = false;
951 if (irqd_is_wakeup_set(irq_get_irq_data(bdata->irq)))
952 gpio_keys_button_disable_wakeup(bdata);