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