xref: /linux/sound/soc/soc-core.c (revision 2277ab4a1df50e05bc732fe9488d4e902bb8399a)
1 /*
2  * soc-core.c  --  ALSA SoC Audio Layer
3  *
4  * Copyright 2005 Wolfson Microelectronics PLC.
5  * Copyright 2005 Openedhand Ltd.
6  *
7  * Author: Liam Girdwood <lrg@slimlogic.co.uk>
8  *         with code, comments and ideas from :-
9  *         Richard Purdie <richard@openedhand.com>
10  *
11  *  This program is free software; you can redistribute  it and/or modify it
12  *  under  the terms of  the GNU General  Public License as published by the
13  *  Free Software Foundation;  either version 2 of the  License, or (at your
14  *  option) any later version.
15  *
16  *  TODO:
17  *   o Add hw rules to enforce rates, etc.
18  *   o More testing with other codecs/machines.
19  *   o Add more codecs and platforms to ensure good API coverage.
20  *   o Support TDM on PCM and I2S
21  */
22 
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/init.h>
26 #include <linux/delay.h>
27 #include <linux/pm.h>
28 #include <linux/bitops.h>
29 #include <linux/debugfs.h>
30 #include <linux/platform_device.h>
31 #include <sound/core.h>
32 #include <sound/pcm.h>
33 #include <sound/pcm_params.h>
34 #include <sound/soc.h>
35 #include <sound/soc-dapm.h>
36 #include <sound/initval.h>
37 
38 static DEFINE_MUTEX(pcm_mutex);
39 static DEFINE_MUTEX(io_mutex);
40 static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
41 
42 #ifdef CONFIG_DEBUG_FS
43 static struct dentry *debugfs_root;
44 #endif
45 
46 static DEFINE_MUTEX(client_mutex);
47 static LIST_HEAD(card_list);
48 static LIST_HEAD(dai_list);
49 static LIST_HEAD(platform_list);
50 static LIST_HEAD(codec_list);
51 
52 static int snd_soc_register_card(struct snd_soc_card *card);
53 static int snd_soc_unregister_card(struct snd_soc_card *card);
54 
55 /*
56  * This is a timeout to do a DAPM powerdown after a stream is closed().
57  * It can be used to eliminate pops between different playback streams, e.g.
58  * between two audio tracks.
59  */
60 static int pmdown_time = 5000;
61 module_param(pmdown_time, int, 0);
62 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
63 
64 /*
65  * This function forces any delayed work to be queued and run.
66  */
67 static int run_delayed_work(struct delayed_work *dwork)
68 {
69 	int ret;
70 
71 	/* cancel any work waiting to be queued. */
72 	ret = cancel_delayed_work(dwork);
73 
74 	/* if there was any work waiting then we run it now and
75 	 * wait for it's completion */
76 	if (ret) {
77 		schedule_delayed_work(dwork, 0);
78 		flush_scheduled_work();
79 	}
80 	return ret;
81 }
82 
83 #ifdef CONFIG_SND_SOC_AC97_BUS
84 /* unregister ac97 codec */
85 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
86 {
87 	if (codec->ac97->dev.bus)
88 		device_unregister(&codec->ac97->dev);
89 	return 0;
90 }
91 
92 /* stop no dev release warning */
93 static void soc_ac97_device_release(struct device *dev){}
94 
95 /* register ac97 codec to bus */
96 static int soc_ac97_dev_register(struct snd_soc_codec *codec)
97 {
98 	int err;
99 
100 	codec->ac97->dev.bus = &ac97_bus_type;
101 	codec->ac97->dev.parent = codec->card->dev;
102 	codec->ac97->dev.release = soc_ac97_device_release;
103 
104 	dev_set_name(&codec->ac97->dev, "%d-%d:%s",
105 		     codec->card->number, 0, codec->name);
106 	err = device_register(&codec->ac97->dev);
107 	if (err < 0) {
108 		snd_printk(KERN_ERR "Can't register ac97 bus\n");
109 		codec->ac97->dev.bus = NULL;
110 		return err;
111 	}
112 	return 0;
113 }
114 #endif
115 
116 static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream)
117 {
118 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
119 	struct snd_soc_device *socdev = rtd->socdev;
120 	struct snd_soc_card *card = socdev->card;
121 	struct snd_soc_dai_link *machine = rtd->dai;
122 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
123 	struct snd_soc_dai *codec_dai = machine->codec_dai;
124 	int ret;
125 
126 	if (codec_dai->symmetric_rates || cpu_dai->symmetric_rates ||
127 	    machine->symmetric_rates) {
128 		dev_dbg(card->dev, "Symmetry forces %dHz rate\n",
129 			machine->rate);
130 
131 		ret = snd_pcm_hw_constraint_minmax(substream->runtime,
132 						   SNDRV_PCM_HW_PARAM_RATE,
133 						   machine->rate,
134 						   machine->rate);
135 		if (ret < 0) {
136 			dev_err(card->dev,
137 				"Unable to apply rate symmetry constraint: %d\n", ret);
138 			return ret;
139 		}
140 	}
141 
142 	return 0;
143 }
144 
145 /*
146  * Called by ALSA when a PCM substream is opened, the runtime->hw record is
147  * then initialized and any private data can be allocated. This also calls
148  * startup for the cpu DAI, platform, machine and codec DAI.
149  */
150 static int soc_pcm_open(struct snd_pcm_substream *substream)
151 {
152 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
153 	struct snd_soc_device *socdev = rtd->socdev;
154 	struct snd_soc_card *card = socdev->card;
155 	struct snd_pcm_runtime *runtime = substream->runtime;
156 	struct snd_soc_dai_link *machine = rtd->dai;
157 	struct snd_soc_platform *platform = card->platform;
158 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
159 	struct snd_soc_dai *codec_dai = machine->codec_dai;
160 	int ret = 0;
161 
162 	mutex_lock(&pcm_mutex);
163 
164 	/* startup the audio subsystem */
165 	if (cpu_dai->ops->startup) {
166 		ret = cpu_dai->ops->startup(substream, cpu_dai);
167 		if (ret < 0) {
168 			printk(KERN_ERR "asoc: can't open interface %s\n",
169 				cpu_dai->name);
170 			goto out;
171 		}
172 	}
173 
174 	if (platform->pcm_ops->open) {
175 		ret = platform->pcm_ops->open(substream);
176 		if (ret < 0) {
177 			printk(KERN_ERR "asoc: can't open platform %s\n", platform->name);
178 			goto platform_err;
179 		}
180 	}
181 
182 	if (codec_dai->ops->startup) {
183 		ret = codec_dai->ops->startup(substream, codec_dai);
184 		if (ret < 0) {
185 			printk(KERN_ERR "asoc: can't open codec %s\n",
186 				codec_dai->name);
187 			goto codec_dai_err;
188 		}
189 	}
190 
191 	if (machine->ops && machine->ops->startup) {
192 		ret = machine->ops->startup(substream);
193 		if (ret < 0) {
194 			printk(KERN_ERR "asoc: %s startup failed\n", machine->name);
195 			goto machine_err;
196 		}
197 	}
198 
199 	/* Check that the codec and cpu DAI's are compatible */
200 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
201 		runtime->hw.rate_min =
202 			max(codec_dai->playback.rate_min,
203 			    cpu_dai->playback.rate_min);
204 		runtime->hw.rate_max =
205 			min(codec_dai->playback.rate_max,
206 			    cpu_dai->playback.rate_max);
207 		runtime->hw.channels_min =
208 			max(codec_dai->playback.channels_min,
209 				cpu_dai->playback.channels_min);
210 		runtime->hw.channels_max =
211 			min(codec_dai->playback.channels_max,
212 				cpu_dai->playback.channels_max);
213 		runtime->hw.formats =
214 			codec_dai->playback.formats & cpu_dai->playback.formats;
215 		runtime->hw.rates =
216 			codec_dai->playback.rates & cpu_dai->playback.rates;
217 	} else {
218 		runtime->hw.rate_min =
219 			max(codec_dai->capture.rate_min,
220 			    cpu_dai->capture.rate_min);
221 		runtime->hw.rate_max =
222 			min(codec_dai->capture.rate_max,
223 			    cpu_dai->capture.rate_max);
224 		runtime->hw.channels_min =
225 			max(codec_dai->capture.channels_min,
226 				cpu_dai->capture.channels_min);
227 		runtime->hw.channels_max =
228 			min(codec_dai->capture.channels_max,
229 				cpu_dai->capture.channels_max);
230 		runtime->hw.formats =
231 			codec_dai->capture.formats & cpu_dai->capture.formats;
232 		runtime->hw.rates =
233 			codec_dai->capture.rates & cpu_dai->capture.rates;
234 	}
235 
236 	snd_pcm_limit_hw_rates(runtime);
237 	if (!runtime->hw.rates) {
238 		printk(KERN_ERR "asoc: %s <-> %s No matching rates\n",
239 			codec_dai->name, cpu_dai->name);
240 		goto machine_err;
241 	}
242 	if (!runtime->hw.formats) {
243 		printk(KERN_ERR "asoc: %s <-> %s No matching formats\n",
244 			codec_dai->name, cpu_dai->name);
245 		goto machine_err;
246 	}
247 	if (!runtime->hw.channels_min || !runtime->hw.channels_max) {
248 		printk(KERN_ERR "asoc: %s <-> %s No matching channels\n",
249 			codec_dai->name, cpu_dai->name);
250 		goto machine_err;
251 	}
252 
253 	/* Symmetry only applies if we've already got an active stream. */
254 	if (cpu_dai->active || codec_dai->active) {
255 		ret = soc_pcm_apply_symmetry(substream);
256 		if (ret != 0)
257 			goto machine_err;
258 	}
259 
260 	pr_debug("asoc: %s <-> %s info:\n", codec_dai->name, cpu_dai->name);
261 	pr_debug("asoc: rate mask 0x%x\n", runtime->hw.rates);
262 	pr_debug("asoc: min ch %d max ch %d\n", runtime->hw.channels_min,
263 		 runtime->hw.channels_max);
264 	pr_debug("asoc: min rate %d max rate %d\n", runtime->hw.rate_min,
265 		 runtime->hw.rate_max);
266 
267 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
268 		cpu_dai->playback.active = codec_dai->playback.active = 1;
269 	else
270 		cpu_dai->capture.active = codec_dai->capture.active = 1;
271 	cpu_dai->active = codec_dai->active = 1;
272 	cpu_dai->runtime = runtime;
273 	card->codec->active++;
274 	mutex_unlock(&pcm_mutex);
275 	return 0;
276 
277 machine_err:
278 	if (machine->ops && machine->ops->shutdown)
279 		machine->ops->shutdown(substream);
280 
281 codec_dai_err:
282 	if (platform->pcm_ops->close)
283 		platform->pcm_ops->close(substream);
284 
285 platform_err:
286 	if (cpu_dai->ops->shutdown)
287 		cpu_dai->ops->shutdown(substream, cpu_dai);
288 out:
289 	mutex_unlock(&pcm_mutex);
290 	return ret;
291 }
292 
293 /*
294  * Power down the audio subsystem pmdown_time msecs after close is called.
295  * This is to ensure there are no pops or clicks in between any music tracks
296  * due to DAPM power cycling.
297  */
298 static void close_delayed_work(struct work_struct *work)
299 {
300 	struct snd_soc_card *card = container_of(work, struct snd_soc_card,
301 						 delayed_work.work);
302 	struct snd_soc_codec *codec = card->codec;
303 	struct snd_soc_dai *codec_dai;
304 	int i;
305 
306 	mutex_lock(&pcm_mutex);
307 	for (i = 0; i < codec->num_dai; i++) {
308 		codec_dai = &codec->dai[i];
309 
310 		pr_debug("pop wq checking: %s status: %s waiting: %s\n",
311 			 codec_dai->playback.stream_name,
312 			 codec_dai->playback.active ? "active" : "inactive",
313 			 codec_dai->pop_wait ? "yes" : "no");
314 
315 		/* are we waiting on this codec DAI stream */
316 		if (codec_dai->pop_wait == 1) {
317 			codec_dai->pop_wait = 0;
318 			snd_soc_dapm_stream_event(codec,
319 				codec_dai->playback.stream_name,
320 				SND_SOC_DAPM_STREAM_STOP);
321 		}
322 	}
323 	mutex_unlock(&pcm_mutex);
324 }
325 
326 /*
327  * Called by ALSA when a PCM substream is closed. Private data can be
328  * freed here. The cpu DAI, codec DAI, machine and platform are also
329  * shutdown.
330  */
331 static int soc_codec_close(struct snd_pcm_substream *substream)
332 {
333 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
334 	struct snd_soc_device *socdev = rtd->socdev;
335 	struct snd_soc_card *card = socdev->card;
336 	struct snd_soc_dai_link *machine = rtd->dai;
337 	struct snd_soc_platform *platform = card->platform;
338 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
339 	struct snd_soc_dai *codec_dai = machine->codec_dai;
340 	struct snd_soc_codec *codec = card->codec;
341 
342 	mutex_lock(&pcm_mutex);
343 
344 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
345 		cpu_dai->playback.active = codec_dai->playback.active = 0;
346 	else
347 		cpu_dai->capture.active = codec_dai->capture.active = 0;
348 
349 	if (codec_dai->playback.active == 0 &&
350 		codec_dai->capture.active == 0) {
351 		cpu_dai->active = codec_dai->active = 0;
352 	}
353 	codec->active--;
354 
355 	/* Muting the DAC suppresses artifacts caused during digital
356 	 * shutdown, for example from stopping clocks.
357 	 */
358 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
359 		snd_soc_dai_digital_mute(codec_dai, 1);
360 
361 	if (cpu_dai->ops->shutdown)
362 		cpu_dai->ops->shutdown(substream, cpu_dai);
363 
364 	if (codec_dai->ops->shutdown)
365 		codec_dai->ops->shutdown(substream, codec_dai);
366 
367 	if (machine->ops && machine->ops->shutdown)
368 		machine->ops->shutdown(substream);
369 
370 	if (platform->pcm_ops->close)
371 		platform->pcm_ops->close(substream);
372 	cpu_dai->runtime = NULL;
373 
374 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
375 		/* start delayed pop wq here for playback streams */
376 		codec_dai->pop_wait = 1;
377 		schedule_delayed_work(&card->delayed_work,
378 			msecs_to_jiffies(pmdown_time));
379 	} else {
380 		/* capture streams can be powered down now */
381 		snd_soc_dapm_stream_event(codec,
382 			codec_dai->capture.stream_name,
383 			SND_SOC_DAPM_STREAM_STOP);
384 	}
385 
386 	mutex_unlock(&pcm_mutex);
387 	return 0;
388 }
389 
390 /*
391  * Called by ALSA when the PCM substream is prepared, can set format, sample
392  * rate, etc.  This function is non atomic and can be called multiple times,
393  * it can refer to the runtime info.
394  */
395 static int soc_pcm_prepare(struct snd_pcm_substream *substream)
396 {
397 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
398 	struct snd_soc_device *socdev = rtd->socdev;
399 	struct snd_soc_card *card = socdev->card;
400 	struct snd_soc_dai_link *machine = rtd->dai;
401 	struct snd_soc_platform *platform = card->platform;
402 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
403 	struct snd_soc_dai *codec_dai = machine->codec_dai;
404 	struct snd_soc_codec *codec = card->codec;
405 	int ret = 0;
406 
407 	mutex_lock(&pcm_mutex);
408 
409 	if (machine->ops && machine->ops->prepare) {
410 		ret = machine->ops->prepare(substream);
411 		if (ret < 0) {
412 			printk(KERN_ERR "asoc: machine prepare error\n");
413 			goto out;
414 		}
415 	}
416 
417 	if (platform->pcm_ops->prepare) {
418 		ret = platform->pcm_ops->prepare(substream);
419 		if (ret < 0) {
420 			printk(KERN_ERR "asoc: platform prepare error\n");
421 			goto out;
422 		}
423 	}
424 
425 	if (codec_dai->ops->prepare) {
426 		ret = codec_dai->ops->prepare(substream, codec_dai);
427 		if (ret < 0) {
428 			printk(KERN_ERR "asoc: codec DAI prepare error\n");
429 			goto out;
430 		}
431 	}
432 
433 	if (cpu_dai->ops->prepare) {
434 		ret = cpu_dai->ops->prepare(substream, cpu_dai);
435 		if (ret < 0) {
436 			printk(KERN_ERR "asoc: cpu DAI prepare error\n");
437 			goto out;
438 		}
439 	}
440 
441 	/* cancel any delayed stream shutdown that is pending */
442 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
443 	    codec_dai->pop_wait) {
444 		codec_dai->pop_wait = 0;
445 		cancel_delayed_work(&card->delayed_work);
446 	}
447 
448 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
449 		snd_soc_dapm_stream_event(codec,
450 					  codec_dai->playback.stream_name,
451 					  SND_SOC_DAPM_STREAM_START);
452 	else
453 		snd_soc_dapm_stream_event(codec,
454 					  codec_dai->capture.stream_name,
455 					  SND_SOC_DAPM_STREAM_START);
456 
457 	snd_soc_dai_digital_mute(codec_dai, 0);
458 
459 out:
460 	mutex_unlock(&pcm_mutex);
461 	return ret;
462 }
463 
464 /*
465  * Called by ALSA when the hardware params are set by application. This
466  * function can also be called multiple times and can allocate buffers
467  * (using snd_pcm_lib_* ). It's non-atomic.
468  */
469 static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
470 				struct snd_pcm_hw_params *params)
471 {
472 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
473 	struct snd_soc_device *socdev = rtd->socdev;
474 	struct snd_soc_dai_link *machine = rtd->dai;
475 	struct snd_soc_card *card = socdev->card;
476 	struct snd_soc_platform *platform = card->platform;
477 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
478 	struct snd_soc_dai *codec_dai = machine->codec_dai;
479 	int ret = 0;
480 
481 	mutex_lock(&pcm_mutex);
482 
483 	if (machine->ops && machine->ops->hw_params) {
484 		ret = machine->ops->hw_params(substream, params);
485 		if (ret < 0) {
486 			printk(KERN_ERR "asoc: machine hw_params failed\n");
487 			goto out;
488 		}
489 	}
490 
491 	if (codec_dai->ops->hw_params) {
492 		ret = codec_dai->ops->hw_params(substream, params, codec_dai);
493 		if (ret < 0) {
494 			printk(KERN_ERR "asoc: can't set codec %s hw params\n",
495 				codec_dai->name);
496 			goto codec_err;
497 		}
498 	}
499 
500 	if (cpu_dai->ops->hw_params) {
501 		ret = cpu_dai->ops->hw_params(substream, params, cpu_dai);
502 		if (ret < 0) {
503 			printk(KERN_ERR "asoc: interface %s hw params failed\n",
504 				cpu_dai->name);
505 			goto interface_err;
506 		}
507 	}
508 
509 	if (platform->pcm_ops->hw_params) {
510 		ret = platform->pcm_ops->hw_params(substream, params);
511 		if (ret < 0) {
512 			printk(KERN_ERR "asoc: platform %s hw params failed\n",
513 				platform->name);
514 			goto platform_err;
515 		}
516 	}
517 
518 	machine->rate = params_rate(params);
519 
520 out:
521 	mutex_unlock(&pcm_mutex);
522 	return ret;
523 
524 platform_err:
525 	if (cpu_dai->ops->hw_free)
526 		cpu_dai->ops->hw_free(substream, cpu_dai);
527 
528 interface_err:
529 	if (codec_dai->ops->hw_free)
530 		codec_dai->ops->hw_free(substream, codec_dai);
531 
532 codec_err:
533 	if (machine->ops && machine->ops->hw_free)
534 		machine->ops->hw_free(substream);
535 
536 	mutex_unlock(&pcm_mutex);
537 	return ret;
538 }
539 
540 /*
541  * Free's resources allocated by hw_params, can be called multiple times
542  */
543 static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
544 {
545 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
546 	struct snd_soc_device *socdev = rtd->socdev;
547 	struct snd_soc_dai_link *machine = rtd->dai;
548 	struct snd_soc_card *card = socdev->card;
549 	struct snd_soc_platform *platform = card->platform;
550 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
551 	struct snd_soc_dai *codec_dai = machine->codec_dai;
552 	struct snd_soc_codec *codec = card->codec;
553 
554 	mutex_lock(&pcm_mutex);
555 
556 	/* apply codec digital mute */
557 	if (!codec->active)
558 		snd_soc_dai_digital_mute(codec_dai, 1);
559 
560 	/* free any machine hw params */
561 	if (machine->ops && machine->ops->hw_free)
562 		machine->ops->hw_free(substream);
563 
564 	/* free any DMA resources */
565 	if (platform->pcm_ops->hw_free)
566 		platform->pcm_ops->hw_free(substream);
567 
568 	/* now free hw params for the DAI's  */
569 	if (codec_dai->ops->hw_free)
570 		codec_dai->ops->hw_free(substream, codec_dai);
571 
572 	if (cpu_dai->ops->hw_free)
573 		cpu_dai->ops->hw_free(substream, cpu_dai);
574 
575 	mutex_unlock(&pcm_mutex);
576 	return 0;
577 }
578 
579 static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
580 {
581 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
582 	struct snd_soc_device *socdev = rtd->socdev;
583 	struct snd_soc_card *card= socdev->card;
584 	struct snd_soc_dai_link *machine = rtd->dai;
585 	struct snd_soc_platform *platform = card->platform;
586 	struct snd_soc_dai *cpu_dai = machine->cpu_dai;
587 	struct snd_soc_dai *codec_dai = machine->codec_dai;
588 	int ret;
589 
590 	if (codec_dai->ops->trigger) {
591 		ret = codec_dai->ops->trigger(substream, cmd, codec_dai);
592 		if (ret < 0)
593 			return ret;
594 	}
595 
596 	if (platform->pcm_ops->trigger) {
597 		ret = platform->pcm_ops->trigger(substream, cmd);
598 		if (ret < 0)
599 			return ret;
600 	}
601 
602 	if (cpu_dai->ops->trigger) {
603 		ret = cpu_dai->ops->trigger(substream, cmd, cpu_dai);
604 		if (ret < 0)
605 			return ret;
606 	}
607 	return 0;
608 }
609 
610 /* ASoC PCM operations */
611 static struct snd_pcm_ops soc_pcm_ops = {
612 	.open		= soc_pcm_open,
613 	.close		= soc_codec_close,
614 	.hw_params	= soc_pcm_hw_params,
615 	.hw_free	= soc_pcm_hw_free,
616 	.prepare	= soc_pcm_prepare,
617 	.trigger	= soc_pcm_trigger,
618 };
619 
620 #ifdef CONFIG_PM
621 /* powers down audio subsystem for suspend */
622 static int soc_suspend(struct platform_device *pdev, pm_message_t state)
623 {
624 	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
625 	struct snd_soc_card *card = socdev->card;
626 	struct snd_soc_platform *platform = card->platform;
627 	struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
628 	struct snd_soc_codec *codec = card->codec;
629 	int i;
630 
631 	/* If the initialization of this soc device failed, there is no codec
632 	 * associated with it. Just bail out in this case.
633 	 */
634 	if (!codec)
635 		return 0;
636 
637 	/* Due to the resume being scheduled into a workqueue we could
638 	* suspend before that's finished - wait for it to complete.
639 	 */
640 	snd_power_lock(codec->card);
641 	snd_power_wait(codec->card, SNDRV_CTL_POWER_D0);
642 	snd_power_unlock(codec->card);
643 
644 	/* we're going to block userspace touching us until resume completes */
645 	snd_power_change_state(codec->card, SNDRV_CTL_POWER_D3hot);
646 
647 	/* mute any active DAC's */
648 	for (i = 0; i < card->num_links; i++) {
649 		struct snd_soc_dai *dai = card->dai_link[i].codec_dai;
650 		if (dai->ops->digital_mute && dai->playback.active)
651 			dai->ops->digital_mute(dai, 1);
652 	}
653 
654 	/* suspend all pcms */
655 	for (i = 0; i < card->num_links; i++)
656 		snd_pcm_suspend_all(card->dai_link[i].pcm);
657 
658 	if (card->suspend_pre)
659 		card->suspend_pre(pdev, state);
660 
661 	for (i = 0; i < card->num_links; i++) {
662 		struct snd_soc_dai  *cpu_dai = card->dai_link[i].cpu_dai;
663 		if (cpu_dai->suspend && !cpu_dai->ac97_control)
664 			cpu_dai->suspend(cpu_dai);
665 		if (platform->suspend)
666 			platform->suspend(cpu_dai);
667 	}
668 
669 	/* close any waiting streams and save state */
670 	run_delayed_work(&card->delayed_work);
671 	codec->suspend_bias_level = codec->bias_level;
672 
673 	for (i = 0; i < codec->num_dai; i++) {
674 		char *stream = codec->dai[i].playback.stream_name;
675 		if (stream != NULL)
676 			snd_soc_dapm_stream_event(codec, stream,
677 				SND_SOC_DAPM_STREAM_SUSPEND);
678 		stream = codec->dai[i].capture.stream_name;
679 		if (stream != NULL)
680 			snd_soc_dapm_stream_event(codec, stream,
681 				SND_SOC_DAPM_STREAM_SUSPEND);
682 	}
683 
684 	if (codec_dev->suspend)
685 		codec_dev->suspend(pdev, state);
686 
687 	for (i = 0; i < card->num_links; i++) {
688 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
689 		if (cpu_dai->suspend && cpu_dai->ac97_control)
690 			cpu_dai->suspend(cpu_dai);
691 	}
692 
693 	if (card->suspend_post)
694 		card->suspend_post(pdev, state);
695 
696 	return 0;
697 }
698 
699 /* deferred resume work, so resume can complete before we finished
700  * setting our codec back up, which can be very slow on I2C
701  */
702 static void soc_resume_deferred(struct work_struct *work)
703 {
704 	struct snd_soc_card *card = container_of(work,
705 						 struct snd_soc_card,
706 						 deferred_resume_work);
707 	struct snd_soc_device *socdev = card->socdev;
708 	struct snd_soc_platform *platform = card->platform;
709 	struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
710 	struct snd_soc_codec *codec = card->codec;
711 	struct platform_device *pdev = to_platform_device(socdev->dev);
712 	int i;
713 
714 	/* our power state is still SNDRV_CTL_POWER_D3hot from suspend time,
715 	 * so userspace apps are blocked from touching us
716 	 */
717 
718 	dev_dbg(socdev->dev, "starting resume work\n");
719 
720 	if (card->resume_pre)
721 		card->resume_pre(pdev);
722 
723 	for (i = 0; i < card->num_links; i++) {
724 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
725 		if (cpu_dai->resume && cpu_dai->ac97_control)
726 			cpu_dai->resume(cpu_dai);
727 	}
728 
729 	if (codec_dev->resume)
730 		codec_dev->resume(pdev);
731 
732 	for (i = 0; i < codec->num_dai; i++) {
733 		char *stream = codec->dai[i].playback.stream_name;
734 		if (stream != NULL)
735 			snd_soc_dapm_stream_event(codec, stream,
736 				SND_SOC_DAPM_STREAM_RESUME);
737 		stream = codec->dai[i].capture.stream_name;
738 		if (stream != NULL)
739 			snd_soc_dapm_stream_event(codec, stream,
740 				SND_SOC_DAPM_STREAM_RESUME);
741 	}
742 
743 	/* unmute any active DACs */
744 	for (i = 0; i < card->num_links; i++) {
745 		struct snd_soc_dai *dai = card->dai_link[i].codec_dai;
746 		if (dai->ops->digital_mute && dai->playback.active)
747 			dai->ops->digital_mute(dai, 0);
748 	}
749 
750 	for (i = 0; i < card->num_links; i++) {
751 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
752 		if (cpu_dai->resume && !cpu_dai->ac97_control)
753 			cpu_dai->resume(cpu_dai);
754 		if (platform->resume)
755 			platform->resume(cpu_dai);
756 	}
757 
758 	if (card->resume_post)
759 		card->resume_post(pdev);
760 
761 	dev_dbg(socdev->dev, "resume work completed\n");
762 
763 	/* userspace can access us now we are back as we were before */
764 	snd_power_change_state(codec->card, SNDRV_CTL_POWER_D0);
765 }
766 
767 /* powers up audio subsystem after a suspend */
768 static int soc_resume(struct platform_device *pdev)
769 {
770 	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
771 	struct snd_soc_card *card = socdev->card;
772 	struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai;
773 
774 	/* AC97 devices might have other drivers hanging off them so
775 	 * need to resume immediately.  Other drivers don't have that
776 	 * problem and may take a substantial amount of time to resume
777 	 * due to I/O costs and anti-pop so handle them out of line.
778 	 */
779 	if (cpu_dai->ac97_control) {
780 		dev_dbg(socdev->dev, "Resuming AC97 immediately\n");
781 		soc_resume_deferred(&card->deferred_resume_work);
782 	} else {
783 		dev_dbg(socdev->dev, "Scheduling resume work\n");
784 		if (!schedule_work(&card->deferred_resume_work))
785 			dev_err(socdev->dev, "resume work item may be lost\n");
786 	}
787 
788 	return 0;
789 }
790 
791 #else
792 #define soc_suspend	NULL
793 #define soc_resume	NULL
794 #endif
795 
796 static void snd_soc_instantiate_card(struct snd_soc_card *card)
797 {
798 	struct platform_device *pdev = container_of(card->dev,
799 						    struct platform_device,
800 						    dev);
801 	struct snd_soc_codec_device *codec_dev = card->socdev->codec_dev;
802 	struct snd_soc_platform *platform;
803 	struct snd_soc_dai *dai;
804 	int i, found, ret, ac97;
805 
806 	if (card->instantiated)
807 		return;
808 
809 	found = 0;
810 	list_for_each_entry(platform, &platform_list, list)
811 		if (card->platform == platform) {
812 			found = 1;
813 			break;
814 		}
815 	if (!found) {
816 		dev_dbg(card->dev, "Platform %s not registered\n",
817 			card->platform->name);
818 		return;
819 	}
820 
821 	ac97 = 0;
822 	for (i = 0; i < card->num_links; i++) {
823 		found = 0;
824 		list_for_each_entry(dai, &dai_list, list)
825 			if (card->dai_link[i].cpu_dai == dai) {
826 				found = 1;
827 				break;
828 			}
829 		if (!found) {
830 			dev_dbg(card->dev, "DAI %s not registered\n",
831 				card->dai_link[i].cpu_dai->name);
832 			return;
833 		}
834 
835 		if (card->dai_link[i].cpu_dai->ac97_control)
836 			ac97 = 1;
837 	}
838 
839 	/* If we have AC97 in the system then don't wait for the
840 	 * codec.  This will need revisiting if we have to handle
841 	 * systems with mixed AC97 and non-AC97 parts.  Only check for
842 	 * DAIs currently; we can't do this per link since some AC97
843 	 * codecs have non-AC97 DAIs.
844 	 */
845 	if (!ac97)
846 		for (i = 0; i < card->num_links; i++) {
847 			found = 0;
848 			list_for_each_entry(dai, &dai_list, list)
849 				if (card->dai_link[i].codec_dai == dai) {
850 					found = 1;
851 					break;
852 				}
853 			if (!found) {
854 				dev_dbg(card->dev, "DAI %s not registered\n",
855 					card->dai_link[i].codec_dai->name);
856 				return;
857 			}
858 		}
859 
860 	/* Note that we do not current check for codec components */
861 
862 	dev_dbg(card->dev, "All components present, instantiating\n");
863 
864 	/* Found everything, bring it up */
865 	if (card->probe) {
866 		ret = card->probe(pdev);
867 		if (ret < 0)
868 			return;
869 	}
870 
871 	for (i = 0; i < card->num_links; i++) {
872 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
873 		if (cpu_dai->probe) {
874 			ret = cpu_dai->probe(pdev, cpu_dai);
875 			if (ret < 0)
876 				goto cpu_dai_err;
877 		}
878 	}
879 
880 	if (codec_dev->probe) {
881 		ret = codec_dev->probe(pdev);
882 		if (ret < 0)
883 			goto cpu_dai_err;
884 	}
885 
886 	if (platform->probe) {
887 		ret = platform->probe(pdev);
888 		if (ret < 0)
889 			goto platform_err;
890 	}
891 
892 	/* DAPM stream work */
893 	INIT_DELAYED_WORK(&card->delayed_work, close_delayed_work);
894 #ifdef CONFIG_PM
895 	/* deferred resume work */
896 	INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
897 #endif
898 
899 	card->instantiated = 1;
900 
901 	return;
902 
903 platform_err:
904 	if (codec_dev->remove)
905 		codec_dev->remove(pdev);
906 
907 cpu_dai_err:
908 	for (i--; i >= 0; i--) {
909 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
910 		if (cpu_dai->remove)
911 			cpu_dai->remove(pdev, cpu_dai);
912 	}
913 
914 	if (card->remove)
915 		card->remove(pdev);
916 }
917 
918 /*
919  * Attempt to initialise any uninitalised cards.  Must be called with
920  * client_mutex.
921  */
922 static void snd_soc_instantiate_cards(void)
923 {
924 	struct snd_soc_card *card;
925 	list_for_each_entry(card, &card_list, list)
926 		snd_soc_instantiate_card(card);
927 }
928 
929 /* probes a new socdev */
930 static int soc_probe(struct platform_device *pdev)
931 {
932 	int ret = 0;
933 	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
934 	struct snd_soc_card *card = socdev->card;
935 
936 	/* Bodge while we push things out of socdev */
937 	card->socdev = socdev;
938 
939 	/* Bodge while we unpick instantiation */
940 	card->dev = &pdev->dev;
941 	ret = snd_soc_register_card(card);
942 	if (ret != 0) {
943 		dev_err(&pdev->dev, "Failed to register card\n");
944 		return ret;
945 	}
946 
947 	return 0;
948 }
949 
950 /* removes a socdev */
951 static int soc_remove(struct platform_device *pdev)
952 {
953 	int i;
954 	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
955 	struct snd_soc_card *card = socdev->card;
956 	struct snd_soc_platform *platform = card->platform;
957 	struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
958 
959 	if (!card->instantiated)
960 		return 0;
961 
962 	run_delayed_work(&card->delayed_work);
963 
964 	if (platform->remove)
965 		platform->remove(pdev);
966 
967 	if (codec_dev->remove)
968 		codec_dev->remove(pdev);
969 
970 	for (i = 0; i < card->num_links; i++) {
971 		struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
972 		if (cpu_dai->remove)
973 			cpu_dai->remove(pdev, cpu_dai);
974 	}
975 
976 	if (card->remove)
977 		card->remove(pdev);
978 
979 	snd_soc_unregister_card(card);
980 
981 	return 0;
982 }
983 
984 /* ASoC platform driver */
985 static struct platform_driver soc_driver = {
986 	.driver		= {
987 		.name		= "soc-audio",
988 		.owner		= THIS_MODULE,
989 	},
990 	.probe		= soc_probe,
991 	.remove		= soc_remove,
992 	.suspend	= soc_suspend,
993 	.resume		= soc_resume,
994 };
995 
996 /* create a new pcm */
997 static int soc_new_pcm(struct snd_soc_device *socdev,
998 	struct snd_soc_dai_link *dai_link, int num)
999 {
1000 	struct snd_soc_card *card = socdev->card;
1001 	struct snd_soc_codec *codec = card->codec;
1002 	struct snd_soc_platform *platform = card->platform;
1003 	struct snd_soc_dai *codec_dai = dai_link->codec_dai;
1004 	struct snd_soc_dai *cpu_dai = dai_link->cpu_dai;
1005 	struct snd_soc_pcm_runtime *rtd;
1006 	struct snd_pcm *pcm;
1007 	char new_name[64];
1008 	int ret = 0, playback = 0, capture = 0;
1009 
1010 	rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL);
1011 	if (rtd == NULL)
1012 		return -ENOMEM;
1013 
1014 	rtd->dai = dai_link;
1015 	rtd->socdev = socdev;
1016 	codec_dai->codec = card->codec;
1017 
1018 	/* check client and interface hw capabilities */
1019 	sprintf(new_name, "%s %s-%d", dai_link->stream_name, codec_dai->name,
1020 		num);
1021 
1022 	if (codec_dai->playback.channels_min)
1023 		playback = 1;
1024 	if (codec_dai->capture.channels_min)
1025 		capture = 1;
1026 
1027 	ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback,
1028 		capture, &pcm);
1029 	if (ret < 0) {
1030 		printk(KERN_ERR "asoc: can't create pcm for codec %s\n",
1031 			codec->name);
1032 		kfree(rtd);
1033 		return ret;
1034 	}
1035 
1036 	dai_link->pcm = pcm;
1037 	pcm->private_data = rtd;
1038 	soc_pcm_ops.mmap = platform->pcm_ops->mmap;
1039 	soc_pcm_ops.pointer = platform->pcm_ops->pointer;
1040 	soc_pcm_ops.ioctl = platform->pcm_ops->ioctl;
1041 	soc_pcm_ops.copy = platform->pcm_ops->copy;
1042 	soc_pcm_ops.silence = platform->pcm_ops->silence;
1043 	soc_pcm_ops.ack = platform->pcm_ops->ack;
1044 	soc_pcm_ops.page = platform->pcm_ops->page;
1045 
1046 	if (playback)
1047 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops);
1048 
1049 	if (capture)
1050 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops);
1051 
1052 	ret = platform->pcm_new(codec->card, codec_dai, pcm);
1053 	if (ret < 0) {
1054 		printk(KERN_ERR "asoc: platform pcm constructor failed\n");
1055 		kfree(rtd);
1056 		return ret;
1057 	}
1058 
1059 	pcm->private_free = platform->pcm_free;
1060 	printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name,
1061 		cpu_dai->name);
1062 	return ret;
1063 }
1064 
1065 /* codec register dump */
1066 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
1067 {
1068 	int i, step = 1, count = 0;
1069 
1070 	if (!codec->reg_cache_size)
1071 		return 0;
1072 
1073 	if (codec->reg_cache_step)
1074 		step = codec->reg_cache_step;
1075 
1076 	count += sprintf(buf, "%s registers\n", codec->name);
1077 	for (i = 0; i < codec->reg_cache_size; i += step) {
1078 		count += sprintf(buf + count, "%2x: ", i);
1079 		if (count >= PAGE_SIZE - 1)
1080 			break;
1081 
1082 		if (codec->display_register)
1083 			count += codec->display_register(codec, buf + count,
1084 							 PAGE_SIZE - count, i);
1085 		else
1086 			count += snprintf(buf + count, PAGE_SIZE - count,
1087 					  "%4x", codec->read(codec, i));
1088 
1089 		if (count >= PAGE_SIZE - 1)
1090 			break;
1091 
1092 		count += snprintf(buf + count, PAGE_SIZE - count, "\n");
1093 		if (count >= PAGE_SIZE - 1)
1094 			break;
1095 	}
1096 
1097 	/* Truncate count; min() would cause a warning */
1098 	if (count >= PAGE_SIZE)
1099 		count = PAGE_SIZE - 1;
1100 
1101 	return count;
1102 }
1103 static ssize_t codec_reg_show(struct device *dev,
1104 	struct device_attribute *attr, char *buf)
1105 {
1106 	struct snd_soc_device *devdata = dev_get_drvdata(dev);
1107 	return soc_codec_reg_show(devdata->card->codec, buf);
1108 }
1109 
1110 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
1111 
1112 #ifdef CONFIG_DEBUG_FS
1113 static int codec_reg_open_file(struct inode *inode, struct file *file)
1114 {
1115 	file->private_data = inode->i_private;
1116 	return 0;
1117 }
1118 
1119 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf,
1120 			       size_t count, loff_t *ppos)
1121 {
1122 	ssize_t ret;
1123 	struct snd_soc_codec *codec = file->private_data;
1124 	char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
1125 	if (!buf)
1126 		return -ENOMEM;
1127 	ret = soc_codec_reg_show(codec, buf);
1128 	if (ret >= 0)
1129 		ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
1130 	kfree(buf);
1131 	return ret;
1132 }
1133 
1134 static ssize_t codec_reg_write_file(struct file *file,
1135 		const char __user *user_buf, size_t count, loff_t *ppos)
1136 {
1137 	char buf[32];
1138 	int buf_size;
1139 	char *start = buf;
1140 	unsigned long reg, value;
1141 	int step = 1;
1142 	struct snd_soc_codec *codec = file->private_data;
1143 
1144 	buf_size = min(count, (sizeof(buf)-1));
1145 	if (copy_from_user(buf, user_buf, buf_size))
1146 		return -EFAULT;
1147 	buf[buf_size] = 0;
1148 
1149 	if (codec->reg_cache_step)
1150 		step = codec->reg_cache_step;
1151 
1152 	while (*start == ' ')
1153 		start++;
1154 	reg = simple_strtoul(start, &start, 16);
1155 	if ((reg >= codec->reg_cache_size) || (reg % step))
1156 		return -EINVAL;
1157 	while (*start == ' ')
1158 		start++;
1159 	if (strict_strtoul(start, 16, &value))
1160 		return -EINVAL;
1161 	codec->write(codec, reg, value);
1162 	return buf_size;
1163 }
1164 
1165 static const struct file_operations codec_reg_fops = {
1166 	.open = codec_reg_open_file,
1167 	.read = codec_reg_read_file,
1168 	.write = codec_reg_write_file,
1169 };
1170 
1171 static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
1172 {
1173 	codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
1174 						 debugfs_root, codec,
1175 						 &codec_reg_fops);
1176 	if (!codec->debugfs_reg)
1177 		printk(KERN_WARNING
1178 		       "ASoC: Failed to create codec register debugfs file\n");
1179 
1180 	codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
1181 						     debugfs_root,
1182 						     &codec->pop_time);
1183 	if (!codec->debugfs_pop_time)
1184 		printk(KERN_WARNING
1185 		       "Failed to create pop time debugfs file\n");
1186 }
1187 
1188 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
1189 {
1190 	debugfs_remove(codec->debugfs_pop_time);
1191 	debugfs_remove(codec->debugfs_reg);
1192 }
1193 
1194 #else
1195 
1196 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec)
1197 {
1198 }
1199 
1200 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
1201 {
1202 }
1203 #endif
1204 
1205 /**
1206  * snd_soc_new_ac97_codec - initailise AC97 device
1207  * @codec: audio codec
1208  * @ops: AC97 bus operations
1209  * @num: AC97 codec number
1210  *
1211  * Initialises AC97 codec resources for use by ad-hoc devices only.
1212  */
1213 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
1214 	struct snd_ac97_bus_ops *ops, int num)
1215 {
1216 	mutex_lock(&codec->mutex);
1217 
1218 	codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
1219 	if (codec->ac97 == NULL) {
1220 		mutex_unlock(&codec->mutex);
1221 		return -ENOMEM;
1222 	}
1223 
1224 	codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL);
1225 	if (codec->ac97->bus == NULL) {
1226 		kfree(codec->ac97);
1227 		codec->ac97 = NULL;
1228 		mutex_unlock(&codec->mutex);
1229 		return -ENOMEM;
1230 	}
1231 
1232 	codec->ac97->bus->ops = ops;
1233 	codec->ac97->num = num;
1234 	mutex_unlock(&codec->mutex);
1235 	return 0;
1236 }
1237 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec);
1238 
1239 /**
1240  * snd_soc_free_ac97_codec - free AC97 codec device
1241  * @codec: audio codec
1242  *
1243  * Frees AC97 codec device resources.
1244  */
1245 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
1246 {
1247 	mutex_lock(&codec->mutex);
1248 	kfree(codec->ac97->bus);
1249 	kfree(codec->ac97);
1250 	codec->ac97 = NULL;
1251 	mutex_unlock(&codec->mutex);
1252 }
1253 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec);
1254 
1255 /**
1256  * snd_soc_update_bits - update codec register bits
1257  * @codec: audio codec
1258  * @reg: codec register
1259  * @mask: register mask
1260  * @value: new value
1261  *
1262  * Writes new register value.
1263  *
1264  * Returns 1 for change else 0.
1265  */
1266 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
1267 				unsigned short mask, unsigned short value)
1268 {
1269 	int change;
1270 	unsigned short old, new;
1271 
1272 	mutex_lock(&io_mutex);
1273 	old = snd_soc_read(codec, reg);
1274 	new = (old & ~mask) | value;
1275 	change = old != new;
1276 	if (change)
1277 		snd_soc_write(codec, reg, new);
1278 
1279 	mutex_unlock(&io_mutex);
1280 	return change;
1281 }
1282 EXPORT_SYMBOL_GPL(snd_soc_update_bits);
1283 
1284 /**
1285  * snd_soc_test_bits - test register for change
1286  * @codec: audio codec
1287  * @reg: codec register
1288  * @mask: register mask
1289  * @value: new value
1290  *
1291  * Tests a register with a new value and checks if the new value is
1292  * different from the old value.
1293  *
1294  * Returns 1 for change else 0.
1295  */
1296 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
1297 				unsigned short mask, unsigned short value)
1298 {
1299 	int change;
1300 	unsigned short old, new;
1301 
1302 	mutex_lock(&io_mutex);
1303 	old = snd_soc_read(codec, reg);
1304 	new = (old & ~mask) | value;
1305 	change = old != new;
1306 	mutex_unlock(&io_mutex);
1307 
1308 	return change;
1309 }
1310 EXPORT_SYMBOL_GPL(snd_soc_test_bits);
1311 
1312 /**
1313  * snd_soc_new_pcms - create new sound card and pcms
1314  * @socdev: the SoC audio device
1315  * @idx: ALSA card index
1316  * @xid: card identification
1317  *
1318  * Create a new sound card based upon the codec and interface pcms.
1319  *
1320  * Returns 0 for success, else error.
1321  */
1322 int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid)
1323 {
1324 	struct snd_soc_card *card = socdev->card;
1325 	struct snd_soc_codec *codec = card->codec;
1326 	int ret, i;
1327 
1328 	mutex_lock(&codec->mutex);
1329 
1330 	/* register a sound card */
1331 	ret = snd_card_create(idx, xid, codec->owner, 0, &codec->card);
1332 	if (ret < 0) {
1333 		printk(KERN_ERR "asoc: can't create sound card for codec %s\n",
1334 			codec->name);
1335 		mutex_unlock(&codec->mutex);
1336 		return ret;
1337 	}
1338 
1339 	codec->socdev = socdev;
1340 	codec->card->dev = socdev->dev;
1341 	codec->card->private_data = codec;
1342 	strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver));
1343 
1344 	/* create the pcms */
1345 	for (i = 0; i < card->num_links; i++) {
1346 		ret = soc_new_pcm(socdev, &card->dai_link[i], i);
1347 		if (ret < 0) {
1348 			printk(KERN_ERR "asoc: can't create pcm %s\n",
1349 				card->dai_link[i].stream_name);
1350 			mutex_unlock(&codec->mutex);
1351 			return ret;
1352 		}
1353 	}
1354 
1355 	mutex_unlock(&codec->mutex);
1356 	return ret;
1357 }
1358 EXPORT_SYMBOL_GPL(snd_soc_new_pcms);
1359 
1360 /**
1361  * snd_soc_init_card - register sound card
1362  * @socdev: the SoC audio device
1363  *
1364  * Register a SoC sound card. Also registers an AC97 device if the
1365  * codec is AC97 for ad hoc devices.
1366  *
1367  * Returns 0 for success, else error.
1368  */
1369 int snd_soc_init_card(struct snd_soc_device *socdev)
1370 {
1371 	struct snd_soc_card *card = socdev->card;
1372 	struct snd_soc_codec *codec = card->codec;
1373 	int ret = 0, i, ac97 = 0, err = 0;
1374 
1375 	for (i = 0; i < card->num_links; i++) {
1376 		if (card->dai_link[i].init) {
1377 			err = card->dai_link[i].init(codec);
1378 			if (err < 0) {
1379 				printk(KERN_ERR "asoc: failed to init %s\n",
1380 					card->dai_link[i].stream_name);
1381 				continue;
1382 			}
1383 		}
1384 		if (card->dai_link[i].codec_dai->ac97_control)
1385 			ac97 = 1;
1386 	}
1387 	snprintf(codec->card->shortname, sizeof(codec->card->shortname),
1388 		 "%s",  card->name);
1389 	snprintf(codec->card->longname, sizeof(codec->card->longname),
1390 		 "%s (%s)", card->name, codec->name);
1391 
1392 	/* Make sure all DAPM widgets are instantiated */
1393 	snd_soc_dapm_new_widgets(codec);
1394 
1395 	ret = snd_card_register(codec->card);
1396 	if (ret < 0) {
1397 		printk(KERN_ERR "asoc: failed to register soundcard for %s\n",
1398 				codec->name);
1399 		goto out;
1400 	}
1401 
1402 	mutex_lock(&codec->mutex);
1403 #ifdef CONFIG_SND_SOC_AC97_BUS
1404 	/* Only instantiate AC97 if not already done by the adaptor
1405 	 * for the generic AC97 subsystem.
1406 	 */
1407 	if (ac97 && strcmp(codec->name, "AC97") != 0) {
1408 		ret = soc_ac97_dev_register(codec);
1409 		if (ret < 0) {
1410 			printk(KERN_ERR "asoc: AC97 device register failed\n");
1411 			snd_card_free(codec->card);
1412 			mutex_unlock(&codec->mutex);
1413 			goto out;
1414 		}
1415 	}
1416 #endif
1417 
1418 	err = snd_soc_dapm_sys_add(socdev->dev);
1419 	if (err < 0)
1420 		printk(KERN_WARNING "asoc: failed to add dapm sysfs entries\n");
1421 
1422 	err = device_create_file(socdev->dev, &dev_attr_codec_reg);
1423 	if (err < 0)
1424 		printk(KERN_WARNING "asoc: failed to add codec sysfs files\n");
1425 
1426 	soc_init_codec_debugfs(codec);
1427 	mutex_unlock(&codec->mutex);
1428 
1429 out:
1430 	return ret;
1431 }
1432 EXPORT_SYMBOL_GPL(snd_soc_init_card);
1433 
1434 /**
1435  * snd_soc_free_pcms - free sound card and pcms
1436  * @socdev: the SoC audio device
1437  *
1438  * Frees sound card and pcms associated with the socdev.
1439  * Also unregister the codec if it is an AC97 device.
1440  */
1441 void snd_soc_free_pcms(struct snd_soc_device *socdev)
1442 {
1443 	struct snd_soc_codec *codec = socdev->card->codec;
1444 #ifdef CONFIG_SND_SOC_AC97_BUS
1445 	struct snd_soc_dai *codec_dai;
1446 	int i;
1447 #endif
1448 
1449 	mutex_lock(&codec->mutex);
1450 	soc_cleanup_codec_debugfs(codec);
1451 #ifdef CONFIG_SND_SOC_AC97_BUS
1452 	for (i = 0; i < codec->num_dai; i++) {
1453 		codec_dai = &codec->dai[i];
1454 		if (codec_dai->ac97_control && codec->ac97 &&
1455 		    strcmp(codec->name, "AC97") != 0) {
1456 			soc_ac97_dev_unregister(codec);
1457 			goto free_card;
1458 		}
1459 	}
1460 free_card:
1461 #endif
1462 
1463 	if (codec->card)
1464 		snd_card_free(codec->card);
1465 	device_remove_file(socdev->dev, &dev_attr_codec_reg);
1466 	mutex_unlock(&codec->mutex);
1467 }
1468 EXPORT_SYMBOL_GPL(snd_soc_free_pcms);
1469 
1470 /**
1471  * snd_soc_set_runtime_hwparams - set the runtime hardware parameters
1472  * @substream: the pcm substream
1473  * @hw: the hardware parameters
1474  *
1475  * Sets the substream runtime hardware parameters.
1476  */
1477 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
1478 	const struct snd_pcm_hardware *hw)
1479 {
1480 	struct snd_pcm_runtime *runtime = substream->runtime;
1481 	runtime->hw.info = hw->info;
1482 	runtime->hw.formats = hw->formats;
1483 	runtime->hw.period_bytes_min = hw->period_bytes_min;
1484 	runtime->hw.period_bytes_max = hw->period_bytes_max;
1485 	runtime->hw.periods_min = hw->periods_min;
1486 	runtime->hw.periods_max = hw->periods_max;
1487 	runtime->hw.buffer_bytes_max = hw->buffer_bytes_max;
1488 	runtime->hw.fifo_size = hw->fifo_size;
1489 	return 0;
1490 }
1491 EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams);
1492 
1493 /**
1494  * snd_soc_cnew - create new control
1495  * @_template: control template
1496  * @data: control private data
1497  * @long_name: control long name
1498  *
1499  * Create a new mixer control from a template control.
1500  *
1501  * Returns 0 for success, else error.
1502  */
1503 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
1504 	void *data, char *long_name)
1505 {
1506 	struct snd_kcontrol_new template;
1507 
1508 	memcpy(&template, _template, sizeof(template));
1509 	if (long_name)
1510 		template.name = long_name;
1511 	template.index = 0;
1512 
1513 	return snd_ctl_new1(&template, data);
1514 }
1515 EXPORT_SYMBOL_GPL(snd_soc_cnew);
1516 
1517 /**
1518  * snd_soc_add_controls - add an array of controls to a codec.
1519  * Convienience function to add a list of controls. Many codecs were
1520  * duplicating this code.
1521  *
1522  * @codec: codec to add controls to
1523  * @controls: array of controls to add
1524  * @num_controls: number of elements in the array
1525  *
1526  * Return 0 for success, else error.
1527  */
1528 int snd_soc_add_controls(struct snd_soc_codec *codec,
1529 	const struct snd_kcontrol_new *controls, int num_controls)
1530 {
1531 	struct snd_card *card = codec->card;
1532 	int err, i;
1533 
1534 	for (i = 0; i < num_controls; i++) {
1535 		const struct snd_kcontrol_new *control = &controls[i];
1536 		err = snd_ctl_add(card, snd_soc_cnew(control, codec, NULL));
1537 		if (err < 0) {
1538 			dev_err(codec->dev, "%s: Failed to add %s\n",
1539 				codec->name, control->name);
1540 			return err;
1541 		}
1542 	}
1543 
1544 	return 0;
1545 }
1546 EXPORT_SYMBOL_GPL(snd_soc_add_controls);
1547 
1548 /**
1549  * snd_soc_info_enum_double - enumerated double mixer info callback
1550  * @kcontrol: mixer control
1551  * @uinfo: control element information
1552  *
1553  * Callback to provide information about a double enumerated
1554  * mixer control.
1555  *
1556  * Returns 0 for success.
1557  */
1558 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
1559 	struct snd_ctl_elem_info *uinfo)
1560 {
1561 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1562 
1563 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1564 	uinfo->count = e->shift_l == e->shift_r ? 1 : 2;
1565 	uinfo->value.enumerated.items = e->max;
1566 
1567 	if (uinfo->value.enumerated.item > e->max - 1)
1568 		uinfo->value.enumerated.item = e->max - 1;
1569 	strcpy(uinfo->value.enumerated.name,
1570 		e->texts[uinfo->value.enumerated.item]);
1571 	return 0;
1572 }
1573 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
1574 
1575 /**
1576  * snd_soc_get_enum_double - enumerated double mixer get callback
1577  * @kcontrol: mixer control
1578  * @ucontrol: control element information
1579  *
1580  * Callback to get the value of a double enumerated mixer.
1581  *
1582  * Returns 0 for success.
1583  */
1584 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
1585 	struct snd_ctl_elem_value *ucontrol)
1586 {
1587 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1588 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1589 	unsigned short val, bitmask;
1590 
1591 	for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
1592 		;
1593 	val = snd_soc_read(codec, e->reg);
1594 	ucontrol->value.enumerated.item[0]
1595 		= (val >> e->shift_l) & (bitmask - 1);
1596 	if (e->shift_l != e->shift_r)
1597 		ucontrol->value.enumerated.item[1] =
1598 			(val >> e->shift_r) & (bitmask - 1);
1599 
1600 	return 0;
1601 }
1602 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double);
1603 
1604 /**
1605  * snd_soc_put_enum_double - enumerated double mixer put callback
1606  * @kcontrol: mixer control
1607  * @ucontrol: control element information
1608  *
1609  * Callback to set the value of a double enumerated mixer.
1610  *
1611  * Returns 0 for success.
1612  */
1613 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
1614 	struct snd_ctl_elem_value *ucontrol)
1615 {
1616 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1617 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1618 	unsigned short val;
1619 	unsigned short mask, bitmask;
1620 
1621 	for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
1622 		;
1623 	if (ucontrol->value.enumerated.item[0] > e->max - 1)
1624 		return -EINVAL;
1625 	val = ucontrol->value.enumerated.item[0] << e->shift_l;
1626 	mask = (bitmask - 1) << e->shift_l;
1627 	if (e->shift_l != e->shift_r) {
1628 		if (ucontrol->value.enumerated.item[1] > e->max - 1)
1629 			return -EINVAL;
1630 		val |= ucontrol->value.enumerated.item[1] << e->shift_r;
1631 		mask |= (bitmask - 1) << e->shift_r;
1632 	}
1633 
1634 	return snd_soc_update_bits(codec, e->reg, mask, val);
1635 }
1636 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);
1637 
1638 /**
1639  * snd_soc_get_value_enum_double - semi enumerated double mixer get callback
1640  * @kcontrol: mixer control
1641  * @ucontrol: control element information
1642  *
1643  * Callback to get the value of a double semi enumerated mixer.
1644  *
1645  * Semi enumerated mixer: the enumerated items are referred as values. Can be
1646  * used for handling bitfield coded enumeration for example.
1647  *
1648  * Returns 0 for success.
1649  */
1650 int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol,
1651 	struct snd_ctl_elem_value *ucontrol)
1652 {
1653 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1654 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1655 	unsigned short reg_val, val, mux;
1656 
1657 	reg_val = snd_soc_read(codec, e->reg);
1658 	val = (reg_val >> e->shift_l) & e->mask;
1659 	for (mux = 0; mux < e->max; mux++) {
1660 		if (val == e->values[mux])
1661 			break;
1662 	}
1663 	ucontrol->value.enumerated.item[0] = mux;
1664 	if (e->shift_l != e->shift_r) {
1665 		val = (reg_val >> e->shift_r) & e->mask;
1666 		for (mux = 0; mux < e->max; mux++) {
1667 			if (val == e->values[mux])
1668 				break;
1669 		}
1670 		ucontrol->value.enumerated.item[1] = mux;
1671 	}
1672 
1673 	return 0;
1674 }
1675 EXPORT_SYMBOL_GPL(snd_soc_get_value_enum_double);
1676 
1677 /**
1678  * snd_soc_put_value_enum_double - semi enumerated double mixer put callback
1679  * @kcontrol: mixer control
1680  * @ucontrol: control element information
1681  *
1682  * Callback to set the value of a double semi enumerated mixer.
1683  *
1684  * Semi enumerated mixer: the enumerated items are referred as values. Can be
1685  * used for handling bitfield coded enumeration for example.
1686  *
1687  * Returns 0 for success.
1688  */
1689 int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol,
1690 	struct snd_ctl_elem_value *ucontrol)
1691 {
1692 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1693 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1694 	unsigned short val;
1695 	unsigned short mask;
1696 
1697 	if (ucontrol->value.enumerated.item[0] > e->max - 1)
1698 		return -EINVAL;
1699 	val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l;
1700 	mask = e->mask << e->shift_l;
1701 	if (e->shift_l != e->shift_r) {
1702 		if (ucontrol->value.enumerated.item[1] > e->max - 1)
1703 			return -EINVAL;
1704 		val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r;
1705 		mask |= e->mask << e->shift_r;
1706 	}
1707 
1708 	return snd_soc_update_bits(codec, e->reg, mask, val);
1709 }
1710 EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double);
1711 
1712 /**
1713  * snd_soc_info_enum_ext - external enumerated single mixer info callback
1714  * @kcontrol: mixer control
1715  * @uinfo: control element information
1716  *
1717  * Callback to provide information about an external enumerated
1718  * single mixer.
1719  *
1720  * Returns 0 for success.
1721  */
1722 int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
1723 	struct snd_ctl_elem_info *uinfo)
1724 {
1725 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1726 
1727 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1728 	uinfo->count = 1;
1729 	uinfo->value.enumerated.items = e->max;
1730 
1731 	if (uinfo->value.enumerated.item > e->max - 1)
1732 		uinfo->value.enumerated.item = e->max - 1;
1733 	strcpy(uinfo->value.enumerated.name,
1734 		e->texts[uinfo->value.enumerated.item]);
1735 	return 0;
1736 }
1737 EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext);
1738 
1739 /**
1740  * snd_soc_info_volsw_ext - external single mixer info callback
1741  * @kcontrol: mixer control
1742  * @uinfo: control element information
1743  *
1744  * Callback to provide information about a single external mixer control.
1745  *
1746  * Returns 0 for success.
1747  */
1748 int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
1749 	struct snd_ctl_elem_info *uinfo)
1750 {
1751 	int max = kcontrol->private_value;
1752 
1753 	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
1754 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1755 	else
1756 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1757 
1758 	uinfo->count = 1;
1759 	uinfo->value.integer.min = 0;
1760 	uinfo->value.integer.max = max;
1761 	return 0;
1762 }
1763 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext);
1764 
1765 /**
1766  * snd_soc_info_volsw - single mixer info callback
1767  * @kcontrol: mixer control
1768  * @uinfo: control element information
1769  *
1770  * Callback to provide information about a single mixer control.
1771  *
1772  * Returns 0 for success.
1773  */
1774 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
1775 	struct snd_ctl_elem_info *uinfo)
1776 {
1777 	struct soc_mixer_control *mc =
1778 		(struct soc_mixer_control *)kcontrol->private_value;
1779 	int max = mc->max;
1780 	unsigned int shift = mc->shift;
1781 	unsigned int rshift = mc->rshift;
1782 
1783 	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
1784 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1785 	else
1786 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1787 
1788 	uinfo->count = shift == rshift ? 1 : 2;
1789 	uinfo->value.integer.min = 0;
1790 	uinfo->value.integer.max = max;
1791 	return 0;
1792 }
1793 EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
1794 
1795 /**
1796  * snd_soc_get_volsw - single mixer get callback
1797  * @kcontrol: mixer control
1798  * @ucontrol: control element information
1799  *
1800  * Callback to get the value of a single mixer control.
1801  *
1802  * Returns 0 for success.
1803  */
1804 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
1805 	struct snd_ctl_elem_value *ucontrol)
1806 {
1807 	struct soc_mixer_control *mc =
1808 		(struct soc_mixer_control *)kcontrol->private_value;
1809 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1810 	unsigned int reg = mc->reg;
1811 	unsigned int shift = mc->shift;
1812 	unsigned int rshift = mc->rshift;
1813 	int max = mc->max;
1814 	unsigned int mask = (1 << fls(max)) - 1;
1815 	unsigned int invert = mc->invert;
1816 
1817 	ucontrol->value.integer.value[0] =
1818 		(snd_soc_read(codec, reg) >> shift) & mask;
1819 	if (shift != rshift)
1820 		ucontrol->value.integer.value[1] =
1821 			(snd_soc_read(codec, reg) >> rshift) & mask;
1822 	if (invert) {
1823 		ucontrol->value.integer.value[0] =
1824 			max - ucontrol->value.integer.value[0];
1825 		if (shift != rshift)
1826 			ucontrol->value.integer.value[1] =
1827 				max - ucontrol->value.integer.value[1];
1828 	}
1829 
1830 	return 0;
1831 }
1832 EXPORT_SYMBOL_GPL(snd_soc_get_volsw);
1833 
1834 /**
1835  * snd_soc_put_volsw - single mixer put callback
1836  * @kcontrol: mixer control
1837  * @ucontrol: control element information
1838  *
1839  * Callback to set the value of a single mixer control.
1840  *
1841  * Returns 0 for success.
1842  */
1843 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
1844 	struct snd_ctl_elem_value *ucontrol)
1845 {
1846 	struct soc_mixer_control *mc =
1847 		(struct soc_mixer_control *)kcontrol->private_value;
1848 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1849 	unsigned int reg = mc->reg;
1850 	unsigned int shift = mc->shift;
1851 	unsigned int rshift = mc->rshift;
1852 	int max = mc->max;
1853 	unsigned int mask = (1 << fls(max)) - 1;
1854 	unsigned int invert = mc->invert;
1855 	unsigned short val, val2, val_mask;
1856 
1857 	val = (ucontrol->value.integer.value[0] & mask);
1858 	if (invert)
1859 		val = max - val;
1860 	val_mask = mask << shift;
1861 	val = val << shift;
1862 	if (shift != rshift) {
1863 		val2 = (ucontrol->value.integer.value[1] & mask);
1864 		if (invert)
1865 			val2 = max - val2;
1866 		val_mask |= mask << rshift;
1867 		val |= val2 << rshift;
1868 	}
1869 	return snd_soc_update_bits(codec, reg, val_mask, val);
1870 }
1871 EXPORT_SYMBOL_GPL(snd_soc_put_volsw);
1872 
1873 /**
1874  * snd_soc_info_volsw_2r - double mixer info callback
1875  * @kcontrol: mixer control
1876  * @uinfo: control element information
1877  *
1878  * Callback to provide information about a double mixer control that
1879  * spans 2 codec registers.
1880  *
1881  * Returns 0 for success.
1882  */
1883 int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol,
1884 	struct snd_ctl_elem_info *uinfo)
1885 {
1886 	struct soc_mixer_control *mc =
1887 		(struct soc_mixer_control *)kcontrol->private_value;
1888 	int max = mc->max;
1889 
1890 	if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
1891 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1892 	else
1893 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1894 
1895 	uinfo->count = 2;
1896 	uinfo->value.integer.min = 0;
1897 	uinfo->value.integer.max = max;
1898 	return 0;
1899 }
1900 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_2r);
1901 
1902 /**
1903  * snd_soc_get_volsw_2r - double mixer get callback
1904  * @kcontrol: mixer control
1905  * @ucontrol: control element information
1906  *
1907  * Callback to get the value of a double mixer control that spans 2 registers.
1908  *
1909  * Returns 0 for success.
1910  */
1911 int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol,
1912 	struct snd_ctl_elem_value *ucontrol)
1913 {
1914 	struct soc_mixer_control *mc =
1915 		(struct soc_mixer_control *)kcontrol->private_value;
1916 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1917 	unsigned int reg = mc->reg;
1918 	unsigned int reg2 = mc->rreg;
1919 	unsigned int shift = mc->shift;
1920 	int max = mc->max;
1921 	unsigned int mask = (1<<fls(max))-1;
1922 	unsigned int invert = mc->invert;
1923 
1924 	ucontrol->value.integer.value[0] =
1925 		(snd_soc_read(codec, reg) >> shift) & mask;
1926 	ucontrol->value.integer.value[1] =
1927 		(snd_soc_read(codec, reg2) >> shift) & mask;
1928 	if (invert) {
1929 		ucontrol->value.integer.value[0] =
1930 			max - ucontrol->value.integer.value[0];
1931 		ucontrol->value.integer.value[1] =
1932 			max - ucontrol->value.integer.value[1];
1933 	}
1934 
1935 	return 0;
1936 }
1937 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_2r);
1938 
1939 /**
1940  * snd_soc_put_volsw_2r - double mixer set callback
1941  * @kcontrol: mixer control
1942  * @ucontrol: control element information
1943  *
1944  * Callback to set the value of a double mixer control that spans 2 registers.
1945  *
1946  * Returns 0 for success.
1947  */
1948 int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol,
1949 	struct snd_ctl_elem_value *ucontrol)
1950 {
1951 	struct soc_mixer_control *mc =
1952 		(struct soc_mixer_control *)kcontrol->private_value;
1953 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1954 	unsigned int reg = mc->reg;
1955 	unsigned int reg2 = mc->rreg;
1956 	unsigned int shift = mc->shift;
1957 	int max = mc->max;
1958 	unsigned int mask = (1 << fls(max)) - 1;
1959 	unsigned int invert = mc->invert;
1960 	int err;
1961 	unsigned short val, val2, val_mask;
1962 
1963 	val_mask = mask << shift;
1964 	val = (ucontrol->value.integer.value[0] & mask);
1965 	val2 = (ucontrol->value.integer.value[1] & mask);
1966 
1967 	if (invert) {
1968 		val = max - val;
1969 		val2 = max - val2;
1970 	}
1971 
1972 	val = val << shift;
1973 	val2 = val2 << shift;
1974 
1975 	err = snd_soc_update_bits(codec, reg, val_mask, val);
1976 	if (err < 0)
1977 		return err;
1978 
1979 	err = snd_soc_update_bits(codec, reg2, val_mask, val2);
1980 	return err;
1981 }
1982 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r);
1983 
1984 /**
1985  * snd_soc_info_volsw_s8 - signed mixer info callback
1986  * @kcontrol: mixer control
1987  * @uinfo: control element information
1988  *
1989  * Callback to provide information about a signed mixer control.
1990  *
1991  * Returns 0 for success.
1992  */
1993 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol,
1994 	struct snd_ctl_elem_info *uinfo)
1995 {
1996 	struct soc_mixer_control *mc =
1997 		(struct soc_mixer_control *)kcontrol->private_value;
1998 	int max = mc->max;
1999 	int min = mc->min;
2000 
2001 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2002 	uinfo->count = 2;
2003 	uinfo->value.integer.min = 0;
2004 	uinfo->value.integer.max = max-min;
2005 	return 0;
2006 }
2007 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8);
2008 
2009 /**
2010  * snd_soc_get_volsw_s8 - signed mixer get callback
2011  * @kcontrol: mixer control
2012  * @ucontrol: control element information
2013  *
2014  * Callback to get the value of a signed mixer control.
2015  *
2016  * Returns 0 for success.
2017  */
2018 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
2019 	struct snd_ctl_elem_value *ucontrol)
2020 {
2021 	struct soc_mixer_control *mc =
2022 		(struct soc_mixer_control *)kcontrol->private_value;
2023 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2024 	unsigned int reg = mc->reg;
2025 	int min = mc->min;
2026 	int val = snd_soc_read(codec, reg);
2027 
2028 	ucontrol->value.integer.value[0] =
2029 		((signed char)(val & 0xff))-min;
2030 	ucontrol->value.integer.value[1] =
2031 		((signed char)((val >> 8) & 0xff))-min;
2032 	return 0;
2033 }
2034 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8);
2035 
2036 /**
2037  * snd_soc_put_volsw_sgn - signed mixer put callback
2038  * @kcontrol: mixer control
2039  * @ucontrol: control element information
2040  *
2041  * Callback to set the value of a signed mixer control.
2042  *
2043  * Returns 0 for success.
2044  */
2045 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
2046 	struct snd_ctl_elem_value *ucontrol)
2047 {
2048 	struct soc_mixer_control *mc =
2049 		(struct soc_mixer_control *)kcontrol->private_value;
2050 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2051 	unsigned int reg = mc->reg;
2052 	int min = mc->min;
2053 	unsigned short val;
2054 
2055 	val = (ucontrol->value.integer.value[0]+min) & 0xff;
2056 	val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8;
2057 
2058 	return snd_soc_update_bits(codec, reg, 0xffff, val);
2059 }
2060 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8);
2061 
2062 /**
2063  * snd_soc_dai_set_sysclk - configure DAI system or master clock.
2064  * @dai: DAI
2065  * @clk_id: DAI specific clock ID
2066  * @freq: new clock frequency in Hz
2067  * @dir: new clock direction - input/output.
2068  *
2069  * Configures the DAI master (MCLK) or system (SYSCLK) clocking.
2070  */
2071 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
2072 	unsigned int freq, int dir)
2073 {
2074 	if (dai->ops && dai->ops->set_sysclk)
2075 		return dai->ops->set_sysclk(dai, clk_id, freq, dir);
2076 	else
2077 		return -EINVAL;
2078 }
2079 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk);
2080 
2081 /**
2082  * snd_soc_dai_set_clkdiv - configure DAI clock dividers.
2083  * @dai: DAI
2084  * @div_id: DAI specific clock divider ID
2085  * @div: new clock divisor.
2086  *
2087  * Configures the clock dividers. This is used to derive the best DAI bit and
2088  * frame clocks from the system or master clock. It's best to set the DAI bit
2089  * and frame clocks as low as possible to save system power.
2090  */
2091 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
2092 	int div_id, int div)
2093 {
2094 	if (dai->ops && dai->ops->set_clkdiv)
2095 		return dai->ops->set_clkdiv(dai, div_id, div);
2096 	else
2097 		return -EINVAL;
2098 }
2099 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv);
2100 
2101 /**
2102  * snd_soc_dai_set_pll - configure DAI PLL.
2103  * @dai: DAI
2104  * @pll_id: DAI specific PLL ID
2105  * @freq_in: PLL input clock frequency in Hz
2106  * @freq_out: requested PLL output clock frequency in Hz
2107  *
2108  * Configures and enables PLL to generate output clock based on input clock.
2109  */
2110 int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
2111 	int pll_id, unsigned int freq_in, unsigned int freq_out)
2112 {
2113 	if (dai->ops && dai->ops->set_pll)
2114 		return dai->ops->set_pll(dai, pll_id, freq_in, freq_out);
2115 	else
2116 		return -EINVAL;
2117 }
2118 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll);
2119 
2120 /**
2121  * snd_soc_dai_set_fmt - configure DAI hardware audio format.
2122  * @dai: DAI
2123  * @fmt: SND_SOC_DAIFMT_ format value.
2124  *
2125  * Configures the DAI hardware format and clocking.
2126  */
2127 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
2128 {
2129 	if (dai->ops && dai->ops->set_fmt)
2130 		return dai->ops->set_fmt(dai, fmt);
2131 	else
2132 		return -EINVAL;
2133 }
2134 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);
2135 
2136 /**
2137  * snd_soc_dai_set_tdm_slot - configure DAI TDM.
2138  * @dai: DAI
2139  * @mask: DAI specific mask representing used slots.
2140  * @slots: Number of slots in use.
2141  *
2142  * Configures a DAI for TDM operation. Both mask and slots are codec and DAI
2143  * specific.
2144  */
2145 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
2146 	unsigned int mask, int slots)
2147 {
2148 	if (dai->ops && dai->ops->set_tdm_slot)
2149 		return dai->ops->set_tdm_slot(dai, mask, slots);
2150 	else
2151 		return -EINVAL;
2152 }
2153 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot);
2154 
2155 /**
2156  * snd_soc_dai_set_tristate - configure DAI system or master clock.
2157  * @dai: DAI
2158  * @tristate: tristate enable
2159  *
2160  * Tristates the DAI so that others can use it.
2161  */
2162 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
2163 {
2164 	if (dai->ops && dai->ops->set_tristate)
2165 		return dai->ops->set_tristate(dai, tristate);
2166 	else
2167 		return -EINVAL;
2168 }
2169 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate);
2170 
2171 /**
2172  * snd_soc_dai_digital_mute - configure DAI system or master clock.
2173  * @dai: DAI
2174  * @mute: mute enable
2175  *
2176  * Mutes the DAI DAC.
2177  */
2178 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute)
2179 {
2180 	if (dai->ops && dai->ops->digital_mute)
2181 		return dai->ops->digital_mute(dai, mute);
2182 	else
2183 		return -EINVAL;
2184 }
2185 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute);
2186 
2187 /**
2188  * snd_soc_register_card - Register a card with the ASoC core
2189  *
2190  * @card: Card to register
2191  *
2192  * Note that currently this is an internal only function: it will be
2193  * exposed to machine drivers after further backporting of ASoC v2
2194  * registration APIs.
2195  */
2196 static int snd_soc_register_card(struct snd_soc_card *card)
2197 {
2198 	if (!card->name || !card->dev)
2199 		return -EINVAL;
2200 
2201 	INIT_LIST_HEAD(&card->list);
2202 	card->instantiated = 0;
2203 
2204 	mutex_lock(&client_mutex);
2205 	list_add(&card->list, &card_list);
2206 	snd_soc_instantiate_cards();
2207 	mutex_unlock(&client_mutex);
2208 
2209 	dev_dbg(card->dev, "Registered card '%s'\n", card->name);
2210 
2211 	return 0;
2212 }
2213 
2214 /**
2215  * snd_soc_unregister_card - Unregister a card with the ASoC core
2216  *
2217  * @card: Card to unregister
2218  *
2219  * Note that currently this is an internal only function: it will be
2220  * exposed to machine drivers after further backporting of ASoC v2
2221  * registration APIs.
2222  */
2223 static int snd_soc_unregister_card(struct snd_soc_card *card)
2224 {
2225 	mutex_lock(&client_mutex);
2226 	list_del(&card->list);
2227 	mutex_unlock(&client_mutex);
2228 
2229 	dev_dbg(card->dev, "Unregistered card '%s'\n", card->name);
2230 
2231 	return 0;
2232 }
2233 
2234 static struct snd_soc_dai_ops null_dai_ops = {
2235 };
2236 
2237 /**
2238  * snd_soc_register_dai - Register a DAI with the ASoC core
2239  *
2240  * @dai: DAI to register
2241  */
2242 int snd_soc_register_dai(struct snd_soc_dai *dai)
2243 {
2244 	if (!dai->name)
2245 		return -EINVAL;
2246 
2247 	/* The device should become mandatory over time */
2248 	if (!dai->dev)
2249 		printk(KERN_WARNING "No device for DAI %s\n", dai->name);
2250 
2251 	if (!dai->ops)
2252 		dai->ops = &null_dai_ops;
2253 
2254 	INIT_LIST_HEAD(&dai->list);
2255 
2256 	mutex_lock(&client_mutex);
2257 	list_add(&dai->list, &dai_list);
2258 	snd_soc_instantiate_cards();
2259 	mutex_unlock(&client_mutex);
2260 
2261 	pr_debug("Registered DAI '%s'\n", dai->name);
2262 
2263 	return 0;
2264 }
2265 EXPORT_SYMBOL_GPL(snd_soc_register_dai);
2266 
2267 /**
2268  * snd_soc_unregister_dai - Unregister a DAI from the ASoC core
2269  *
2270  * @dai: DAI to unregister
2271  */
2272 void snd_soc_unregister_dai(struct snd_soc_dai *dai)
2273 {
2274 	mutex_lock(&client_mutex);
2275 	list_del(&dai->list);
2276 	mutex_unlock(&client_mutex);
2277 
2278 	pr_debug("Unregistered DAI '%s'\n", dai->name);
2279 }
2280 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai);
2281 
2282 /**
2283  * snd_soc_register_dais - Register multiple DAIs with the ASoC core
2284  *
2285  * @dai: Array of DAIs to register
2286  * @count: Number of DAIs
2287  */
2288 int snd_soc_register_dais(struct snd_soc_dai *dai, size_t count)
2289 {
2290 	int i, ret;
2291 
2292 	for (i = 0; i < count; i++) {
2293 		ret = snd_soc_register_dai(&dai[i]);
2294 		if (ret != 0)
2295 			goto err;
2296 	}
2297 
2298 	return 0;
2299 
2300 err:
2301 	for (i--; i >= 0; i--)
2302 		snd_soc_unregister_dai(&dai[i]);
2303 
2304 	return ret;
2305 }
2306 EXPORT_SYMBOL_GPL(snd_soc_register_dais);
2307 
2308 /**
2309  * snd_soc_unregister_dais - Unregister multiple DAIs from the ASoC core
2310  *
2311  * @dai: Array of DAIs to unregister
2312  * @count: Number of DAIs
2313  */
2314 void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count)
2315 {
2316 	int i;
2317 
2318 	for (i = 0; i < count; i++)
2319 		snd_soc_unregister_dai(&dai[i]);
2320 }
2321 EXPORT_SYMBOL_GPL(snd_soc_unregister_dais);
2322 
2323 /**
2324  * snd_soc_register_platform - Register a platform with the ASoC core
2325  *
2326  * @platform: platform to register
2327  */
2328 int snd_soc_register_platform(struct snd_soc_platform *platform)
2329 {
2330 	if (!platform->name)
2331 		return -EINVAL;
2332 
2333 	INIT_LIST_HEAD(&platform->list);
2334 
2335 	mutex_lock(&client_mutex);
2336 	list_add(&platform->list, &platform_list);
2337 	snd_soc_instantiate_cards();
2338 	mutex_unlock(&client_mutex);
2339 
2340 	pr_debug("Registered platform '%s'\n", platform->name);
2341 
2342 	return 0;
2343 }
2344 EXPORT_SYMBOL_GPL(snd_soc_register_platform);
2345 
2346 /**
2347  * snd_soc_unregister_platform - Unregister a platform from the ASoC core
2348  *
2349  * @platform: platform to unregister
2350  */
2351 void snd_soc_unregister_platform(struct snd_soc_platform *platform)
2352 {
2353 	mutex_lock(&client_mutex);
2354 	list_del(&platform->list);
2355 	mutex_unlock(&client_mutex);
2356 
2357 	pr_debug("Unregistered platform '%s'\n", platform->name);
2358 }
2359 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform);
2360 
2361 static u64 codec_format_map[] = {
2362 	SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE,
2363 	SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE,
2364 	SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE,
2365 	SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE,
2366 	SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE,
2367 	SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE,
2368 	SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
2369 	SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
2370 	SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE,
2371 	SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE,
2372 	SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE,
2373 	SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE,
2374 	SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE,
2375 	SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE,
2376 	SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE
2377 	| SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE,
2378 };
2379 
2380 /* Fix up the DAI formats for endianness: codecs don't actually see
2381  * the endianness of the data but we're using the CPU format
2382  * definitions which do need to include endianness so we ensure that
2383  * codec DAIs always have both big and little endian variants set.
2384  */
2385 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream)
2386 {
2387 	int i;
2388 
2389 	for (i = 0; i < ARRAY_SIZE(codec_format_map); i++)
2390 		if (stream->formats & codec_format_map[i])
2391 			stream->formats |= codec_format_map[i];
2392 }
2393 
2394 /**
2395  * snd_soc_register_codec - Register a codec with the ASoC core
2396  *
2397  * @codec: codec to register
2398  */
2399 int snd_soc_register_codec(struct snd_soc_codec *codec)
2400 {
2401 	int i;
2402 
2403 	if (!codec->name)
2404 		return -EINVAL;
2405 
2406 	/* The device should become mandatory over time */
2407 	if (!codec->dev)
2408 		printk(KERN_WARNING "No device for codec %s\n", codec->name);
2409 
2410 	INIT_LIST_HEAD(&codec->list);
2411 
2412 	for (i = 0; i < codec->num_dai; i++) {
2413 		fixup_codec_formats(&codec->dai[i].playback);
2414 		fixup_codec_formats(&codec->dai[i].capture);
2415 	}
2416 
2417 	mutex_lock(&client_mutex);
2418 	list_add(&codec->list, &codec_list);
2419 	snd_soc_instantiate_cards();
2420 	mutex_unlock(&client_mutex);
2421 
2422 	pr_debug("Registered codec '%s'\n", codec->name);
2423 
2424 	return 0;
2425 }
2426 EXPORT_SYMBOL_GPL(snd_soc_register_codec);
2427 
2428 /**
2429  * snd_soc_unregister_codec - Unregister a codec from the ASoC core
2430  *
2431  * @codec: codec to unregister
2432  */
2433 void snd_soc_unregister_codec(struct snd_soc_codec *codec)
2434 {
2435 	mutex_lock(&client_mutex);
2436 	list_del(&codec->list);
2437 	mutex_unlock(&client_mutex);
2438 
2439 	pr_debug("Unregistered codec '%s'\n", codec->name);
2440 }
2441 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec);
2442 
2443 static int __init snd_soc_init(void)
2444 {
2445 #ifdef CONFIG_DEBUG_FS
2446 	debugfs_root = debugfs_create_dir("asoc", NULL);
2447 	if (IS_ERR(debugfs_root) || !debugfs_root) {
2448 		printk(KERN_WARNING
2449 		       "ASoC: Failed to create debugfs directory\n");
2450 		debugfs_root = NULL;
2451 	}
2452 #endif
2453 
2454 	return platform_driver_register(&soc_driver);
2455 }
2456 
2457 static void __exit snd_soc_exit(void)
2458 {
2459 #ifdef CONFIG_DEBUG_FS
2460 	debugfs_remove_recursive(debugfs_root);
2461 #endif
2462 	platform_driver_unregister(&soc_driver);
2463 }
2464 
2465 module_init(snd_soc_init);
2466 module_exit(snd_soc_exit);
2467 
2468 /* Module information */
2469 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
2470 MODULE_DESCRIPTION("ALSA SoC Core");
2471 MODULE_LICENSE("GPL");
2472 MODULE_ALIAS("platform:soc-audio");
2473