On Wed, Feb 13, 2019 at 3:37 PM Jiri Kosina <ji...@kernel.org> wrote: > > On Sun, 10 Feb 2019, Jim Broadus wrote: > > > Commit 52cf93e63ee6 ("HID: i2c-hid: Don't reset device upon system resume") > > fixes the resume behavior of several devices. However, this breaks the > > resume on the ELAN2097, used on Dell Inspiron laptops, with the same flood > > of messages: > > > > [27009.817110] i2c_hid i2c-ELAN2097:00: i2c_hid_get_input: incomplete > > report (67/65535) > > [27009.818867] i2c_hid i2c-ELAN2097:00: i2c_hid_get_input: incomplete > > report (67/65535) > > [27009.820623] i2c_hid i2c-ELAN2097:00: i2c_hid_get_input: incomplete > > report (67/65535) > > > > This change adds a new I2C_HID_QUIRK_RESET_AFTER_RESUME and replaces the > > original reset behavior for this device. > > > > Signed-off-by: Jim Broadus <jbroa...@gmail.com> > > This should be fixed in hid.git#for-5.1/i2c-hid already by commit > 1475af255e18f. Could you please confirm that? >
Hi Jiri. That change mutes the log messages, but I'm still counting around 35000 interrupts per second after resume and touch does not work. With the reset, the device works properly. Jim > > --- > > drivers/hid/hid-ids.h | 1 + > > drivers/hid/i2c-hid/i2c-hid-core.c | 20 ++++++++++++++------ > > 2 files changed, 15 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h > > index 24f846d67478..38cc7033712a 100644 > > --- a/drivers/hid/hid-ids.h > > +++ b/drivers/hid/hid-ids.h > > @@ -387,6 +387,7 @@ > > #define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401 > > #define USB_DEVICE_ID_HP_X2 0x074d > > #define USB_DEVICE_ID_HP_X2_10_COVER 0x0755 > > +#define USB_DEVICE_ID_ELAN2097 0x2504 > > > > #define USB_VENDOR_ID_ELECOM 0x056e > > #define USB_DEVICE_ID_ELECOM_BM084 0x0061 > > diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c > > b/drivers/hid/i2c-hid/i2c-hid-core.c > > index c5edfa966343..fdbad29b4406 100644 > > --- a/drivers/hid/i2c-hid/i2c-hid-core.c > > +++ b/drivers/hid/i2c-hid/i2c-hid-core.c > > @@ -50,6 +50,7 @@ > > #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1) > > #define I2C_HID_QUIRK_NO_RUNTIME_PM BIT(2) > > #define I2C_HID_QUIRK_DELAY_AFTER_SLEEP BIT(3) > > +#define I2C_HID_QUIRK_RESET_AFTER_RESUME BIT(4) > > > > /* flags */ > > #define I2C_HID_STARTED 0 > > @@ -181,6 +182,8 @@ static const struct i2c_hid_quirks { > > I2C_HID_QUIRK_NO_RUNTIME_PM }, > > { I2C_VENDOR_ID_GOODIX, I2C_DEVICE_ID_GOODIX_01F0, > > I2C_HID_QUIRK_NO_RUNTIME_PM }, > > + { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN2097, > > + I2C_HID_QUIRK_RESET_AFTER_RESUME }, > > { 0, 0 } > > }; > > > > @@ -1279,12 +1282,17 @@ static int i2c_hid_resume(struct device *dev) > > > > enable_irq(client->irq); > > > > - /* Instead of resetting device, simply powers the device on. This > > - * solves "incomplete reports" on Raydium devices 2386:3118 and > > - * 2386:4B33 and fixes various SIS touchscreens no longer sending > > - * data after a suspend/resume. > > - */ > > - ret = i2c_hid_set_power(client, I2C_HID_PWR_ON); > > + if (ihid->quirks & I2C_HID_QUIRK_RESET_AFTER_RESUME) { > > + ret = i2c_hid_hwreset(client); > > + } else { > > + /* Instead of resetting device, simply powers the device on. > > + * This solves "incomplete reports" on Raydium devices > > 2386:3118 > > + * and 2386:4B33 and fixes various SIS touchscreens no longer > > + * sending data after a suspend/resume. > > + */ > > + ret = i2c_hid_set_power(client, I2C_HID_PWR_ON); > > + } > > + > > if (ret) > > return ret; > > > > -- > > 2.20.1 > > > > -- > Jiri Kosina > SUSE Labs >