[PATCH 00/12] i2c-hid: fixes for unnumbered reports and other improvements
From: Dmitry Torokhov
Date: Tue Jan 18 2022 - 02:26:36 EST
Hi,
This series came about after I reviewed Angela's patch that fixed issues
with incorrect handling of high-numbered reports (15 and above) in
i2c-hid driver:
- it appears to me that the driver did not handle unnumbered reports
correctly as the kernel internally expects unnumbered reports to be
still prepended with report number 0, but i2c_hid_get_raw_report() and
i2c_hid_output_raw_report() only expected report ID to be present for
numbered reports.
- the driver tried to consolidate both command handling and sending
output reports in __i2c_hid_command() but the rules for different
commands vary significantly and because of that the logic was hard to
follow and it bled out from __i2c_hid_command() to callers. I decided
to introduce a few simple helpers and have the data encoding for
individual commands done at the call site. I believe this made it
easier to validate the rules and the logic and allowed to remove
special handling for the HID descriptor retrieval, among other things.
- the driver does too many copying of data; encoding the data for
commands at the call site allowed to only copy data once into the
transfer buffers.
I tested this on a couple of Chromebooks with i2c-hid touchscreens, but
it would be great if other folks tried it out as well.
Thanks.
Angela Czubak (1):
HID: i2c-hid: fix handling numbered reports with IDs of 15 and above
Dmitry Torokhov (11):
HID: i2c-hid: fix GET/SET_REPORT for unnumbered reports
HID: i2c-hid: use "struct i2c_hid" as argument in most calls
HID: i2c-hid: refactor reset command
HID: i2c-hid: explicitly code setting and sending reports
HID: i2c-hid: define i2c_hid_read_register() and use it
HID: i2c-hid: create a helper for SET_POWER command
HID: i2c-hid: convert i2c_hid_execute_reset() to use i2c_hid_xfer()
HID: i2c-hid: rework i2c_hid_get_report() to use i2c_hid_xfer()
HID: i2c-hid: use helpers to do endian conversion in i2c_hid_get_input()
HID: i2c-hid: no longer need raw access to HID descriptor structure
HID: i2c-hid: note that I2C xfer buffers are DMA-safe
drivers/hid/i2c-hid/i2c-hid-core.c | 593 +++++++++++++++--------------
1 file changed, 313 insertions(+), 280 deletions(-)
--
Dmitry