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 Original line 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
Date:		Sep 2014
KernelVersion:	3.18
KernelVersion:	3.18
Description:
Description:
+5 −4
Original line number Original line Diff line number Diff line
@@ -16,7 +16,7 @@ provided by gadgets.
13. RNDIS function
13. RNDIS function
14. SERIAL function
14. SERIAL function
15. SOURCESINK function
15. SOURCESINK function
16. UAC1 function
16. UAC1 function (legacy implementation)
17. UAC2 function
17. UAC2 function
18. UVC function
18. UVC function
19. PRINTER function
19. PRINTER function
@@ -589,15 +589,16 @@ device: run the gadget
host: test-usb (tools/usb/testusb.c)
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
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:
The uac1 function provides these attributes in its function directory:


	audio_buf_size - audio buffer size
	audio_buf_size - audio buffer size
+4 −4
Original line number Original line Diff line number Diff line
@@ -191,7 +191,7 @@ config USB_F_MASS_STORAGE
config USB_F_FS
config USB_F_FS
	tristate
	tristate


config USB_F_UAC1
config USB_F_UAC1_LEGACY
	tristate
	tristate


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


config USB_CONFIGFS_F_UAC1
config USB_CONFIGFS_F_UAC1_LEGACY
	bool "Audio Class 1.0"
	bool "Audio Class 1.0 (legacy implementation)"
	depends on USB_CONFIGFS
	depends on USB_CONFIGFS
	depends on SND
	depends on SND
	select USB_LIBCOMPOSITE
	select USB_LIBCOMPOSITE
	select SND_PCM
	select SND_PCM
	select USB_F_UAC1
	select USB_F_UAC1_LEGACY
	help
	help
	  This Audio function implements 1 AudioControl interface,
	  This Audio function implements 1 AudioControl interface,
	  1 AudioStreaming Interface each for USB-OUT and USB-IN.
	  1 AudioStreaming Interface each for USB-OUT and USB-IN.
+2 −2
Original line number Original line 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
usb_f_fs-y			:= f_fs.o
obj-$(CONFIG_USB_F_FS)		+= usb_f_fs.o
obj-$(CONFIG_USB_F_FS)		+= usb_f_fs.o
obj-$(CONFIG_USB_U_AUDIO)	+= u_audio.o
obj-$(CONFIG_USB_U_AUDIO)	+= u_audio.o
usb_f_uac1-y			:= f_uac1.o u_uac1.o
usb_f_uac1_legacy-y		:= f_uac1_legacy.o u_uac1_legacy.o
obj-$(CONFIG_USB_F_UAC1)	+= usb_f_uac1.o
obj-$(CONFIG_USB_F_UAC1_LEGACY)	+= usb_f_uac1_legacy.o
usb_f_uac2-y			:= f_uac2.o
usb_f_uac2-y			:= f_uac2.o
obj-$(CONFIG_USB_F_UAC2)	+= usb_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
usb_f_uvc-y			:= f_uvc.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_configfs.o
+23 −22
Original line number Original line Diff line number Diff line
@@ -15,7 +15,7 @@
#include <linux/device.h>
#include <linux/device.h>
#include <linux/atomic.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_set_cmd(struct usb_audio_control *con, u8 cmd, int value);
static int generic_get_cmd(struct usb_audio_control *con, u8 cmd);
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 f_audio *audio = req->context;
	struct usb_composite_dev *cdev = audio->card.func.config->cdev;
	struct usb_composite_dev *cdev = audio->card.func.config->cdev;
	struct f_audio_buf *copy_buf = audio->copy_buf;
	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 audio_buf_size;
	int err;
	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);
			    func_inst);
	audio_buf_size = opts->audio_buf_size;
	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_composite_dev *cdev = f->config->cdev;
	struct usb_ep *out_ep = audio->out_ep;
	struct usb_ep *out_ep = audio->out_ep;
	struct usb_request *req;
	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 req_buf_size, req_count, audio_buf_size;
	int i = 0, err = 0;
	int i = 0, err = 0;


	DBG(cdev, "intf %d, alt %d\n", intf, alt);
	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_buf_size = opts->req_buf_size;
	req_count = opts->req_count;
	req_count = opts->req_count;
	audio_buf_size = opts->audio_buf_size;
	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;
	struct usb_string	*us;
	int			status;
	int			status;
	struct usb_ep		*ep = NULL;
	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;
	audio->card.gadget = c->cdev->gadget;
	/* set up ASLA audio devices */
	/* set up ASLA audio devices */
	if (!audio_opts->bound) {
	if (!audio_opts->bound) {
@@ -801,15 +801,16 @@ static int control_selector_init(struct f_audio *audio)
	return 0;
	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);
			    func_inst.group);
}
}


static void f_uac1_attr_release(struct config_item *item)
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);
	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,	\
static ssize_t f_uac1_opts_##name##_show(struct config_item *item,	\
					 char *page)			\
					 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;							\
	int result;							\
									\
									\
	mutex_lock(&opts->lock);					\
	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,		\
static ssize_t f_uac1_opts_##name##_store(struct config_item *item,		\
					  const char *page, size_t len)	\
					  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;							\
	int ret;							\
	u32 num;							\
	u32 num;							\
									\
									\
@@ -867,7 +868,7 @@ UAC1_INT_ATTRIBUTE(audio_buf_size);
static ssize_t f_uac1_opts_##name##_show(struct config_item *item,	\
static ssize_t f_uac1_opts_##name##_show(struct config_item *item,	\
					 char *page)			\
					 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;							\
	int result;							\
									\
									\
	mutex_lock(&opts->lock);					\
	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,	\
static ssize_t f_uac1_opts_##name##_store(struct config_item *item,	\
					  const char *page, size_t len)	\
					  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;						\
	int ret = -EBUSY;						\
	char *tmp;							\
	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)
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)
	if (opts->fn_play_alloc)
		kfree(opts->fn_play);
		kfree(opts->fn_play);
	if (opts->fn_cap_alloc)
	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)
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);
	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
	if (!opts)
	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)
static void f_audio_free(struct usb_function *f)
{
{
	struct f_audio *audio = func_to_audio(f);
	struct f_audio *audio = func_to_audio(f);
	struct f_uac1_opts *opts;
	struct f_uac1_legacy_opts *opts;


	gaudio_cleanup(&audio->card);
	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);
	kfree(audio);
	mutex_lock(&opts->lock);
	mutex_lock(&opts->lock);
	--opts->refcnt;
	--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)
static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
{
{
	struct f_audio *audio;
	struct f_audio *audio;
	struct f_uac1_opts *opts;
	struct f_uac1_legacy_opts *opts;


	/* allocate and initialize one new instance */
	/* allocate and initialize one new instance */
	audio = kzalloc(sizeof(*audio), GFP_KERNEL);
	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";
	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);
	mutex_lock(&opts->lock);
	++opts->refcnt;
	++opts->refcnt;
	mutex_unlock(&opts->lock);
	mutex_unlock(&opts->lock);
@@ -1015,6 +1016,6 @@ static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
	return &audio->card.func;
	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_LICENSE("GPL");
MODULE_AUTHOR("Bryan Wu");
MODULE_AUTHOR("Bryan Wu");
Loading