lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKgEEwteam5TCWAUtgQKxQpTzTk3+_DktmqwxZTLa=w3xt5i8Q@mail.gmail.com>
Date:   Thu, 14 Feb 2019 23:21:58 -0800
From:   james broadus <jbroadus@...il.com>
To:     Jiri Kosina <jikos@...nel.org>
Cc:     Kai Heng Feng <kai.heng.feng@...onical.com>,
        Benjamin Tissoires <benjamin.tissoires@...il.com>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH] Fix resume for ELAN2097 touchscreen.

On Wed, Feb 13, 2019 at 3:37 PM Jiri Kosina <jikos@...nel.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 <jbroadus@...il.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
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ