USB Waveio (xmos) clicks odroid C2

Hi

I have a strange issue with the Waveio usb to i2s. In the 2.31 install on RPI3 everything is fine but under the odroid C2 I get clicks and pops on all type of music (frequency don’t change the issue).

I don’t know if this already happened on the C2.

Sincerely Yours,

Lobo.

Can you check with dmesg whether you have anything like this when playing?

WARN::urb_dequeue:780: urb->hcpriv == NULL! urb = ffffffc05bdc2800 status=-104

Could you also give output from

lsusb -t

Also, how is this DAC powered?
In case you have an OTG cable, could you try the otg port?
Using wired or wireless connection?

Hi Dkkpch,

Here is the results as requested : Dsmeg -> you are right :

[   73.549365] WARN::urb_dequeue:780: urb->hcpriv == NULL! urb = ffffffc05b2d450                                                0 status=-104

[   73.553603] WARN::urb_dequeue:780: urb->hcpriv == NULL! urb = ffffffc05acf4c0                                                0 status=-104

Result from Lsusb -t :

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 2: Dev 3, If 1, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 2: Dev 3, If 2, Class=Application Specific Interface, Driver=, 480M

I am now trying to cut a microusb cable to solder it on the waveio pins to test “otg” micro usb port on the Odroid C2.

well, first check ticked off: the dac is properly recognized as a usb2.0 (usb audio class 2) device (480M).
How are you powering the dac?

Hi again,

  1. The WAveio is powered by an external power source and the DAC is powered form another external source.

  2. With an micro usb (OTG) cable to the waveio pins the pops and clicks are gone.

With this OTG here are the results :
dsmeg: only one warning line not two.

[   72.210879] WARN::urb_dequeue:780: urb->hcpriv == NULL! urb = ffffffc05b576c0                              0 status=-104

and lsubsb -t :

/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Audio, Driver=snd-usb-audio, 480M |__ Port 1: Dev 2, If 1, Class=Audio, Driver=snd-usb-audio, 480M |__ Port 1: Dev 2, If 2, Class=Application Specific Interface, Driver=, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M

That’s really interesting… Documenting myself on OTG as we speak

Hi again,

In just posted a message on the waveio thread on DIYaudio regarding this to know who is using such setup (Odroid C2 + the waveio and which version of Volumio) in cas this could help.

diyaudio.com/forums/digital- … e-300.html

I am sure I read somewhere people for which this combo worked fine a few month ago.

Hi,

Nice to know! The OTG port is just a bypass, but your only way to go for the moment.
I’m really baffled by the fact, that the usb ports are such a limiting factor, will check this with HK.
Are you using anything else on it, wifi dongle, usb disk??

Wish I had one of those DACs here (or better, Hardkernel having one), because there are a few things we can try.
Eg. moving the handling of usb interrupts to another cpu, they have done that for usb dvb modules for LibreElec too.
Perhaps this could work for us too, interested trying this out?
Can you use gitter or wish to use whatsapp at a certain time of day (I can PM you my id)?

Hi again,

I already read that there was something wrong with the implementation of usb on the odroid C2 for which some usb dac were simply incompatible.

On the other hand I found a site about hi res audio and an user mentionned using the odroid c2 with the waveIO board without issue.

Whatsapp will be fine but it will be for tomorrow otherwise my wife will kill me :blush:

ps : to be sure I didn’t overload the usb with data the music comes from the network (only a few selected files from the actual library to be sure mpd doesn’t reset volumio at library update)

I’m not expert enough to judge the C2 usb implementation, can only help to get it solved or workable.
There are several platforms having difficulties with the WAVEIO DAC, a few don’t. I’m really surprised RPi3 (of all sorts) is one of them.

HK is really keen on knowing more, they suggested trying cpu affinity changes.
Don’t worry, I was more thinking of the weekend, whenever you have time Saturday or Sunday, your shout.

-Gé-

Whenever you have time, connect to a usb port and after playing a couple of minutes (with clicks and pops), do this:

cat /proc/interrupts

Notice all usb interrupts (63) are on cpu0, you are going to change that to cpu2
(root password = volumio)

su root echo 4 > /proc/irq/63/smp_affinity exit
(You can list the interrupts again to see they moved)

Pls. let me know if it made a difference…

Hi gkkpch,

First of all thank you as it is worknig fine now on a normal usb port.
In order to make the change permanent I created a script with the affinity settings and placed an execution command in /etc/rc.local
(there might be a ton of other possibilities to do that but at least it works !)

PS1 : after a few other attemps yesterday I noticed the same issue on the otg port too (after adding an usb keyboard to a usb port). So this solution was more than unstable or even unreplicable.

Gé, we need to put this script on autostart for odroid it seems… Or is something that HK will solve?

You beat me to it, I’m already working on it :laughing:
No, this is something I want to make sure it works, so we do it ourselves for the time being.
I will stay in contact with HK anyway for the root cause, changing cpu affinity surely is the right way to go for now, not sure if it is the only solution.
Meanwhile I think I’ll add it to rc.local, there is a call to a C1/C2 init script already so I can add it.

Thank you for your feedback, very much appreciated.
Yes, when I was testing this morning I got a ‘bad’ feeling because I could hear the difference in music quality switching to the otg port, though in my case (and I will check that) might be because my DAC did not get enough power ( should be powered externally anyway, but sofar always worked).
Back to the usb port, everything was fine (but I never had the usb audio problems as reported here, so take that with a little reserve).

I think changing usb interrupts from cpu0 to cpu2 this is the right way to go for the time being, I’ll add it to the C2 init script, which is being called from rc.local anyway (perhaps not in your version yet). As far as I can guess, this will not cause any regression for other users, seems a safe change.

-Gé-

-Gé

Hi,

Thanks again,

After an evening of music listening I had no clicks or pops with any format I tried up to 192khz 24 bits.

What a fantastic evening and a great fix :slight_smile:

Thanks for posting and try to fix this. Same problem here. The affinity fix works only, in my case, for 44.1khz-16bits files, but playing hi res files give me a lot of clicks and pops. I’m using the built in dac of the Parasound Halo Integrated (ESS Sabre32 Reference ES9018K2M, controlled by VIA VT1731, 384 kHz / 32-bit, usb2 controller). Apparently the fix works for the xmos interface, but not quite well for the Via VT1731. Any guess?
Thanks.

Could you please add this to “/etc/modprobe.d/alsa-base.conf” and tell me if it solves your issue?

options snd-usb-audio index=1 nrpacks=1

Thank you for your quick response. Adding “options snd-usb-audio index=1 nrpacks=1” give me no sound at all. The “volume options” tab in the WebUI says “undefinied” in “Mixer type” item, and the “Mixer control” item is empty. There is no option, in the graphic interface, to put any Mixer control, and the only option for Mixer type is “None”!

OK, then please remove index=1 from the line and try again.
Then if it works you might have to experiment a bit with nrpacks=x where x lower than 8 or try with a few values higher than 8 (10,12,20)