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