Skip to content

Commit 1475af2

Browse files
khfengbentiss
authored andcommitted
HID: i2c-hid: Ignore input report if there's no data present on Elan touchpanels
While using Elan touchpads, the message floods: [ 136.138487] i2c_hid i2c-DELL08D6:00: i2c_hid_get_input: incomplete report (14/65535) Though the message flood is annoying, the device it self works without any issue. I suspect that the device in question takes too much time to pull the IRQ back to high after I2C host has done reading its data. Since the host receives all useful data, let's ignore the input report when there's no data. Signed-off-by: Kai-Heng Feng <[email protected]> Signed-off-by: Benjamin Tissoires <[email protected]>
1 parent cf26057 commit 1475af2

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/hid/i2c-hid/i2c-hid-core.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)
5151
#define I2C_HID_QUIRK_NO_RUNTIME_PM BIT(2)
5252
#define I2C_HID_QUIRK_DELAY_AFTER_SLEEP BIT(3)
53+
#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)
5354

5455
/* flags */
5556
#define I2C_HID_STARTED 0
@@ -179,6 +180,8 @@ static const struct i2c_hid_quirks {
179180
I2C_HID_QUIRK_DELAY_AFTER_SLEEP },
180181
{ USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_8001,
181182
I2C_HID_QUIRK_NO_RUNTIME_PM },
183+
{ USB_VENDOR_ID_ELAN, HID_ANY_ID,
184+
I2C_HID_QUIRK_BOGUS_IRQ },
182185
{ 0, 0 }
183186
};
184187

@@ -503,6 +506,12 @@ static void i2c_hid_get_input(struct i2c_hid *ihid)
503506
return;
504507
}
505508

509+
if (ihid->quirks & I2C_HID_QUIRK_BOGUS_IRQ && ret_size == 0xffff) {
510+
dev_warn_once(&ihid->client->dev, "%s: IRQ triggered but "
511+
"there's no data\n", __func__);
512+
return;
513+
}
514+
506515
if ((ret_size > size) || (ret_size < 2)) {
507516
dev_err(&ihid->client->dev, "%s: incomplete report (%d/%d)\n",
508517
__func__, size, ret_size);

0 commit comments

Comments
 (0)