xref: /linux/drivers/usb/gadget/function/f_uac1.c (revision 5fd54ace4721fc5ce2bb5aef6318fcf17f421460)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * f_uac1.c -- USB Audio Class 1.0 Function (using u_audio API)
4  *
5  * Copyright (C) 2016 Ruslan Bilovol <ruslan.bilovol@gmail.com>
6  *
7  * This driver doesn't expect any real Audio codec to be present
8  * on the device - the audio streams are simply sinked to and
9  * sourced from a virtual ALSA sound card created.
10  *
11  * This file is based on f_uac1.c which is
12  *   Copyright (C) 2008 Bryan Wu <cooloney@kernel.org>
13  *   Copyright (C) 2008 Analog Devices, Inc
14  *
15  * This program is free software; you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation; either version 2 of the License, or
18  * (at your option) any later version.
19  */
20 
21 #include <linux/usb/audio.h>
22 #include <linux/module.h>
23 
24 #include "u_audio.h"
25 #include "u_uac1.h"
26 
27 struct f_uac1 {
28 	struct g_audio g_audio;
29 	u8 ac_intf, as_in_intf, as_out_intf;
30 	u8 ac_alt, as_in_alt, as_out_alt;	/* needed for get_alt() */
31 };
32 
33 static inline struct f_uac1 *func_to_uac1(struct usb_function *f)
34 {
35 	return container_of(f, struct f_uac1, g_audio.func);
36 }
37 
38 /*
39  * DESCRIPTORS ... most are static, but strings and full
40  * configuration descriptors are built on demand.
41  */
42 
43 /*
44  * We have three interfaces - one AudioControl and two AudioStreaming
45  *
46  * The driver implements a simple UAC_1 topology.
47  * USB-OUT -> IT_1 -> OT_2 -> ALSA_Capture
48  * ALSA_Playback -> IT_3 -> OT_4 -> USB-IN
49  */
50 #define F_AUDIO_AC_INTERFACE		0
51 #define F_AUDIO_AS_OUT_INTERFACE	1
52 #define F_AUDIO_AS_IN_INTERFACE		2
53 /* Number of streaming interfaces */
54 #define F_AUDIO_NUM_INTERFACES		2
55 
56 /* B.3.1  Standard AC Interface Descriptor */
57 static struct usb_interface_descriptor ac_interface_desc = {
58 	.bLength =		USB_DT_INTERFACE_SIZE,
59 	.bDescriptorType =	USB_DT_INTERFACE,
60 	.bNumEndpoints =	0,
61 	.bInterfaceClass =	USB_CLASS_AUDIO,
62 	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOCONTROL,
63 };
64 
65 /*
66  * The number of AudioStreaming and MIDIStreaming interfaces
67  * in the Audio Interface Collection
68  */
69 DECLARE_UAC_AC_HEADER_DESCRIPTOR(2);
70 
71 #define UAC_DT_AC_HEADER_LENGTH	UAC_DT_AC_HEADER_SIZE(F_AUDIO_NUM_INTERFACES)
72 /* 2 input terminals and 2 output terminals */
73 #define UAC_DT_TOTAL_LENGTH (UAC_DT_AC_HEADER_LENGTH \
74 	+ 2*UAC_DT_INPUT_TERMINAL_SIZE + 2*UAC_DT_OUTPUT_TERMINAL_SIZE)
75 /* B.3.2  Class-Specific AC Interface Descriptor */
76 static struct uac1_ac_header_descriptor_2 ac_header_desc = {
77 	.bLength =		UAC_DT_AC_HEADER_LENGTH,
78 	.bDescriptorType =	USB_DT_CS_INTERFACE,
79 	.bDescriptorSubtype =	UAC_HEADER,
80 	.bcdADC =		cpu_to_le16(0x0100),
81 	.wTotalLength =		cpu_to_le16(UAC_DT_TOTAL_LENGTH),
82 	.bInCollection =	F_AUDIO_NUM_INTERFACES,
83 	.baInterfaceNr = {
84 	/* Interface number of the AudioStream interfaces */
85 		[0] =		1,
86 		[1] =		2,
87 	}
88 };
89 
90 #define USB_OUT_IT_ID	1
91 static struct uac_input_terminal_descriptor usb_out_it_desc = {
92 	.bLength =		UAC_DT_INPUT_TERMINAL_SIZE,
93 	.bDescriptorType =	USB_DT_CS_INTERFACE,
94 	.bDescriptorSubtype =	UAC_INPUT_TERMINAL,
95 	.bTerminalID =		USB_OUT_IT_ID,
96 	.wTerminalType =	cpu_to_le16(UAC_TERMINAL_STREAMING),
97 	.bAssocTerminal =	0,
98 	.wChannelConfig =	cpu_to_le16(0x3),
99 };
100 
101 #define IO_OUT_OT_ID	2
102 static struct uac1_output_terminal_descriptor io_out_ot_desc = {
103 	.bLength		= UAC_DT_OUTPUT_TERMINAL_SIZE,
104 	.bDescriptorType	= USB_DT_CS_INTERFACE,
105 	.bDescriptorSubtype	= UAC_OUTPUT_TERMINAL,
106 	.bTerminalID		= IO_OUT_OT_ID,
107 	.wTerminalType		= cpu_to_le16(UAC_OUTPUT_TERMINAL_SPEAKER),
108 	.bAssocTerminal		= 0,
109 	.bSourceID		= USB_OUT_IT_ID,
110 };
111 
112 #define IO_IN_IT_ID	3
113 static struct uac_input_terminal_descriptor io_in_it_desc = {
114 	.bLength		= UAC_DT_INPUT_TERMINAL_SIZE,
115 	.bDescriptorType	= USB_DT_CS_INTERFACE,
116 	.bDescriptorSubtype	= UAC_INPUT_TERMINAL,
117 	.bTerminalID		= IO_IN_IT_ID,
118 	.wTerminalType		= cpu_to_le16(UAC_INPUT_TERMINAL_MICROPHONE),
119 	.bAssocTerminal		= 0,
120 	.wChannelConfig		= cpu_to_le16(0x3),
121 };
122 
123 #define USB_IN_OT_ID	4
124 static struct uac1_output_terminal_descriptor usb_in_ot_desc = {
125 	.bLength =		UAC_DT_OUTPUT_TERMINAL_SIZE,
126 	.bDescriptorType =	USB_DT_CS_INTERFACE,
127 	.bDescriptorSubtype =	UAC_OUTPUT_TERMINAL,
128 	.bTerminalID =		USB_IN_OT_ID,
129 	.wTerminalType =	cpu_to_le16(UAC_TERMINAL_STREAMING),
130 	.bAssocTerminal =	0,
131 	.bSourceID =		IO_IN_IT_ID,
132 };
133 
134 /* B.4.1  Standard AS Interface Descriptor */
135 static struct usb_interface_descriptor as_out_interface_alt_0_desc = {
136 	.bLength =		USB_DT_INTERFACE_SIZE,
137 	.bDescriptorType =	USB_DT_INTERFACE,
138 	.bAlternateSetting =	0,
139 	.bNumEndpoints =	0,
140 	.bInterfaceClass =	USB_CLASS_AUDIO,
141 	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
142 };
143 
144 static struct usb_interface_descriptor as_out_interface_alt_1_desc = {
145 	.bLength =		USB_DT_INTERFACE_SIZE,
146 	.bDescriptorType =	USB_DT_INTERFACE,
147 	.bAlternateSetting =	1,
148 	.bNumEndpoints =	1,
149 	.bInterfaceClass =	USB_CLASS_AUDIO,
150 	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
151 };
152 
153 static struct usb_interface_descriptor as_in_interface_alt_0_desc = {
154 	.bLength =		USB_DT_INTERFACE_SIZE,
155 	.bDescriptorType =	USB_DT_INTERFACE,
156 	.bAlternateSetting =	0,
157 	.bNumEndpoints =	0,
158 	.bInterfaceClass =	USB_CLASS_AUDIO,
159 	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
160 };
161 
162 static struct usb_interface_descriptor as_in_interface_alt_1_desc = {
163 	.bLength =		USB_DT_INTERFACE_SIZE,
164 	.bDescriptorType =	USB_DT_INTERFACE,
165 	.bAlternateSetting =	1,
166 	.bNumEndpoints =	1,
167 	.bInterfaceClass =	USB_CLASS_AUDIO,
168 	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
169 };
170 
171 /* B.4.2  Class-Specific AS Interface Descriptor */
172 static struct uac1_as_header_descriptor as_out_header_desc = {
173 	.bLength =		UAC_DT_AS_HEADER_SIZE,
174 	.bDescriptorType =	USB_DT_CS_INTERFACE,
175 	.bDescriptorSubtype =	UAC_AS_GENERAL,
176 	.bTerminalLink =	USB_OUT_IT_ID,
177 	.bDelay =		1,
178 	.wFormatTag =		cpu_to_le16(UAC_FORMAT_TYPE_I_PCM),
179 };
180 
181 static struct uac1_as_header_descriptor as_in_header_desc = {
182 	.bLength =		UAC_DT_AS_HEADER_SIZE,
183 	.bDescriptorType =	USB_DT_CS_INTERFACE,
184 	.bDescriptorSubtype =	UAC_AS_GENERAL,
185 	.bTerminalLink =	USB_IN_OT_ID,
186 	.bDelay =		1,
187 	.wFormatTag =		cpu_to_le16(UAC_FORMAT_TYPE_I_PCM),
188 };
189 
190 DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(1);
191 
192 static struct uac_format_type_i_discrete_descriptor_1 as_out_type_i_desc = {
193 	.bLength =		UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(1),
194 	.bDescriptorType =	USB_DT_CS_INTERFACE,
195 	.bDescriptorSubtype =	UAC_FORMAT_TYPE,
196 	.bFormatType =		UAC_FORMAT_TYPE_I,
197 	.bSubframeSize =	2,
198 	.bBitResolution =	16,
199 	.bSamFreqType =		1,
200 };
201 
202 /* Standard ISO OUT Endpoint Descriptor */
203 static struct usb_endpoint_descriptor as_out_ep_desc  = {
204 	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
205 	.bDescriptorType =	USB_DT_ENDPOINT,
206 	.bEndpointAddress =	USB_DIR_OUT,
207 	.bmAttributes =		USB_ENDPOINT_SYNC_ADAPTIVE
208 				| USB_ENDPOINT_XFER_ISOC,
209 	.wMaxPacketSize	=	cpu_to_le16(UAC1_OUT_EP_MAX_PACKET_SIZE),
210 	.bInterval =		4,
211 };
212 
213 /* Class-specific AS ISO OUT Endpoint Descriptor */
214 static struct uac_iso_endpoint_descriptor as_iso_out_desc = {
215 	.bLength =		UAC_ISO_ENDPOINT_DESC_SIZE,
216 	.bDescriptorType =	USB_DT_CS_ENDPOINT,
217 	.bDescriptorSubtype =	UAC_EP_GENERAL,
218 	.bmAttributes =		1,
219 	.bLockDelayUnits =	1,
220 	.wLockDelay =		cpu_to_le16(1),
221 };
222 
223 static struct uac_format_type_i_discrete_descriptor_1 as_in_type_i_desc = {
224 	.bLength =		UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(1),
225 	.bDescriptorType =	USB_DT_CS_INTERFACE,
226 	.bDescriptorSubtype =	UAC_FORMAT_TYPE,
227 	.bFormatType =		UAC_FORMAT_TYPE_I,
228 	.bSubframeSize =	2,
229 	.bBitResolution =	16,
230 	.bSamFreqType =		1,
231 };
232 
233 /* Standard ISO OUT Endpoint Descriptor */
234 static struct usb_endpoint_descriptor as_in_ep_desc  = {
235 	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
236 	.bDescriptorType =	USB_DT_ENDPOINT,
237 	.bEndpointAddress =	USB_DIR_IN,
238 	.bmAttributes =		USB_ENDPOINT_SYNC_ASYNC
239 				| USB_ENDPOINT_XFER_ISOC,
240 	.wMaxPacketSize	=	cpu_to_le16(UAC1_OUT_EP_MAX_PACKET_SIZE),
241 	.bInterval =		4,
242 };
243 
244 /* Class-specific AS ISO OUT Endpoint Descriptor */
245 static struct uac_iso_endpoint_descriptor as_iso_in_desc = {
246 	.bLength =		UAC_ISO_ENDPOINT_DESC_SIZE,
247 	.bDescriptorType =	USB_DT_CS_ENDPOINT,
248 	.bDescriptorSubtype =	UAC_EP_GENERAL,
249 	.bmAttributes =		1,
250 	.bLockDelayUnits =	0,
251 	.wLockDelay =		0,
252 };
253 
254 static struct usb_descriptor_header *f_audio_desc[] = {
255 	(struct usb_descriptor_header *)&ac_interface_desc,
256 	(struct usb_descriptor_header *)&ac_header_desc,
257 
258 	(struct usb_descriptor_header *)&usb_out_it_desc,
259 	(struct usb_descriptor_header *)&io_out_ot_desc,
260 	(struct usb_descriptor_header *)&io_in_it_desc,
261 	(struct usb_descriptor_header *)&usb_in_ot_desc,
262 
263 	(struct usb_descriptor_header *)&as_out_interface_alt_0_desc,
264 	(struct usb_descriptor_header *)&as_out_interface_alt_1_desc,
265 	(struct usb_descriptor_header *)&as_out_header_desc,
266 
267 	(struct usb_descriptor_header *)&as_out_type_i_desc,
268 
269 	(struct usb_descriptor_header *)&as_out_ep_desc,
270 	(struct usb_descriptor_header *)&as_iso_out_desc,
271 
272 	(struct usb_descriptor_header *)&as_in_interface_alt_0_desc,
273 	(struct usb_descriptor_header *)&as_in_interface_alt_1_desc,
274 	(struct usb_descriptor_header *)&as_in_header_desc,
275 
276 	(struct usb_descriptor_header *)&as_in_type_i_desc,
277 
278 	(struct usb_descriptor_header *)&as_in_ep_desc,
279 	(struct usb_descriptor_header *)&as_iso_in_desc,
280 	NULL,
281 };
282 
283 enum {
284 	STR_AC_IF,
285 	STR_USB_OUT_IT,
286 	STR_USB_OUT_IT_CH_NAMES,
287 	STR_IO_OUT_OT,
288 	STR_IO_IN_IT,
289 	STR_IO_IN_IT_CH_NAMES,
290 	STR_USB_IN_OT,
291 	STR_AS_OUT_IF_ALT0,
292 	STR_AS_OUT_IF_ALT1,
293 	STR_AS_IN_IF_ALT0,
294 	STR_AS_IN_IF_ALT1,
295 };
296 
297 static struct usb_string strings_uac1[] = {
298 	[STR_AC_IF].s = "AC Interface",
299 	[STR_USB_OUT_IT].s = "Playback Input terminal",
300 	[STR_USB_OUT_IT_CH_NAMES].s = "Playback Channels",
301 	[STR_IO_OUT_OT].s = "Playback Output terminal",
302 	[STR_IO_IN_IT].s = "Capture Input terminal",
303 	[STR_IO_IN_IT_CH_NAMES].s = "Capture Channels",
304 	[STR_USB_IN_OT].s = "Capture Output terminal",
305 	[STR_AS_OUT_IF_ALT0].s = "Playback Inactive",
306 	[STR_AS_OUT_IF_ALT1].s = "Playback Active",
307 	[STR_AS_IN_IF_ALT0].s = "Capture Inactive",
308 	[STR_AS_IN_IF_ALT1].s = "Capture Active",
309 	{ },
310 };
311 
312 static struct usb_gadget_strings str_uac1 = {
313 	.language = 0x0409,	/* en-us */
314 	.strings = strings_uac1,
315 };
316 
317 static struct usb_gadget_strings *uac1_strings[] = {
318 	&str_uac1,
319 	NULL,
320 };
321 
322 /*
323  * This function is an ALSA sound card following USB Audio Class Spec 1.0.
324  */
325 
326 static int audio_set_endpoint_req(struct usb_function *f,
327 		const struct usb_ctrlrequest *ctrl)
328 {
329 	struct usb_composite_dev *cdev = f->config->cdev;
330 	int			value = -EOPNOTSUPP;
331 	u16			ep = le16_to_cpu(ctrl->wIndex);
332 	u16			len = le16_to_cpu(ctrl->wLength);
333 	u16			w_value = le16_to_cpu(ctrl->wValue);
334 
335 	DBG(cdev, "bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
336 			ctrl->bRequest, w_value, len, ep);
337 
338 	switch (ctrl->bRequest) {
339 	case UAC_SET_CUR:
340 		value = len;
341 		break;
342 
343 	case UAC_SET_MIN:
344 		break;
345 
346 	case UAC_SET_MAX:
347 		break;
348 
349 	case UAC_SET_RES:
350 		break;
351 
352 	case UAC_SET_MEM:
353 		break;
354 
355 	default:
356 		break;
357 	}
358 
359 	return value;
360 }
361 
362 static int audio_get_endpoint_req(struct usb_function *f,
363 		const struct usb_ctrlrequest *ctrl)
364 {
365 	struct usb_composite_dev *cdev = f->config->cdev;
366 	int value = -EOPNOTSUPP;
367 	u8 ep = ((le16_to_cpu(ctrl->wIndex) >> 8) & 0xFF);
368 	u16 len = le16_to_cpu(ctrl->wLength);
369 	u16 w_value = le16_to_cpu(ctrl->wValue);
370 
371 	DBG(cdev, "bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
372 			ctrl->bRequest, w_value, len, ep);
373 
374 	switch (ctrl->bRequest) {
375 	case UAC_GET_CUR:
376 	case UAC_GET_MIN:
377 	case UAC_GET_MAX:
378 	case UAC_GET_RES:
379 		value = len;
380 		break;
381 	case UAC_GET_MEM:
382 		break;
383 	default:
384 		break;
385 	}
386 
387 	return value;
388 }
389 
390 static int
391 f_audio_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
392 {
393 	struct usb_composite_dev *cdev = f->config->cdev;
394 	struct usb_request	*req = cdev->req;
395 	int			value = -EOPNOTSUPP;
396 	u16			w_index = le16_to_cpu(ctrl->wIndex);
397 	u16			w_value = le16_to_cpu(ctrl->wValue);
398 	u16			w_length = le16_to_cpu(ctrl->wLength);
399 
400 	/* composite driver infrastructure handles everything; interface
401 	 * activation uses set_alt().
402 	 */
403 	switch (ctrl->bRequestType) {
404 	case USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
405 		value = audio_set_endpoint_req(f, ctrl);
406 		break;
407 
408 	case USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
409 		value = audio_get_endpoint_req(f, ctrl);
410 		break;
411 
412 	default:
413 		ERROR(cdev, "invalid control req%02x.%02x v%04x i%04x l%d\n",
414 			ctrl->bRequestType, ctrl->bRequest,
415 			w_value, w_index, w_length);
416 	}
417 
418 	/* respond with data transfer or status phase? */
419 	if (value >= 0) {
420 		DBG(cdev, "audio req%02x.%02x v%04x i%04x l%d\n",
421 			ctrl->bRequestType, ctrl->bRequest,
422 			w_value, w_index, w_length);
423 		req->zero = 0;
424 		req->length = value;
425 		value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
426 		if (value < 0)
427 			ERROR(cdev, "audio response on err %d\n", value);
428 	}
429 
430 	/* device either stalls (value < 0) or reports success */
431 	return value;
432 }
433 
434 static int f_audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
435 {
436 	struct usb_composite_dev *cdev = f->config->cdev;
437 	struct usb_gadget *gadget = cdev->gadget;
438 	struct device *dev = &gadget->dev;
439 	struct f_uac1 *uac1 = func_to_uac1(f);
440 	int ret = 0;
441 
442 	/* No i/f has more than 2 alt settings */
443 	if (alt > 1) {
444 		dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
445 		return -EINVAL;
446 	}
447 
448 	if (intf == uac1->ac_intf) {
449 		/* Control I/f has only 1 AltSetting - 0 */
450 		if (alt) {
451 			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
452 			return -EINVAL;
453 		}
454 		return 0;
455 	}
456 
457 	if (intf == uac1->as_out_intf) {
458 		uac1->as_out_alt = alt;
459 
460 		if (alt)
461 			ret = u_audio_start_capture(&uac1->g_audio);
462 		else
463 			u_audio_stop_capture(&uac1->g_audio);
464 	} else if (intf == uac1->as_in_intf) {
465 		uac1->as_in_alt = alt;
466 
467 			if (alt)
468 				ret = u_audio_start_playback(&uac1->g_audio);
469 			else
470 				u_audio_stop_playback(&uac1->g_audio);
471 	} else {
472 		dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
473 		return -EINVAL;
474 	}
475 
476 	return ret;
477 }
478 
479 static int f_audio_get_alt(struct usb_function *f, unsigned intf)
480 {
481 	struct usb_composite_dev *cdev = f->config->cdev;
482 	struct usb_gadget *gadget = cdev->gadget;
483 	struct device *dev = &gadget->dev;
484 	struct f_uac1 *uac1 = func_to_uac1(f);
485 
486 	if (intf == uac1->ac_intf)
487 		return uac1->ac_alt;
488 	else if (intf == uac1->as_out_intf)
489 		return uac1->as_out_alt;
490 	else if (intf == uac1->as_in_intf)
491 		return uac1->as_in_alt;
492 	else
493 		dev_err(dev, "%s:%d Invalid Interface %d!\n",
494 			__func__, __LINE__, intf);
495 
496 	return -EINVAL;
497 }
498 
499 
500 static void f_audio_disable(struct usb_function *f)
501 {
502 	struct f_uac1 *uac1 = func_to_uac1(f);
503 
504 	uac1->as_out_alt = 0;
505 	uac1->as_in_alt = 0;
506 
507 	u_audio_stop_capture(&uac1->g_audio);
508 }
509 
510 /*-------------------------------------------------------------------------*/
511 
512 /* audio function driver setup/binding */
513 static int f_audio_bind(struct usb_configuration *c, struct usb_function *f)
514 {
515 	struct usb_composite_dev	*cdev = c->cdev;
516 	struct usb_gadget		*gadget = cdev->gadget;
517 	struct f_uac1			*uac1 = func_to_uac1(f);
518 	struct g_audio			*audio = func_to_g_audio(f);
519 	struct f_uac1_opts		*audio_opts;
520 	struct usb_ep			*ep = NULL;
521 	struct usb_string		*us;
522 	u8				*sam_freq;
523 	int				rate;
524 	int				status;
525 
526 	audio_opts = container_of(f->fi, struct f_uac1_opts, func_inst);
527 
528 	us = usb_gstrings_attach(cdev, uac1_strings, ARRAY_SIZE(strings_uac1));
529 	if (IS_ERR(us))
530 		return PTR_ERR(us);
531 	ac_interface_desc.iInterface = us[STR_AC_IF].id;
532 	usb_out_it_desc.iTerminal = us[STR_USB_OUT_IT].id;
533 	usb_out_it_desc.iChannelNames = us[STR_USB_OUT_IT_CH_NAMES].id;
534 	io_out_ot_desc.iTerminal = us[STR_IO_OUT_OT].id;
535 	as_out_interface_alt_0_desc.iInterface = us[STR_AS_OUT_IF_ALT0].id;
536 	as_out_interface_alt_1_desc.iInterface = us[STR_AS_OUT_IF_ALT1].id;
537 	io_in_it_desc.iTerminal = us[STR_IO_IN_IT].id;
538 	io_in_it_desc.iChannelNames = us[STR_IO_IN_IT_CH_NAMES].id;
539 	usb_in_ot_desc.iTerminal = us[STR_USB_IN_OT].id;
540 	as_in_interface_alt_0_desc.iInterface = us[STR_AS_IN_IF_ALT0].id;
541 	as_in_interface_alt_1_desc.iInterface = us[STR_AS_IN_IF_ALT1].id;
542 
543 	/* Set channel numbers */
544 	usb_out_it_desc.bNrChannels = num_channels(audio_opts->c_chmask);
545 	usb_out_it_desc.wChannelConfig = cpu_to_le16(audio_opts->c_chmask);
546 	as_out_type_i_desc.bNrChannels = num_channels(audio_opts->c_chmask);
547 	as_out_type_i_desc.bSubframeSize = audio_opts->c_ssize;
548 	as_out_type_i_desc.bBitResolution = audio_opts->c_ssize * 8;
549 	io_in_it_desc.bNrChannels = num_channels(audio_opts->p_chmask);
550 	io_in_it_desc.wChannelConfig = cpu_to_le16(audio_opts->p_chmask);
551 	as_in_type_i_desc.bNrChannels = num_channels(audio_opts->p_chmask);
552 	as_in_type_i_desc.bSubframeSize = audio_opts->p_ssize;
553 	as_in_type_i_desc.bBitResolution = audio_opts->p_ssize * 8;
554 
555 	/* Set sample rates */
556 	rate = audio_opts->c_srate;
557 	sam_freq = as_out_type_i_desc.tSamFreq[0];
558 	memcpy(sam_freq, &rate, 3);
559 	rate = audio_opts->p_srate;
560 	sam_freq = as_in_type_i_desc.tSamFreq[0];
561 	memcpy(sam_freq, &rate, 3);
562 
563 	/* allocate instance-specific interface IDs, and patch descriptors */
564 	status = usb_interface_id(c, f);
565 	if (status < 0)
566 		goto fail;
567 	ac_interface_desc.bInterfaceNumber = status;
568 	uac1->ac_intf = status;
569 	uac1->ac_alt = 0;
570 
571 	status = usb_interface_id(c, f);
572 	if (status < 0)
573 		goto fail;
574 	as_out_interface_alt_0_desc.bInterfaceNumber = status;
575 	as_out_interface_alt_1_desc.bInterfaceNumber = status;
576 	uac1->as_out_intf = status;
577 	uac1->as_out_alt = 0;
578 
579 	status = usb_interface_id(c, f);
580 	if (status < 0)
581 		goto fail;
582 	as_in_interface_alt_0_desc.bInterfaceNumber = status;
583 	as_in_interface_alt_1_desc.bInterfaceNumber = status;
584 	uac1->as_in_intf = status;
585 	uac1->as_in_alt = 0;
586 
587 	audio->gadget = gadget;
588 
589 	status = -ENODEV;
590 
591 	/* allocate instance-specific endpoints */
592 	ep = usb_ep_autoconfig(cdev->gadget, &as_out_ep_desc);
593 	if (!ep)
594 		goto fail;
595 	audio->out_ep = ep;
596 	audio->out_ep->desc = &as_out_ep_desc;
597 
598 	ep = usb_ep_autoconfig(cdev->gadget, &as_in_ep_desc);
599 	if (!ep)
600 		goto fail;
601 	audio->in_ep = ep;
602 	audio->in_ep->desc = &as_in_ep_desc;
603 
604 	/* copy descriptors, and track endpoint copies */
605 	status = usb_assign_descriptors(f, f_audio_desc, f_audio_desc, NULL,
606 					NULL);
607 	if (status)
608 		goto fail;
609 
610 	audio->out_ep_maxpsize = le16_to_cpu(as_out_ep_desc.wMaxPacketSize);
611 	audio->in_ep_maxpsize = le16_to_cpu(as_in_ep_desc.wMaxPacketSize);
612 	audio->params.c_chmask = audio_opts->c_chmask;
613 	audio->params.c_srate = audio_opts->c_srate;
614 	audio->params.c_ssize = audio_opts->c_ssize;
615 	audio->params.p_chmask = audio_opts->p_chmask;
616 	audio->params.p_srate = audio_opts->p_srate;
617 	audio->params.p_ssize = audio_opts->p_ssize;
618 	audio->params.req_number = audio_opts->req_number;
619 
620 	status = g_audio_setup(audio, "UAC1_PCM", "UAC1_Gadget");
621 	if (status)
622 		goto err_card_register;
623 
624 	return 0;
625 
626 err_card_register:
627 	usb_free_all_descriptors(f);
628 fail:
629 	return status;
630 }
631 
632 /*-------------------------------------------------------------------------*/
633 
634 static inline struct f_uac1_opts *to_f_uac1_opts(struct config_item *item)
635 {
636 	return container_of(to_config_group(item), struct f_uac1_opts,
637 			    func_inst.group);
638 }
639 
640 static void f_uac1_attr_release(struct config_item *item)
641 {
642 	struct f_uac1_opts *opts = to_f_uac1_opts(item);
643 
644 	usb_put_function_instance(&opts->func_inst);
645 }
646 
647 static struct configfs_item_operations f_uac1_item_ops = {
648 	.release	= f_uac1_attr_release,
649 };
650 
651 #define UAC1_ATTRIBUTE(name)						\
652 static ssize_t f_uac1_opts_##name##_show(				\
653 					  struct config_item *item,	\
654 					  char *page)			\
655 {									\
656 	struct f_uac1_opts *opts = to_f_uac1_opts(item);		\
657 	int result;							\
658 									\
659 	mutex_lock(&opts->lock);					\
660 	result = sprintf(page, "%u\n", opts->name);			\
661 	mutex_unlock(&opts->lock);					\
662 									\
663 	return result;							\
664 }									\
665 									\
666 static ssize_t f_uac1_opts_##name##_store(				\
667 					  struct config_item *item,	\
668 					  const char *page, size_t len)	\
669 {									\
670 	struct f_uac1_opts *opts = to_f_uac1_opts(item);		\
671 	int ret;							\
672 	u32 num;							\
673 									\
674 	mutex_lock(&opts->lock);					\
675 	if (opts->refcnt) {						\
676 		ret = -EBUSY;						\
677 		goto end;						\
678 	}								\
679 									\
680 	ret = kstrtou32(page, 0, &num);					\
681 	if (ret)							\
682 		goto end;						\
683 									\
684 	opts->name = num;						\
685 	ret = len;							\
686 									\
687 end:									\
688 	mutex_unlock(&opts->lock);					\
689 	return ret;							\
690 }									\
691 									\
692 CONFIGFS_ATTR(f_uac1_opts_, name)
693 
694 UAC1_ATTRIBUTE(c_chmask);
695 UAC1_ATTRIBUTE(c_srate);
696 UAC1_ATTRIBUTE(c_ssize);
697 UAC1_ATTRIBUTE(p_chmask);
698 UAC1_ATTRIBUTE(p_srate);
699 UAC1_ATTRIBUTE(p_ssize);
700 UAC1_ATTRIBUTE(req_number);
701 
702 static struct configfs_attribute *f_uac1_attrs[] = {
703 	&f_uac1_opts_attr_c_chmask,
704 	&f_uac1_opts_attr_c_srate,
705 	&f_uac1_opts_attr_c_ssize,
706 	&f_uac1_opts_attr_p_chmask,
707 	&f_uac1_opts_attr_p_srate,
708 	&f_uac1_opts_attr_p_ssize,
709 	&f_uac1_opts_attr_req_number,
710 	NULL,
711 };
712 
713 static struct config_item_type f_uac1_func_type = {
714 	.ct_item_ops	= &f_uac1_item_ops,
715 	.ct_attrs	= f_uac1_attrs,
716 	.ct_owner	= THIS_MODULE,
717 };
718 
719 static void f_audio_free_inst(struct usb_function_instance *f)
720 {
721 	struct f_uac1_opts *opts;
722 
723 	opts = container_of(f, struct f_uac1_opts, func_inst);
724 	kfree(opts);
725 }
726 
727 static struct usb_function_instance *f_audio_alloc_inst(void)
728 {
729 	struct f_uac1_opts *opts;
730 
731 	opts = kzalloc(sizeof(*opts), GFP_KERNEL);
732 	if (!opts)
733 		return ERR_PTR(-ENOMEM);
734 
735 	mutex_init(&opts->lock);
736 	opts->func_inst.free_func_inst = f_audio_free_inst;
737 
738 	config_group_init_type_name(&opts->func_inst.group, "",
739 				    &f_uac1_func_type);
740 
741 	opts->c_chmask = UAC1_DEF_CCHMASK;
742 	opts->c_srate = UAC1_DEF_CSRATE;
743 	opts->c_ssize = UAC1_DEF_CSSIZE;
744 	opts->p_chmask = UAC1_DEF_PCHMASK;
745 	opts->p_srate = UAC1_DEF_PSRATE;
746 	opts->p_ssize = UAC1_DEF_PSSIZE;
747 	opts->req_number = UAC1_DEF_REQ_NUM;
748 	return &opts->func_inst;
749 }
750 
751 static void f_audio_free(struct usb_function *f)
752 {
753 	struct g_audio *audio;
754 	struct f_uac1_opts *opts;
755 
756 	audio = func_to_g_audio(f);
757 	opts = container_of(f->fi, struct f_uac1_opts, func_inst);
758 	kfree(audio);
759 	mutex_lock(&opts->lock);
760 	--opts->refcnt;
761 	mutex_unlock(&opts->lock);
762 }
763 
764 static void f_audio_unbind(struct usb_configuration *c, struct usb_function *f)
765 {
766 	struct g_audio *audio = func_to_g_audio(f);
767 
768 	g_audio_cleanup(audio);
769 	usb_free_all_descriptors(f);
770 
771 	audio->gadget = NULL;
772 }
773 
774 static struct usb_function *f_audio_alloc(struct usb_function_instance *fi)
775 {
776 	struct f_uac1 *uac1;
777 	struct f_uac1_opts *opts;
778 
779 	/* allocate and initialize one new instance */
780 	uac1 = kzalloc(sizeof(*uac1), GFP_KERNEL);
781 	if (!uac1)
782 		return ERR_PTR(-ENOMEM);
783 
784 	opts = container_of(fi, struct f_uac1_opts, func_inst);
785 	mutex_lock(&opts->lock);
786 	++opts->refcnt;
787 	mutex_unlock(&opts->lock);
788 
789 	uac1->g_audio.func.name = "uac1_func";
790 	uac1->g_audio.func.bind = f_audio_bind;
791 	uac1->g_audio.func.unbind = f_audio_unbind;
792 	uac1->g_audio.func.set_alt = f_audio_set_alt;
793 	uac1->g_audio.func.get_alt = f_audio_get_alt;
794 	uac1->g_audio.func.setup = f_audio_setup;
795 	uac1->g_audio.func.disable = f_audio_disable;
796 	uac1->g_audio.func.free_func = f_audio_free;
797 
798 	return &uac1->g_audio.func;
799 }
800 
801 DECLARE_USB_FUNCTION_INIT(uac1, f_audio_alloc_inst, f_audio_alloc);
802 MODULE_LICENSE("GPL");
803 MODULE_AUTHOR("Ruslan Bilovol");
804