8 #include <linux/module.h>
10 #include <linux/slab.h>
11 #include <linux/input.h>
18 #define STMPE_KPC_COL 0x60
19 #define STMPE_KPC_ROW_MSB 0x61
20 #define STMPE_KPC_ROW_LSB 0x62
21 #define STMPE_KPC_CTRL_MSB 0x63
22 #define STMPE_KPC_CTRL_LSB 0x64
23 #define STMPE_KPC_COMBI_KEY_0 0x65
24 #define STMPE_KPC_COMBI_KEY_1 0x66
25 #define STMPE_KPC_COMBI_KEY_2 0x67
26 #define STMPE_KPC_DATA_BYTE0 0x68
27 #define STMPE_KPC_DATA_BYTE1 0x69
28 #define STMPE_KPC_DATA_BYTE2 0x6a
29 #define STMPE_KPC_DATA_BYTE3 0x6b
30 #define STMPE_KPC_DATA_BYTE4 0x6c
32 #define STMPE_KPC_CTRL_LSB_SCAN (0x1 << 0)
33 #define STMPE_KPC_CTRL_LSB_DEBOUNCE (0x7f << 1)
34 #define STMPE_KPC_CTRL_MSB_SCAN_COUNT (0xf << 4)
36 #define STMPE_KPC_ROW_MSB_ROWS 0xff
38 #define STMPE_KPC_DATA_UP (0x1 << 7)
39 #define STMPE_KPC_DATA_ROW (0xf << 3)
40 #define STMPE_KPC_DATA_COL (0x7 << 0)
41 #define STMPE_KPC_DATA_NOKEY_MASK 0x78
43 #define STMPE_KEYPAD_MAX_DEBOUNCE 127
44 #define STMPE_KEYPAD_MAX_SCAN_COUNT 15
46 #define STMPE_KEYPAD_MAX_ROWS 8
47 #define STMPE_KEYPAD_MAX_COLS 8
48 #define STMPE_KEYPAD_ROW_SHIFT 3
49 #define STMPE_KEYPAD_KEYMAP_SIZE \
50 (STMPE_KEYPAD_MAX_ROWS * STMPE_KEYPAD_MAX_COLS)
75 .auto_increment =
true,
84 .auto_increment =
false,
89 .col_gpios = 0x0000ff,
90 .row_gpios = 0x1fef00,
93 .auto_increment =
true,
98 .col_gpios = 0x0000ff,
99 .row_gpios = 0x1fef00,
126 for (i = 0; i < variant->
num_data; i++) {
146 ret = stmpe_keypad_read_data(keypad, fifo);
158 == STMPE_KPC_DATA_NOKEY_MASK)
162 input_report_key(input, keypad->
keymap[code], !up);
175 unsigned int pins = 0;
189 for (i = 0; i < variant->
max_cols; i++) {
192 if (keypad->
cols & (1 << i))
195 col_gpios &= ~(1 << num);
198 for (i = 0; i < variant->
max_rows; i++) {
199 int num =
__ffs(row_gpios);
201 if (keypad->
rows & (1 << i))
204 row_gpios &= ~(1 << num);
214 struct stmpe *stmpe = keypad->
stmpe;
227 ret = stmpe_keypad_altfunc_init(keypad);
265 struct input_dev *
input;
270 plat = stmpe->
pdata->keypad;
282 input = input_allocate_device();
288 input->name =
"STMPE keypad";
290 input->dev.parent = &pdev->
dev;
303 for (i = 0; i < plat->
keymap_data->keymap_size; i++) {
310 keypad->
stmpe = stmpe;
315 ret = stmpe_keypad_chip_init(keypad);
319 ret = input_register_device(input);
322 "unable to register input device: %d\n", ret);
327 "stmpe-keypad", keypad);
329 dev_err(&pdev->
dev,
"unable to get irq: %d\n", ret);
330 goto out_unregisterinput;
333 platform_set_drvdata(pdev, keypad);
338 input_unregister_device(input);
341 input_free_device(input);
349 struct stmpe_keypad *keypad = platform_get_drvdata(pdev);
350 struct stmpe *stmpe = keypad->
stmpe;
356 input_unregister_device(keypad->
input);
357 platform_set_drvdata(pdev,
NULL);
364 .driver.name =
"stmpe-keypad",
366 .probe = stmpe_keypad_probe,