lkml.org 
[lkml]   [2022]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subject[PATCH 00/12] i2c-hid: fixes for unnumbered reports and other improvements
Date
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

\
 
 \ /
  Last update: 2022-01-18 08:27    [W:0.100 / U:0.796 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site