@balaton
It doesn't work on a real C-Media device when passed to QEMU PPC AOS4.
The result is the same as with the -device usb-audio option.
Someone with a real Pegasos II or AmigaOne needs to let us know if this driver works for them.
I haven't tested it on QEMU Linux PPC.
EDIT:
Yes, you're right, I checked on emaculation.com. USB audio doesn't work on macOS X, only on macOS 9 – my mistake, sorry for the incorrect information.
https://gitlab.com/qemu-project/qemu/-/work_items/446https://www.emaculation.com/forum/viewtopic.php?p=81464#p81464EDIT2:
I ran a little experiment based on what you wrote
I added your patch to QEMU (QEMU version 9)
https://lists.nongnu.org/archive/html/ ... vel/2026-02/msg02357.html
-device pci-ohci -device usb-audio,bus=usb-bus.2,buffer=512,debug=1 -audio alsa
It looks like this in ‘qtree’
bus: pci.1
type PCI
dev: pci-ohci, id ""
masterbus = ""
num-ports = 3 (0x3)
firstport = 0 (0x0)
addr = 06.0
romfile = ""
romsize = 4294967295 (0xffffffff)
rombar = 1 (0x1)
multifunction = false
x-pcie-lnksta-dllla = true
x-pcie-extcap-init = true
failover_pair_id = ""
acpi-index = 0 (0x0)
x-pcie-err-unc-mask = true
x-pcie-ari-nextfn-1 = false
class USB controller, addr 00:06.0, pci id 106b:003f (sub 1af4:1100)
bar 0: mem at 0x8428c000 [0x8428c0ff]
bus: usb-bus.2
type usb-bus
dev: usb-audio, id ""
audiodev = "audiodev0"
debug = 1 (0x1)
buffer = 512 (0x200)
multi = false
port = ""
serial = ""
msos-desc = true
pcap = ""
addr 2.2, port 1, speed 12, name QEMU USB Audio Interface, attached
Debug output from AOS4 (the label ‘usb-audio’ comes from the QEMU driver debug output)
[USB] INFO | "USB Fkt Init" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "USB Fkt Init" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
[USB] INFO | "USB Fkt Init" | "Init Fkt" | [fkt 0x6fdd7150] Fkt ("","","") initialized
usb-audio: control transaction: request 0x8006 value 0x0200 index 0x0000 length 0x0009
usb-audio: control transaction: request 0x8006 value 0x0200 index 0x0000 length 0x0071
usb-audio: control transaction: request 0x0009 value 0x0001 index 0x0000 length 0x0000
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "USB FD Starter" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "USB FD Starter" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
[USB] INFO | "USB FD Starter" | "Bind FD" | Trying FD "usbaudio.usbfd" v1.0 for Ifc 0x694A1880
[usbaudio.usbfd] USB Audio device attached, refreshing AHI modes
[USBAudio] libExpunge: OpenCnt=0
[USB] INFO | "USB FD Starter" | "Sys_EndInitialAttachmentPhase" | Initial USB Attachment Phase terminated
[USB] INFO | "USB FD Starter" | "Bind FD" | Trying FD "usbaudio.usbfd" v1.0 for Ifc 0x694A1740
[USB] INFO | "USB FD Starter" | "Bind FD" | FD "usbaudio.usbfd" did not support Ifc 0x694A1740
[USB] INFO | "USB FD Starter" | "Bind FD" | No driver found for fkt 0x6fdd7150/ifc 0x694a1740 {Class 0
....
USBAudio] AHIsub_AllocAudio: entry
[USBAudio] scan: waiting for USB stack full-boot...
[USBAudio] wait_fullboot: subscribed for STACKFULLBOOTED (0x6FE45530)
[USBAudio] wait_fullboot: timeout (stack already booted)
[USBAudio] scan: USB stack ready
[USBAudio] scan: opening libusb-1.library...
[USBAudio] scan: OpenLibrary returned 0x656AAD68
[USBAudio] libusb-1.library opened OK
[USBAudio] prefs: reading ENVARC:USBAudio.prefs
[USBAudio] prefs: added 46F4:0002 = "QEMU USB Audio"
[USBAudio] prefs: loaded 1 user device(s)
[USBAudio] scan_usb_audio_device: entry (scanned=0, num_devs=0)
[USBAudio] scan: calling libusb_get_device_list...
[libusb-1] ensure_usbsys_open: opening usbsys.device...
[libusb-1] ensure_usbsys_open: OpenDevice OK
[USBAudio] libusb_get_device_list: cnt=5, list=0x65CC5D88
[USBAudio] Device 0: VID=0x0000 PID=0x0000 Class=0x09
[USBAudio] Device 0: hub, skipping
[USBAudio] Device 1: VID=0x46F4 PID=0x0002 Class=0x00
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Ifc 0 Alt 0: Class=0x01 Sub=0x01 NumEP=0
[USBAudio] => Audio Control found! Ifc=0
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Ifc 0 Alt 0: Class=0x08 Sub=0x06 NumEP=2
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Ifc 1 Alt 0: Class=0x01 Sub=0x02 NumEP=0
[USBAudio] => Audio Streaming (playback) found! Ifc=1
[libusb1] libusb_open: rawIfc=0x694A1740 lad_Interface=0x654B7070 rawFunc=0x6FDD7150
usb-audio: control transaction: request 0x8006 value 0x0200 index 0x0000 length 0x0009
usb-audio: control transaction: request 0x8006 value 0x0200 index 0x0000 length 0x0071
[USBAudio] enumerate: config total_len=113 for 46F4:0002
[USBAudio] enumerate: best play so far: 2ch alt=1 ep=0x01 maxpkt=192
[USBAudio] enumerate: output #0 "Front" alt=1 ep=0x01 ch=2 offset=0 maxpkt=192
[USBAudio] enumerate: output FU ID=2 (USB Streaming)
[USBAudio] enumerate: 1 outputs, 0 inputs, default out=#0
[USBAudio] USB Audio device #0 found: "QEMU USB Audio"
[USBAudio] VID=0x46F4 PID=0x0002 Iface=1 Alt=1
[USBAudio] EP=0x01 MaxPkt=192 2ch/16bit
[USBAudio] Device 2: VID=0x0000 PID=0x0000 Class=0x09
[USBAudio] Device 2: hub, skipping
[USBAudio] Device 3: VID=0x46F4 PID=0x0001 Class=0x00
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Ifc 0 Alt 0: Class=0x01 Sub=0x01 NumEP=0
[USBAudio] => Audio Control found! Ifc=0
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Ifc 0 Alt 0: Class=0x08 Sub=0x06 NumEP=2
[USBAudio] Ifc 0 Alt 0: Class=0x09 Sub=0x00 NumEP=1
[USBAudio] Device 3: no Audio Streaming interface
[USBAudio] Device 4: VID=0x0000 PID=0x0000 Class=0x09
[USBAudio] Device 4: hub, skipping
[USBAudio] scan_usb_audio_device: 1 device(s) found, default="QEMU USB Audio"
[USBAudio] flat output #0: "Front"
[USBAudio] scan: 1 total outputs, 0 total inputs
[USBAudio] AHIsub_AllocAudio: OK, VID=0x46F4 PID=0x0002
[USBAudio] AHIsub_Start: Flags=0x00000001
[USBAudio] AHIsub_Stop: Flags=0x00000001
[libusb1] libusb_open: rawIfc=0x694A1740 lad_Interface=0x654B7070 rawFunc=0x6FDD7150
[USBAudio] Start: open_device VID=0x46F4 PID=0x0002 => handle=0x6718B6E8
[USBAudio] discover_usb_audio_details: entry
[USBAudio] discover: output mode #0: Ifc=1 Alt=1 EP=0x01 MaxPkt=192 Ch=2 Bits=16
[USBAudio] discover: Output FU ID=2 AC Ifc=0
[USBAudio] discover: querying output volume range...
usb-audio: control transaction: request 0xa182 value 0x0200 index 0x0200 length 0x0002
usb-audio: fail: get control
usb-audio: failed control transaction: request 0xa182 value 0x0200 index 0x0200 length 0x0002
usb-audio: control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
usb-audio: failed control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
[USBAudio] discover: GET_MIN volume failed (-9), disabling volume queries
[USBAudio] discover: no input Feature Unit, input gain not available
[USBAudio] Start: after discover => EP=0x01 Ifc=1 Alt=1 MaxPkt=192 Ch=2 Sub=2
[libusb1] claim_interface(1): rawIfc=0x694A1740 lad_Interface=0x654B7070
[libusb1] claim_interface: USBGetEndPoint(0x01) after claim(alt=0) => 0x00000000
[USBAudio] Start: claim_interface(1) => 0
[USBAudio] Start: calling set_alt_setting(1, 1)...
[libusb1] set_alt_setting(1,1): lad_Interface=0x654B7070 rawIfc=0x694A1740
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "Sound" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x010b value 0x0001 index 0x0001 length 0x0000
usb-audio: set interface 1
[libusb1] set_alt_setting: USBIntSetAltSettingA stat=1
[libusb1] set_alt_setting: declaiming for re-claim...
[libusb1] set_alt_setting: rawIfc after SetAlt: ifc=1 alt=1 numEP=1
[libusb1] set_alt_setting: re-claim rawIfc=0x694A1740 => lad_Interface=0x654B7070
[libusb1] set_alt_setting: USBGetEndPoint(NULL, ifc, 0x01)=0x657EA7B0
[libusb1] set_alt_setting: FOUND EP OUT 0x00 => 0x6FF45910
[libusb1] set_alt_setting: FOUND EP OUT 0x01 => 0x657EA7B0
[libusb1] set_alt_setting: brute-force scan complete
[USBAudio] Start: set_alt_setting => 0
[USBAudio] Start: setting sample rate 11025 Hz on EP 0x01
usb-audio: control transaction: request 0x2201 value 0x0100 index 0x0001 length 0x0003
usb-audio: failed control transaction: request 0x2201 value 0x0100 index 0x0001 length 0x0003
usb-audio: control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
usb-audio: failed control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
[USBAudio] Start: SET_CUR sample rate failed: -9
[USBAudio] Start: waiting for slave to signal alive...
[USBAudio] PlaySlave: entry, AudioCtrl=0x656AA440
[USBAudio] PlaySlave: EP=0x01 MaxPkt=192 Channels=2 SubSz=2
[USBAudio] PlaySlave: got UsbEndPoint 0x657EA7B0 for EP 0x01
[USBAudio] PlaySlave: cachedFrames=2 maxXferSize=192 xfersPerFrame=1
[USBAudio] PlaySlave: frameSize=4 baseSamples=11 fracNum=25/1000 framesPerIOR=8 iorCount=2
[USBAudio] PlaySlave: allocated 2 IORequests (1536 bytes, 8 subXfers each)
[USBAudio] PlaySlave: first mix produced 880 bytes
[USBAudio] PlaySlave: all 2 IORequests launched
[USBAudio] Start: slave alive, playback running
[USBAudio] AHIsub_Start: OK
Isochronous transfer had error 0x8
[USBAudio] AHIsub_Stop: Flags=0x00000001
[USBAudio] PlaySlave: exiting (loops=200 xfer_errors=0)
[USBAudio] Stop: waiting 500ms for USB stack to settle...
[USBAudio] Stop: set_alt_setting(1, 0)...
[libusb1] set_alt_setting(1,0): lad_Interface=0x654B7070 rawIfc=0x694A1740
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "Sound" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x010b value 0x0000 index 0x0001 length 0x0000
usb-audio: set interface 0
[libusb1] set_alt_setting: USBIntSetAltSettingA stat=1
[libusb1] set_alt_setting: declaiming for re-claim...
[libusb1] set_alt_setting: rawIfc after SetAlt: ifc=1 alt=0 numEP=0
[libusb1] set_alt_setting: re-claim rawIfc=0x694A1740 => lad_Interface=0x654B7070
[libusb1] set_alt_setting: USBGetEndPoint(NULL, ifc, 0x01)=0x00000000
[libusb1] set_alt_setting: FOUND EP OUT 0x00 => 0x6FF45910
[libusb1] set_alt_setting: brute-force scan complete
[USBAudio] Stop: release_interface(1)...
[USBAudio] Stop: closing device...
[USBAudio] Stop: device closed OK
[USBAudio] AHIsub_Stop: Flags=0x00000003
[USBAudio] Stop: stopping recording
[USBAudio] AHIsub_FreeAudio
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x80000073 Arg=0 Def=1
[USBAudio] GetAttr: Attr=0x8000006F Arg=0 Def=128
[USBAudio] GetAttr: Attr=0x80000088 Arg=0 Def=0
[USBAudio] GetAttr: Attr=0x8000008B Arg=0 Def=1
[USBAudio] GetAttr: Attr=0x80000082 Arg=0 Def=0
[USBAudio] GetAttr: Attr=0x80000083 Arg=0 Def=0
[USBAudio] GetAttr: Attr=0x80000084 Arg=0 Def=65536
[USBAudio] GetAttr: Attr=0x80000085 Arg=0 Def=65536
[USBAudio] GetAttr: Attr=0x80000086 Arg=0 Def=65536
[USBAudio] GetAttr: Attr=0x80000087 Arg=0 Def=65536
[USBAudio] GetAttr: Attr=0x8000007C Arg=48000 Def=0
[USBAudio] GetAttr: Attr=0x8000007D Arg=0 Def=0
[USBAudio] GetAttr: Attr=0x80000076 Arg=0 Def=1721506440
[USBAudio] GetAttr: Attr=0x80000077 Arg=0 Def=1721506440
[USBAudio] GetAttr: Attr=0x80000078 Arg=0 Def=1721506440
[USBAudio] GetAttr: Attr=0x80000072 Arg=0 Def=0
[USBAudio] GetAttr: Attr=0x80000081 Arg=0 Def=0
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x80000086 Arg=0 Def=65536
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x80000082 Arg=0 Def=0
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x80000084 Arg=0 Def=65536
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x80000075 Arg=1 Def=0
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x8000008A Arg=-1 Def=1766412296
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x8000008D Arg=0 Def=1766412296
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] GetAttr: Attr=0x8000006E Arg=0 Def=0
[USBAudio] libOpen: version=2, our VERSION=2
[USBAudio] libOpen: OK, OpenCnt=1
[USBAudio] AHIsub_AllocAudio: entry
[USBAudio] AHIsub_AllocAudio: OK, VID=0x46F4 PID=0x0002
[USBAudio] AHIsub_Start: Flags=0x00000001
[USBAudio] AHIsub_Stop: Flags=0x00000001
[libusb1] libusb_open: rawIfc=0x694A1740 lad_Interface=0x6FE43D60 rawFunc=0x6FDD7150
[USBAudio] Start: open_device VID=0x46F4 PID=0x0002 => handle=0x66599F98
[USBAudio] discover_usb_audio_details: entry
[USBAudio] discover: output mode #0: Ifc=1 Alt=1 EP=0x01 MaxPkt=192 Ch=2 Bits=16
[USBAudio] discover: Output FU ID=2 AC Ifc=0
[USBAudio] discover: skipping volume queries (previously failed)
[USBAudio] discover: no input Feature Unit, input gain not available
[USBAudio] Start: after discover => EP=0x01 Ifc=1 Alt=1 MaxPkt=192 Ch=2 Sub=2
[libusb1] claim_interface(1): rawIfc=0x694A1740 lad_Interface=0x6FE43D60
[libusb1] claim_interface: USBGetEndPoint(0x01) after claim(alt=0) => 0x00000000
[USBAudio] Start: claim_interface(1) => 0
[USBAudio] Start: calling set_alt_setting(1, 1)...
[libusb1] set_alt_setting(1,1): lad_Interface=0x6FE43D60 rawIfc=0x694A1740
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "Sound" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x010b value 0x0001 index 0x0001 length 0x0000
usb-audio: set interface 1
[libusb1] set_alt_setting: USBIntSetAltSettingA stat=1
[libusb1] set_alt_setting: declaiming for re-claim...
[libusb1] set_alt_setting: rawIfc after SetAlt: ifc=1 alt=1 numEP=1
[libusb1] set_alt_setting: re-claim rawIfc=0x694A1740 => lad_Interface=0x6FE43D60
[libusb1] set_alt_setting: USBGetEndPoint(NULL, ifc, 0x01)=0x66264E90
[libusb1] set_alt_setting: FOUND EP OUT 0x00 => 0x6FF45910
[libusb1] set_alt_setting: FOUND EP OUT 0x01 => 0x66264E90
[libusb1] set_alt_setting: brute-force scan complete
[USBAudio] Start: set_alt_setting => 0
[USBAudio] Start: setting sample rate 11025 Hz on EP 0x01
usb-audio: control transaction: request 0x2201 value 0x0100 index 0x0001 length 0x0003
usb-audio: failed control transaction: request 0x2201 value 0x0100 index 0x0001 length 0x0003
usb-audio: control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
usb-audio: failed control transaction: request 0x0201 value 0x0000 index 0x0000 length 0x0000
[USBAudio] Start: SET_CUR sample rate failed: -9
[USBAudio] Start: waiting for slave to signal alive...
[USBAudio] PlaySlave: entry, AudioCtrl=0x69452580
[USBAudio] PlaySlave: EP=0x01 MaxPkt=192 Channels=2 SubSz=2
[USBAudio] PlaySlave: got UsbEndPoint 0x66264E90 for EP 0x01
[USBAudio] PlaySlave: cachedFrames=2 maxXferSize=192 xfersPerFrame=1
[USBAudio] PlaySlave: frameSize=4 baseSamples=11 fracNum=25/1000 framesPerIOR=8 iorCount=2
[USBAudio] PlaySlave: allocated 2 IORequests (1536 bytes, 8 subXfers each)
[USBAudio] PlaySlave: first mix produced 880 bytes
[USBAudio] PlaySlave: all 2 IORequests launched
[USBAudio] Start: slave alive, playback running
[USBAudio] AHIsub_Start: OK
[USBAudio] AHIsub_Stop: Flags=0x00000001
[USBAudio] PlaySlave: exiting (loops=190 xfer_errors=0)
[USBAudio] Stop: waiting 500ms for USB stack to settle...
[USBAudio] Stop: set_alt_setting(1, 0)...
[libusb1] set_alt_setting(1,0): lad_Interface=0x6FE43D60 rawIfc=0x694A1740
usb-audio: control transaction: request 0x8006 value 0x0300 index 0x0000 length 0x00ff
[USB] INFO | "Sound" | "SetFktLanguageID" | [fkt 0x6fdd7150] Fkt has no languages
usb-audio: control transaction: request 0x010b value 0x0000 index 0x0001 length 0x0000
usb-audio: set interface 0
[libusb1] set_alt_setting: USBIntSetAltSettingA stat=1
[libusb1] set_alt_setting: declaiming for re-claim...
[libusb1] set_alt_setting: rawIfc after SetAlt: ifc=1 alt=0 numEP=0
[libusb1] set_alt_setting: re-claim rawIfc=0x694A1740 => lad_Interface=0x6FE43D60
[libusb1] set_alt_setting: USBGetEndPoint(NULL, ifc, 0x01)=0x00000000
[libusb1] set_alt_setting: FOUND EP OUT 0x00 => 0x6FF45910
[libusb1] set_alt_setting: brute-force scan complete
[USBAudio] Stop: release_interface(1)...
[USBAudio] Stop: closing device...
[USBAudio] Stop: device closed OK
[USBAudio] AHIsub_Stop: Flags=0x00000003
[USBAudio] Stop: stopping recording
[USBAudio] AHIsub_FreeAudio
Something’s alive and kicking – it’s a bit of a nightmare, but I can see the driver is communicating with the USB audio and nothing’s freezing up. I don’t think I can hear any sound, though.
It’s just an experiment, of course

EDIT3:
‘device usb-audio’ works under QEMU Linux PPC (slight audio distortion)
screen - >
https://ibb.co/JRxmbnp9screen (ohci) ->
https://ibb.co/0jXH2H7Hscreen (so everything’s in one place) virtio net, that works too ->
https://ibb.co/NdWWt0kb
Edited by smarkusg on 2026/3/19 7:34:07
Edited by smarkusg on 2026/3/19 11:31:36
Edited by smarkusg on 2026/3/19 13:42:59
Edited by smarkusg on 2026/3/19 13:43:29
Edited by smarkusg on 2026/3/19 13:59:43
Edited by smarkusg on 2026/3/19 14:31:39