I came to this patch series when wanted to do two things: - use UAC1 as virtual ALSA sound card on gadget side, just like UAC2 is used so it's possible to do rate resampling - have both playback/capture support in UAC1 Since I wanted to have same behavior for both UAC1/UAC2, obviously I've got an utility part (u_audio.c) for virtual ALSA sound card handling like we have for ethernet(u_ether) or serial(u_serial) functions. Function-specific parts (f_uac1/f_uac2) became almost as storage for class-specfic USB descriptors, some boilerplate for configfs, binding and few USB config request handling. Major change to f_uac1 it that it can't do direct play to existing ALSA sound card anymore, representing audio on gadget side as virtual ALSA sound card where audio streams are simply sinked to and sourced from it, so it may break current usecase for some people (and that's why it's RFC). Luckily, it's possible to use existing user-space applications for audio routing between Audio Gadget and real sound card. I personally use alsaloop tool from alsautils and have ability to create PCM loopback between two different ALSA cards using rate resampling, which is not possible with previous "direct play to ALSA card" approach in f_uac1. While here, also dropped redundant platform driver/device creation in f_uac2 driver as well as "never implemented" volume/mute functionality in f_uac1 that made this work even easier to do. This series is tested with both legacy g_audio.ko and modern configfs approaches under Ubuntu 14.04 (UAC1 and UAC2) and under Windows7 x64 (UAC1 only) having perfect results in all cases. Some changes may have lack of good description that may be obvious for me but not so clear for others, but I hope to fix it in next versions. Comments, testing are welcome. Ruslan Bilovol (5): usb: gadget: f_uac2: remove platform driver/device creation usb: gadget: f_uac2: split out audio core usb: gadget: f_uac1: drop volume/mute functionality usb: gadget: f_uac1: switch to u_audio core utilities usb: gadget: f_uac1: add capture support drivers/usb/gadget/Kconfig | 13 +- drivers/usb/gadget/function/Makefile | 3 +- drivers/usb/gadget/function/f_uac1.c | 842 +++++++++++++--------------------- drivers/usb/gadget/function/f_uac2.c | 778 ++++--------------------------- drivers/usb/gadget/function/u_audio.c | 632 +++++++++++++++++++++++++ drivers/usb/gadget/function/u_audio.h | 93 ++++ drivers/usb/gadget/function/u_uac1.c | 314 ------------- drivers/usb/gadget/function/u_uac1.h | 71 +-- drivers/usb/gadget/legacy/Kconfig | 1 + drivers/usb/gadget/legacy/audio.c | 54 ++- 10 files changed, 1208 insertions(+), 1593 deletions(-) create mode 100644 drivers/usb/gadget/function/u_audio.c create mode 100644 drivers/usb/gadget/function/u_audio.h delete mode 100644 drivers/usb/gadget/function/u_uac1.c -- 1.9.1 -- 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