aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKT Liao <kt.liao@emc.com.tw>2017-05-25 13:06:21 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2017-05-25 13:11:34 -0400
commit4b3c7dbbfff0673e8a89575414b864d8b001d3bb (patch)
treef9533053e6ebeb76a36abeabafb2f9da49e5221e
parent089b50d95948f691589cca4d81f1f8761747dbaa (diff)
Input: elan_i2c - clear INT before resetting controller
Some old touchpad FWs need to have interrupt cleared before issuing reset command after updating firmware. We clear interrupt by attempting to read full report from the controller, and discarding any data read. Signed-off-by: KT Liao <kt.liao@emc.com.tw> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/mouse/elan_i2c_i2c.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/input/mouse/elan_i2c_i2c.c b/drivers/input/mouse/elan_i2c_i2c.c
index a679e56c44cd..765879dcaf85 100644
--- a/drivers/input/mouse/elan_i2c_i2c.c
+++ b/drivers/input/mouse/elan_i2c_i2c.c
@@ -557,7 +557,14 @@ static int elan_i2c_finish_fw_update(struct i2c_client *client,
557 long ret; 557 long ret;
558 int error; 558 int error;
559 int len; 559 int len;
560 u8 buffer[ETP_I2C_INF_LENGTH]; 560 u8 buffer[ETP_I2C_REPORT_LEN];
561
562 len = i2c_master_recv(client, buffer, ETP_I2C_REPORT_LEN);
563 if (len != ETP_I2C_REPORT_LEN) {
564 error = len < 0 ? len : -EIO;
565 dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n",
566 error, len);
567 }
561 568
562 reinit_completion(completion); 569 reinit_completion(completion);
563 enable_irq(client->irq); 570 enable_irq(client->irq);