Lines Matching +full:button +full:-
2 * Texas Instruments' Palmas Power Button Input Driver
4 * Copyright (C) 2012-2014 Texas Instruments Incorporated - http://www.ti.com/
33 * struct palmas_pwron - Palmas power on data
47 * struct palmas_pwron_config - configuration of palmas power on
49 * @pwron_debounce_val: value for debounce of power button
57 * palmas_power_button_work() - Detects the button release event
58 * @work: work item to detect button release
65 struct input_dev *input_dev = pwron->input_dev; in palmas_power_button_work()
69 error = palmas_read(pwron->palmas, PALMAS_INTERRUPT_BASE, in palmas_power_button_work()
72 dev_err(input_dev->dev.parent, in palmas_power_button_work()
75 /* The button is released, report event. */ in palmas_power_button_work()
79 /* The button is still depressed, keep checking. */ in palmas_power_button_work()
80 schedule_delayed_work(&pwron->input_work, in palmas_power_button_work()
86 * pwron_irq() - button press isr
95 struct input_dev *input_dev = pwron->input_dev; in pwron_irq()
98 pm_wakeup_event(input_dev->dev.parent, 0); in pwron_irq()
101 mod_delayed_work(system_wq, &pwron->input_work, in pwron_irq()
108 * palmas_pwron_params_ofinit() - device tree parameter parser
109 * @dev: palmas button device
124 config->long_press_time_val = ARRAY_SIZE(lpk_times) - 1; in palmas_pwron_params_ofinit()
126 np = dev->of_node; in palmas_pwron_params_ofinit()
130 error = of_property_read_u32(np, "ti,palmas-long-press-seconds", &val); in palmas_pwron_params_ofinit()
134 config->long_press_time_val = i; in palmas_pwron_params_ofinit()
141 "ti,palmas-pwron-debounce-milli-seconds", in palmas_pwron_params_ofinit()
146 config->pwron_debounce_val = i; in palmas_pwron_params_ofinit()
153 lpk_times[config->long_press_time_val]); in palmas_pwron_params_ofinit()
157 * palmas_pwron_probe() - probe
158 * @pdev: platform device for the button
164 struct palmas *palmas = dev_get_drvdata(pdev->dev.parent); in palmas_pwron_probe()
165 struct device *dev = &pdev->dev; in palmas_pwron_probe()
176 return -ENOMEM; in palmas_pwron_probe()
180 dev_err(dev, "Can't allocate power button\n"); in palmas_pwron_probe()
181 error = -ENOMEM; in palmas_pwron_probe()
185 input_dev->name = "palmas_pwron"; in palmas_pwron_probe()
186 input_dev->phys = "palmas_pwron/input0"; in palmas_pwron_probe()
187 input_dev->dev.parent = dev; in palmas_pwron_probe()
207 pwron->palmas = palmas; in palmas_pwron_probe()
208 pwron->input_dev = input_dev; in palmas_pwron_probe()
210 INIT_DELAYED_WORK(&pwron->input_work, palmas_power_button_work); in palmas_pwron_probe()
212 pwron->irq = platform_get_irq(pdev, 0); in palmas_pwron_probe()
213 error = request_threaded_irq(pwron->irq, NULL, pwron_irq, in palmas_pwron_probe()
225 dev_err(dev, "Can't register power button: %d\n", error); in palmas_pwron_probe()
235 cancel_delayed_work_sync(&pwron->input_work); in palmas_pwron_probe()
236 free_irq(pwron->irq, pwron); in palmas_pwron_probe()
245 * palmas_pwron_remove() - Cleanup on removal
246 * @pdev: platform device for the button
254 free_irq(pwron->irq, pwron); in palmas_pwron_remove()
255 cancel_delayed_work_sync(&pwron->input_work); in palmas_pwron_remove()
257 input_unregister_device(pwron->input_dev); in palmas_pwron_remove()
264 * palmas_pwron_suspend() - suspend handler
265 * @dev: power button device
267 * Cancel all pending work items for the power button, setup irq for wakeup
276 cancel_delayed_work_sync(&pwron->input_work); in palmas_pwron_suspend()
279 enable_irq_wake(pwron->irq); in palmas_pwron_suspend()
285 * palmas_pwron_resume() - resume handler
286 * @dev: power button device
298 disable_irq_wake(pwron->irq); in palmas_pwron_resume()
308 { .compatible = "ti,palmas-pwrbutton" },
326 MODULE_ALIAS("platform:palmas-pwrbutton");
327 MODULE_DESCRIPTION("Palmas Power Button");