On Thursday 08 Oct 2015 12:51:54 Keith A. Milner wrote:
I have some usbmon dumps which I will try to find time to analyze.
Well the results of my packet dumps were interesting.
For audio playback, I noticed the Windows drive seemed to enable the IN endpoint (EP 14) as well as the OUT one (EP 13). This seemed to match with the view that explicit feedback is required for asynchronous host-to-device transfers.
So I've changed the quirk as follows, which appears to work for playback still:
.ep_attr = 0x15,
This is USB_ENDPOINT_USAGE_FEEDBACK + USB_ENDPOINT_SYNC_ASYNC + USB_ENDPOINT_XFER_ISOC
I say works "still" because the previous value I had (0x01) worked as well. However, this was basically setting the sync type to NONE instead of ASYNC, and didn't configure any feedback type. This was probably free-running and, effectively, similar to "ADAPTIVE", but is probably prone to occasional sync problems/buffer overflows on the device.
The resulting usbmon dump seems to follow the one from Windows now.
Input is still a problem!
Under ALSA, the input stream (via URB_ISOCHRONOUS in requests/responses) to IN endpoint 14 seems to be working. However, under Windows the driver also initiates the OUT endpoint 13 which then has an output stream (via URB_ISOCHRONOUS out requests/responses).
I don't know if this is required by the device for some reason (explicit feedback, although that doesn't make much sense to me?) or if it's just something irrelevant that the Windows driver happens to do.
Either way, Linux seems to get stuck with the input data (for instance, the playhead in Audacity doesn't move).
Cheers,
Keith