Figured I'd checkout the actual armbian image using https://redirect.armbian.com/region/NA/orangepipc/Jammy_current
Just FYI, same thing hapeens on armbian... p_* and c_* settings are switched. e.g., setting the playback channel mask to 0x3f (5.1; 6 channels) actually sets the channel mask for what the host enumerates as the capture endpoint so you get a 6-channel microphone.
armbian-monitor -u
https://paste.armbian.com/yadagozohu
configfs configuration script
#!/bin/bash
set -x
# Set up the environment
modprobe libcomposite
cd /sys/kernel/config/usb_gadget/
# Create a new USB gadget
GADGET_DIR="g1"
mkdir -p $GADGET_DIR
cd $GADGET_DIR
# Set basic USB device settings
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0101 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "serialnumber" > strings/0x409/serialnumber
echo "Me Ltd." > strings/0x409/manufacturer
echo "My UAC1 Gadget" > strings/0x409/product
# Create a configuration
mkdir -p configs/c.1
mkdir -p configs/c.1/strings/0x409
echo "Configuration 1" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add the UAC1 function with specific audio parameters
UAC1_DIR="functions/uac1.usb0"
mkdir -p $UAC1_DIR
echo 0x3f > $UAC1_DIR/p_chmask # 1 for mono, 3 for stereo
echo 48000 > $UAC1_DIR/p_srate
echo 4 > $UAC1_DIR/p_ssize
# # Capture settings: Mono, 48000 Hz, 16-bit
echo 0x3 > $UAC1_DIR/c_chmask # 1 for mono, 3 for stereo
echo 48000 > $UAC1_DIR/c_srate
echo 4 > $UAC1_DIR/c_ssize
# Bind the UAC1 function to the configuration
ln -s $UAC1_DIR configs/c.1/
# Enable the gadget
ls /sys/class/udc > UDC
echo "USB Gadget configured."
USB Descriptors enumerated on Windows
=========================== USB Port2 ===========================
Connection Status : 0x01 (Device is connected)
Port Chain : 2-4-2-2
========================== Summary =========================
Vendor ID : 0x1D6B (The Linux Foundation)
Product ID : 0x0101
USB Version : 2.0
Port maximum Speed : High-Speed
Device maximum Speed : High-Speed
Device Connection Speed : High-Speed
Self powered : no
Demanded Current : 250 mA
Used Endpoints : 2
======================== USB Device ========================
+++++++++++++++++ Device Information ++++++++++++++++++
Device Description : USB Composite Device
Device Path : \\?\USB#VID_1D6B&PID_0101#serialnumber#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Kernel Name : \Device\USBPDO-16
Device ID : USB\VID_1D6B&PID_0101\SERIALNUMBER
Hardware IDs : USB\VID_1D6B&PID_0101&REV_0100 USB\VID_1D6B&PID_0101
Driver KeyName : {36fc9e60-c465-11cf-8056-444553540000}\0042 (GUID_DEVCLASS_USB)
Driver : \SystemRoot\System32\drivers\usbccgp.sys (Version: 10.0.22621.1194 Date: 2023-02-16)
Driver Inf : C:\Windows\inf\usb.inf
Legacy BusType : PNPBus
Class : USB
Class GUID : {36fc9e60-c465-11cf-8056-444553540000} (GUID_DEVCLASS_USB)
Service : usbccgp
Enumerator : USB
Location Info : Port_#0002.Hub_#0005
Location IDs : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(2)#USB(2), ACPI(_SB_)#ACPI(PC00)#ACPI(XHCI)#ACPI(RHUB)#ACPI(HS04)#USB(2)#USB(2)
Container ID : {4ce02247-74d0-5cd6-b2ee-4a880a757088}
Manufacturer Info : (Standard USB Host Controller)
Capabilities : 0x94 (Removable, UniqueID, SurpriseRemovalOK)
Status : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code : 0
Address : 2
HcDisableSelectiveSuspend: 0
EnableSelectiveSuspend : 0
SelectiveSuspendEnabled : 0
EnhancedPowerMgmtEnabled : 0
IdleInWorkingState : 0
WakeFromSleepState : 0
Power State : D0 (supported: D0, D2, D3, wake from D0, wake from D2)
Child Device 1 : AC Interface (USB Audio Device)
Device Path 1 : \\?\USB#VID_1D6B&PID_0101&MI_00#8&184ce4f3&0&0000#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\global (AM_KSCATEGORY_AUDIO)
Device Path 2 : \\?\USB#VID_1D6B&PID_0101&MI_00#8&184ce4f3&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global (AM_KSCATEGORY_CAPTURE)
Device Path 3 : \\?\USB#VID_1D6B&PID_0101&MI_00#8&184ce4f3&0&0000#{65e8773e-8f56-11d0-a3b9-00a0c9223196}\global (AM_KSCATEGORY_RENDER)
Kernel Name : \Device\00000dd9
Device ID : USB\VID_1D6B&PID_0101&MI_00\8&184CE4F3&0&0000
Class : MEDIA
Driver KeyName : {4d36e96c-e325-11ce-bfc1-08002be10318}\0019 (GUID_DEVCLASS_MEDIA)
Service : usbaudio
Location : 0000.0014.0000.004.002.002.000.000.000
LocationPaths : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(2)#USB(2)#USBMI(0) PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(2)#USB(2)#USB(2) ACPI(_SB_)#ACPI(PC00)#ACPI(XHCI)#ACPI(RHUB)#ACPI(HS04)#USB(2)#USB(2)#USBMI(0) ACPI(_SB_)#ACPI(PC00)#ACPI(XHCI)#ACPI(RHUB)#ACPI(HS04)#USB(2)#USB(2)#USB(2)
Child Device 1 : Speakers (5- AC Interface) (Audio Endpoint)
Device ID : SWD\MMDEVAPI\{0.0.0.00000000}.{CBD53598-1B0C-4348-A8DC-9D0E1E971B9E}
Class : AudioEndpoint
Driver KeyName : {c166523c-fe0c-4a94-a586-f1a80cfbbf3e}\0056 (AUDIOENDPOINT_CLASS_UUID)
Child Device 2 : Capture Input terminal (5- AC Interface) (Audio Endpoint)
Device ID : SWD\MMDEVAPI\{0.0.1.00000000}.{5B1781AE-C053-4604-A488-8D1C3203C210}
Class : AudioEndpoint
Driver KeyName : {c166523c-fe0c-4a94-a586-f1a80cfbbf3e}\0055 (AUDIOENDPOINT_CLASS_UUID)
+++++++++++++++++ Registry USB Flags +++++++++++++++++
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\1D6B01010100
osvc : REG_BINARY 00 00
---------------- Connection Information ---------------
Connection Index : 0x02 (Port 2)
Connection Status : 0x01 (DeviceConnected)
Current Config Value : 0x01 (Configuration 1)
Device Address : 0x1C (28)
Is Hub : 0x00 (no)
Device Bus Speed : 0x02 (High-Speed)
Number Of Open Pipes : 0x01 (1 pipe to data endpoints)
Pipe[0] : EndpointID=1 Direction=IN ScheduleOffset=0 Type=Interrupt wMaxPacketSize=0x2 bInterval=4 -> 140 Bits/ms = 17500 Bytes/s
Data (HexDump) : 02 00 00 00 12 01 00 02 00 00 00 40 6B 1D 01 01 ...........@k...
00 01 01 02 03 01 01 02 00 1C 00 01 00 00 00 01 ................
00 00 00 07 05 81 03 02 00 04 00 00 00 00 ..............
--------------- Connection Information V2 -------------
Connection Index : 0x02 (2)
Length : 0x10 (16 bytes)
SupportedUsbProtocols : 0x03
Usb110 : 1 (yes, port supports USB 1.1)
Usb200 : 1 (yes, port supports USB 2.0)
Usb300 : 0 (no, port not supports USB 3.0)
ReservedMBZ : 0x00
Flags : 0x00
DevIsOpAtSsOrHigher : 0 (Device is not operating at SuperSpeed or higher)
DevIsSsCapOrHigher : 0 (Device is not SuperSpeed capable or higher)
DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
DevIsSsPlusCapOrHigher : 0 (Device is not SuperSpeedPlus capable or higher)
ReservedMBZ : 0x00
Data (HexDump) : 02 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00 ................
---------------------- Device Descriptor ----------------------
bLength : 0x12 (18 bytes)
bDescriptorType : 0x01 (Device Descriptor)
bcdUSB : 0x200 (USB Version 2.0)
bDeviceClass : 0x00 (defined by the interface descriptors)
bDeviceSubClass : 0x00
bDeviceProtocol : 0x00
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x1D6B (The Linux Foundation)
idProduct : 0x0101
bcdDevice : 0x0100
iManufacturer : 0x01 (String Descriptor 1)
Language 0x0409 : "Me Ltd."
iProduct : 0x02 (String Descriptor 2)
Language 0x0409 : "My UAC1 Gadget"
iSerialNumber : 0x03 (String Descriptor 3)
Language 0x0409 : "serialnumber"
bNumConfigurations : 0x01 (1 Configuration)
Data (HexDump) : 12 01 00 02 00 00 00 40 6B 1D 01 01 00 01 01 02 .......@k.......
03 01 ..
------------------ Configuration Descriptor -------------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x02 (Configuration Descriptor)
wTotalLength : 0x00D7 (215 bytes)
bNumInterfaces : 0x03 (3 Interfaces)
bConfigurationValue : 0x01 (Configuration 1)
iConfiguration : 0x04 (String Descriptor 4)
Language 0x0409 : "Configuration 1"
bmAttributes : 0x80
D7: Reserved, set 1 : 0x01
D6: Self Powered : 0x00 (no)
D5: Remote Wakeup : 0x00 (no)
D4..0: Reserved, set 0 : 0x00
MaxPower : 0x7D (250 mA)
Data (HexDump) : 09 02 D7 00 03 01 04 80 7D 09 04 00 00 01 01 01 ........}.......
00 05 0A 24 01 00 01 56 00 02 01 02 0C 24 02 01 ...$...V.....$..
01 01 00 02 03 00 07 06 09 24 03 03 01 03 00 05 .........$......
08 0D 24 06 05 01 02 03 00 00 00 00 00 0D 0C 24 ..$............$
02 02 01 02 00 06 3F 00 0A 09 09 24 03 04 01 01 ......?....$....
00 06 0B 15 24 06 06 02 02 03 00 00 00 00 00 00 ....$...........
00 00 00 00 00 00 00 0C 07 05 81 03 02 00 04 09 ................
04 01 00 00 01 02 00 0E 09 04 01 01 01 01 02 00 ................
0F 07 24 01 01 01 01 00 0B 24 02 01 02 04 20 01 ..$......$.... .
80 BB 00 09 05 01 09 C8 00 04 00 00 07 25 01 01 .............%..
01 01 00 09 04 02 00 00 01 02 00 10 09 04 02 01 ................
01 01 02 00 11 07 24 01 04 01 01 00 0B 24 02 01 ......$......$..
06 04 20 01 80 BB 00 09 05 82 05 C8 00 04 00 00 .. .............
07 25 01 01 00 00 00 .%.....
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x00 (Interface 0)
bAlternateSetting : 0x00
bNumEndpoints : 0x01 (1 Endpoint)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x01 (Audio Control)
bInterfaceProtocol : 0x00
iInterface : 0x05 (String Descriptor 5)
Language 0x0409 : "AC Interface"
Data (HexDump) : 09 04 00 00 01 01 01 00 05 .........
------ Audio Control Interface Header Descriptor ------
bLength : 0x0A (10 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x01 (Header)
bcdADC : 0x0100
wTotalLength : 0x0056 (86 bytes)
bInCollection : 0x02
baInterfaceNr[1] : 0x01
baInterfaceNr[2] : 0x02
Data (HexDump) : 0A 24 01 00 01 56 00 02 01 02 .$...V....
------- Audio Control Input Terminal Descriptor -------
bLength : 0x0C (12 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x02 (Input Terminal)
bTerminalID : 0x01
wTerminalType : 0x0101 (USB Streaming)
bAssocTerminal : 0x00
bNrChannels : 0x02 (2 channels)
wChannelConfig : 0x0003 (L, R)
iChannelNames : 0x07 (String Descriptor 7)
Language 0x0409 : "Playback Channels"
iTerminal : 0x06 (String Descriptor 6)
Language 0x0409 : "Playback Input terminal"
Data (HexDump) : 0C 24 02 01 01 01 00 02 03 00 07 06 .$..........
------- Audio Control Output Terminal Descriptor ------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x03 (Output Terminal)
bTerminalID : 0x03
wTerminalType : 0x0301 (Speaker)
bAssocTerminal : 0x00 (0)
bSourceID : 0x05 (5)
iTerminal : 0x08 (String Descriptor 8)
Language 0x0409 : "Playback Output terminal"
Data (HexDump) : 09 24 03 03 01 03 00 05 08 .$.......
-------- Audio Control Feature Unit Descriptor --------
bLength : 0x0D (13 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x06 (Feature Unit)
bUnitID : 0x05 (5)
bSourceID : 0x01 (1)
bControlSize : 0x02 (2 bytes per control)
bmaControls[0] : 0x03, 0x00
D0: Mute : 1
D1: Volume : 1
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
D8: Bass Boost : 0
D9: Loudness : 0
D10: Reserved : 0
D11: Reserved : 0
D12: Reserved : 0
D13: Reserved : 0
D14: Reserved : 0
D15: Reserved : 0
bmaControls[1] : 0x00, 0x00
D0: Mute : 0
D1: Volume : 0
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
D8: Bass Boost : 0
D9: Loudness : 0
D10: Reserved : 0
D11: Reserved : 0
D12: Reserved : 0
D13: Reserved : 0
D14: Reserved : 0
D15: Reserved : 0
bmaControls[2] : 0x00, 0x00
D0: Mute : 0
D1: Volume : 0
D2: Bass : 0
D3: Mid : 0
D4: Treble : 0
D5: Graphic Equalizer : 0
D6: Automatic Gain : 0
D7: Delay : 0
D8: Bass Boost : 0
D9: Loudness : 0
D10: Reserved : 0
D11: Reserved : 0
D12: Reserved : 0
D13: Reserved : 0
D14: Reserved : 0
D15: Reserved : 0
iFeature : 0x0D (String Descriptor 13)
Language 0x0409 : "Playback Volume"
Data (HexDump) : 0D 24 06 05 01 02 03 00 00 00 00 00 0D .$...........
------- Audio Control Input Terminal Descriptor -------
bLength : 0x0C (12 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x02 (Input Terminal)
bTerminalID : 0x02
wTerminalType : 0x0201 (Microphone)
bAssocTerminal : 0x00
bNrChannels : 0x06 (6 channels)
wChannelConfig : 0x003F (L, R, C, LFE, LS, RS)
iChannelNames : 0x0A (String Descriptor 10)
Language 0x0409 : "Capture Channels"
iTerminal : 0x09 (String Descriptor 9)
Language 0x0409 : "Capture Input terminal"
Data (HexDump) : 0C 24 02 02 01 02 00 06 3F 00 0A 09 .$......?...
------- Audio Control Output Terminal Descriptor ------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype : 0x03 (Output Terminal)
bTerminalID : 0x04
wTerminalType : 0x0101 (USB Streaming)
bAssocTerminal : 0x00 (0)
bSourceID : 0x06 (6)
iTerminal : 0x0B (String Descriptor 11)
Language 0x0409 : "Capture Output terminal"
Data (HexDump) : 09 24 03 04 01 01 00 06 0B .$.......
USB Descriptors enumerated on macOS
Playback Inactive:
Default Output Device: Yes
Default System Output Device: Yes
Manufacturer: Me Ltd.
Output Channels: 2
Current SampleRate: 48000
Transport: USB
Output Source: Default
Capture Inactive:
Input Channels: 6
Manufacturer: Me Ltd.
Current SampleRate: 48000
Transport: USB
Input Source: Default