Skip to content

Commit

Permalink
usb: gadget: function: make current f_uac1 implementation legacy
Browse files Browse the repository at this point in the history
Before introducing new f_uac1 function (with virtual
ALSA card) make current implementation legacy.

This includes renaming of existing files, some
variables, config options and documentation

Signed-off-by: Ruslan Bilovol <[email protected]>
Signed-off-by: Felipe Balbi <[email protected]>
  • Loading branch information
rbilovol authored and Felipe Balbi committed Jun 19, 2017
1 parent eb9fecb commit d355339
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
What: /config/usb-gadget/gadget/functions/uac1.name
What: /config/usb-gadget/gadget/functions/uac1_legacy.name
Date: Sep 2014
KernelVersion: 3.18
Description:
Expand Down
9 changes: 5 additions & 4 deletions Documentation/usb/gadget-testing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ provided by gadgets.
13. RNDIS function
14. SERIAL function
15. SOURCESINK function
16. UAC1 function
16. UAC1 function (legacy implementation)
17. UAC2 function
18. UVC function
19. PRINTER function
Expand Down Expand Up @@ -589,15 +589,16 @@ device: run the gadget
host: test-usb (tools/usb/testusb.c)


16. UAC1 function
16. UAC1 function (legacy implementation)
=================

The function is provided by usb_f_uac1.ko module.
The function is provided by usb_f_uac1_legacy.ko module.

Function-specific configfs interface
------------------------------------

The function name to use when creating the function directory is "uac1".
The function name to use when creating the function directory
is "uac1_legacy".
The uac1 function provides these attributes in its function directory:

audio_buf_size - audio buffer size
Expand Down
8 changes: 4 additions & 4 deletions drivers/usb/gadget/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ config USB_F_MASS_STORAGE
config USB_F_FS
tristate

config USB_F_UAC1
config USB_F_UAC1_LEGACY
tristate

config USB_F_UAC2
Expand Down Expand Up @@ -365,13 +365,13 @@ config USB_CONFIGFS_F_FS
implemented in kernel space (for instance Ethernet, serial or
mass storage) and other are implemented in user space.

config USB_CONFIGFS_F_UAC1
bool "Audio Class 1.0"
config USB_CONFIGFS_F_UAC1_LEGACY
bool "Audio Class 1.0 (legacy implementation)"
depends on USB_CONFIGFS
depends on SND
select USB_LIBCOMPOSITE
select SND_PCM
select USB_F_UAC1
select USB_F_UAC1_LEGACY
help
This Audio function implements 1 AudioControl interface,
1 AudioStreaming Interface each for USB-OUT and USB-IN.
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/gadget/function/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ obj-$(CONFIG_USB_F_MASS_STORAGE)+= usb_f_mass_storage.o
usb_f_fs-y := f_fs.o
obj-$(CONFIG_USB_F_FS) += usb_f_fs.o
obj-$(CONFIG_USB_U_AUDIO) += u_audio.o
usb_f_uac1-y := f_uac1.o u_uac1.o
obj-$(CONFIG_USB_F_UAC1) += usb_f_uac1.o
usb_f_uac1_legacy-y := f_uac1_legacy.o u_uac1_legacy.o
obj-$(CONFIG_USB_F_UAC1_LEGACY) += usb_f_uac1_legacy.o
usb_f_uac2-y := f_uac2.o
obj-$(CONFIG_USB_F_UAC2) += usb_f_uac2.o
usb_f_uvc-y := f_uvc.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_configfs.o
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include <linux/device.h>
#include <linux/atomic.h>

#include "u_uac1.h"
#include "u_uac1_legacy.h"

static int generic_set_cmd(struct usb_audio_control *con, u8 cmd, int value);
static int generic_get_cmd(struct usb_audio_control *con, u8 cmd);
Expand Down Expand Up @@ -326,11 +326,11 @@ static int f_audio_out_ep_complete(struct usb_ep *ep, struct usb_request *req)
struct f_audio *audio = req->context;
struct usb_composite_dev *cdev = audio->card.func.config->cdev;
struct f_audio_buf *copy_buf = audio->copy_buf;
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;
int audio_buf_size;
int err;

opts = container_of(audio->card.func.fi, struct f_uac1_opts,
opts = container_of(audio->card.func.fi, struct f_uac1_legacy_opts,
func_inst);
audio_buf_size = opts->audio_buf_size;

Expand Down Expand Up @@ -578,13 +578,13 @@ static int f_audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
struct usb_composite_dev *cdev = f->config->cdev;
struct usb_ep *out_ep = audio->out_ep;
struct usb_request *req;
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;
int req_buf_size, req_count, audio_buf_size;
int i = 0, err = 0;

DBG(cdev, "intf %d, alt %d\n", intf, alt);

opts = container_of(f->fi, struct f_uac1_opts, func_inst);
opts = container_of(f->fi, struct f_uac1_legacy_opts, func_inst);
req_buf_size = opts->req_buf_size;
req_count = opts->req_count;
audio_buf_size = opts->audio_buf_size;
Expand Down Expand Up @@ -705,9 +705,9 @@ f_audio_bind(struct usb_configuration *c, struct usb_function *f)
struct usb_string *us;
int status;
struct usb_ep *ep = NULL;
struct f_uac1_opts *audio_opts;
struct f_uac1_legacy_opts *audio_opts;

audio_opts = container_of(f->fi, struct f_uac1_opts, func_inst);
audio_opts = container_of(f->fi, struct f_uac1_legacy_opts, func_inst);
audio->card.gadget = c->cdev->gadget;
/* set up ASLA audio devices */
if (!audio_opts->bound) {
Expand Down Expand Up @@ -801,15 +801,16 @@ static int control_selector_init(struct f_audio *audio)
return 0;
}

static inline struct f_uac1_opts *to_f_uac1_opts(struct config_item *item)
static inline
struct f_uac1_legacy_opts *to_f_uac1_opts(struct config_item *item)
{
return container_of(to_config_group(item), struct f_uac1_opts,
return container_of(to_config_group(item), struct f_uac1_legacy_opts,
func_inst.group);
}

static void f_uac1_attr_release(struct config_item *item)
{
struct f_uac1_opts *opts = to_f_uac1_opts(item);
struct f_uac1_legacy_opts *opts = to_f_uac1_opts(item);

usb_put_function_instance(&opts->func_inst);
}
Expand All @@ -822,7 +823,7 @@ static struct configfs_item_operations f_uac1_item_ops = {
static ssize_t f_uac1_opts_##name##_show(struct config_item *item, \
char *page) \
{ \
struct f_uac1_opts *opts = to_f_uac1_opts(item); \
struct f_uac1_legacy_opts *opts = to_f_uac1_opts(item); \
int result; \
\
mutex_lock(&opts->lock); \
Expand All @@ -835,7 +836,7 @@ static ssize_t f_uac1_opts_##name##_show(struct config_item *item, \
static ssize_t f_uac1_opts_##name##_store(struct config_item *item, \
const char *page, size_t len) \
{ \
struct f_uac1_opts *opts = to_f_uac1_opts(item); \
struct f_uac1_legacy_opts *opts = to_f_uac1_opts(item); \
int ret; \
u32 num; \
\
Expand Down Expand Up @@ -867,7 +868,7 @@ UAC1_INT_ATTRIBUTE(audio_buf_size);
static ssize_t f_uac1_opts_##name##_show(struct config_item *item, \
char *page) \
{ \
struct f_uac1_opts *opts = to_f_uac1_opts(item); \
struct f_uac1_legacy_opts *opts = to_f_uac1_opts(item); \
int result; \
\
mutex_lock(&opts->lock); \
Expand All @@ -880,7 +881,7 @@ static ssize_t f_uac1_opts_##name##_show(struct config_item *item, \
static ssize_t f_uac1_opts_##name##_store(struct config_item *item, \
const char *page, size_t len) \
{ \
struct f_uac1_opts *opts = to_f_uac1_opts(item); \
struct f_uac1_legacy_opts *opts = to_f_uac1_opts(item); \
int ret = -EBUSY; \
char *tmp; \
\
Expand Down Expand Up @@ -928,9 +929,9 @@ static struct config_item_type f_uac1_func_type = {

static void f_audio_free_inst(struct usb_function_instance *f)
{
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;

opts = container_of(f, struct f_uac1_opts, func_inst);
opts = container_of(f, struct f_uac1_legacy_opts, func_inst);
if (opts->fn_play_alloc)
kfree(opts->fn_play);
if (opts->fn_cap_alloc)
Expand All @@ -942,7 +943,7 @@ static void f_audio_free_inst(struct usb_function_instance *f)

static struct usb_function_instance *f_audio_alloc_inst(void)
{
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;

opts = kzalloc(sizeof(*opts), GFP_KERNEL);
if (!opts)
Expand All @@ -966,10 +967,10 @@ static struct usb_function_instance *f_audio_alloc_inst(void)
static void f_audio_free(struct usb_function *f)
{
struct f_audio *audio = func_to_audio(f);
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;

gaudio_cleanup(&audio->card);
opts = container_of(f->fi, struct f_uac1_opts, func_inst);
opts = container_of(f->fi, struct f_uac1_legacy_opts, func_inst);
kfree(audio);
mutex_lock(&opts->lock);
--opts->refcnt;
Expand All @@ -984,7 +985,7 @@ static void f_audio_unbind(struct usb_configuration *c, struct usb_function *f)
static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
{
struct f_audio *audio;
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;

/* allocate and initialize one new instance */
audio = kzalloc(sizeof(*audio), GFP_KERNEL);
Expand All @@ -993,7 +994,7 @@ static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)

audio->card.func.name = "g_audio";

opts = container_of(fi, struct f_uac1_opts, func_inst);
opts = container_of(fi, struct f_uac1_legacy_opts, func_inst);
mutex_lock(&opts->lock);
++opts->refcnt;
mutex_unlock(&opts->lock);
Expand All @@ -1015,6 +1016,6 @@ static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
return &audio->card.func;
}

DECLARE_USB_FUNCTION_INIT(uac1, f_audio_alloc_inst, f_audio_alloc);
DECLARE_USB_FUNCTION_INIT(uac1_legacy, f_audio_alloc_inst, f_audio_alloc);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Bryan Wu");
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <linux/random.h>
#include <linux/syscalls.h>

#include "u_uac1.h"
#include "u_uac1_legacy.h"

/*
* This component encapsulates the ALSA devices for USB audio gadget
Expand Down Expand Up @@ -205,10 +205,11 @@ static int gaudio_open_snd_dev(struct gaudio *card)
{
struct snd_pcm_file *pcm_file;
struct gaudio_snd_dev *snd;
struct f_uac1_opts *opts;
struct f_uac1_legacy_opts *opts;
char *fn_play, *fn_cap, *fn_cntl;

opts = container_of(card->func.fi, struct f_uac1_opts, func_inst);
opts = container_of(card->func.fi, struct f_uac1_legacy_opts,
func_inst);
fn_play = opts->fn_play;
fn_cap = opts->fn_cap;
fn_cntl = opts->fn_cntl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
* Licensed under the GPL-2 or later.
*/

#ifndef __U_AUDIO_H
#define __U_AUDIO_H
#ifndef __U_UAC1_LEGACY_H
#define __U_UAC1_LEGACY_H

#include <linux/device.h>
#include <linux/err.h>
Expand Down Expand Up @@ -56,7 +56,7 @@ struct gaudio {
/* TODO */
};

struct f_uac1_opts {
struct f_uac1_legacy_opts {
struct usb_function_instance func_inst;
int req_buf_size;
int req_count;
Expand All @@ -79,4 +79,4 @@ size_t u_audio_playback(struct gaudio *card, void *buf, size_t count);
int u_audio_get_playback_channels(struct gaudio *card);
int u_audio_get_playback_rate(struct gaudio *card);

#endif /* __U_AUDIO_H */
#endif /* __U_UAC1_LEGACY_H */
6 changes: 3 additions & 3 deletions drivers/usb/gadget/legacy/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ config USB_AUDIO
depends on SND
select USB_LIBCOMPOSITE
select SND_PCM
select USB_F_UAC1 if GADGET_UAC1
select USB_F_UAC2 if !GADGET_UAC1
select USB_F_UAC1_LEGACY if GADGET_UAC1_LEGACY
select USB_F_UAC2 if !GADGET_UAC1_LEGACY
select USB_U_AUDIO if USB_F_UAC2
help
This Gadget Audio driver is compatible with USB Audio Class
Expand All @@ -73,7 +73,7 @@ config USB_AUDIO
Say "y" to link the driver statically, or "m" to build a
dynamically linked module called "g_audio".

config GADGET_UAC1
config GADGET_UAC1_LEGACY
bool "UAC 1.0 (Legacy)"
depends on USB_AUDIO
help
Expand Down
Loading

0 comments on commit d355339

Please sign in to comment.