|
@@ -164,11 +164,18 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data)
|
|
|
int error, col, row;
|
|
|
u8 reg, state, code;
|
|
|
|
|
|
- /* Initial read of the key event FIFO */
|
|
|
- error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®);
|
|
|
+ do {
|
|
|
+ error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®);
|
|
|
+ if (error < 0) {
|
|
|
+ dev_err(&keypad_data->client->dev,
|
|
|
+ "unable to read REG_KEY_EVENT_A\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Assume that key code 0 signifies empty FIFO */
|
|
|
+ if (reg <= 0)
|
|
|
+ break;
|
|
|
|
|
|
- /* Assume that key code 0 signifies empty FIFO */
|
|
|
- while (error >= 0 && reg > 0) {
|
|
|
state = reg & KEY_EVENT_VALUE;
|
|
|
code = reg & KEY_EVENT_CODE;
|
|
|
|
|
@@ -184,11 +191,7 @@ static void tca8418_read_keypad(struct tca8418_keypad *keypad_data)
|
|
|
|
|
|
/* Read for next loop */
|
|
|
error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, ®);
|
|
|
- }
|
|
|
-
|
|
|
- if (error < 0)
|
|
|
- dev_err(&keypad_data->client->dev,
|
|
|
- "unable to read REG_KEY_EVENT_A\n");
|
|
|
+ } while (1);
|
|
|
|
|
|
input_sync(input);
|
|
|
}
|