Hello,
I'm working on my custom board and I'm experiencing a strange problem when using a very specific usb chain. If I connect a USB Audio device (code: SiLabs CP2114) directly to a port of the MUSB controller, the device works correctly and I can play audio files properly.
When I connect the same audio device to a port of a USB hub (code: SMSC USB2512BI) connected to a port of the MUSB controller, I can't play audio files correctly (I get crackling noise and distorsion). If I connect the same hub to different USB host controllers (on different hardware platform), the USB Audio device works correctly.
Working on this issue, I've found a quick workaround: if I force full speed connection between the MUSB controller and the hub (removing the MUSB_POWER_HSENAB option in the musb_start() function of the drivers/usb/musb/musb_core.c file), I get the USB Audio device working
So I suspect there is something not working as expected in the
MUSB host controller + USB Hub + USB audio
chain when the connection between the MUSB host controller and the USB Hub is configured for High Speed. After further investigation (increasing debug level with the /proc/driver/musb_hdrc.x parameter and enabling usbmon) I've seen some differences in the USB transactions in the two cases:
Case 1: MUSB host controller <--> Full Speed <--> USB Hub
In this case, using usbmon I can see Isochronous USB transfers in both directions (marked as Zi and Zo) in the attached usb-fs-hub.mon.out file.
Case 2: MUSB host controller <--> High Speed <--> USB Hub
In this case, using usbmon I can see Isochronous USB transfers only in one direction (Zo) in the attached usb-hs-hub.mon.out file.
This behavior is confirmed by the USB subsystem log messages: in fact, comparing the attached usb-hs-hub-syslog.log and usb-fs-hub-syslog.log, I see that only in the full speed case I receive interrupts from the USB device.
Since I'm not a USB expert, I hope that someone can give me some hints on how to solve this issue or, at least, on how to proceed with the analysis.
Thanks for your help and best regards.
Piero Pezzin
P.S. I've run the same tests both on the AM335x and the DM814x processors, obtaining the same results (as expected, since the MUSB controller is the same). Moreover, I've also tried with the Beaglebone, running the 3.13 kernel to search for some driver upgrades that can help me, but again with no luck.