Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d355339e authored by Ruslan Bilovol's avatar Ruslan Bilovol Committed by Felipe Balbi
Browse files

usb: gadget: function: make current f_uac1 implementation legacy



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: default avatarRuslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent eb9fecb9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
What:		/config/usb-gadget/gadget/functions/uac1.name
What:		/config/usb-gadget/gadget/functions/uac1_legacy.name
Date:		Sep 2014
KernelVersion:	3.18
Description:
+5 −4
Original line number Diff line number Diff line
@@ -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
@@ -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
+4 −4
Original line number Diff line number Diff line
@@ -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
@@ -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.
+2 −2
Original line number Diff line number Diff line
@@ -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
+23 −22
Original line number Diff line number Diff line
@@ -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);
@@ -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;

@@ -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;
@@ -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) {
@@ -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);
}
@@ -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);					\
@@ -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;							\
									\
@@ -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);					\
@@ -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;							\
									\
@@ -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)
@@ -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)
@@ -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;
@@ -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);
@@ -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);
@@ -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");
Loading