• Hamish Martin's avatar
    HID: mcp2221: Handle reads greater than 60 bytes · 26824686
    Hamish Martin authored
    
    
    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: default avatarHamish Martin <hamish.martin@alliedtelesis.co.nz>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    26824686
hid-mcp2221.c 27.5 KB