xref: /OK3568_Linux_fs/u-boot/include/key.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _KEY_H_
8*4882a593Smuzhiyun #define _KEY_H_
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <asm-generic/gpio.h>
11*4882a593Smuzhiyun #include <dt-bindings/input/linux-event-codes.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define KEY_LONG_DOWN_MS	2000
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun enum {
16*4882a593Smuzhiyun 	INVAL_KEY = 0x0,
17*4882a593Smuzhiyun 	ADC_KEY   = 0x1,
18*4882a593Smuzhiyun 	GPIO_KEY  = 0x2,
19*4882a593Smuzhiyun };
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun enum key_event {
22*4882a593Smuzhiyun 	KEY_PRESS_NONE,	/* press without release */
23*4882a593Smuzhiyun 	KEY_PRESS_DOWN,	/* press -> release */
24*4882a593Smuzhiyun 	KEY_PRESS_LONG_DOWN,
25*4882a593Smuzhiyun 	KEY_NOT_EXIST,
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun struct dm_key_uclass_platdata {
29*4882a593Smuzhiyun 	const char *name;
30*4882a593Smuzhiyun 	bool pre_reloc;
31*4882a593Smuzhiyun 	u32 code;
32*4882a593Smuzhiyun 	u8 type;
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun 	/* ADC key */
35*4882a593Smuzhiyun 	u8 channel;
36*4882a593Smuzhiyun 	int in_volt;
37*4882a593Smuzhiyun 	int center;
38*4882a593Smuzhiyun 	int min;
39*4882a593Smuzhiyun 	int max;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun 	/* GPIO key */
42*4882a593Smuzhiyun 	u32 irq;
43*4882a593Smuzhiyun 	u32 gpios[2];	/* gpios[0]: gpio controller phandle, gpios[1]: pin */
44*4882a593Smuzhiyun 	struct gpio_desc gpio;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	u64 rise_ms;
47*4882a593Smuzhiyun 	u64 fall_ms;
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 	u32 trig_cnt;
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	int skip_irq_init;
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun 	/* Only for pwrkey gpio irq */
54*4882a593Smuzhiyun 	void (*irq_thread)(int irq, struct udevice *dev);
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /* Use it instead of get_timer() in key interrupt handler */
58*4882a593Smuzhiyun uint64_t key_timer(uint64_t base);
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /* Confirm if your key value is a press event */
61*4882a593Smuzhiyun int key_is_pressed(int keyval);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* Pwrkey download mode init */
64*4882a593Smuzhiyun int pwrkey_download_init(void);
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /* Read key */
67*4882a593Smuzhiyun int key_read(int code);
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun /* Check whether the key is exist or not, 1: exist, 0: not exist */
70*4882a593Smuzhiyun int key_exist(int code);
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun int key_bind_children(struct udevice *dev, const char *drv_name);
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #endif
75