• Jiri Kosina's avatar
    HID: support larger reports than 64 bytes in hiddev · affbb8c6
    Jiri Kosina authored
    hiddev userspace driver uses a rignbuffer to store the parsed usages
    that should be returned through read(). This buffer is 64 bytes long,
    which is sufficient for queueing single USB 1.0 low-speed report, which
    is of maximum size 48 bytes.
    
    There are however USB HID devices which are full-speed USB devices, and
    therefore they are free to produce reports 64 bytes long. This is correctly
    handled by HID core, but read() on hiddev node gets stuck forever, because
    the ring buffer loops infinitely (as it is exactly 64 bytes long as well),
    never advancing the buffer pointer.
    
    Plus, the core driver is ready to handle highspeed devices, so we should be
    able to handle reports from such devices in the hiddev driver as well, which
    means we need larger ringbuffer.
    Reported-by: default avatarMichael Zeisel <michael.zeisel@philips.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    affbb8c6
hiddev.c 23.9 KB