Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   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");