This article provides how to use the USB 2.0 Gadget Audio on SP7350 board which makes the board as an audio card.
Hardware Configuration
Kernel Setup
Enter kernel configuration
# cd ./linux/kernel # make menuconfig
Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture. Select [*] for “PCM timer interface“.
Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture > USB sound devices. Select <*> for “USB Audio/MIDI driver“.
Select submenus : Device Drivers > USB support > USB support > USB Gadget Support > USB Peripheral Controller. Select <*> for “Sunplus USB 2.0 Device Controller“.
Select submenus : Device Drivers > USB support > USB support > USB Gadget Support. Select <*> for “USB Gadget functions configurable through configfs“, [*] for “Function filesystem (FunctionFS)” and [*] for “Audio Class 1.0“.
ConfigFS
Configure UAC gadget through configfs saved as a file named setup_uac.
#!/bin/sh CONFIGFS_HOME=/sys/kernel/config VID=0xabcd PID=0x1234 serial_number="myserial" manufacturer="mymfg" product="myproduct" name="c" number="1" configuration="uac1" maxpower="500" CONFIG="configs/$name.$number" FUNCTION="uac1.0" UDC_NAME="f8102800.usb" modprobe libcomposite mount -t configfs none $CONFIGFS_HOME mkdir -p $CONFIGFS_HOME/usb_gadget/g1 cd $CONFIGFS_HOME/usb_gadget/g1 echo $VID > idVendor echo $PID > idProduct mkdir -p strings/0x409 echo $serial_number > strings/0x409/serialnumber echo $manufacturer > strings/0x409/manufacturer echo $product > strings/0x409/product mkdir -p configs/$name.$number echo $maxpower > configs/$name.$number/MaxPower mkdir -p configs/$name.$number/strings/0x409 echo $configuration > configs/$name.$number/strings/0x409/configuration mkdir -p functions/$FUNCTION echo 0x3 > functions/$FUNCTION/p_chmask echo 48000 > functions/$FUNCTION/p_srate echo 2 > functions/$FUNCTION/p_ssize echo 0x3 > functions/$FUNCTION/c_chmask echo 48000 > functions/$FUNCTION/c_srate echo 2 > functions/$FUNCTION/c_ssize ln -s functions/$FUNCTION configs/$name.$number echo $UDC_NAME > UDC
Test Configurations
Use an USB-A to Micro-USB cable to connect the Windows PC and the SP7350 platform.
Plug an USB sound card to the USB 3.0 Type C port of the SP7350 platform and plug a earphone to the sound card.
Use sudo sh setup_uac command to configure UDC (USB 2.0) as an UAC gadget.
sunplus@ubuntu:~$ sudo sh setup_uac [sudo] password for sunplus: sunplus@ubuntu:~$
Use cat /proc/asound/cards command to show all sound cards of the SP7350 platform. The sound cards of 1 [UAC1Gadget] and 2 [Device] will be used for the test.
sunplus@ubuntu:~$ cat /proc/asound/cards 0 [spaud ]: sp-aud - sp-aud Q645/Q654, Sunplus Technology Inc. 1 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget UAC1_Gadget 0 2 [Device ]: USB-Audio - USB Audio Device C-Media Electronics Inc. USB Audio Device at usb-xhci-hcd.1.auto-1, full speed sunplus@ubuntu:~$
In Windows PC, “AC Interface” of “Sound, video and game controllers” will show up in Device Manager.
Test
Record and Play
Play music in Windows PC and use arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE | aplay -D hw:2,0 -c 2 -r 48000 -f S16_LE command to output the sounds to the earphone of the USB sound card in USB 3.0 type C port.
sunplus@ubuntu:~$ arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE | aplay -D hw:2,0 -c 2 -r 48000 -f S16_LE Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Record Channel
Play music in Windows PC and use arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to record it as pc_music.wav.
sunplus@ubuntu:~$ arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav Recording WAVE 'pc_music.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Play Channel
Use aplay -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to play pc_music.wav and record it in the Windows PC.
sunplus@ubuntu:~$ aplay -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav Playing WAVE 'pc_music.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo