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