mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 21:33:52 +00:00
Input: mt6779-keypad - match hardware matrix organization
commitd6ed525830
upstream. The MediaTek keypad has a set of bits representing keys, from KEY0 to KEY77, arranged in 5 chunks of 15 bits split into 5 32-bit registers. In our implementation, we simply decided to use register number as row and offset in the register as column when encoding our "matrix". Because of this, we can have a 5x32 matrix which does not match the hardware at all, which is confusing. Change the row/column calculation to match the hardware. Fixes:f28af984e7
("Input: mt6779-keypad - add MediaTek keypad driver") Co-developed-by: Fabien Parent <fparent@baylibre.com> Signed-off-by: Fabien Parent <fparent@baylibre.com> Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Link: https://lore.kernel.org/r/20220707075236.126631-2-mkorpershoek@baylibre.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
478b58ac0b
commit
a1e2d6c849
1 changed files with 5 additions and 3 deletions
|
@ -42,7 +42,7 @@ static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
|
|||
const unsigned short *keycode = keypad->input_dev->keycode;
|
||||
DECLARE_BITMAP(new_state, MTK_KPD_NUM_BITS);
|
||||
DECLARE_BITMAP(change, MTK_KPD_NUM_BITS);
|
||||
unsigned int bit_nr;
|
||||
unsigned int bit_nr, key;
|
||||
unsigned int row, col;
|
||||
unsigned int scancode;
|
||||
unsigned int row_shift = get_count_order(keypad->n_cols);
|
||||
|
@ -61,8 +61,10 @@ static irqreturn_t mt6779_keypad_irq_handler(int irq, void *dev_id)
|
|||
if (bit_nr % 32 >= 16)
|
||||
continue;
|
||||
|
||||
row = bit_nr / 32;
|
||||
col = bit_nr % 32;
|
||||
key = bit_nr / 32 * 16 + bit_nr % 32;
|
||||
row = key / 9;
|
||||
col = key % 9;
|
||||
|
||||
scancode = MATRIX_SCAN_CODE(row, col, row_shift);
|
||||
/* 1: not pressed, 0: pressed */
|
||||
pressed = !test_bit(bit_nr, new_state);
|
||||
|
|
Loading…
Reference in a new issue