usb-audio: Fix invalid values in AudioControl descriptors
This fixes the invalid bInterfaceProtocol value 0x04 in the USB audio AudioControl descriptors. It should be zero. While Linux and Windows forgive this error, macOS 14 Sonoma does not. The usb-audio device does not appear in macOS sound settings even though the device is recognized and shows up in USB system information. According to the USB audio class specs 1.0-4.0, valid values are 0x00, 0x20, 0x30 and 0x40. (Note also that Linux prints the warning "unknown interface protocol 0x4, assuming v1", but then proceeds as if the value was zero.) This also fixes the invalid wTotalLength value in the multi-channel setup AudioControl interface header descriptor (used when multi=on and out.mixing-engine off). The combined length of all the descriptors there add up to 0x37, not 0x38. In Linux, "lsusb -D ..." displays incomplete descriptor information when this length is incorrect. Signed-off-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Reviewed-by: Volker Rümelin <vr_qemu@t-online.de> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
6af9d12c88
commit
8e0cd23f71
@ -124,7 +124,6 @@ static const USBDescIface desc_iface[] = {
|
|||||||
.bNumEndpoints = 0,
|
.bNumEndpoints = 0,
|
||||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||||
.bInterfaceProtocol = 0x04,
|
|
||||||
.iInterface = STRING_USBAUDIO_CONTROL,
|
.iInterface = STRING_USBAUDIO_CONTROL,
|
||||||
.ndesc = 4,
|
.ndesc = 4,
|
||||||
.descs = (USBDescOther[]) {
|
.descs = (USBDescOther[]) {
|
||||||
@ -282,7 +281,6 @@ static const USBDescIface desc_iface_multi[] = {
|
|||||||
.bNumEndpoints = 0,
|
.bNumEndpoints = 0,
|
||||||
.bInterfaceClass = USB_CLASS_AUDIO,
|
.bInterfaceClass = USB_CLASS_AUDIO,
|
||||||
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
.bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL,
|
||||||
.bInterfaceProtocol = 0x04,
|
|
||||||
.iInterface = STRING_USBAUDIO_CONTROL,
|
.iInterface = STRING_USBAUDIO_CONTROL,
|
||||||
.ndesc = 4,
|
.ndesc = 4,
|
||||||
.descs = (USBDescOther[]) {
|
.descs = (USBDescOther[]) {
|
||||||
@ -293,7 +291,7 @@ static const USBDescIface desc_iface_multi[] = {
|
|||||||
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
||||||
DST_AC_HEADER, /* u8 bDescriptorSubtype */
|
DST_AC_HEADER, /* u8 bDescriptorSubtype */
|
||||||
U16(0x0100), /* u16 bcdADC */
|
U16(0x0100), /* u16 bcdADC */
|
||||||
U16(0x38), /* u16 wTotalLength */
|
U16(0x37), /* u16 wTotalLength */
|
||||||
0x01, /* u8 bInCollection */
|
0x01, /* u8 bInCollection */
|
||||||
0x01, /* u8 baInterfaceNr */
|
0x01, /* u8 baInterfaceNr */
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user