1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * u_audio.c -- interface to USB gadget "ALSA sound card" utilities
4 *
5 * Copyright (C) 2016
6 * Author: Ruslan Bilovol <ruslan.bilovol@gmail.com>
7 *
8 * Sound card implementation was cut-and-pasted with changes
9 * from f_uac2.c and has:
10 *    Copyright (C) 2011
11 *    Yadwinder Singh (yadi.brar01@gmail.com)
12 *    Jaswinder Singh (jaswinder.singh@linaro.org)
13 */
14
15#include <linux/kernel.h>
16#include <linux/module.h>
17#include <sound/core.h>
18#include <sound/pcm.h>
19#include <sound/pcm_params.h>
20#include <sound/control.h>
21#include <sound/tlv.h>
22#include <linux/usb/audio.h>
23
24#include "u_audio.h"
25
26#define BUFF_SIZE_MAX	(PAGE_SIZE * 16)
27#define PRD_SIZE_MAX	PAGE_SIZE
28#define MIN_PERIODS	4
29
30enum {
31	UAC_FBACK_CTRL,
32	UAC_P_PITCH_CTRL,
33	UAC_MUTE_CTRL,
34	UAC_VOLUME_CTRL,
35	UAC_RATE_CTRL,
36};
37
38/* Runtime data params for one stream */
39struct uac_rtd_params {
40	struct snd_uac_chip *uac; /* parent chip */
41	bool ep_enabled; /* if the ep is enabled */
42
43	struct snd_pcm_substream *ss;
44
45	/* Ring buffer */
46	ssize_t hw_ptr;
47
48	void *rbuf;
49
50	unsigned int pitch;	/* Stream pitch ratio to 1000000 */
51	unsigned int max_psize;	/* MaxPacketSize of endpoint */
52
53	struct usb_request **reqs;
54
55	struct usb_request *req_fback; /* Feedback endpoint request */
56	bool fb_ep_enabled; /* if the ep is enabled */
57
58  /* Volume/Mute controls and their state */
59  int fu_id; /* Feature Unit ID */
60  struct snd_kcontrol *snd_kctl_volume;
61  struct snd_kcontrol *snd_kctl_mute;
62  s16 volume_min, volume_max, volume_res;
63  s16 volume;
64  int mute;
65
66	struct snd_kcontrol *snd_kctl_rate; /* read-only current rate */
67	int srate; /* selected samplerate */
68	int active; /* playback/capture running */
69
70  spinlock_t lock; /* lock for control transfers */
71
72};
73
74struct snd_uac_chip {
75	struct g_audio *audio_dev;
76
77	struct uac_rtd_params p_prm;
78	struct uac_rtd_params c_prm;
79
80	struct snd_card *card;
81	struct snd_pcm *pcm;
82
83	/* pre-calculated values for playback iso completion */
84	unsigned long long p_residue_mil;
85	unsigned int p_interval;
86	unsigned int p_framesize;
87};
88
89static const struct snd_pcm_hardware uac_pcm_hardware = {
90	.info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER
91		 | SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID
92		 | SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME,
93	.rates = SNDRV_PCM_RATE_CONTINUOUS,
94	.periods_max = BUFF_SIZE_MAX / PRD_SIZE_MAX,
95	.buffer_bytes_max = BUFF_SIZE_MAX,
96	.period_bytes_max = PRD_SIZE_MAX,
97	.periods_min = MIN_PERIODS,
98};
99
100static void u_audio_set_fback_frequency(enum usb_device_speed speed,
101					struct usb_ep *out_ep,
102					unsigned long long freq,
103					unsigned int pitch,
104					void *buf)
105{
106	u32 ff = 0;
107	const struct usb_endpoint_descriptor *ep_desc;
108
109	/*
110	 * Because the pitch base is 1000000, the final divider here
111	 * will be 1000 * 1000000 = 1953125 << 9
112	 *
113	 * Instead of dealing with big numbers lets fold this 9 left shift
114	 */
115
116	if (speed == USB_SPEED_FULL) {
117		/*
118		 * Full-speed feedback endpoints report frequency
119		 * in samples/frame
120		 * Format is encoded in Q10.10 left-justified in the 24 bits,
121		 * so that it has a Q10.14 format.
122		 *
123		 * ff = (freq << 14) / 1000
124		 */
125		freq <<= 5;
126	} else {
127		/*
128		 * High-speed feedback endpoints report frequency
129		 * in samples/microframe.
130		 * Format is encoded in Q12.13 fitted into four bytes so that
131		 * the binary point is located between the second and the third
132		 * byte fromat (that is Q16.16)
133		 *
134		 * ff = (freq << 16) / 8000
135		 *
136		 * Win10 and OSX UAC2 drivers require number of samples per packet
137		 * in order to honor the feedback value.
138		 * Linux snd-usb-audio detects the applied bit-shift automatically.
139		 */
140		ep_desc = out_ep->desc;
141		freq <<= 4 + (ep_desc->bInterval - 1);
142	}
143
144	ff = DIV_ROUND_CLOSEST_ULL((freq * pitch), 1953125);
145
146	*(__le32 *)buf = cpu_to_le32(ff);
147}
148
149static void u_audio_iso_complete(struct usb_ep *ep, struct usb_request *req)
150{
151	unsigned int pending;
152	unsigned int hw_ptr;
153	int status = req->status;
154	struct snd_pcm_substream *substream;
155	struct snd_pcm_runtime *runtime;
156	struct uac_rtd_params *prm = req->context;
157	struct snd_uac_chip *uac = prm->uac;
158	unsigned int frames, p_pktsize;
159	unsigned long long pitched_rate_mil, p_pktsize_residue_mil,
160			residue_frames_mil, div_result;
161
162	/* i/f shutting down */
163	if (!prm->ep_enabled) {
164		usb_ep_free_request(ep, req);
165		return;
166	}
167
168	if (req->status == -ESHUTDOWN)
169		return;
170
171	/*
172	 * We can't really do much about bad xfers.
173	 * Afterall, the ISOCH xfers could fail legitimately.
174	 */
175	if (status)
176		pr_debug("%s: iso_complete status(%d) %d/%d\n",
177			__func__, status, req->actual, req->length);
178
179	substream = prm->ss;
180
181	/* Do nothing if ALSA isn't active */
182	if (!substream)
183		goto exit;
184
185	snd_pcm_stream_lock(substream);
186
187	runtime = substream->runtime;
188	if (!runtime || !snd_pcm_running(substream)) {
189		snd_pcm_stream_unlock(substream);
190		goto exit;
191	}
192
193	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
194		/*
195		 * For each IN packet, take the quotient of the current data
196		 * rate and the endpoint's interval as the base packet size.
197		 * If there is a residue from this division, add it to the
198		 * residue accumulator.
199		 */
200		unsigned long long p_interval_mil = uac->p_interval * 1000000ULL;
201
202		pitched_rate_mil = (unsigned long long) prm->srate * prm->pitch;
203		div_result = pitched_rate_mil;
204		do_div(div_result, uac->p_interval);
205		do_div(div_result, 1000000);
206		frames = (unsigned int) div_result;
207
208		pr_debug("p_srate %d, pitch %d, interval_mil %llu, frames %d\n",
209				prm->srate, prm->pitch, p_interval_mil, frames);
210
211		p_pktsize = min_t(unsigned int,
212					uac->p_framesize * frames,
213					ep->maxpacket);
214
215		if (p_pktsize < ep->maxpacket) {
216			residue_frames_mil = pitched_rate_mil - frames * p_interval_mil;
217			p_pktsize_residue_mil = uac->p_framesize * residue_frames_mil;
218		} else
219			p_pktsize_residue_mil = 0;
220
221		req->length = p_pktsize;
222		uac->p_residue_mil += p_pktsize_residue_mil;
223
224		/*
225		 * Whenever there are more bytes in the accumulator p_residue_mil than we
226		 * need to add one more sample frame, increase this packet's
227		 * size and decrease the accumulator.
228		 */
229		div_result = uac->p_residue_mil;
230		do_div(div_result, uac->p_interval);
231		do_div(div_result, 1000000);
232		if ((unsigned int) div_result >= uac->p_framesize) {
233			req->length += uac->p_framesize;
234			uac->p_residue_mil -= uac->p_framesize * p_interval_mil;
235			pr_debug("increased req length to %d\n", req->length);
236		}
237		pr_debug("remains uac->p_residue_mil %llu\n", uac->p_residue_mil);
238
239		req->actual = req->length;
240	}
241
242	hw_ptr = prm->hw_ptr;
243
244	/* Pack USB load in ALSA ring buffer */
245	pending = runtime->dma_bytes - hw_ptr;
246
247	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
248		if (unlikely(pending < req->actual)) {
249			memcpy(req->buf, runtime->dma_area + hw_ptr, pending);
250			memcpy(req->buf + pending, runtime->dma_area,
251			       req->actual - pending);
252		} else {
253			memcpy(req->buf, runtime->dma_area + hw_ptr,
254			       req->actual);
255		}
256	} else {
257		if (unlikely(pending < req->actual)) {
258			memcpy(runtime->dma_area + hw_ptr, req->buf, pending);
259			memcpy(runtime->dma_area, req->buf + pending,
260			       req->actual - pending);
261		} else {
262			memcpy(runtime->dma_area + hw_ptr, req->buf,
263			       req->actual);
264		}
265	}
266
267	/* update hw_ptr after data is copied to memory */
268	prm->hw_ptr = (hw_ptr + req->actual) % runtime->dma_bytes;
269	hw_ptr = prm->hw_ptr;
270	snd_pcm_stream_unlock(substream);
271
272	if ((hw_ptr % snd_pcm_lib_period_bytes(substream)) < req->actual)
273		snd_pcm_period_elapsed(substream);
274
275exit:
276	if (usb_ep_queue(ep, req, GFP_ATOMIC))
277		dev_err(uac->card->dev, "%d Error!\n", __LINE__);
278}
279
280static void u_audio_iso_fback_complete(struct usb_ep *ep,
281				       struct usb_request *req)
282{
283	struct uac_rtd_params *prm = req->context;
284	struct snd_uac_chip *uac = prm->uac;
285	struct g_audio *audio_dev = uac->audio_dev;
286	int status = req->status;
287
288	/* i/f shutting down */
289	if (!prm->fb_ep_enabled) {
290		kfree(req->buf);
291		usb_ep_free_request(ep, req);
292		return;
293	}
294
295	if (req->status == -ESHUTDOWN)
296		return;
297
298	/*
299	 * We can't really do much about bad xfers.
300	 * Afterall, the ISOCH xfers could fail legitimately.
301	 */
302	if (status)
303		pr_debug("%s: iso_complete status(%d) %d/%d\n",
304			__func__, status, req->actual, req->length);
305
306	u_audio_set_fback_frequency(audio_dev->gadget->speed, audio_dev->out_ep,
307				    prm->srate, prm->pitch,
308				    req->buf);
309
310	if (usb_ep_queue(ep, req, GFP_ATOMIC))
311		dev_err(uac->card->dev, "%d Error!\n", __LINE__);
312}
313
314static int uac_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
315{
316	struct snd_uac_chip *uac = snd_pcm_substream_chip(substream);
317	struct uac_rtd_params *prm;
318	struct g_audio *audio_dev;
319	struct uac_params *params;
320	int err = 0;
321
322	audio_dev = uac->audio_dev;
323	params = &audio_dev->params;
324
325	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
326		prm = &uac->p_prm;
327	else
328		prm = &uac->c_prm;
329
330	/* Reset */
331	prm->hw_ptr = 0;
332
333	switch (cmd) {
334	case SNDRV_PCM_TRIGGER_START:
335	case SNDRV_PCM_TRIGGER_RESUME:
336		prm->ss = substream;
337		break;
338	case SNDRV_PCM_TRIGGER_STOP:
339	case SNDRV_PCM_TRIGGER_SUSPEND:
340		prm->ss = NULL;
341		break;
342	default:
343		err = -EINVAL;
344	}
345
346	/* Clear buffer after Play stops */
347	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && !prm->ss)
348		memset(prm->rbuf, 0, prm->max_psize * params->req_number);
349
350	return err;
351}
352
353static snd_pcm_uframes_t uac_pcm_pointer(struct snd_pcm_substream *substream)
354{
355	struct snd_uac_chip *uac = snd_pcm_substream_chip(substream);
356	struct uac_rtd_params *prm;
357
358	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
359		prm = &uac->p_prm;
360	else
361		prm = &uac->c_prm;
362
363	return bytes_to_frames(substream->runtime, prm->hw_ptr);
364}
365
366static u64 uac_ssize_to_fmt(int ssize)
367{
368	u64 ret;
369
370	switch (ssize) {
371	case 3:
372		ret = SNDRV_PCM_FMTBIT_S24_3LE;
373		break;
374	case 4:
375		ret = SNDRV_PCM_FMTBIT_S32_LE;
376		break;
377	default:
378		ret = SNDRV_PCM_FMTBIT_S16_LE;
379		break;
380	}
381
382	return ret;
383}
384
385static int uac_pcm_open(struct snd_pcm_substream *substream)
386{
387	struct snd_uac_chip *uac = snd_pcm_substream_chip(substream);
388	struct snd_pcm_runtime *runtime = substream->runtime;
389	struct g_audio *audio_dev;
390	struct uac_params *params;
391	struct uac_rtd_params *prm;
392	int p_ssize, c_ssize;
393	int p_chmask, c_chmask;
394
395	audio_dev = uac->audio_dev;
396	params = &audio_dev->params;
397	p_ssize = params->p_ssize;
398	c_ssize = params->c_ssize;
399	p_chmask = params->p_chmask;
400	c_chmask = params->c_chmask;
401	uac->p_residue_mil = 0;
402
403	runtime->hw = uac_pcm_hardware;
404
405	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
406		runtime->hw.formats = uac_ssize_to_fmt(p_ssize);
407		runtime->hw.channels_min = num_channels(p_chmask);
408		prm = &uac->p_prm;
409	} else {
410		runtime->hw.formats = uac_ssize_to_fmt(c_ssize);
411		runtime->hw.channels_min = num_channels(c_chmask);
412		prm = &uac->c_prm;
413	}
414
415	runtime->hw.period_bytes_min = 2 * prm->max_psize
416					/ runtime->hw.periods_min;
417	runtime->hw.rate_min = prm->srate;
418	runtime->hw.rate_max = runtime->hw.rate_min;
419	runtime->hw.channels_max = runtime->hw.channels_min;
420
421	snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
422
423	return 0;
424}
425
426/* ALSA cries without these function pointers */
427static int uac_pcm_null(struct snd_pcm_substream *substream)
428{
429	return 0;
430}
431
432static const struct snd_pcm_ops uac_pcm_ops = {
433	.open = uac_pcm_open,
434	.close = uac_pcm_null,
435	.trigger = uac_pcm_trigger,
436	.pointer = uac_pcm_pointer,
437	.prepare = uac_pcm_null,
438};
439
440static inline void free_ep(struct uac_rtd_params *prm, struct usb_ep *ep)
441{
442	struct snd_uac_chip *uac = prm->uac;
443	struct g_audio *audio_dev;
444	struct uac_params *params;
445	int i;
446
447	if (!prm->ep_enabled)
448		return;
449
450	audio_dev = uac->audio_dev;
451	params = &audio_dev->params;
452
453	for (i = 0; i < params->req_number; i++) {
454		if (prm->reqs[i]) {
455			if (usb_ep_dequeue(ep, prm->reqs[i]))
456				usb_ep_free_request(ep, prm->reqs[i]);
457			/*
458			 * If usb_ep_dequeue() cannot successfully dequeue the
459			 * request, the request will be freed by the completion
460			 * callback.
461			 */
462
463			prm->reqs[i] = NULL;
464		}
465	}
466
467	prm->ep_enabled = false;
468
469	if (usb_ep_disable(ep))
470		dev_err(uac->card->dev, "%s:%d Error!\n", __func__, __LINE__);
471}
472
473static inline void free_ep_fback(struct uac_rtd_params *prm, struct usb_ep *ep)
474{
475	struct snd_uac_chip *uac = prm->uac;
476
477	if (!prm->fb_ep_enabled)
478		return;
479
480	if (prm->req_fback) {
481		if (usb_ep_dequeue(ep, prm->req_fback)) {
482			kfree(prm->req_fback->buf);
483			usb_ep_free_request(ep, prm->req_fback);
484		}
485		prm->req_fback = NULL;
486	}
487
488	prm->fb_ep_enabled = false;
489
490	if (usb_ep_disable(ep))
491		dev_err(uac->card->dev, "%s:%d Error!\n", __func__, __LINE__);
492}
493
494static void set_active(struct uac_rtd_params *prm, bool active)
495{
496	// notifying through the Rate ctrl
497	struct snd_kcontrol *kctl = prm->snd_kctl_rate;
498	unsigned long flags;
499
500	spin_lock_irqsave(&prm->lock, flags);
501	if (prm->active != active) {
502		prm->active = active;
503		snd_ctl_notify(prm->uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
504				&kctl->id);
505	}
506	spin_unlock_irqrestore(&prm->lock, flags);
507}
508
509int u_audio_set_capture_srate(struct g_audio *audio_dev, int srate)
510{
511	struct uac_params *params = &audio_dev->params;
512	struct snd_uac_chip *uac = audio_dev->uac;
513	struct uac_rtd_params *prm;
514	int i;
515	unsigned long flags;
516
517	dev_dbg(&audio_dev->gadget->dev, "%s: srate %d\n", __func__, srate);
518	prm = &uac->c_prm;
519	for (i = 0; i < UAC_MAX_RATES; i++) {
520		if (params->c_srates[i] == srate) {
521			spin_lock_irqsave(&prm->lock, flags);
522			prm->srate = srate;
523			spin_unlock_irqrestore(&prm->lock, flags);
524			return 0;
525		}
526		if (params->c_srates[i] == 0)
527			break;
528	}
529
530	return -EINVAL;
531}
532EXPORT_SYMBOL_GPL(u_audio_set_capture_srate);
533
534int u_audio_get_capture_srate(struct g_audio *audio_dev, u32 *val)
535{
536	struct snd_uac_chip *uac = audio_dev->uac;
537	struct uac_rtd_params *prm;
538	unsigned long flags;
539
540	prm = &uac->c_prm;
541	spin_lock_irqsave(&prm->lock, flags);
542	*val = prm->srate;
543	spin_unlock_irqrestore(&prm->lock, flags);
544	return 0;
545}
546EXPORT_SYMBOL_GPL(u_audio_get_capture_srate);
547
548int u_audio_set_playback_srate(struct g_audio *audio_dev, int srate)
549{
550	struct uac_params *params = &audio_dev->params;
551	struct snd_uac_chip *uac = audio_dev->uac;
552	struct uac_rtd_params *prm;
553	int i;
554	unsigned long flags;
555
556	dev_dbg(&audio_dev->gadget->dev, "%s: srate %d\n", __func__, srate);
557	prm = &uac->p_prm;
558	for (i = 0; i < UAC_MAX_RATES; i++) {
559		if (params->p_srates[i] == srate) {
560			spin_lock_irqsave(&prm->lock, flags);
561			prm->srate = srate;
562			spin_unlock_irqrestore(&prm->lock, flags);
563			return 0;
564		}
565		if (params->p_srates[i] == 0)
566			break;
567	}
568
569	return -EINVAL;
570}
571EXPORT_SYMBOL_GPL(u_audio_set_playback_srate);
572
573int u_audio_get_playback_srate(struct g_audio *audio_dev, u32 *val)
574{
575	struct snd_uac_chip *uac = audio_dev->uac;
576	struct uac_rtd_params *prm;
577	unsigned long flags;
578
579	prm = &uac->p_prm;
580	spin_lock_irqsave(&prm->lock, flags);
581	*val = prm->srate;
582	spin_unlock_irqrestore(&prm->lock, flags);
583	return 0;
584}
585EXPORT_SYMBOL_GPL(u_audio_get_playback_srate);
586
587int u_audio_start_capture(struct g_audio *audio_dev)
588{
589	struct snd_uac_chip *uac = audio_dev->uac;
590	struct usb_gadget *gadget = audio_dev->gadget;
591	struct device *dev = &gadget->dev;
592	struct usb_request *req, *req_fback;
593	struct usb_ep *ep, *ep_fback;
594	struct uac_rtd_params *prm;
595	struct uac_params *params = &audio_dev->params;
596	int req_len, i;
597
598	prm = &uac->c_prm;
599	dev_dbg(dev, "start capture with rate %d\n", prm->srate);
600	ep = audio_dev->out_ep;
601	config_ep_by_speed(gadget, &audio_dev->func, ep);
602	req_len = ep->maxpacket;
603
604	prm->ep_enabled = true;
605	usb_ep_enable(ep);
606
607	for (i = 0; i < params->req_number; i++) {
608		if (!prm->reqs[i]) {
609			req = usb_ep_alloc_request(ep, GFP_ATOMIC);
610			if (req == NULL)
611				return -ENOMEM;
612
613			prm->reqs[i] = req;
614
615			req->zero = 0;
616			req->context = prm;
617			req->length = req_len;
618			req->complete = u_audio_iso_complete;
619			req->buf = prm->rbuf + i * ep->maxpacket;
620		}
621
622		if (usb_ep_queue(ep, prm->reqs[i], GFP_ATOMIC))
623			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
624	}
625
626	set_active(&uac->c_prm, true);
627
628	ep_fback = audio_dev->in_ep_fback;
629	if (!ep_fback)
630		return 0;
631
632	/* Setup feedback endpoint */
633	config_ep_by_speed(gadget, &audio_dev->func, ep_fback);
634	prm->fb_ep_enabled = true;
635	usb_ep_enable(ep_fback);
636	req_len = ep_fback->maxpacket;
637
638	req_fback = usb_ep_alloc_request(ep_fback, GFP_ATOMIC);
639	if (req_fback == NULL)
640		return -ENOMEM;
641
642	prm->req_fback = req_fback;
643	req_fback->zero = 0;
644	req_fback->context = prm;
645	req_fback->length = req_len;
646	req_fback->complete = u_audio_iso_fback_complete;
647
648	req_fback->buf = kzalloc(req_len, GFP_ATOMIC);
649	if (!req_fback->buf)
650		return -ENOMEM;
651
652	/*
653	 * Configure the feedback endpoint's reported frequency.
654	 * Always start with original frequency since its deviation can't
655	 * be meauserd at start of playback
656	 */
657	prm->pitch = 1000000;
658	u_audio_set_fback_frequency(audio_dev->gadget->speed, ep,
659				    prm->srate, prm->pitch,
660				    req_fback->buf);
661
662	if (usb_ep_queue(ep_fback, req_fback, GFP_ATOMIC))
663		dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
664
665	return 0;
666}
667EXPORT_SYMBOL_GPL(u_audio_start_capture);
668
669void u_audio_stop_capture(struct g_audio *audio_dev)
670{
671	struct snd_uac_chip *uac = audio_dev->uac;
672
673	set_active(&uac->c_prm, false);
674	if (audio_dev->in_ep_fback)
675		free_ep_fback(&uac->c_prm, audio_dev->in_ep_fback);
676	free_ep(&uac->c_prm, audio_dev->out_ep);
677}
678EXPORT_SYMBOL_GPL(u_audio_stop_capture);
679
680int u_audio_start_playback(struct g_audio *audio_dev)
681{
682	struct snd_uac_chip *uac = audio_dev->uac;
683	struct usb_gadget *gadget = audio_dev->gadget;
684	struct device *dev = &gadget->dev;
685	struct usb_request *req;
686	struct usb_ep *ep;
687	struct uac_rtd_params *prm;
688	struct uac_params *params = &audio_dev->params;
689	unsigned int factor;
690	const struct usb_endpoint_descriptor *ep_desc;
691	int req_len, i;
692	unsigned int p_pktsize;
693
694	prm = &uac->p_prm;
695	dev_dbg(dev, "start playback with rate %d\n", prm->srate);
696	ep = audio_dev->in_ep;
697	config_ep_by_speed(gadget, &audio_dev->func, ep);
698
699	ep_desc = ep->desc;
700	/*
701	 * Always start with original frequency
702	 */
703	prm->pitch = 1000000;
704
705	/* pre-calculate the playback endpoint's interval */
706	if (gadget->speed == USB_SPEED_FULL)
707		factor = 1000;
708	else
709		factor = 8000;
710
711	/* pre-compute some values for iso_complete() */
712	uac->p_framesize = params->p_ssize *
713			    num_channels(params->p_chmask);
714	uac->p_interval = factor / (1 << (ep_desc->bInterval - 1));
715	p_pktsize = min_t(unsigned int,
716				uac->p_framesize *
717					(prm->srate / uac->p_interval),
718				ep->maxpacket);
719
720	req_len = p_pktsize;
721	uac->p_residue_mil = 0;
722
723	prm->ep_enabled = true;
724	usb_ep_enable(ep);
725
726	for (i = 0; i < params->req_number; i++) {
727		if (!prm->reqs[i]) {
728			req = usb_ep_alloc_request(ep, GFP_ATOMIC);
729			if (req == NULL)
730				return -ENOMEM;
731
732			prm->reqs[i] = req;
733
734			req->zero = 0;
735			req->context = prm;
736			req->length = req_len;
737			req->complete = u_audio_iso_complete;
738			req->buf = prm->rbuf + i * ep->maxpacket;
739		}
740
741		if (usb_ep_queue(ep, prm->reqs[i], GFP_ATOMIC))
742			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
743	}
744
745	set_active(&uac->p_prm, true);
746
747	return 0;
748}
749EXPORT_SYMBOL_GPL(u_audio_start_playback);
750
751void u_audio_stop_playback(struct g_audio *audio_dev)
752{
753	struct snd_uac_chip *uac = audio_dev->uac;
754
755	set_active(&uac->p_prm, false);
756	free_ep(&uac->p_prm, audio_dev->in_ep);
757}
758EXPORT_SYMBOL_GPL(u_audio_stop_playback);
759
760void u_audio_suspend(struct g_audio *audio_dev)
761{
762	struct snd_uac_chip *uac = audio_dev->uac;
763
764	set_active(&uac->p_prm, false);
765	set_active(&uac->c_prm, false);
766}
767EXPORT_SYMBOL_GPL(u_audio_suspend);
768
769int u_audio_get_volume(struct g_audio *audio_dev, int playback, s16 *val)
770{
771	struct snd_uac_chip *uac = audio_dev->uac;
772	struct uac_rtd_params *prm;
773	unsigned long flags;
774
775	if (playback)
776		prm = &uac->p_prm;
777	else
778		prm = &uac->c_prm;
779
780	spin_lock_irqsave(&prm->lock, flags);
781	*val = prm->volume;
782	spin_unlock_irqrestore(&prm->lock, flags);
783
784	return 0;
785}
786EXPORT_SYMBOL_GPL(u_audio_get_volume);
787
788int u_audio_set_volume(struct g_audio *audio_dev, int playback, s16 val)
789{
790	struct snd_uac_chip *uac = audio_dev->uac;
791	struct uac_rtd_params *prm;
792	unsigned long flags;
793	int change = 0;
794
795	if (playback)
796		prm = &uac->p_prm;
797	else
798		prm = &uac->c_prm;
799
800	spin_lock_irqsave(&prm->lock, flags);
801	val = clamp(val, prm->volume_min, prm->volume_max);
802	if (prm->volume != val) {
803		prm->volume = val;
804		change = 1;
805	}
806	spin_unlock_irqrestore(&prm->lock, flags);
807
808	if (change)
809		snd_ctl_notify(uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
810				&prm->snd_kctl_volume->id);
811
812	return 0;
813}
814EXPORT_SYMBOL_GPL(u_audio_set_volume);
815
816int u_audio_get_mute(struct g_audio *audio_dev, int playback, int *val)
817{
818	struct snd_uac_chip *uac = audio_dev->uac;
819	struct uac_rtd_params *prm;
820	unsigned long flags;
821
822	if (playback)
823		prm = &uac->p_prm;
824	else
825		prm = &uac->c_prm;
826
827	spin_lock_irqsave(&prm->lock, flags);
828	*val = prm->mute;
829	spin_unlock_irqrestore(&prm->lock, flags);
830
831	return 0;
832}
833EXPORT_SYMBOL_GPL(u_audio_get_mute);
834
835int u_audio_set_mute(struct g_audio *audio_dev, int playback, int val)
836{
837	struct snd_uac_chip *uac = audio_dev->uac;
838	struct uac_rtd_params *prm;
839	unsigned long flags;
840	int change = 0;
841	int mute;
842
843	if (playback)
844		prm = &uac->p_prm;
845	else
846		prm = &uac->c_prm;
847
848	mute = val ? 1 : 0;
849
850	spin_lock_irqsave(&prm->lock, flags);
851	if (prm->mute != mute) {
852		prm->mute = mute;
853		change = 1;
854	}
855	spin_unlock_irqrestore(&prm->lock, flags);
856
857	if (change)
858		snd_ctl_notify(uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
859			       &prm->snd_kctl_mute->id);
860
861	return 0;
862}
863EXPORT_SYMBOL_GPL(u_audio_set_mute);
864
865
866static int u_audio_pitch_info(struct snd_kcontrol *kcontrol,
867				   struct snd_ctl_elem_info *uinfo)
868{
869	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
870	struct snd_uac_chip *uac = prm->uac;
871	struct g_audio *audio_dev = uac->audio_dev;
872	struct uac_params *params = &audio_dev->params;
873	unsigned int pitch_min, pitch_max;
874
875	pitch_min = (1000 - FBACK_SLOW_MAX) * 1000;
876	pitch_max = (1000 + params->fb_max) * 1000;
877
878	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
879	uinfo->count = 1;
880	uinfo->value.integer.min = pitch_min;
881	uinfo->value.integer.max = pitch_max;
882	uinfo->value.integer.step = 1;
883	return 0;
884}
885
886static int u_audio_pitch_get(struct snd_kcontrol *kcontrol,
887				   struct snd_ctl_elem_value *ucontrol)
888{
889	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
890
891	ucontrol->value.integer.value[0] = prm->pitch;
892
893	return 0;
894}
895
896static int u_audio_pitch_put(struct snd_kcontrol *kcontrol,
897				  struct snd_ctl_elem_value *ucontrol)
898{
899	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
900	struct snd_uac_chip *uac = prm->uac;
901	struct g_audio *audio_dev = uac->audio_dev;
902	struct uac_params *params = &audio_dev->params;
903	unsigned int val;
904	unsigned int pitch_min, pitch_max;
905	int change = 0;
906
907	pitch_min = (1000 - FBACK_SLOW_MAX) * 1000;
908	pitch_max = (1000 + params->fb_max) * 1000;
909
910	val = ucontrol->value.integer.value[0];
911
912	if (val < pitch_min)
913		val = pitch_min;
914	if (val > pitch_max)
915		val = pitch_max;
916
917	if (prm->pitch != val) {
918		prm->pitch = val;
919		change = 1;
920	}
921
922	return change;
923}
924
925static int u_audio_mute_info(struct snd_kcontrol *kcontrol,
926				   struct snd_ctl_elem_info *uinfo)
927{
928	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
929	uinfo->count = 1;
930	uinfo->value.integer.min = 0;
931	uinfo->value.integer.max = 1;
932	uinfo->value.integer.step = 1;
933
934	return 0;
935}
936
937static int u_audio_mute_get(struct snd_kcontrol *kcontrol,
938				   struct snd_ctl_elem_value *ucontrol)
939{
940	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
941	unsigned long flags;
942
943	spin_lock_irqsave(&prm->lock, flags);
944	ucontrol->value.integer.value[0] = !prm->mute;
945	spin_unlock_irqrestore(&prm->lock, flags);
946
947	return 0;
948}
949
950static int u_audio_mute_put(struct snd_kcontrol *kcontrol,
951				  struct snd_ctl_elem_value *ucontrol)
952{
953	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
954	struct snd_uac_chip *uac = prm->uac;
955	struct g_audio *audio_dev = uac->audio_dev;
956	unsigned int val;
957	unsigned long flags;
958	int change = 0;
959
960	val = !ucontrol->value.integer.value[0];
961
962	spin_lock_irqsave(&prm->lock, flags);
963	if (val != prm->mute) {
964		prm->mute = val;
965		change = 1;
966	}
967	spin_unlock_irqrestore(&prm->lock, flags);
968
969	if (change && audio_dev->notify)
970		audio_dev->notify(audio_dev, prm->fu_id, UAC_FU_MUTE);
971
972	return change;
973}
974
975/*
976 * TLV callback for mixer volume controls
977 */
978static int u_audio_volume_tlv(struct snd_kcontrol *kcontrol, int op_flag,
979			 unsigned int size, unsigned int __user *_tlv)
980{
981	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
982	DECLARE_TLV_DB_MINMAX(scale, 0, 0);
983
984	if (size < sizeof(scale))
985		return -ENOMEM;
986
987	/* UAC volume resolution is 1/256 dB, TLV is 1/100 dB */
988	scale[2] = (prm->volume_min * 100) / 256;
989	scale[3] = (prm->volume_max * 100) / 256;
990	if (copy_to_user(_tlv, scale, sizeof(scale)))
991		return -EFAULT;
992
993	return 0;
994}
995
996static int u_audio_volume_info(struct snd_kcontrol *kcontrol,
997				   struct snd_ctl_elem_info *uinfo)
998{
999	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
1000
1001	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1002	uinfo->count = 1;
1003	uinfo->value.integer.min = 0;
1004	uinfo->value.integer.max =
1005		(prm->volume_max - prm->volume_min + prm->volume_res - 1)
1006		/ prm->volume_res;
1007	uinfo->value.integer.step = 1;
1008
1009	return 0;
1010}
1011
1012static int u_audio_volume_get(struct snd_kcontrol *kcontrol,
1013				   struct snd_ctl_elem_value *ucontrol)
1014{
1015	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
1016	unsigned long flags;
1017
1018	spin_lock_irqsave(&prm->lock, flags);
1019	ucontrol->value.integer.value[0] =
1020			(prm->volume - prm->volume_min) / prm->volume_res;
1021	spin_unlock_irqrestore(&prm->lock, flags);
1022
1023	return 0;
1024}
1025
1026static int u_audio_volume_put(struct snd_kcontrol *kcontrol,
1027				  struct snd_ctl_elem_value *ucontrol)
1028{
1029	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
1030	struct snd_uac_chip *uac = prm->uac;
1031	struct g_audio *audio_dev = uac->audio_dev;
1032	unsigned int val;
1033	s16 volume;
1034	unsigned long flags;
1035	int change = 0;
1036
1037	val = ucontrol->value.integer.value[0];
1038
1039	spin_lock_irqsave(&prm->lock, flags);
1040	volume = (val * prm->volume_res) + prm->volume_min;
1041	volume = clamp(volume, prm->volume_min, prm->volume_max);
1042	if (volume != prm->volume) {
1043		prm->volume = volume;
1044		change = 1;
1045	}
1046	spin_unlock_irqrestore(&prm->lock, flags);
1047
1048	if (change && audio_dev->notify)
1049		audio_dev->notify(audio_dev, prm->fu_id, UAC_FU_VOLUME);
1050
1051	return change;
1052}
1053
1054static int get_max_srate(const int *srates)
1055{
1056	int i, max_srate = 0;
1057
1058	for (i = 0; i < UAC_MAX_RATES; i++) {
1059		if (srates[i] == 0)
1060			break;
1061		if (srates[i] > max_srate)
1062			max_srate = srates[i];
1063	}
1064	return max_srate;
1065}
1066
1067static int get_min_srate(const int *srates)
1068{
1069	int i, min_srate = INT_MAX;
1070
1071	for (i = 0; i < UAC_MAX_RATES; i++) {
1072		if (srates[i] == 0)
1073			break;
1074		if (srates[i] < min_srate)
1075			min_srate = srates[i];
1076	}
1077	return min_srate;
1078}
1079
1080static int u_audio_rate_info(struct snd_kcontrol *kcontrol,
1081				struct snd_ctl_elem_info *uinfo)
1082{
1083	const int *srates;
1084	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
1085	struct snd_uac_chip *uac = prm->uac;
1086	struct g_audio *audio_dev = uac->audio_dev;
1087	struct uac_params *params = &audio_dev->params;
1088
1089	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1090	uinfo->count = 1;
1091
1092	if (prm == &uac->c_prm)
1093		srates = params->c_srates;
1094	else
1095		srates = params->p_srates;
1096	uinfo->value.integer.min = get_min_srate(srates);
1097	uinfo->value.integer.max = get_max_srate(srates);
1098	return 0;
1099}
1100
1101static int u_audio_rate_get(struct snd_kcontrol *kcontrol,
1102						 struct snd_ctl_elem_value *ucontrol)
1103{
1104	struct uac_rtd_params *prm = snd_kcontrol_chip(kcontrol);
1105	unsigned long flags;
1106
1107	spin_lock_irqsave(&prm->lock, flags);
1108	if (prm->active)
1109		ucontrol->value.integer.value[0] = prm->srate;
1110	else
1111		/* not active: reporting zero rate */
1112		ucontrol->value.integer.value[0] = 0;
1113	spin_unlock_irqrestore(&prm->lock, flags);
1114	return 0;
1115}
1116
1117static struct snd_kcontrol_new u_audio_controls[]  = {
1118  [UAC_FBACK_CTRL] {
1119    .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
1120    .name =         "Capture Pitch 1000000",
1121    .info =         u_audio_pitch_info,
1122    .get =          u_audio_pitch_get,
1123    .put =          u_audio_pitch_put,
1124  },
1125	[UAC_P_PITCH_CTRL] {
1126		.iface =        SNDRV_CTL_ELEM_IFACE_PCM,
1127		.name =         "Playback Pitch 1000000",
1128		.info =         u_audio_pitch_info,
1129		.get =          u_audio_pitch_get,
1130		.put =          u_audio_pitch_put,
1131	},
1132  [UAC_MUTE_CTRL] {
1133		.iface =	SNDRV_CTL_ELEM_IFACE_MIXER,
1134		.name =		"", /* will be filled later */
1135		.info =		u_audio_mute_info,
1136		.get =		u_audio_mute_get,
1137		.put =		u_audio_mute_put,
1138	},
1139	[UAC_VOLUME_CTRL] {
1140		.iface =	SNDRV_CTL_ELEM_IFACE_MIXER,
1141		.name =		"", /* will be filled later */
1142		.info =		u_audio_volume_info,
1143		.get =		u_audio_volume_get,
1144		.put =		u_audio_volume_put,
1145	},
1146	[UAC_RATE_CTRL] {
1147		.iface =	SNDRV_CTL_ELEM_IFACE_PCM,
1148		.name =		"", /* will be filled later */
1149		.access =	SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1150		.info =		u_audio_rate_info,
1151		.get =		u_audio_rate_get,
1152	},
1153};
1154
1155int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
1156					const char *card_name)
1157{
1158	struct snd_uac_chip *uac;
1159	struct snd_card *card;
1160	struct snd_pcm *pcm;
1161	struct snd_kcontrol *kctl;
1162	struct uac_params *params;
1163	int p_chmask, c_chmask;
1164	int i, err;
1165
1166	if (!g_audio)
1167		return -EINVAL;
1168
1169	uac = kzalloc(sizeof(*uac), GFP_KERNEL);
1170	if (!uac)
1171		return -ENOMEM;
1172	g_audio->uac = uac;
1173	uac->audio_dev = g_audio;
1174
1175	params = &g_audio->params;
1176	p_chmask = params->p_chmask;
1177	c_chmask = params->c_chmask;
1178
1179	if (c_chmask) {
1180		struct uac_rtd_params *prm = &uac->c_prm;
1181
1182		spin_lock_init(&prm->lock);
1183		uac->c_prm.uac = uac;
1184		prm->max_psize = g_audio->out_ep_maxpsize;
1185		prm->srate = params->c_srates[0];
1186
1187		prm->reqs = kcalloc(params->req_number,
1188				    sizeof(struct usb_request *),
1189				    GFP_KERNEL);
1190		if (!prm->reqs) {
1191			err = -ENOMEM;
1192			goto fail;
1193		}
1194
1195		prm->rbuf = kcalloc(params->req_number, prm->max_psize,
1196				GFP_KERNEL);
1197		if (!prm->rbuf) {
1198			prm->max_psize = 0;
1199			err = -ENOMEM;
1200			goto fail;
1201		}
1202	}
1203
1204	if (p_chmask) {
1205		struct uac_rtd_params *prm = &uac->p_prm;
1206
1207		spin_lock_init(&prm->lock);
1208		uac->p_prm.uac = uac;
1209		prm->max_psize = g_audio->in_ep_maxpsize;
1210		prm->srate = params->p_srates[0];
1211
1212		prm->reqs = kcalloc(params->req_number,
1213				    sizeof(struct usb_request *),
1214				    GFP_KERNEL);
1215		if (!prm->reqs) {
1216			err = -ENOMEM;
1217			goto fail;
1218		}
1219
1220		prm->rbuf = kcalloc(params->req_number, prm->max_psize,
1221				GFP_KERNEL);
1222		if (!prm->rbuf) {
1223			prm->max_psize = 0;
1224			err = -ENOMEM;
1225			goto fail;
1226		}
1227	}
1228
1229	/* Choose any slot, with no id */
1230	err = snd_card_new(&g_audio->gadget->dev,
1231			-1, NULL, THIS_MODULE, 0, &card);
1232	if (err < 0)
1233		goto fail;
1234
1235	uac->card = card;
1236
1237	/*
1238	 * Create first PCM device
1239	 * Create a substream only for non-zero channel streams
1240	 */
1241	err = snd_pcm_new(uac->card, pcm_name, 0,
1242			       p_chmask ? 1 : 0, c_chmask ? 1 : 0, &pcm);
1243	if (err < 0)
1244		goto snd_fail;
1245
1246	strscpy(pcm->name, pcm_name, sizeof(pcm->name));
1247	pcm->private_data = uac;
1248	uac->pcm = pcm;
1249
1250	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &uac_pcm_ops);
1251	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &uac_pcm_ops);
1252
1253	/*
1254	 * Create mixer and controls
1255	 * Create only if it's required on USB side
1256	 */
1257	if ((c_chmask && g_audio->in_ep_fback)
1258			|| (p_chmask && params->p_fu.id)
1259			|| (c_chmask && params->c_fu.id))
1260		strscpy(card->mixername, card_name, sizeof(card->driver));
1261
1262	if (c_chmask && g_audio->in_ep_fback) {
1263		kctl = snd_ctl_new1(&u_audio_controls[UAC_FBACK_CTRL],
1264				    &uac->c_prm);
1265		if (!kctl) {
1266			err = -ENOMEM;
1267			goto snd_fail;
1268		}
1269
1270		kctl->id.device = pcm->device;
1271		kctl->id.subdevice = 0;
1272
1273		err = snd_ctl_add(card, kctl);
1274		if (err < 0)
1275			goto snd_fail;
1276	}
1277
1278	if (p_chmask) {
1279		kctl = snd_ctl_new1(&u_audio_controls[UAC_P_PITCH_CTRL],
1280				    &uac->p_prm);
1281		if (!kctl) {
1282			err = -ENOMEM;
1283			goto snd_fail;
1284		}
1285
1286		kctl->id.device = pcm->device;
1287		kctl->id.subdevice = 0;
1288
1289		err = snd_ctl_add(card, kctl);
1290		if (err < 0)
1291			goto snd_fail;
1292	}
1293
1294	for (i = 0; i <= SNDRV_PCM_STREAM_LAST; i++) {
1295		struct uac_rtd_params *prm;
1296		struct uac_fu_params *fu;
1297		char ctrl_name[24];
1298		char *direction;
1299
1300		if (!pcm->streams[i].substream_count)
1301			continue;
1302
1303		if (i == SNDRV_PCM_STREAM_PLAYBACK) {
1304			prm = &uac->p_prm;
1305			fu = &params->p_fu;
1306			direction = "Playback";
1307		} else {
1308			prm = &uac->c_prm;
1309			fu = &params->c_fu;
1310			direction = "Capture";
1311		}
1312
1313		prm->fu_id = fu->id;
1314
1315		if (fu->mute_present) {
1316			snprintf(ctrl_name, sizeof(ctrl_name),
1317					"PCM %s Switch", direction);
1318
1319			u_audio_controls[UAC_MUTE_CTRL].name = ctrl_name;
1320
1321			kctl = snd_ctl_new1(&u_audio_controls[UAC_MUTE_CTRL],
1322					    prm);
1323			if (!kctl) {
1324				err = -ENOMEM;
1325				goto snd_fail;
1326			}
1327
1328			kctl->id.device = pcm->device;
1329			kctl->id.subdevice = 0;
1330
1331			err = snd_ctl_add(card, kctl);
1332			if (err < 0)
1333				goto snd_fail;
1334			prm->snd_kctl_mute = kctl;
1335			prm->mute = 0;
1336		}
1337
1338		if (fu->volume_present) {
1339			snprintf(ctrl_name, sizeof(ctrl_name),
1340					"PCM %s Volume", direction);
1341
1342			u_audio_controls[UAC_VOLUME_CTRL].name = ctrl_name;
1343
1344			kctl = snd_ctl_new1(&u_audio_controls[UAC_VOLUME_CTRL],
1345					    prm);
1346			if (!kctl) {
1347				err = -ENOMEM;
1348				goto snd_fail;
1349			}
1350
1351			kctl->id.device = pcm->device;
1352			kctl->id.subdevice = 0;
1353
1354
1355			kctl->tlv.c = u_audio_volume_tlv;
1356			kctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ |
1357					SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
1358
1359			err = snd_ctl_add(card, kctl);
1360			if (err < 0)
1361				goto snd_fail;
1362			prm->snd_kctl_volume = kctl;
1363			prm->volume = fu->volume_max;
1364			prm->volume_max = fu->volume_max;
1365			prm->volume_min = fu->volume_min;
1366			prm->volume_res = fu->volume_res;
1367		}
1368
1369		/* Add rate control */
1370		snprintf(ctrl_name, sizeof(ctrl_name),
1371				"%s Rate", direction);
1372		u_audio_controls[UAC_RATE_CTRL].name = ctrl_name;
1373
1374		kctl = snd_ctl_new1(&u_audio_controls[UAC_RATE_CTRL], prm);
1375		if (!kctl) {
1376			err = -ENOMEM;
1377			goto snd_fail;
1378		}
1379
1380		kctl->id.device = pcm->device;
1381		kctl->id.subdevice = 0;
1382
1383		err = snd_ctl_add(card, kctl);
1384		if (err < 0)
1385			goto snd_fail;
1386		prm->snd_kctl_rate = kctl;
1387	}
1388
1389	strscpy(card->driver, card_name, sizeof(card->driver));
1390	strscpy(card->shortname, card_name, sizeof(card->shortname));
1391	sprintf(card->longname, "%s %i", card_name, card->dev->id);
1392
1393	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1394				       NULL, 0, BUFF_SIZE_MAX);
1395
1396	err = snd_card_register(card);
1397
1398	if (!err)
1399		return 0;
1400
1401snd_fail:
1402	snd_card_free(card);
1403fail:
1404	kfree(uac->p_prm.reqs);
1405	kfree(uac->c_prm.reqs);
1406	kfree(uac->p_prm.rbuf);
1407	kfree(uac->c_prm.rbuf);
1408	kfree(uac);
1409
1410	return err;
1411}
1412EXPORT_SYMBOL_GPL(g_audio_setup);
1413
1414void g_audio_cleanup(struct g_audio *g_audio)
1415{
1416	struct snd_uac_chip *uac;
1417	struct snd_card *card;
1418
1419	if (!g_audio || !g_audio->uac)
1420		return;
1421
1422	uac = g_audio->uac;
1423	card = uac->card;
1424	if (card)
1425		snd_card_free_when_closed(card);
1426
1427	kfree(uac->p_prm.reqs);
1428	kfree(uac->c_prm.reqs);
1429	kfree(uac->p_prm.rbuf);
1430	kfree(uac->c_prm.rbuf);
1431	kfree(uac);
1432}
1433EXPORT_SYMBOL_GPL(g_audio_cleanup);
1434
1435MODULE_LICENSE("GPL");
1436MODULE_DESCRIPTION("USB gadget \"ALSA sound card\" utilities");
1437MODULE_AUTHOR("Ruslan Bilovol");
1438