diff options
author | Siarhei Volkau <lis8215@gmail.com> | 2022-11-03 21:40:02 +0100 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2022-11-03 21:41:03 +0100 |
commit | 01c84b03d80aab9f04c4e3e1f9085f4202ff7c29 (patch) | |
tree | e487049d76341c2332e6a7b5fa608f3b086594f8 | |
parent | Input: Add driver for Cypress Generation 5 touchscreen (diff) | |
download | linux-01c84b03d80aab9f04c4e3e1f9085f4202ff7c29.tar.xz linux-01c84b03d80aab9f04c4e3e1f9085f4202ff7c29.zip |
Input: matrix_keypad - force switch rows to input mode
Some Pin/GPIO controllers can't get current GPIO status when interrupt
mode is set. Specifically Ingenic's JZ4755 always returns status at the
moment of interrupt.
The patch tries to fix that by forcibly setting pin mode to GPIO input
prior to reading actual row status. enable_row_irqs seems to set
interrupt mode back as it should be.
Signed-off-by: Siarhei Volkau <lis8215@gmail.com>
Link: https://lore.kernel.org/r/20221102165747.1528988-1-lis8215@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r-- | drivers/input/keyboard/matrix_keypad.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c index 7dd3f3eda834..b4c0325bbf1a 100644 --- a/drivers/input/keyboard/matrix_keypad.c +++ b/drivers/input/keyboard/matrix_keypad.c @@ -127,6 +127,9 @@ static void matrix_keypad_scan(struct work_struct *work) memset(new_state, 0, sizeof(new_state)); + for (row = 0; row < pdata->num_row_gpios; row++) + gpio_direction_input(pdata->row_gpios[row]); + /* assert each column and read the row status out */ for (col = 0; col < pdata->num_col_gpios; col++) { |