On Tue, Aug 16, 2016 at 5:52 AM, Peter Chen <hzpeterchen@xxxxxxxxx> wrote: > On Sun, Aug 14, 2016 at 01:21:24AM +0300, Ruslan Bilovol wrote: >> This patch adds new function f_uac1_newapi that >> uses recently created u_audio api. This makes >> f_uac1_newapi implementation much simpler by >> reusing existing u_audio core utilities. >> >> This also drops previous f_uac1 approach (write >> audio samples directly to existing ALSA sound >> card) and moves to more generic/flexible >> one - create an f_uac1 ALSA sound card that >> represents USB Audio function and allows to >> be used by userspace tools. >> >> f_uac1_newapi also has capture support (gadget->host). >> By default, capture interface has 48000kHz/2ch >> configuration, same as playback channel has. >> >> f_uac1_newapi descriptors naming conventios >> uses f_uac2 driver naming convention that >> makes it more common and meaningful. >> >> Comparing to f_uac1, the f_uac1_newapi doesn't >> have volume/mute functionality. This is because >> the volume/mute feature unit was dummy >> implementation since that driver creation (2009) >> and never had real volume control or mute >> functionality. >> >> g_audio can be built using one of existing >> uac functions (f_uac1, f_uac1_newapi or f_uac2) >> >> Signed-off-by: Ruslan Bilovol <ruslan.bilovol@xxxxxxxxx> >> --- >> .../ABI/testing/configfs-usb-gadget-uac1_newapi | 12 + >> Documentation/usb/gadget-testing.txt | 41 ++ >> drivers/usb/gadget/Kconfig | 21 + >> drivers/usb/gadget/function/Makefile | 2 + >> drivers/usb/gadget/function/f_uac1_newapi.c | 795 +++++++++++++++++++++ >> drivers/usb/gadget/function/u_uac1_newapi.h | 39 + >> drivers/usb/gadget/legacy/Kconfig | 15 +- >> drivers/usb/gadget/legacy/audio.c | 52 ++ >> 8 files changed, 975 insertions(+), 2 deletions(-) >> create mode 100644 Documentation/ABI/testing/configfs-usb-gadget-uac1_newapi >> create mode 100644 drivers/usb/gadget/function/f_uac1_newapi.c >> create mode 100644 drivers/usb/gadget/function/u_uac1_newapi.h >> >> diff --git a/Documentation/ABI/testing/configfs-usb-gadget-uac1_newapi b/Documentation/ABI/testing/configfs-usb-gadget-uac1_newapi >> new file mode 100644 >> index 0000000..d355275 >> --- /dev/null >> +++ b/Documentation/ABI/testing/configfs-usb-gadget-uac1_newapi >> @@ -0,0 +1,12 @@ >> +What: /config/usb-gadget/gadget/functions/uac1_newapi.name >> +Date: Aug 2016 >> +KernelVersion: 4.9 >> +Description: >> + The attributes: >> + >> + c_chmask - capture channel mask >> + c_srate - capture sampling rate >> + c_ssize - capture sample size (bytes) >> + p_chmask - playback channel mask >> + p_srate - playback sampling rate >> + p_ssize - playback sample size (bytes) >> diff --git a/Documentation/usb/gadget-testing.txt b/Documentation/usb/gadget-testing.txt >> index 5819605..4598d7f 100644 >> --- a/Documentation/usb/gadget-testing.txt >> +++ b/Documentation/usb/gadget-testing.txt >> @@ -20,6 +20,7 @@ provided by gadgets. >> 17. UAC2 function >> 18. UVC function >> 19. PRINTER function >> +20. UAC1 function (new API) >> >> >> 1. ACM function >> @@ -770,3 +771,43 @@ host: >> >> More advanced testing can be done with the prn_example >> described in Documentation/usb/gadget-printer.txt. >> + >> + >> +20. UAC1 function (new API, using u_audio) >> +================= >> + >> +The function is provided by usb_f_uac1_newapi.ko module. >> + >> +Function-specific configfs interface >> +------------------------------------ >> + >> +The function name to use when creating the function directory >> +is "uac1_newapi". The uac1_newapi function provides these attributes >> +in its function directory: >> + >> + c_chmask - capture channel mask >> + c_srate - capture sampling rate >> + c_ssize - capture sample size (bytes) >> + p_chmask - playback channel mask >> + p_srate - playback sampling rate >> + p_ssize - playback sample size (bytes) >> + >> +The attributes have sane default values. >> + >> +Testing the UAC1 function >> +------------------------- >> + >> +device: run the gadget >> +host: aplay -l # should list our USB Audio Gadget >> + >> +This function does not require real hardware support, it just >> +sends a stream of audio data to/from the host. In order to >> +actually hear something at the device side, a command similar >> +to this must be used at the device side: >> + >> +$ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 & >> + >> +e.g.: >> + >> +$ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \ >> +aplay -D default:CARD=OdroidU3 >> diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig >> index a25afd8..abcb539 100644 >> --- a/drivers/usb/gadget/Kconfig >> +++ b/drivers/usb/gadget/Kconfig >> @@ -194,6 +194,9 @@ config USB_F_FS >> config USB_F_UAC1 >> tristate >> >> +config USB_F_UAC1_NEWAPI >> + tristate >> + >> config USB_F_UAC2 >> tristate >> >> @@ -397,6 +400,24 @@ config USB_CONFIGFS_F_UAC1 >> This driver requires a real Audio codec to be present >> on the device. >> >> +config USB_CONFIGFS_F_UAC1_NEWAPI >> + bool "Audio Class 1.0 (new API)" >> + depends on USB_CONFIGFS >> + depends on SND >> + select USB_LIBCOMPOSITE >> + select SND_PCM >> + select USB_U_AUDIO >> + select USB_F_UAC1_NEWAPI >> + help >> + This Audio function implements 1 AudioControl interface, >> + 1 AudioStreaming Interface each for USB-OUT and USB-IN. > > %s/1/one > That's same naming as already used for UAC1 and UAC2 description in this Kconfig file. Let's keep it "1" for consistency Best regards, Ruslan -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html