Allo USBridge Signature AX88179 Driver

Hi,
my 2 cents on this.

Raspberry PI until version 3 has a very flaky implementation of the USB Bus. This results in USB packets dropping (the clicks you hear) in case it receives a lot of data. This happens especially in one specific circumstance: big files which are received via network (both LAN and WI-FI are connected via USB) and played to an USB DAC.

This situation creates an high bandwith flow of data which the PI3 (and CM3 used in USBridge signature) cannot handle, dropping packets and resulting in noise and clicks.

This also explains why you don’t have any via I2S (USB is used only to receive data, not to play it).

I personally know very well this issue since I fought against it for years (until PI4 came out) and I managed to slightly improve it by tweaking the IRQ scheduler and other kernel parameters. However up to a certain degree, since there’s a variance in USB DACs that make them behave differently (specifically, they require different packet sizes, which have an impact on the issue). This means that with a specific USB DAC it might work very well, and with another one might be unlistenable.

In my opinion, this has been a design flaw on Allo’s part since the inception of USB Bridge. They knew about this issue, and this is why they designed it with a different NIC to not have this issue. However, for this to work they needed to include (manually) a specific driver. They could have done the right thing and ask the kernel mantainers to include it, but rather they preferred to manually apply the fix.
This could have worked if they would have actively supported all the distributions using it, but apparently they stopped doing now.

Then, why does it work on Moode and not Volumio? I believe that this is because moode uses an older kernel than us (the kernel we use now is very recent, in order to support PI5) and they maybe manually patch the driver.

Will Volumio patch the driver? NO. This is not something we should do and we want to. But if any of the community is willing to jump in and help, this is what needs to be done:

  • Check the repo where we build the OS:
    GitHub - volumio/volumio3-os
  • Checkwhich kernel we use (on a regular basis) and compile the module required and host it somewhere. We use this place to store our artifacts:
    GitHub - volumio/volumio3-os-static-assets
  • Send a PR to volumio3-os to install it at build time
  • Take the committment to mantain it, when we update the kernel

Hope this explains the whole situation and hopefully motivates someone to jump in and help on this