xref: /rk3399_rockchip-uboot/include/key.h (revision b40c07fc2e802a4ff2f3f3fc2acc2fdab91d3281)
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_state {
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 input_key {
29 	struct udevice *parent;
30 	struct list_head link;
31 	const char *name;
32 	u32 code;
33 	u8 type;
34 
35 	/* ADC key */
36 	u32 adcval;
37 	u32 vref;
38 	u8 channel;
39 
40 	/* GPIO key */
41 	u32 irq;
42 	struct gpio_desc gpio;
43 
44 	/* Event */
45 	u64 up_t;
46 	u64 down_t;
47 };
48 
49 struct dm_key_ops {
50 	const char *name;
51 };
52 
53 /* Use it instead of get_timer() in key interrupt handler */
54 uint64_t key_timer(uint64_t base);
55 
56 /* Reister you key to dm key framework */
57 void key_add(struct input_key *key);
58 
59 /* Confirm if your key value is a press event */
60 int key_is_pressed(int keyval);
61 
62 /* Read key */
63 int key_read(int code);
64 
65 #endif
66