The primary fix here is to throttle the requests for status after a read or write operation. In some cases I was seeing more than 1000 before the device was ready with a response.
The remainder are smaller improvements related to the read/write logic. All of this seems pretty straightforward with the possible exception of changing the returned error from EINVAL to EIO. The EINVAL seems wrong to me but maybe not?
Regards,
Chris
Chris Rorvick (6): ALSA: line6: Improve line6_read/write_data() interfaces ALSA: line6: Add delay before reading status ALSA: line6: Return error if device not responding ALSA: line6: Return EIO if read/write not successful ALSA: line6: Use explicit type for serial number ALSA: line6: toneport: Use explicit type for firmware version
sound/usb/line6/driver.c | 51 +++++++++++++++++++++++++++++++++------------- sound/usb/line6/driver.h | 10 ++++----- sound/usb/line6/pod.c | 4 ++-- sound/usb/line6/toneport.c | 4 ++-- 4 files changed, 46 insertions(+), 23 deletions(-)