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