xref: /linux-6.15/include/linux/gpio_keys.h (revision 3717194f)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
249015beeSDavid Brownell #ifndef _GPIO_KEYS_H
349015beeSDavid Brownell #define _GPIO_KEYS_H
449015beeSDavid Brownell 
52b6e6811SMatti Vaittinen #include <linux/types.h>
62b6e6811SMatti Vaittinen 
7b18db3d9SHeiko Stübner struct device;
8b18db3d9SHeiko Stübner 
9542ad4f8SAndy Shevchenko /**
10542ad4f8SAndy Shevchenko  * struct gpio_keys_button - configuration parameters
11542ad4f8SAndy Shevchenko  * @code:		input event code (KEY_*, SW_*)
12542ad4f8SAndy Shevchenko  * @gpio:		%-1 if this key does not support gpio
13542ad4f8SAndy Shevchenko  * @active_low:		%true indicates that button is considered
14542ad4f8SAndy Shevchenko  *			depressed when gpio is low
15542ad4f8SAndy Shevchenko  * @desc:		label that will be attached to button's gpio
16542ad4f8SAndy Shevchenko  * @type:		input event type (%EV_KEY, %EV_SW, %EV_ABS)
17542ad4f8SAndy Shevchenko  * @wakeup:		configure the button as a wake-up source
1883fc580dSJeffy Chen  * @wakeup_event_action:	event action to trigger wakeup
19542ad4f8SAndy Shevchenko  * @debounce_interval:	debounce ticks interval in msecs
20542ad4f8SAndy Shevchenko  * @can_disable:	%true indicates that userspace is allowed to
21542ad4f8SAndy Shevchenko  *			disable button via sysfs
22542ad4f8SAndy Shevchenko  * @value:		axis value for %EV_ABS
23542ad4f8SAndy Shevchenko  * @irq:		Irq number in case of interrupt keys
24*3717194fSTony Lindgren  * @wakeirq:		Optional dedicated wake-up interrupt
25542ad4f8SAndy Shevchenko  */
2649015beeSDavid Brownell struct gpio_keys_button {
27542ad4f8SAndy Shevchenko 	unsigned int code;
28542ad4f8SAndy Shevchenko 	int gpio;
2949015beeSDavid Brownell 	int active_low;
3092a47674SAlexander Stein 	const char *desc;
31542ad4f8SAndy Shevchenko 	unsigned int type;
32542ad4f8SAndy Shevchenko 	int wakeup;
3383fc580dSJeffy Chen 	int wakeup_event_action;
34542ad4f8SAndy Shevchenko 	int debounce_interval;
359e3af04fSMika Westerberg 	bool can_disable;
36542ad4f8SAndy Shevchenko 	int value;
37542ad4f8SAndy Shevchenko 	unsigned int irq;
38*3717194fSTony Lindgren 	unsigned int wakeirq;
3949015beeSDavid Brownell };
4049015beeSDavid Brownell 
41542ad4f8SAndy Shevchenko /**
42542ad4f8SAndy Shevchenko  * struct gpio_keys_platform_data - platform data for gpio_keys driver
43542ad4f8SAndy Shevchenko  * @buttons:		pointer to array of &gpio_keys_button structures
44542ad4f8SAndy Shevchenko  *			describing buttons attached to the device
45542ad4f8SAndy Shevchenko  * @nbuttons:		number of elements in @buttons array
46542ad4f8SAndy Shevchenko  * @poll_interval:	polling interval in msecs - for polling driver only
47542ad4f8SAndy Shevchenko  * @rep:		enable input subsystem auto repeat
48542ad4f8SAndy Shevchenko  * @enable:		platform hook for enabling the device
49542ad4f8SAndy Shevchenko  * @disable:		platform hook for disabling the device
50542ad4f8SAndy Shevchenko  * @name:		input device name
51542ad4f8SAndy Shevchenko  */
5249015beeSDavid Brownell struct gpio_keys_platform_data {
530f78ba96SDmitry Torokhov 	const struct gpio_keys_button *buttons;
5449015beeSDavid Brownell 	int nbuttons;
55542ad4f8SAndy Shevchenko 	unsigned int poll_interval;
56542ad4f8SAndy Shevchenko 	unsigned int rep:1;
57173bdd74SShubhrajyoti D 	int (*enable)(struct device *dev);
58173bdd74SShubhrajyoti D 	void (*disable)(struct device *dev);
59542ad4f8SAndy Shevchenko 	const char *name;
6049015beeSDavid Brownell };
6149015beeSDavid Brownell 
6249015beeSDavid Brownell #endif
63