Lines Matching refs:bdata
119 static void gpio_keys_disable_button(struct gpio_button_data *bdata) in gpio_keys_disable_button() argument
121 if (!bdata->disabled) { in gpio_keys_disable_button()
125 disable_irq(bdata->irq); in gpio_keys_disable_button()
127 if (gpio_is_valid(bdata->button->gpio)) in gpio_keys_disable_button()
128 cancel_delayed_work_sync(&bdata->work); in gpio_keys_disable_button()
130 del_timer_sync(&bdata->release_timer); in gpio_keys_disable_button()
132 bdata->disabled = true; in gpio_keys_disable_button()
146 static void gpio_keys_enable_button(struct gpio_button_data *bdata) in gpio_keys_enable_button() argument
148 if (bdata->disabled) { in gpio_keys_enable_button()
149 enable_irq(bdata->irq); in gpio_keys_enable_button()
150 bdata->disabled = false; in gpio_keys_enable_button()
182 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_show_helper() local
184 if (bdata->button->type != type) in gpio_keys_attr_show_helper()
187 if (only_disabled && !bdata->disabled) in gpio_keys_attr_show_helper()
190 __set_bit(bdata->button->code, bits); in gpio_keys_attr_show_helper()
230 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_store_helper() local
232 if (bdata->button->type != type) in gpio_keys_attr_store_helper()
235 if (test_bit(bdata->button->code, bits) && in gpio_keys_attr_store_helper()
236 !bdata->button->can_disable) { in gpio_keys_attr_store_helper()
250 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_attr_store_helper() local
252 if (bdata->button->type != type) in gpio_keys_attr_store_helper()
255 if (test_bit(bdata->button->code, bits)) in gpio_keys_attr_store_helper()
256 gpio_keys_disable_button(bdata); in gpio_keys_attr_store_helper()
258 gpio_keys_enable_button(bdata); in gpio_keys_attr_store_helper()
339 static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) in gpio_keys_gpio_report_event() argument
341 const struct gpio_keys_button *button = bdata->button; in gpio_keys_gpio_report_event()
342 struct input_dev *input = bdata->input; in gpio_keys_gpio_report_event()
363 struct gpio_button_data *bdata = in gpio_keys_gpio_work_func() local
366 gpio_keys_gpio_report_event(bdata); in gpio_keys_gpio_work_func()
368 if (bdata->button->wakeup) in gpio_keys_gpio_work_func()
369 pm_relax(bdata->input->dev.parent); in gpio_keys_gpio_work_func()
374 struct gpio_button_data *bdata = dev_id; in gpio_keys_gpio_isr() local
376 BUG_ON(irq != bdata->irq); in gpio_keys_gpio_isr()
378 if (bdata->button->wakeup) in gpio_keys_gpio_isr()
379 pm_stay_awake(bdata->input->dev.parent); in gpio_keys_gpio_isr()
382 &bdata->work, in gpio_keys_gpio_isr()
383 msecs_to_jiffies(bdata->software_debounce)); in gpio_keys_gpio_isr()
390 struct gpio_button_data *bdata = (struct gpio_button_data *)_data; in gpio_keys_irq_timer() local
391 struct input_dev *input = bdata->input; in gpio_keys_irq_timer()
394 spin_lock_irqsave(&bdata->lock, flags); in gpio_keys_irq_timer()
395 if (bdata->key_pressed) { in gpio_keys_irq_timer()
396 input_event(input, EV_KEY, bdata->button->code, 0); in gpio_keys_irq_timer()
398 bdata->key_pressed = false; in gpio_keys_irq_timer()
400 spin_unlock_irqrestore(&bdata->lock, flags); in gpio_keys_irq_timer()
405 struct gpio_button_data *bdata = dev_id; in gpio_keys_irq_isr() local
406 const struct gpio_keys_button *button = bdata->button; in gpio_keys_irq_isr()
407 struct input_dev *input = bdata->input; in gpio_keys_irq_isr()
410 BUG_ON(irq != bdata->irq); in gpio_keys_irq_isr()
412 spin_lock_irqsave(&bdata->lock, flags); in gpio_keys_irq_isr()
414 if (!bdata->key_pressed) { in gpio_keys_irq_isr()
415 if (bdata->button->wakeup) in gpio_keys_irq_isr()
416 pm_wakeup_event(bdata->input->dev.parent, 0); in gpio_keys_irq_isr()
421 if (!bdata->release_delay) { in gpio_keys_irq_isr()
427 bdata->key_pressed = true; in gpio_keys_irq_isr()
430 if (bdata->release_delay) in gpio_keys_irq_isr()
431 mod_timer(&bdata->release_timer, in gpio_keys_irq_isr()
432 jiffies + msecs_to_jiffies(bdata->release_delay)); in gpio_keys_irq_isr()
434 spin_unlock_irqrestore(&bdata->lock, flags); in gpio_keys_irq_isr()
440 struct gpio_button_data *bdata = data; in gpio_keys_quiesce_key() local
442 if (gpio_is_valid(bdata->button->gpio)) in gpio_keys_quiesce_key()
443 cancel_delayed_work_sync(&bdata->work); in gpio_keys_quiesce_key()
445 del_timer_sync(&bdata->release_timer); in gpio_keys_quiesce_key()
450 struct gpio_button_data *bdata, in gpio_keys_setup_key() argument
460 bdata->input = input; in gpio_keys_setup_key()
461 bdata->button = button; in gpio_keys_setup_key()
462 spin_lock_init(&bdata->lock); in gpio_keys_setup_key()
479 bdata->software_debounce = in gpio_keys_setup_key()
484 bdata->irq = button->irq; in gpio_keys_setup_key()
494 bdata->irq = irq; in gpio_keys_setup_key()
497 INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func); in gpio_keys_setup_key()
507 bdata->irq = button->irq; in gpio_keys_setup_key()
514 bdata->release_delay = button->debounce_interval; in gpio_keys_setup_key()
515 setup_timer(&bdata->release_timer, in gpio_keys_setup_key()
516 gpio_keys_irq_timer, (unsigned long)bdata); in gpio_keys_setup_key()
528 error = devm_add_action(&pdev->dev, gpio_keys_quiesce_key, bdata); in gpio_keys_setup_key()
543 error = devm_request_any_context_irq(&pdev->dev, bdata->irq, in gpio_keys_setup_key()
544 isr, irqflags, desc, bdata); in gpio_keys_setup_key()
547 bdata->irq, error); in gpio_keys_setup_key()
560 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_report_state() local
561 if (gpio_is_valid(bdata->button->gpio)) in gpio_keys_report_state()
562 gpio_keys_gpio_report_event(bdata); in gpio_keys_report_state()
756 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_probe() local
758 error = gpio_keys_setup_key(pdev, input, bdata, button); in gpio_keys_probe()
807 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_suspend() local
808 if (bdata->button->wakeup) in gpio_keys_suspend()
809 enable_irq_wake(bdata->irq); in gpio_keys_suspend()
830 struct gpio_button_data *bdata = &ddata->data[i]; in gpio_keys_resume() local
831 if (bdata->button->wakeup) in gpio_keys_resume()
832 disable_irq_wake(bdata->irq); in gpio_keys_resume()