1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 #ifndef __ASM_ARCH_PXA27x_KEYPAD_H 1 #ifndef __ASM_ARCH_PXA27x_KEYPAD_H 3 #define __ASM_ARCH_PXA27x_KEYPAD_H 2 #define __ASM_ARCH_PXA27x_KEYPAD_H 4 3 5 #include <linux/input.h> 4 #include <linux/input.h> 6 #include <linux/input/matrix_keypad.h> 5 #include <linux/input/matrix_keypad.h> 7 6 8 #define MAX_MATRIX_KEY_ROWS (8) 7 #define MAX_MATRIX_KEY_ROWS (8) 9 #define MAX_MATRIX_KEY_COLS (8) 8 #define MAX_MATRIX_KEY_COLS (8) 10 #define MATRIX_ROW_SHIFT (3) 9 #define MATRIX_ROW_SHIFT (3) 11 #define MAX_DIRECT_KEY_NUM (8) 10 #define MAX_DIRECT_KEY_NUM (8) 12 11 13 /* pxa3xx keypad platform specific parameters 12 /* pxa3xx keypad platform specific parameters 14 * 13 * 15 * NOTE: 14 * NOTE: 16 * 1. direct_key_num indicates the number of k 15 * 1. direct_key_num indicates the number of keys in the direct keypad 17 * _plus_ the number of rotary-encoder sens 16 * _plus_ the number of rotary-encoder sensor inputs, this can be 18 * left as 0 if only rotary encoders are en 17 * left as 0 if only rotary encoders are enabled, the driver will 19 * automatically calculate this 18 * automatically calculate this 20 * 19 * 21 * 2. direct_key_map is the key code map for t 20 * 2. direct_key_map is the key code map for the direct keys, if rotary 22 * encoder(s) are enabled, direct key 0/1(2 21 * encoder(s) are enabled, direct key 0/1(2/3) will be ignored 23 * 22 * 24 * 3. rotary can be either interpreted as a re 23 * 3. rotary can be either interpreted as a relative input event (e.g. 25 * REL_WHEEL/REL_HWHEEL) or specific keys ( 24 * REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT) 26 * 25 * 27 * 4. matrix key and direct key will use the s 26 * 4. matrix key and direct key will use the same debounce_interval by 28 * default, which should be sufficient in m 27 * default, which should be sufficient in most cases 29 * 28 * 30 * pxa168 keypad platform specific parameter 29 * pxa168 keypad platform specific parameter 31 * 30 * 32 * NOTE: 31 * NOTE: 33 * clear_wakeup_event callback is a workaround 32 * clear_wakeup_event callback is a workaround required to clear the 34 * keypad interrupt. The keypad wake must be c 33 * keypad interrupt. The keypad wake must be cleared in addition to 35 * reading the MI/DI bits in the KPC register. 34 * reading the MI/DI bits in the KPC register. 36 */ 35 */ 37 struct pxa27x_keypad_platform_data { 36 struct pxa27x_keypad_platform_data { 38 37 39 /* code map for the matrix keys */ 38 /* code map for the matrix keys */ 40 const struct matrix_keymap_data *matri 39 const struct matrix_keymap_data *matrix_keymap_data; 41 unsigned int matrix_key_rows; 40 unsigned int matrix_key_rows; 42 unsigned int matrix_key_cols; 41 unsigned int matrix_key_cols; 43 42 44 /* direct keys */ 43 /* direct keys */ 45 int direct_key_num; 44 int direct_key_num; 46 unsigned int direct_key_map[MAX_DIR 45 unsigned int direct_key_map[MAX_DIRECT_KEY_NUM]; 47 /* the key output may be low active */ 46 /* the key output may be low active */ 48 int direct_key_low_active; 47 int direct_key_low_active; 49 /* give board a chance to choose the s 48 /* give board a chance to choose the start direct key */ 50 unsigned int direct_key_mask; 49 unsigned int direct_key_mask; 51 50 52 /* rotary encoders 0 */ 51 /* rotary encoders 0 */ 53 int enable_rotary0; 52 int enable_rotary0; 54 int rotary0_rel_code; 53 int rotary0_rel_code; 55 int rotary0_up_key; 54 int rotary0_up_key; 56 int rotary0_down_key; 55 int rotary0_down_key; 57 56 58 /* rotary encoders 1 */ 57 /* rotary encoders 1 */ 59 int enable_rotary1; 58 int enable_rotary1; 60 int rotary1_rel_code; 59 int rotary1_rel_code; 61 int rotary1_up_key; 60 int rotary1_up_key; 62 int rotary1_down_key; 61 int rotary1_down_key; 63 62 64 /* key debounce interval */ 63 /* key debounce interval */ 65 unsigned int debounce_interval; 64 unsigned int debounce_interval; 66 65 67 /* clear wakeup event requirement for 66 /* clear wakeup event requirement for pxa168 */ 68 void (*clear_wakeup_event)( 67 void (*clear_wakeup_event)(void); 69 }; 68 }; 70 69 71 extern void pxa_set_keypad_info(struct pxa27x_ 70 extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); 72 71 73 #endif /* __ASM_ARCH_PXA27x_KEYPAD_H */ 72 #endif /* __ASM_ARCH_PXA27x_KEYPAD_H */ 74 73
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.