diff options
Diffstat (limited to 'drivers/input/mouse')
| -rw-r--r-- | drivers/input/mouse/elantech.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c index d3b591673792..4bc78892ba91 100644 --- a/drivers/input/mouse/elantech.c +++ b/drivers/input/mouse/elantech.c | |||
| @@ -375,9 +375,14 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse) | |||
| 375 | rc = -1; | 375 | rc = -1; |
| 376 | break; | 376 | break; |
| 377 | } | 377 | } |
| 378 | } | ||
| 379 | |||
| 380 | if (rc == 0) { | ||
| 378 | /* | 381 | /* |
| 379 | * Read back reg 0x10. The touchpad is probably initalising | 382 | * Read back reg 0x10. For hardware version 1 we must make |
| 380 | * and not ready until we read back the value we just wrote. | 383 | * sure the absolute mode bit is set. For hardware version 2 |
| 384 | * the touchpad is probably initalising and not ready until | ||
| 385 | * we read back the value we just wrote. | ||
| 381 | */ | 386 | */ |
| 382 | do { | 387 | do { |
| 383 | rc = elantech_read_reg(psmouse, 0x10, &val); | 388 | rc = elantech_read_reg(psmouse, 0x10, &val); |
| @@ -385,12 +390,18 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse) | |||
| 385 | break; | 390 | break; |
| 386 | tries--; | 391 | tries--; |
| 387 | elantech_debug("elantech.c: retrying read (%d).\n", | 392 | elantech_debug("elantech.c: retrying read (%d).\n", |
| 388 | tries); | 393 | tries); |
| 389 | msleep(ETP_READ_BACK_DELAY); | 394 | msleep(ETP_READ_BACK_DELAY); |
| 390 | } while (tries > 0); | 395 | } while (tries > 0); |
| 391 | if (rc) | 396 | |
| 397 | if (rc) { | ||
| 392 | pr_err("elantech.c: failed to read back register 0x10.\n"); | 398 | pr_err("elantech.c: failed to read back register 0x10.\n"); |
| 393 | break; | 399 | } else if (etd->hw_version == 1 && |
| 400 | !(val & ETP_R10_ABSOLUTE_MODE)) { | ||
| 401 | pr_err("elantech.c: touchpad refuses " | ||
| 402 | "to switch to absolute mode.\n"); | ||
| 403 | rc = -1; | ||
| 404 | } | ||
| 394 | } | 405 | } |
| 395 | 406 | ||
| 396 | if (rc) | 407 | if (rc) |
