Re: [PATCH v4] hid/i2c-hid: override HID descriptors for certain devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> writes:

> On Thu, Sep 27, 2018 at 3:13 AM Benjamin Tissoires
> <benjamin.tissoires@xxxxxxxxxx> wrote:
>>
>> On Wed, Sep 19, 2018 at 11:47 AM Julian Sax <jsbc@xxxxxx> wrote:
>> >
>> > A particular touchpad (SIPODEV SP1064) refuses to supply the HID
>> > descriptors. This patch provides the framework for overriding these
>> > descriptors based on DMI data. It also includes the descriptors for
>> > said touchpad, which were extracted by listening to the traffic of the
>> > windows filter driver, as well as the DMI data for the laptops known
>> > to use this device.
>> >
>> > Relevant Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1526312
>> >
>> > Cc: Hans de Goede <hdegoede@xxxxxxxxxx>
>> > Reported-and-tested-by: ahormann@xxxxxxx
>> > Reported-and-tested-by: Bruno Jesus <bruno.fl.jesus@xxxxxxxxx>
>> > Reported-and-tested-by: Dietrich <enaut.w@xxxxxxxxxxxxxx>
>> > Reported-and-tested-by: kloxdami@xxxxxxxxx
>> > Signed-off-by: Julian Sax <jsbc@xxxxxx>
>> > ---
>>
>> Looks good AFAICT:
>> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx>
>
> So wait, looking at the patch description, Windows is able to fetch
> the descriptors from the device. Why can't we do what Windows does? It
> seems that we do not recognize bcdVersion value, what else is
> different? If we adjust for that, can we fetch the rest of descriptors
> from the device? I think there was another controller with weird
> descriptor layout (Cypress)...
>
> Thanks.

In this case, on Windows a filter driver sneaks in between the device
and the HID layer and provides the descriptors. When you compare the i2c
traffic on Windows before and after the filter driver, in the
device-facing communication the descriptor requests does not appear,
while on the HID-facing side, they do. If you try to read directly from
the standard locations of the HID and report descriptor, you only get
the report starting from that offset. This was probably done to make the
actual chip as cheap as possible by not storing the descriptors there
and not implementing real address handling at all.

Regards,
Julian Sax



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux