From: Siarhei Volkau Date: Thu, 3 Nov 2022 20:40:02 +0000 (-0700) Subject: Input: matrix_keypad - force switch rows to input mode X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=01c84b03d80aab9f04c4e3e1f9085f4202ff7c29;p=linux.git 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 Link: https://lore.kernel.org/r/20221102165747.1528988-1-lis8215@gmail.com Signed-off-by: Dmitry Torokhov --- diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c index 7dd3f3eda834e..b4c0325bbf1a7 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++) {