Re: Assistance getting the Universal Audio Apollo Solo USB to work with Linux

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, May 11, 2024 at 08:07:33PM +0000, Ethin Probst wrote:
> Hi everyone,

Please have your mail program wrap lines after 72 columns or so for this 
mailing list.

> I recently acquired a Universal Audio Apollo Solo USB audio interface 
> and am curious about getting it to work with Linux. There are no 
> official drivers, but I'm hoping that we can at least get the audio 
> interface part of it working. The Apollo Solo is a professional audio 
> audio interface with an onboard DSP engine and audio interface. It 
> doesn't quite conform to the UAC, but it does present 
> input/output/clock source terminals via audio class descriptors. Or, 
> rather, it does... On Windows, anyway.
> 
> And this is where everything gets confusing, so I hope I'm explaining 
> everything properly.
> 
> When the device is plugged into a machine that doesn't have Universal 
> Audio's special drivers installed, it presents itself as a Cypress 
> WestBridge, vendor ID 2b5a and product ID 000c. However, when the 
> drivers are installed, the drivers do something I'm struggling to 
> identify to "boot" the device and many things change. When it's in 
> it's "special boot mode" (or whatever you'd like to call it) it runs 
> at USB 2.0 speeds and presents a significantly different device 
> descriptor:
> 
>     bLength: 18
>     bDescriptorType: 0x01 (DEVICE)
>     bcdUSB: 0x0200
>     bDeviceClass: Device (0x00)
>     bDeviceSubClass: 0
>     bDeviceProtocol: 0 (Use class code info from Interface Descriptors)
>     bMaxPacketSize0: 64
>     idVendor: Unknown (0x2b5a)
>     idProduct: Unknown (0x000c)
>     bcdDevice: 0x0100
>     iManufacturer: 1
>     iProduct: 2
>     iSerialNumber: 3
>     bNumConfigurations: 1
> 
> However, when it's booted, the device descriptor is:
> 
>     bLength: 18
>     bDescriptorType: 0x01 (DEVICE)
>     bcdUSB: 0x0320
>     bDeviceClass: Miscellaneous (0xef)
>     bDeviceSubClass: 2
>     bDeviceProtocol: 1 (Interface Association Descriptor)
>     bMaxPacketSize0: 9
>     idVendor: Unknown (0x2b5a)
>     idProduct: Unknown (0x000d)
>     bcdDevice: 0x0000
>     iManufacturer: 1
>     iProduct: 2
>     iSerialNumber: 3
>     bNumConfigurations: 1
> 
> Through careful analysis of the firmware (which ships with the drivers 
> and doesn't need us to dump it manually), I believe the onboard board 
> is a Cypress (now Infineon) EZ-USB 3.0 FX3, hence Linux identifying it 
> as a "Cypress WestBridge". The MCU is an ARM processor, though I am 
> not certain which ISA revision it uses.
> 
> When plugged in and in it's boot mode, Linux is able to extract the 
> first device descriptor above, but is unable to enumerate the device:
> 
> [   61.091703] usb 3-3: new high-speed USB device number 4 using xhci_hcd
> [   61.299491] usb 3-3: New USB device found, idVendor=2b5a, idProduct=000c, bcdDevice= 1.00
> [   61.299502] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> [   61.299505] usb 3-3: Product: WestBridge 
> 
> [   61.299508] usb 3-3: Manufacturer: Cypress
> [   61.299510] usb 3-3: SerialNumber: 0000000004BE
> [   66.674005] usb usb2-port1: attempt power cycle
> [   75.107555] usb usb2-port1: unable to enumerate USB device
> 
> If I try to force-bind the driver, this of course fails:
> 
> [  220.383312] usbcore: registered new interface driver snd-usb-audio
> [  257.877076] usb 3-3: cannot find UAC_HEADER
> [  257.877401] snd-usb-audio: probe of 3-3:1.0 failed with error -22
> 
> However, when plugged in and I'm booted into Windows, and then I 
> reboot into Linux without powering off the device (such that it 
> remains in it's normal mode that Windows sets it up in), the 
> snd-usb-audio driver is able to enumerate the device but can't figure 
> out the sample rates:
> 
> [  100.447871] usb 2-1: reset SuperSpeed USB device number 2 using xhci_hcd
> [  100.464845] usb 2-1: LPM exit latency is zeroed, disabling LPM.
> [  100.467241] usb 2-1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 128)
> [  100.467444] usb 2-1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 128)
> [  100.467798] usb 2-1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 128)
> [  100.468047] usb 2-1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 128)
> [  100.468249] usb 2-1: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 128)
> 
> So, what I crucially couldn't figure out -- and what I still don't 
> precisely know -- is what Windows does that Linux does not which 
> causes the device to boot up and present itself appropriately as a USB 
> audio device, at least basically.

Most likely, Windows sends some firmware to the device (which it needs 
in order to run properly) and then restarts the device.

Alan Stern




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux