1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
5 #include <linux/module.h>
6 #include <linux/platform_device.h>
7 #include <linux/kernel.h>
8 #include <linux/interrupt.h>
9 #include <linux/slab.h>
10 #include <linux/input.h>
11 #include <linux/bitops.h>
12 #include <linux/delay.h>
13 #include <linux/mutex.h>
14 #include <linux/regmap.h>
16 #include <linux/input/matrix_keypad.h>
18 #define PM8XXX_MAX_ROWS 18
19 #define PM8XXX_MAX_COLS 8
20 #define PM8XXX_ROW_SHIFT 3
21 #define PM8XXX_MATRIX_MAX_SIZE (PM8XXX_MAX_ROWS * PM8XXX_MAX_COLS)
23 #define PM8XXX_MIN_ROWS 5
24 #define PM8XXX_MIN_COLS 5
26 #define MAX_SCAN_DELAY 128
27 #define MIN_SCAN_DELAY 1
30 #define MAX_ROW_HOLD_DELAY 122000
31 #define MIN_ROW_HOLD_DELAY 30500
33 #define MAX_DEBOUNCE_TIME 20
34 #define MIN_DEBOUNCE_TIME 5
36 #define KEYP_CTRL 0x148
38 #define KEYP_CTRL_EVNTS BIT(0)
39 #define KEYP_CTRL_EVNTS_MASK 0x3
41 #define KEYP_CTRL_SCAN_COLS_SHIFT 5
42 #define KEYP_CTRL_SCAN_COLS_MIN 5
43 #define KEYP_CTRL_SCAN_COLS_BITS 0x3
45 #define KEYP_CTRL_SCAN_ROWS_SHIFT 2
46 #define KEYP_CTRL_SCAN_ROWS_MIN 5
47 #define KEYP_CTRL_SCAN_ROWS_BITS 0x7
49 #define KEYP_CTRL_KEYP_EN BIT(7)
51 #define KEYP_SCAN 0x149
53 #define KEYP_SCAN_READ_STATE BIT(0)
54 #define KEYP_SCAN_DBOUNCE_SHIFT 1
55 #define KEYP_SCAN_PAUSE_SHIFT 3
56 #define KEYP_SCAN_ROW_HOLD_SHIFT 6
58 #define KEYP_TEST 0x14A
60 #define KEYP_TEST_CLEAR_RECENT_SCAN BIT(6)
61 #define KEYP_TEST_CLEAR_OLD_SCAN BIT(5)
62 #define KEYP_TEST_READ_RESET BIT(4)
63 #define KEYP_TEST_DTEST_EN BIT(3)
64 #define KEYP_TEST_ABORT_READ BIT(0)
66 #define KEYP_TEST_DBG_SELECT_SHIFT 1
68 /* bits of these registers represent
72 #define KEYP_RECENT_DATA 0x14B
73 #define KEYP_OLD_DATA 0x14C
75 #define KEYP_CLOCK_FREQ 32768
78 * struct pmic8xxx_kp - internal keypad data structure
79 * @num_cols - number of columns of keypad
80 * @num_rows - number of row of keypad
81 * @input - input device pointer for keypad
82 * @regmap - regmap handle
83 * @key_sense_irq - key press/release irq number
84 * @key_stuck_irq - key stuck notification irq number
85 * @keycodes - array to hold the key codes
86 * @dev - parent device pointer
87 * @keystate - present key press/release state
88 * @stuckstate - present state when key stuck irq
89 * @ctrl_reg - control register value
92 unsigned int num_rows
;
93 unsigned int num_cols
;
94 struct input_dev
*input
;
95 struct regmap
*regmap
;
99 unsigned short keycodes
[PM8XXX_MATRIX_MAX_SIZE
];
102 u16 keystate
[PM8XXX_MAX_ROWS
];
103 u16 stuckstate
[PM8XXX_MAX_ROWS
];
108 static u8
pmic8xxx_col_state(struct pmic8xxx_kp
*kp
, u8 col
)
110 /* all keys pressed on that particular row? */
112 return 1 << kp
->num_cols
;
114 return col
& ((1 << kp
->num_cols
) - 1);
118 * Synchronous read protocol for RevB0 onwards:
120 * 1. Write '1' to ReadState bit in KEYP_SCAN register
121 * 2. Wait 2*32KHz clocks, so that HW can successfully enter read mode
123 * 3. Read rows in old array first if events are more than one
124 * 4. Read rows in recent array
125 * 5. Wait 4*32KHz clocks
126 * 6. Write '0' to ReadState bit of KEYP_SCAN register so that hw can
127 * synchronously exit read mode.
129 static int pmic8xxx_chk_sync_read(struct pmic8xxx_kp
*kp
)
132 unsigned int scan_val
;
134 rc
= regmap_read(kp
->regmap
, KEYP_SCAN
, &scan_val
);
136 dev_err(kp
->dev
, "Error reading KEYP_SCAN reg, rc=%d\n", rc
);
142 rc
= regmap_write(kp
->regmap
, KEYP_SCAN
, scan_val
);
144 dev_err(kp
->dev
, "Error writing KEYP_SCAN reg, rc=%d\n", rc
);
148 /* 2 * 32KHz clocks */
149 udelay((2 * DIV_ROUND_UP(USEC_PER_SEC
, KEYP_CLOCK_FREQ
)) + 1);
154 static int pmic8xxx_kp_read_data(struct pmic8xxx_kp
*kp
, u16
*state
,
155 u16 data_reg
, int read_rows
)
160 for (row
= 0; row
< read_rows
; row
++) {
161 rc
= regmap_read(kp
->regmap
, data_reg
, &val
);
164 dev_dbg(kp
->dev
, "%d = %d\n", row
, val
);
165 state
[row
] = pmic8xxx_col_state(kp
, val
);
171 static int pmic8xxx_kp_read_matrix(struct pmic8xxx_kp
*kp
, u16
*new_state
,
175 unsigned int scan_val
;
177 if (kp
->num_rows
< PM8XXX_MIN_ROWS
)
178 read_rows
= PM8XXX_MIN_ROWS
;
180 read_rows
= kp
->num_rows
;
182 pmic8xxx_chk_sync_read(kp
);
185 rc
= pmic8xxx_kp_read_data(kp
, old_state
, KEYP_OLD_DATA
,
189 "Error reading KEYP_OLD_DATA, rc=%d\n", rc
);
194 rc
= pmic8xxx_kp_read_data(kp
, new_state
, KEYP_RECENT_DATA
,
198 "Error reading KEYP_RECENT_DATA, rc=%d\n", rc
);
202 /* 4 * 32KHz clocks */
203 udelay((4 * DIV_ROUND_UP(USEC_PER_SEC
, KEYP_CLOCK_FREQ
)) + 1);
205 rc
= regmap_read(kp
->regmap
, KEYP_SCAN
, &scan_val
);
207 dev_err(kp
->dev
, "Error reading KEYP_SCAN reg, rc=%d\n", rc
);
212 rc
= regmap_write(kp
->regmap
, KEYP_SCAN
, scan_val
);
214 dev_err(kp
->dev
, "Error writing KEYP_SCAN reg, rc=%d\n", rc
);
219 static void __pmic8xxx_kp_scan_matrix(struct pmic8xxx_kp
*kp
, u16
*new_state
,
224 for (row
= 0; row
< kp
->num_rows
; row
++) {
225 int bits_changed
= new_state
[row
] ^ old_state
[row
];
230 for (col
= 0; col
< kp
->num_cols
; col
++) {
231 if (!(bits_changed
& (1 << col
)))
234 dev_dbg(kp
->dev
, "key [%d:%d] %s\n", row
, col
,
235 !(new_state
[row
] & (1 << col
)) ?
236 "pressed" : "released");
238 code
= MATRIX_SCAN_CODE(row
, col
, PM8XXX_ROW_SHIFT
);
240 input_event(kp
->input
, EV_MSC
, MSC_SCAN
, code
);
241 input_report_key(kp
->input
,
243 !(new_state
[row
] & (1 << col
)));
245 input_sync(kp
->input
);
250 static bool pmic8xxx_detect_ghost_keys(struct pmic8xxx_kp
*kp
, u16
*new_state
)
252 int row
, found_first
= -1;
253 u16 check
, row_state
;
256 for (row
= 0; row
< kp
->num_rows
; row
++) {
257 row_state
= (~new_state
[row
]) &
258 ((1 << kp
->num_cols
) - 1);
260 if (hweight16(row_state
) > 1) {
261 if (found_first
== -1)
263 if (check
& row_state
) {
264 dev_dbg(kp
->dev
, "detected ghost key on row[%d]"
265 " and row[%d]\n", found_first
, row
);
274 static int pmic8xxx_kp_scan_matrix(struct pmic8xxx_kp
*kp
, unsigned int events
)
276 u16 new_state
[PM8XXX_MAX_ROWS
];
277 u16 old_state
[PM8XXX_MAX_ROWS
];
282 rc
= pmic8xxx_kp_read_matrix(kp
, new_state
, NULL
);
286 /* detecting ghost key is not an error */
287 if (pmic8xxx_detect_ghost_keys(kp
, new_state
))
289 __pmic8xxx_kp_scan_matrix(kp
, new_state
, kp
->keystate
);
290 memcpy(kp
->keystate
, new_state
, sizeof(new_state
));
292 case 0x3: /* two events - eventcounter is gray-coded */
293 rc
= pmic8xxx_kp_read_matrix(kp
, new_state
, old_state
);
297 __pmic8xxx_kp_scan_matrix(kp
, old_state
, kp
->keystate
);
298 __pmic8xxx_kp_scan_matrix(kp
, new_state
, old_state
);
299 memcpy(kp
->keystate
, new_state
, sizeof(new_state
));
302 dev_dbg(kp
->dev
, "Some key events were lost\n");
303 rc
= pmic8xxx_kp_read_matrix(kp
, new_state
, old_state
);
306 __pmic8xxx_kp_scan_matrix(kp
, old_state
, kp
->keystate
);
307 __pmic8xxx_kp_scan_matrix(kp
, new_state
, old_state
);
308 memcpy(kp
->keystate
, new_state
, sizeof(new_state
));
317 * NOTE: We are reading recent and old data registers blindly
318 * whenever key-stuck interrupt happens, because events counter doesn't
319 * get updated when this interrupt happens due to key stuck doesn't get
320 * considered as key state change.
322 * We are not using old data register contents after they are being read
323 * because it might report the key which was pressed before the key being stuck
324 * as stuck key because it's pressed status is stored in the old data
327 static irqreturn_t
pmic8xxx_kp_stuck_irq(int irq
, void *data
)
329 u16 new_state
[PM8XXX_MAX_ROWS
];
330 u16 old_state
[PM8XXX_MAX_ROWS
];
332 struct pmic8xxx_kp
*kp
= data
;
334 rc
= pmic8xxx_kp_read_matrix(kp
, new_state
, old_state
);
336 dev_err(kp
->dev
, "failed to read keypad matrix\n");
340 __pmic8xxx_kp_scan_matrix(kp
, new_state
, kp
->stuckstate
);
345 static irqreturn_t
pmic8xxx_kp_irq(int irq
, void *data
)
347 struct pmic8xxx_kp
*kp
= data
;
348 unsigned int ctrl_val
, events
;
351 rc
= regmap_read(kp
->regmap
, KEYP_CTRL
, &ctrl_val
);
353 dev_err(kp
->dev
, "failed to read keyp_ctrl register\n");
357 events
= ctrl_val
& KEYP_CTRL_EVNTS_MASK
;
359 rc
= pmic8xxx_kp_scan_matrix(kp
, events
);
361 dev_err(kp
->dev
, "failed to scan matrix\n");
366 static int pmic8xxx_kpd_init(struct pmic8xxx_kp
*kp
,
367 struct platform_device
*pdev
)
369 const struct device_node
*of_node
= pdev
->dev
.of_node
;
370 unsigned int scan_delay_ms
;
371 unsigned int row_hold_ns
;
372 unsigned int debounce_ms
;
373 int bits
, rc
, cycles
;
374 u8 scan_val
= 0, ctrl_val
= 0;
375 static const u8 row_bits
[] = {
376 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7,
379 /* Find column bits */
380 if (kp
->num_cols
< KEYP_CTRL_SCAN_COLS_MIN
)
383 bits
= kp
->num_cols
- KEYP_CTRL_SCAN_COLS_MIN
;
384 ctrl_val
= (bits
& KEYP_CTRL_SCAN_COLS_BITS
) <<
385 KEYP_CTRL_SCAN_COLS_SHIFT
;
388 if (kp
->num_rows
< KEYP_CTRL_SCAN_ROWS_MIN
)
391 bits
= row_bits
[kp
->num_rows
- KEYP_CTRL_SCAN_ROWS_MIN
];
393 ctrl_val
|= (bits
<< KEYP_CTRL_SCAN_ROWS_SHIFT
);
395 rc
= regmap_write(kp
->regmap
, KEYP_CTRL
, ctrl_val
);
397 dev_err(kp
->dev
, "Error writing KEYP_CTRL reg, rc=%d\n", rc
);
401 if (of_property_read_u32(of_node
, "scan-delay", &scan_delay_ms
))
402 scan_delay_ms
= MIN_SCAN_DELAY
;
404 if (scan_delay_ms
> MAX_SCAN_DELAY
|| scan_delay_ms
< MIN_SCAN_DELAY
||
405 !is_power_of_2(scan_delay_ms
)) {
406 dev_err(&pdev
->dev
, "invalid keypad scan time supplied\n");
410 if (of_property_read_u32(of_node
, "row-hold", &row_hold_ns
))
411 row_hold_ns
= MIN_ROW_HOLD_DELAY
;
413 if (row_hold_ns
> MAX_ROW_HOLD_DELAY
||
414 row_hold_ns
< MIN_ROW_HOLD_DELAY
||
415 ((row_hold_ns
% MIN_ROW_HOLD_DELAY
) != 0)) {
416 dev_err(&pdev
->dev
, "invalid keypad row hold time supplied\n");
420 if (of_property_read_u32(of_node
, "debounce", &debounce_ms
))
421 debounce_ms
= MIN_DEBOUNCE_TIME
;
423 if (((debounce_ms
% 5) != 0) ||
424 debounce_ms
> MAX_DEBOUNCE_TIME
||
425 debounce_ms
< MIN_DEBOUNCE_TIME
) {
426 dev_err(&pdev
->dev
, "invalid debounce time supplied\n");
430 bits
= (debounce_ms
/ 5) - 1;
432 scan_val
|= (bits
<< KEYP_SCAN_DBOUNCE_SHIFT
);
434 bits
= fls(scan_delay_ms
) - 1;
435 scan_val
|= (bits
<< KEYP_SCAN_PAUSE_SHIFT
);
437 /* Row hold time is a multiple of 32KHz cycles. */
438 cycles
= (row_hold_ns
* KEYP_CLOCK_FREQ
) / NSEC_PER_SEC
;
440 scan_val
|= (cycles
<< KEYP_SCAN_ROW_HOLD_SHIFT
);
442 rc
= regmap_write(kp
->regmap
, KEYP_SCAN
, scan_val
);
444 dev_err(kp
->dev
, "Error writing KEYP_SCAN reg, rc=%d\n", rc
);
450 static int pmic8xxx_kp_enable(struct pmic8xxx_kp
*kp
)
454 kp
->ctrl_reg
|= KEYP_CTRL_KEYP_EN
;
456 rc
= regmap_write(kp
->regmap
, KEYP_CTRL
, kp
->ctrl_reg
);
458 dev_err(kp
->dev
, "Error writing KEYP_CTRL reg, rc=%d\n", rc
);
463 static int pmic8xxx_kp_disable(struct pmic8xxx_kp
*kp
)
467 kp
->ctrl_reg
&= ~KEYP_CTRL_KEYP_EN
;
469 rc
= regmap_write(kp
->regmap
, KEYP_CTRL
, kp
->ctrl_reg
);
476 static int pmic8xxx_kp_open(struct input_dev
*dev
)
478 struct pmic8xxx_kp
*kp
= input_get_drvdata(dev
);
480 return pmic8xxx_kp_enable(kp
);
483 static void pmic8xxx_kp_close(struct input_dev
*dev
)
485 struct pmic8xxx_kp
*kp
= input_get_drvdata(dev
);
487 pmic8xxx_kp_disable(kp
);
491 * keypad controller should be initialized in the following sequence
492 * only, otherwise it might get into FSM stuck state.
494 * - Initialize keypad control parameters, like no. of rows, columns,
495 * timing values etc.,
496 * - configure rows and column gpios pull up/down.
497 * - set irq edge type.
498 * - enable the keypad controller.
500 static int pmic8xxx_kp_probe(struct platform_device
*pdev
)
502 struct device_node
*np
= pdev
->dev
.of_node
;
503 unsigned int rows
, cols
;
506 struct pmic8xxx_kp
*kp
;
508 unsigned int ctrl_val
;
510 rc
= matrix_keypad_parse_properties(&pdev
->dev
, &rows
, &cols
);
514 if (cols
> PM8XXX_MAX_COLS
|| rows
> PM8XXX_MAX_ROWS
||
515 cols
< PM8XXX_MIN_COLS
) {
516 dev_err(&pdev
->dev
, "invalid platform data\n");
520 repeat
= !of_property_read_bool(np
, "linux,input-no-autorepeat");
522 wakeup
= of_property_read_bool(np
, "wakeup-source") ||
524 of_property_read_bool(np
, "linux,keypad-wakeup");
526 kp
= devm_kzalloc(&pdev
->dev
, sizeof(*kp
), GFP_KERNEL
);
530 kp
->regmap
= dev_get_regmap(pdev
->dev
.parent
, NULL
);
534 platform_set_drvdata(pdev
, kp
);
538 kp
->dev
= &pdev
->dev
;
540 kp
->input
= devm_input_allocate_device(&pdev
->dev
);
542 dev_err(&pdev
->dev
, "unable to allocate input device\n");
546 kp
->key_sense_irq
= platform_get_irq(pdev
, 0);
547 if (kp
->key_sense_irq
< 0)
548 return kp
->key_sense_irq
;
550 kp
->key_stuck_irq
= platform_get_irq(pdev
, 1);
551 if (kp
->key_stuck_irq
< 0)
552 return kp
->key_stuck_irq
;
554 kp
->input
->name
= "PMIC8XXX keypad";
555 kp
->input
->phys
= "pmic8xxx_keypad/input0";
557 kp
->input
->id
.bustype
= BUS_I2C
;
558 kp
->input
->id
.version
= 0x0001;
559 kp
->input
->id
.product
= 0x0001;
560 kp
->input
->id
.vendor
= 0x0001;
562 kp
->input
->open
= pmic8xxx_kp_open
;
563 kp
->input
->close
= pmic8xxx_kp_close
;
565 rc
= matrix_keypad_build_keymap(NULL
, NULL
,
566 PM8XXX_MAX_ROWS
, PM8XXX_MAX_COLS
,
567 kp
->keycodes
, kp
->input
);
569 dev_err(&pdev
->dev
, "failed to build keymap\n");
574 __set_bit(EV_REP
, kp
->input
->evbit
);
575 input_set_capability(kp
->input
, EV_MSC
, MSC_SCAN
);
577 input_set_drvdata(kp
->input
, kp
);
579 /* initialize keypad state */
580 memset(kp
->keystate
, 0xff, sizeof(kp
->keystate
));
581 memset(kp
->stuckstate
, 0xff, sizeof(kp
->stuckstate
));
583 rc
= pmic8xxx_kpd_init(kp
, pdev
);
585 dev_err(&pdev
->dev
, "unable to initialize keypad controller\n");
589 rc
= devm_request_any_context_irq(&pdev
->dev
, kp
->key_sense_irq
,
590 pmic8xxx_kp_irq
, IRQF_TRIGGER_RISING
, "pmic-keypad",
593 dev_err(&pdev
->dev
, "failed to request keypad sense irq\n");
597 rc
= devm_request_any_context_irq(&pdev
->dev
, kp
->key_stuck_irq
,
598 pmic8xxx_kp_stuck_irq
, IRQF_TRIGGER_RISING
,
599 "pmic-keypad-stuck", kp
);
601 dev_err(&pdev
->dev
, "failed to request keypad stuck irq\n");
605 rc
= regmap_read(kp
->regmap
, KEYP_CTRL
, &ctrl_val
);
607 dev_err(&pdev
->dev
, "failed to read KEYP_CTRL register\n");
611 kp
->ctrl_reg
= ctrl_val
;
613 rc
= input_register_device(kp
->input
);
615 dev_err(&pdev
->dev
, "unable to register keypad input device\n");
619 device_init_wakeup(&pdev
->dev
, wakeup
);
624 #ifdef CONFIG_PM_SLEEP
625 static int pmic8xxx_kp_suspend(struct device
*dev
)
627 struct platform_device
*pdev
= to_platform_device(dev
);
628 struct pmic8xxx_kp
*kp
= platform_get_drvdata(pdev
);
629 struct input_dev
*input_dev
= kp
->input
;
631 if (device_may_wakeup(dev
)) {
632 enable_irq_wake(kp
->key_sense_irq
);
634 mutex_lock(&input_dev
->mutex
);
636 if (input_dev
->users
)
637 pmic8xxx_kp_disable(kp
);
639 mutex_unlock(&input_dev
->mutex
);
645 static int pmic8xxx_kp_resume(struct device
*dev
)
647 struct platform_device
*pdev
= to_platform_device(dev
);
648 struct pmic8xxx_kp
*kp
= platform_get_drvdata(pdev
);
649 struct input_dev
*input_dev
= kp
->input
;
651 if (device_may_wakeup(dev
)) {
652 disable_irq_wake(kp
->key_sense_irq
);
654 mutex_lock(&input_dev
->mutex
);
656 if (input_dev
->users
)
657 pmic8xxx_kp_enable(kp
);
659 mutex_unlock(&input_dev
->mutex
);
666 static SIMPLE_DEV_PM_OPS(pm8xxx_kp_pm_ops
,
667 pmic8xxx_kp_suspend
, pmic8xxx_kp_resume
);
669 static const struct of_device_id pm8xxx_match_table
[] = {
670 { .compatible
= "qcom,pm8058-keypad" },
671 { .compatible
= "qcom,pm8921-keypad" },
674 MODULE_DEVICE_TABLE(of
, pm8xxx_match_table
);
676 static struct platform_driver pmic8xxx_kp_driver
= {
677 .probe
= pmic8xxx_kp_probe
,
679 .name
= "pm8xxx-keypad",
680 .pm
= &pm8xxx_kp_pm_ops
,
681 .of_match_table
= pm8xxx_match_table
,
684 module_platform_driver(pmic8xxx_kp_driver
);
686 MODULE_LICENSE("GPL v2");
687 MODULE_DESCRIPTION("PMIC8XXX keypad driver");
688 MODULE_ALIAS("platform:pmic8xxx_keypad");
689 MODULE_AUTHOR("Trilok Soni <tsoni@codeaurora.org>");