Commit 39735019 authored by Rabin Vincent's avatar Rabin Vincent Committed by Dmitry Torokhov

Input: tc3589x-keypad - fix keymap size

The keymap size used by tc3589x is too low, leading to the driver
overwriting other people's memory.  Fix this by making the driver
use the automatically allocated keymap provided by
matrix_keypad_build_keymap() instead of allocating one on its own.
Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 58694837
...@@ -70,8 +70,6 @@ ...@@ -70,8 +70,6 @@
#define TC3589x_EVT_INT_CLR 0x2 #define TC3589x_EVT_INT_CLR 0x2
#define TC3589x_KBD_INT_CLR 0x1 #define TC3589x_KBD_INT_CLR 0x1
#define TC3589x_KBD_KEYMAP_SIZE 64
/** /**
* struct tc_keypad - data structure used by keypad driver * struct tc_keypad - data structure used by keypad driver
* @tc3589x: pointer to tc35893 * @tc3589x: pointer to tc35893
...@@ -88,7 +86,7 @@ struct tc_keypad { ...@@ -88,7 +86,7 @@ struct tc_keypad {
const struct tc3589x_keypad_platform_data *board; const struct tc3589x_keypad_platform_data *board;
unsigned int krow; unsigned int krow;
unsigned int kcol; unsigned int kcol;
unsigned short keymap[TC3589x_KBD_KEYMAP_SIZE]; unsigned short *keymap;
bool keypad_stopped; bool keypad_stopped;
}; };
...@@ -338,12 +336,14 @@ static int tc3589x_keypad_probe(struct platform_device *pdev) ...@@ -338,12 +336,14 @@ static int tc3589x_keypad_probe(struct platform_device *pdev)
error = matrix_keypad_build_keymap(plat->keymap_data, NULL, error = matrix_keypad_build_keymap(plat->keymap_data, NULL,
TC3589x_MAX_KPROW, TC3589x_MAX_KPCOL, TC3589x_MAX_KPROW, TC3589x_MAX_KPCOL,
keypad->keymap, input); NULL, input);
if (error) { if (error) {
dev_err(&pdev->dev, "Failed to build keymap\n"); dev_err(&pdev->dev, "Failed to build keymap\n");
goto err_free_mem; goto err_free_mem;
} }
keypad->keymap = input->keycode;
input_set_capability(input, EV_MSC, MSC_SCAN); input_set_capability(input, EV_MSC, MSC_SCAN);
if (!plat->no_autorepeat) if (!plat->no_autorepeat)
__set_bit(EV_REP, input->evbit); __set_bit(EV_REP, input->evbit);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment