Home
last modified time | relevance | path

Searched hist:"2682468671 aa0b4d52ae09779b48212a80d71b91" (Results 1 – 1 of 1) sorted by relevance

/linux/drivers/hid/
H A Dhid-mcp2221.cdiff 2682468671aa0b4d52ae09779b48212a80d71b91 Wed Oct 25 05:55:14 CEST 2023 Hamish Martin <hamish.martin@alliedtelesis.co.nz> HID: mcp2221: Handle reads greater than 60 bytes

When a user requests more than 60 bytes of data the MCP2221 must chunk
the data in chunks up to 60 bytes long (see command/response code 0x40
in the datasheet).
In order to signal that the device has more data the (undocumented) byte
at byte index 2 of the Get I2C Data response uses the value 0x54. This
contrasts with the case for the final data chunk where the value
returned is 0x55 (MCP2221_I2C_READ_COMPL). The fact that 0x55 was not
returned in the response was interpreted by the driver as a failure
meaning that all reads of more than 60 bytes would fail.

Add support for reads that are split over multiple chunks by looking for
the response code indicating that more data is expected and continuing
the read as the code intended. Some timing delays are required to ensure
the chip has time to refill its FIFO as data is read in from the I2C
bus. This timing has been tested in my system when configured for bus
speeds of 50KHz, 100KHz, and 400KHz and operates well.

Signed-off-by: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>