xref: /rk3399_rockchip-uboot/include/key.h (revision 2ba7147f8008e675b31a0a5c13b8366431ea09ae)
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];
43 	struct gpio_desc gpio;
44 
45 	u64 rise_ms;
46 	u64 fall_ms;
47 };
48 
49 /* Use it instead of get_timer() in key interrupt handler */
50 uint64_t key_timer(uint64_t base);
51 
52 /* Confirm if your key value is a press event */
53 int key_is_pressed(int keyval);
54 
55 /* Read key */
56 int key_read(int code);
57 
58 int key_bind_children(struct udevice *dev, const char *drv_name);
59 
60 #endif
61