| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: KT Liao <kt.liao@emc.com.tw> |
| Date: Thu, 25 May 2017 10:06:21 -0700 |
| Subject: Input: elan_i2c - clear INT before resetting controller |
| |
| From: KT Liao <kt.liao@emc.com.tw> |
| |
| |
| [ 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/input/mouse/elan_i2c_i2c.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- 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(str |
| 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); |