mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
Input: mt6779-keypad - implement row/column selection
The MediaTek keypad has a total of 6 input rows and 6 input columns. By default, rows/columns 0-2 are enabled. This is controlled by the KP_SEL register: - bits[9:4] control row selection - bits[15:10] control column selection Each bit enables the corresponding row/column number (e.g KP_SEL[4] enables ROW0) Depending on how the keypad is wired, this may result in wrong readings of the keypad state. Program the KP_SEL register to limit the key detection to n_rows, n_cols we retrieve from the device tree. Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Link: https://lore.kernel.org/r/20220707075236.126631-3-mkorpershoek@baylibre.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
d6ed525830
commit
31789f35f8
1 changed files with 10 additions and 0 deletions
|
@ -17,6 +17,11 @@
|
|||
#define MTK_KPD_DEBOUNCE 0x0018
|
||||
#define MTK_KPD_DEBOUNCE_MASK GENMASK(13, 0)
|
||||
#define MTK_KPD_DEBOUNCE_MAX_MS 256
|
||||
#define MTK_KPD_SEL 0x0020
|
||||
#define MTK_KPD_SEL_COL GENMASK(15, 10)
|
||||
#define MTK_KPD_SEL_ROW GENMASK(9, 4)
|
||||
#define MTK_KPD_SEL_COLMASK(c) GENMASK((c) + 9, 10)
|
||||
#define MTK_KPD_SEL_ROWMASK(r) GENMASK((r) + 3, 4)
|
||||
#define MTK_KPD_NUM_MEMS 5
|
||||
#define MTK_KPD_NUM_BITS 136 /* 4*32+8 MEM5 only use 8 BITS */
|
||||
|
||||
|
@ -161,6 +166,11 @@ static int mt6779_keypad_pdrv_probe(struct platform_device *pdev)
|
|||
regmap_write(keypad->regmap, MTK_KPD_DEBOUNCE,
|
||||
(debounce * (1 << 5)) & MTK_KPD_DEBOUNCE_MASK);
|
||||
|
||||
regmap_update_bits(keypad->regmap, MTK_KPD_SEL, MTK_KPD_SEL_ROW,
|
||||
MTK_KPD_SEL_ROWMASK(keypad->n_rows));
|
||||
regmap_update_bits(keypad->regmap, MTK_KPD_SEL, MTK_KPD_SEL_COL,
|
||||
MTK_KPD_SEL_COLMASK(keypad->n_cols));
|
||||
|
||||
keypad->clk = devm_clk_get(&pdev->dev, "kpd");
|
||||
if (IS_ERR(keypad->clk))
|
||||
return PTR_ERR(keypad->clk);
|
||||
|
|
Loading…
Reference in a new issue