Re: [PATCH v4 3/3] usb: gadget: add f_uac1 variant based on a new u_audio api
From: Ruslan Bilovol
Date: Mon May 29 2017 - 20:07:35 EST
On Fri, May 26, 2017 at 6:52 PM, Julian Scheel <julian@xxxxxxxx> wrote:
> On 18.05.2017 00:37, Ruslan Bilovol wrote:
>>
>> This patch adds a new function 'f_uac1_acard'
>> (f_uac1 with virtual "ALSA card") that
>> uses recently created u_audio API. Comparing
>> to legacy f_uac1 function implementation it
>> doesn't require any real Audio codec to be
>> present on the device. In f_uac1_acard audio
>> streams are simply sinked to and sourced
>> from a virtual ALSA sound card created
>> using u_audio API.
>>
>> Legacy f_uac1 approach is to write audio
>> samples directly to existing ALSA sound
>> card
>>
>> f_uac1_acard approach is more generic/flexible
>> one - create an ALSA sound card that
>> represents USB Audio function and allows to
>> be used by userspace application that
>> may choose to do whatever it wants with the
>> data received from the USB Host and choose
>> to provide whatever it wants as audio data
>> to the USB Host.
>>
>> f_uac1_acard also has capture support (gadget->host)
>> thanks to easy implementation via u_audio.
>> By default, capture interface has 48000kHz/2ch
>> configuration, same as playback channel has.
>>
>> f_uac1_acard descriptors naming convention
>> uses f_uac2 driver naming convention that
>> makes it more common and meaningful.
>>
>> Comparing to f_uac1, the f_uac1_acard doesn't
>> have volume/mute functionality. This is because
>> the f_uac1 volume/mute feature unit was dummy
>> implementation since that driver creation (2009)
>> and never had any real volume control or mute
>> functionality, so there is no any difference
>> here.
>>
>> Since f_uac1_acard functionality, exposed
>> interface to userspace (virtual ALSA card),
>> input parameters are so different comparing
>> to legace f_uac1, that there is no any
>> reason to keep them in the same file/module,
>> and separate function was created.
>>
>> g_audio can be built using one of existing
>> UAC functions (f_uac1, f_uac1_acard or f_uac2)
>>
>> Signed-off-by: Ruslan Bilovol <ruslan.bilovol@xxxxxxxxx>
>> ---
>> .../ABI/testing/configfs-usb-gadget-uac1_acard | 14 +
>> Documentation/usb/gadget-testing.txt | 45 ++
>> drivers/usb/gadget/Kconfig | 21 +
>> drivers/usb/gadget/function/Makefile | 2 +
>> drivers/usb/gadget/function/f_uac1_acard.c | 803
>> +++++++++++++++++++++
>> drivers/usb/gadget/function/u_uac1_acard.h | 41 ++
>> drivers/usb/gadget/legacy/Kconfig | 15 +-
>> drivers/usb/gadget/legacy/audio.c | 53 ++
>> 8 files changed, 992 insertions(+), 2 deletions(-)
>> create mode 100644
>> Documentation/ABI/testing/configfs-usb-gadget-uac1_acard
>> create mode 100644 drivers/usb/gadget/function/f_uac1_acard.c
>> create mode 100644 drivers/usb/gadget/function/u_uac1_acard.h
>>
>
> Tested on iMX7D using chipidea usb gadget controller. Tested Windows 10 and
> Linux 4.11 as host. Both work fine.
>
> Tested-by: Julian Scheel <julian@xxxxxxxx>
Thanks for testing it.
I'll wait for additional reviews/comments next few days and than will
send new patchset with addressed comments.
Also current patchset have minor conflict when applied on top of
Felipe's testing/next branch which is moved to 4.12-rc1. I've
resolved conflict but did only build test so far.
Anyway I uploaded rebased patches to github [1] if anybody
wants to try them.
[1] https://github.com/rbilovol/kernel/commits/usbaudio-v4.12-balbi-testing-next
Best regards,
Ruslan