xref: /rk3399_rockchip-uboot/include/key.h (revision deedd3562aae87d513b69cd2cbc096d4ad7a6e51)
1b398a9a7SJoseph Chen /*
2b398a9a7SJoseph Chen  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3b398a9a7SJoseph Chen  *
4b398a9a7SJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5b398a9a7SJoseph Chen  */
6b398a9a7SJoseph Chen 
7b398a9a7SJoseph Chen #ifndef _KEY_H_
8b398a9a7SJoseph Chen #define _KEY_H_
9b398a9a7SJoseph Chen 
100abc3779SJoseph Chen #include <dt-bindings/input/linux-event-codes.h>
116d82ce07SJoseph Chen 
12c315aab8SJoseph Chen #define KEY_LONG_DOWN_MS	2000
13c315aab8SJoseph Chen 
14b398a9a7SJoseph Chen enum key_state {
15*deedd356SJoseph Chen 	KEY_PRESS_NONE,	/* press without release */
16*deedd356SJoseph Chen 	KEY_PRESS_DOWN,	/* press -> release */
17c315aab8SJoseph Chen 	KEY_PRESS_LONG_DOWN,
18a2df9606SJoseph Chen 	KEY_NOT_EXIST,
19b398a9a7SJoseph Chen };
20b398a9a7SJoseph Chen 
21b398a9a7SJoseph Chen struct dm_key_ops {
226e14addfSJoseph Chen 	const char *name;
23a2df9606SJoseph Chen 	int (*read)(struct udevice *dev, int code);
24b398a9a7SJoseph Chen };
25b398a9a7SJoseph Chen 
26a2df9606SJoseph Chen struct input_key {
27a2df9606SJoseph Chen 	const char *name;
28a2df9606SJoseph Chen 	u32 code;
29a2df9606SJoseph Chen 	u32 channel;
30a2df9606SJoseph Chen 	u32 value;
31a2df9606SJoseph Chen 	u32 margin;
32a2df9606SJoseph Chen 	u32 vref;
33a2df9606SJoseph Chen 	int flag;
34a2df9606SJoseph Chen 
35a2df9606SJoseph Chen 	u32 irq;
36a2df9606SJoseph Chen 	u64 up_t;
37a2df9606SJoseph Chen 	u64 down_t;
38a2df9606SJoseph Chen };
39a2df9606SJoseph Chen 
40a2df9606SJoseph Chen uint64_t key_get_timer(uint64_t base);
41a2df9606SJoseph Chen int platform_key_read(int code);
42b398a9a7SJoseph Chen 
433fb84000SJoseph Chen /* General interface for adc or gpio interrupt key event parse */
443fb84000SJoseph Chen int key_parse_gpio_event(struct input_key *key);
453fb84000SJoseph Chen int key_parse_adc_event(struct input_key *key, unsigned int adcval);
463fb84000SJoseph Chen 
47b398a9a7SJoseph Chen #endif
48