]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Input: elan_i2c - clear INT before resetting controller
authorKT Liao <kt.liao@emc.com.tw>
Thu, 25 May 2017 17:06:21 +0000 (10:06 -0700)
committerSasha Levin <alexander.levin@microsoft.com>
Wed, 23 May 2018 01:36:26 +0000 (21:36 -0400)
[ Upstream commit 4b3c7dbbfff0673e8a89575414b864d8b001d3bb ]

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>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
drivers/input/mouse/elan_i2c_i2c.c

index a0acbbf83bfd4faaa7d14a09dbe332848dc648e4..4ea436c173be0ecc474a87a88c843465b8498428 100644 (file)
@@ -555,7 +555,14 @@ static int elan_i2c_finish_fw_update(struct i2c_client *client,
        long ret;
        int error;
        int len;
-       u8 buffer[ETP_I2C_INF_LENGTH];
+       u8 buffer[ETP_I2C_REPORT_LEN];
+
+       len = i2c_master_recv(client, buffer, ETP_I2C_REPORT_LEN);
+       if (len != ETP_I2C_REPORT_LEN) {
+               error = len < 0 ? len : -EIO;
+               dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n",
+                       error, len);
+       }
 
        reinit_completion(completion);
        enable_irq(client->irq);