xref: /openbmc/linux/sound/soc/soc-core.c (revision b34e08d5)
1 /*
2  * soc-core.c  --  ALSA SoC Audio Layer
3  *
4  * Copyright 2005 Wolfson Microelectronics PLC.
5  * Copyright 2005 Openedhand Ltd.
6  * Copyright (C) 2010 Slimlogic Ltd.
7  * Copyright (C) 2010 Texas Instruments Inc.
8  *
9  * Author: Liam Girdwood <lrg@slimlogic.co.uk>
10  *         with code, comments and ideas from :-
11  *         Richard Purdie <richard@openedhand.com>
12  *
13  *  This program is free software; you can redistribute  it and/or modify it
14  *  under  the terms of  the GNU General  Public License as published by the
15  *  Free Software Foundation;  either version 2 of the  License, or (at your
16  *  option) any later version.
17  *
18  *  TODO:
19  *   o Add hw rules to enforce rates, etc.
20  *   o More testing with other codecs/machines.
21  *   o Add more codecs and platforms to ensure good API coverage.
22  *   o Support TDM on PCM and I2S
23  */
24 
25 #include <linux/module.h>
26 #include <linux/moduleparam.h>
27 #include <linux/init.h>
28 #include <linux/delay.h>
29 #include <linux/pm.h>
30 #include <linux/bitops.h>
31 #include <linux/debugfs.h>
32 #include <linux/platform_device.h>
33 #include <linux/pinctrl/consumer.h>
34 #include <linux/ctype.h>
35 #include <linux/slab.h>
36 #include <linux/of.h>
37 #include <linux/gpio.h>
38 #include <linux/of_gpio.h>
39 #include <sound/ac97_codec.h>
40 #include <sound/core.h>
41 #include <sound/jack.h>
42 #include <sound/pcm.h>
43 #include <sound/pcm_params.h>
44 #include <sound/soc.h>
45 #include <sound/soc-dpcm.h>
46 #include <sound/initval.h>
47 
48 #define CREATE_TRACE_POINTS
49 #include <trace/events/asoc.h>
50 
51 #define NAME_SIZE	32
52 
53 #ifdef CONFIG_DEBUG_FS
54 struct dentry *snd_soc_debugfs_root;
55 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root);
56 #endif
57 
58 static DEFINE_MUTEX(client_mutex);
59 static LIST_HEAD(platform_list);
60 static LIST_HEAD(codec_list);
61 static LIST_HEAD(component_list);
62 
63 /*
64  * This is a timeout to do a DAPM powerdown after a stream is closed().
65  * It can be used to eliminate pops between different playback streams, e.g.
66  * between two audio tracks.
67  */
68 static int pmdown_time = 5000;
69 module_param(pmdown_time, int, 0);
70 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
71 
72 struct snd_ac97_reset_cfg {
73 	struct pinctrl *pctl;
74 	struct pinctrl_state *pstate_reset;
75 	struct pinctrl_state *pstate_warm_reset;
76 	struct pinctrl_state *pstate_run;
77 	int gpio_sdata;
78 	int gpio_sync;
79 	int gpio_reset;
80 };
81 
82 /* returns the minimum number of bytes needed to represent
83  * a particular given value */
84 static int min_bytes_needed(unsigned long val)
85 {
86 	int c = 0;
87 	int i;
88 
89 	for (i = (sizeof val * 8) - 1; i >= 0; --i, ++c)
90 		if (val & (1UL << i))
91 			break;
92 	c = (sizeof val * 8) - c;
93 	if (!c || (c % 8))
94 		c = (c + 8) / 8;
95 	else
96 		c /= 8;
97 	return c;
98 }
99 
100 /* fill buf which is 'len' bytes with a formatted
101  * string of the form 'reg: value\n' */
102 static int format_register_str(struct snd_soc_codec *codec,
103 			       unsigned int reg, char *buf, size_t len)
104 {
105 	int wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2;
106 	int regsize = codec->driver->reg_word_size * 2;
107 	int ret;
108 	char tmpbuf[len + 1];
109 	char regbuf[regsize + 1];
110 
111 	/* since tmpbuf is allocated on the stack, warn the callers if they
112 	 * try to abuse this function */
113 	WARN_ON(len > 63);
114 
115 	/* +2 for ': ' and + 1 for '\n' */
116 	if (wordsize + regsize + 2 + 1 != len)
117 		return -EINVAL;
118 
119 	ret = snd_soc_read(codec, reg);
120 	if (ret < 0) {
121 		memset(regbuf, 'X', regsize);
122 		regbuf[regsize] = '\0';
123 	} else {
124 		snprintf(regbuf, regsize + 1, "%.*x", regsize, ret);
125 	}
126 
127 	/* prepare the buffer */
128 	snprintf(tmpbuf, len + 1, "%.*x: %s\n", wordsize, reg, regbuf);
129 	/* copy it back to the caller without the '\0' */
130 	memcpy(buf, tmpbuf, len);
131 
132 	return 0;
133 }
134 
135 /* codec register dump */
136 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf,
137 				  size_t count, loff_t pos)
138 {
139 	int i, step = 1;
140 	int wordsize, regsize;
141 	int len;
142 	size_t total = 0;
143 	loff_t p = 0;
144 
145 	wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2;
146 	regsize = codec->driver->reg_word_size * 2;
147 
148 	len = wordsize + regsize + 2 + 1;
149 
150 	if (!codec->driver->reg_cache_size)
151 		return 0;
152 
153 	if (codec->driver->reg_cache_step)
154 		step = codec->driver->reg_cache_step;
155 
156 	for (i = 0; i < codec->driver->reg_cache_size; i += step) {
157 		if (!snd_soc_codec_readable_register(codec, i))
158 			continue;
159 		if (codec->driver->display_register) {
160 			count += codec->driver->display_register(codec, buf + count,
161 							 PAGE_SIZE - count, i);
162 		} else {
163 			/* only support larger than PAGE_SIZE bytes debugfs
164 			 * entries for the default case */
165 			if (p >= pos) {
166 				if (total + len >= count - 1)
167 					break;
168 				format_register_str(codec, i, buf + total, len);
169 				total += len;
170 			}
171 			p += len;
172 		}
173 	}
174 
175 	total = min(total, count - 1);
176 
177 	return total;
178 }
179 
180 static ssize_t codec_reg_show(struct device *dev,
181 	struct device_attribute *attr, char *buf)
182 {
183 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
184 
185 	return soc_codec_reg_show(rtd->codec, buf, PAGE_SIZE, 0);
186 }
187 
188 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
189 
190 static ssize_t pmdown_time_show(struct device *dev,
191 				struct device_attribute *attr, char *buf)
192 {
193 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
194 
195 	return sprintf(buf, "%ld\n", rtd->pmdown_time);
196 }
197 
198 static ssize_t pmdown_time_set(struct device *dev,
199 			       struct device_attribute *attr,
200 			       const char *buf, size_t count)
201 {
202 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
203 	int ret;
204 
205 	ret = kstrtol(buf, 10, &rtd->pmdown_time);
206 	if (ret)
207 		return ret;
208 
209 	return count;
210 }
211 
212 static DEVICE_ATTR(pmdown_time, 0644, pmdown_time_show, pmdown_time_set);
213 
214 #ifdef CONFIG_DEBUG_FS
215 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf,
216 				   size_t count, loff_t *ppos)
217 {
218 	ssize_t ret;
219 	struct snd_soc_codec *codec = file->private_data;
220 	char *buf;
221 
222 	if (*ppos < 0 || !count)
223 		return -EINVAL;
224 
225 	buf = kmalloc(count, GFP_KERNEL);
226 	if (!buf)
227 		return -ENOMEM;
228 
229 	ret = soc_codec_reg_show(codec, buf, count, *ppos);
230 	if (ret >= 0) {
231 		if (copy_to_user(user_buf, buf, ret)) {
232 			kfree(buf);
233 			return -EFAULT;
234 		}
235 		*ppos += ret;
236 	}
237 
238 	kfree(buf);
239 	return ret;
240 }
241 
242 static ssize_t codec_reg_write_file(struct file *file,
243 		const char __user *user_buf, size_t count, loff_t *ppos)
244 {
245 	char buf[32];
246 	size_t buf_size;
247 	char *start = buf;
248 	unsigned long reg, value;
249 	struct snd_soc_codec *codec = file->private_data;
250 	int ret;
251 
252 	buf_size = min(count, (sizeof(buf)-1));
253 	if (copy_from_user(buf, user_buf, buf_size))
254 		return -EFAULT;
255 	buf[buf_size] = 0;
256 
257 	while (*start == ' ')
258 		start++;
259 	reg = simple_strtoul(start, &start, 16);
260 	while (*start == ' ')
261 		start++;
262 	ret = kstrtoul(start, 16, &value);
263 	if (ret)
264 		return ret;
265 
266 	/* Userspace has been fiddling around behind the kernel's back */
267 	add_taint(TAINT_USER, LOCKDEP_NOW_UNRELIABLE);
268 
269 	snd_soc_write(codec, reg, value);
270 	return buf_size;
271 }
272 
273 static const struct file_operations codec_reg_fops = {
274 	.open = simple_open,
275 	.read = codec_reg_read_file,
276 	.write = codec_reg_write_file,
277 	.llseek = default_llseek,
278 };
279 
280 static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
281 {
282 	struct dentry *debugfs_card_root = codec->card->debugfs_card_root;
283 
284 	codec->debugfs_codec_root = debugfs_create_dir(codec->name,
285 						       debugfs_card_root);
286 	if (!codec->debugfs_codec_root) {
287 		dev_warn(codec->dev,
288 			"ASoC: Failed to create codec debugfs directory\n");
289 		return;
290 	}
291 
292 	debugfs_create_bool("cache_sync", 0444, codec->debugfs_codec_root,
293 			    &codec->cache_sync);
294 	debugfs_create_bool("cache_only", 0444, codec->debugfs_codec_root,
295 			    &codec->cache_only);
296 
297 	codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
298 						 codec->debugfs_codec_root,
299 						 codec, &codec_reg_fops);
300 	if (!codec->debugfs_reg)
301 		dev_warn(codec->dev,
302 			"ASoC: Failed to create codec register debugfs file\n");
303 
304 	snd_soc_dapm_debugfs_init(&codec->dapm, codec->debugfs_codec_root);
305 }
306 
307 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
308 {
309 	debugfs_remove_recursive(codec->debugfs_codec_root);
310 }
311 
312 static void soc_init_platform_debugfs(struct snd_soc_platform *platform)
313 {
314 	struct dentry *debugfs_card_root = platform->card->debugfs_card_root;
315 
316 	platform->debugfs_platform_root = debugfs_create_dir(platform->name,
317 						       debugfs_card_root);
318 	if (!platform->debugfs_platform_root) {
319 		dev_warn(platform->dev,
320 			"ASoC: Failed to create platform debugfs directory\n");
321 		return;
322 	}
323 
324 	snd_soc_dapm_debugfs_init(&platform->dapm,
325 		platform->debugfs_platform_root);
326 }
327 
328 static void soc_cleanup_platform_debugfs(struct snd_soc_platform *platform)
329 {
330 	debugfs_remove_recursive(platform->debugfs_platform_root);
331 }
332 
333 static ssize_t codec_list_read_file(struct file *file, char __user *user_buf,
334 				    size_t count, loff_t *ppos)
335 {
336 	char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
337 	ssize_t len, ret = 0;
338 	struct snd_soc_codec *codec;
339 
340 	if (!buf)
341 		return -ENOMEM;
342 
343 	list_for_each_entry(codec, &codec_list, list) {
344 		len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n",
345 			       codec->name);
346 		if (len >= 0)
347 			ret += len;
348 		if (ret > PAGE_SIZE) {
349 			ret = PAGE_SIZE;
350 			break;
351 		}
352 	}
353 
354 	if (ret >= 0)
355 		ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
356 
357 	kfree(buf);
358 
359 	return ret;
360 }
361 
362 static const struct file_operations codec_list_fops = {
363 	.read = codec_list_read_file,
364 	.llseek = default_llseek,/* read accesses f_pos */
365 };
366 
367 static ssize_t dai_list_read_file(struct file *file, char __user *user_buf,
368 				  size_t count, loff_t *ppos)
369 {
370 	char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
371 	ssize_t len, ret = 0;
372 	struct snd_soc_component *component;
373 	struct snd_soc_dai *dai;
374 
375 	if (!buf)
376 		return -ENOMEM;
377 
378 	list_for_each_entry(component, &component_list, list) {
379 		list_for_each_entry(dai, &component->dai_list, list) {
380 			len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n",
381 				dai->name);
382 			if (len >= 0)
383 				ret += len;
384 			if (ret > PAGE_SIZE) {
385 				ret = PAGE_SIZE;
386 				break;
387 			}
388 		}
389 	}
390 
391 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
392 
393 	kfree(buf);
394 
395 	return ret;
396 }
397 
398 static const struct file_operations dai_list_fops = {
399 	.read = dai_list_read_file,
400 	.llseek = default_llseek,/* read accesses f_pos */
401 };
402 
403 static ssize_t platform_list_read_file(struct file *file,
404 				       char __user *user_buf,
405 				       size_t count, loff_t *ppos)
406 {
407 	char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
408 	ssize_t len, ret = 0;
409 	struct snd_soc_platform *platform;
410 
411 	if (!buf)
412 		return -ENOMEM;
413 
414 	list_for_each_entry(platform, &platform_list, list) {
415 		len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n",
416 			       platform->name);
417 		if (len >= 0)
418 			ret += len;
419 		if (ret > PAGE_SIZE) {
420 			ret = PAGE_SIZE;
421 			break;
422 		}
423 	}
424 
425 	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
426 
427 	kfree(buf);
428 
429 	return ret;
430 }
431 
432 static const struct file_operations platform_list_fops = {
433 	.read = platform_list_read_file,
434 	.llseek = default_llseek,/* read accesses f_pos */
435 };
436 
437 static void soc_init_card_debugfs(struct snd_soc_card *card)
438 {
439 	card->debugfs_card_root = debugfs_create_dir(card->name,
440 						     snd_soc_debugfs_root);
441 	if (!card->debugfs_card_root) {
442 		dev_warn(card->dev,
443 			 "ASoC: Failed to create card debugfs directory\n");
444 		return;
445 	}
446 
447 	card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644,
448 						    card->debugfs_card_root,
449 						    &card->pop_time);
450 	if (!card->debugfs_pop_time)
451 		dev_warn(card->dev,
452 		       "ASoC: Failed to create pop time debugfs file\n");
453 }
454 
455 static void soc_cleanup_card_debugfs(struct snd_soc_card *card)
456 {
457 	debugfs_remove_recursive(card->debugfs_card_root);
458 }
459 
460 #else
461 
462 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec)
463 {
464 }
465 
466 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
467 {
468 }
469 
470 static inline void soc_init_platform_debugfs(struct snd_soc_platform *platform)
471 {
472 }
473 
474 static inline void soc_cleanup_platform_debugfs(struct snd_soc_platform *platform)
475 {
476 }
477 
478 static inline void soc_init_card_debugfs(struct snd_soc_card *card)
479 {
480 }
481 
482 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card)
483 {
484 }
485 #endif
486 
487 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
488 		const char *dai_link, int stream)
489 {
490 	int i;
491 
492 	for (i = 0; i < card->num_links; i++) {
493 		if (card->rtd[i].dai_link->no_pcm &&
494 			!strcmp(card->rtd[i].dai_link->name, dai_link))
495 			return card->rtd[i].pcm->streams[stream].substream;
496 	}
497 	dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link);
498 	return NULL;
499 }
500 EXPORT_SYMBOL_GPL(snd_soc_get_dai_substream);
501 
502 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
503 		const char *dai_link)
504 {
505 	int i;
506 
507 	for (i = 0; i < card->num_links; i++) {
508 		if (!strcmp(card->rtd[i].dai_link->name, dai_link))
509 			return &card->rtd[i];
510 	}
511 	dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link);
512 	return NULL;
513 }
514 EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime);
515 
516 #ifdef CONFIG_SND_SOC_AC97_BUS
517 /* unregister ac97 codec */
518 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
519 {
520 	if (codec->ac97->dev.bus)
521 		device_unregister(&codec->ac97->dev);
522 	return 0;
523 }
524 
525 /* stop no dev release warning */
526 static void soc_ac97_device_release(struct device *dev){}
527 
528 /* register ac97 codec to bus */
529 static int soc_ac97_dev_register(struct snd_soc_codec *codec)
530 {
531 	int err;
532 
533 	codec->ac97->dev.bus = &ac97_bus_type;
534 	codec->ac97->dev.parent = codec->card->dev;
535 	codec->ac97->dev.release = soc_ac97_device_release;
536 
537 	dev_set_name(&codec->ac97->dev, "%d-%d:%s",
538 		     codec->card->snd_card->number, 0, codec->name);
539 	err = device_register(&codec->ac97->dev);
540 	if (err < 0) {
541 		dev_err(codec->dev, "ASoC: Can't register ac97 bus\n");
542 		codec->ac97->dev.bus = NULL;
543 		return err;
544 	}
545 	return 0;
546 }
547 #endif
548 
549 static void codec2codec_close_delayed_work(struct work_struct *work)
550 {
551 	/* Currently nothing to do for c2c links
552 	 * Since c2c links are internal nodes in the DAPM graph and
553 	 * don't interface with the outside world or application layer
554 	 * we don't have to do any special handling on close.
555 	 */
556 }
557 
558 #ifdef CONFIG_PM_SLEEP
559 /* powers down audio subsystem for suspend */
560 int snd_soc_suspend(struct device *dev)
561 {
562 	struct snd_soc_card *card = dev_get_drvdata(dev);
563 	struct snd_soc_codec *codec;
564 	int i;
565 
566 	/* If the initialization of this soc device failed, there is no codec
567 	 * associated with it. Just bail out in this case.
568 	 */
569 	if (list_empty(&card->codec_dev_list))
570 		return 0;
571 
572 	/* Due to the resume being scheduled into a workqueue we could
573 	* suspend before that's finished - wait for it to complete.
574 	 */
575 	snd_power_lock(card->snd_card);
576 	snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0);
577 	snd_power_unlock(card->snd_card);
578 
579 	/* we're going to block userspace touching us until resume completes */
580 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot);
581 
582 	/* mute any active DACs */
583 	for (i = 0; i < card->num_rtd; i++) {
584 		struct snd_soc_dai *dai = card->rtd[i].codec_dai;
585 		struct snd_soc_dai_driver *drv = dai->driver;
586 
587 		if (card->rtd[i].dai_link->ignore_suspend)
588 			continue;
589 
590 		if (drv->ops->digital_mute && dai->playback_active)
591 			drv->ops->digital_mute(dai, 1);
592 	}
593 
594 	/* suspend all pcms */
595 	for (i = 0; i < card->num_rtd; i++) {
596 		if (card->rtd[i].dai_link->ignore_suspend)
597 			continue;
598 
599 		snd_pcm_suspend_all(card->rtd[i].pcm);
600 	}
601 
602 	if (card->suspend_pre)
603 		card->suspend_pre(card);
604 
605 	for (i = 0; i < card->num_rtd; i++) {
606 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
607 		struct snd_soc_platform *platform = card->rtd[i].platform;
608 
609 		if (card->rtd[i].dai_link->ignore_suspend)
610 			continue;
611 
612 		if (cpu_dai->driver->suspend && !cpu_dai->driver->ac97_control)
613 			cpu_dai->driver->suspend(cpu_dai);
614 		if (platform->driver->suspend && !platform->suspended) {
615 			platform->driver->suspend(cpu_dai);
616 			platform->suspended = 1;
617 		}
618 	}
619 
620 	/* close any waiting streams and save state */
621 	for (i = 0; i < card->num_rtd; i++) {
622 		flush_delayed_work(&card->rtd[i].delayed_work);
623 		card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level;
624 	}
625 
626 	for (i = 0; i < card->num_rtd; i++) {
627 
628 		if (card->rtd[i].dai_link->ignore_suspend)
629 			continue;
630 
631 		snd_soc_dapm_stream_event(&card->rtd[i],
632 					  SNDRV_PCM_STREAM_PLAYBACK,
633 					  SND_SOC_DAPM_STREAM_SUSPEND);
634 
635 		snd_soc_dapm_stream_event(&card->rtd[i],
636 					  SNDRV_PCM_STREAM_CAPTURE,
637 					  SND_SOC_DAPM_STREAM_SUSPEND);
638 	}
639 
640 	/* Recheck all analogue paths too */
641 	dapm_mark_io_dirty(&card->dapm);
642 	snd_soc_dapm_sync(&card->dapm);
643 
644 	/* suspend all CODECs */
645 	list_for_each_entry(codec, &card->codec_dev_list, card_list) {
646 		/* If there are paths active then the CODEC will be held with
647 		 * bias _ON and should not be suspended. */
648 		if (!codec->suspended && codec->driver->suspend) {
649 			switch (codec->dapm.bias_level) {
650 			case SND_SOC_BIAS_STANDBY:
651 				/*
652 				 * If the CODEC is capable of idle
653 				 * bias off then being in STANDBY
654 				 * means it's doing something,
655 				 * otherwise fall through.
656 				 */
657 				if (codec->dapm.idle_bias_off) {
658 					dev_dbg(codec->dev,
659 						"ASoC: idle_bias_off CODEC on over suspend\n");
660 					break;
661 				}
662 			case SND_SOC_BIAS_OFF:
663 				codec->driver->suspend(codec);
664 				codec->suspended = 1;
665 				codec->cache_sync = 1;
666 				if (codec->using_regmap)
667 					regcache_mark_dirty(codec->control_data);
668 				/* deactivate pins to sleep state */
669 				pinctrl_pm_select_sleep_state(codec->dev);
670 				break;
671 			default:
672 				dev_dbg(codec->dev,
673 					"ASoC: CODEC is on over suspend\n");
674 				break;
675 			}
676 		}
677 	}
678 
679 	for (i = 0; i < card->num_rtd; i++) {
680 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
681 
682 		if (card->rtd[i].dai_link->ignore_suspend)
683 			continue;
684 
685 		if (cpu_dai->driver->suspend && cpu_dai->driver->ac97_control)
686 			cpu_dai->driver->suspend(cpu_dai);
687 
688 		/* deactivate pins to sleep state */
689 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
690 	}
691 
692 	if (card->suspend_post)
693 		card->suspend_post(card);
694 
695 	return 0;
696 }
697 EXPORT_SYMBOL_GPL(snd_soc_suspend);
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 =
705 			container_of(work, struct snd_soc_card, deferred_resume_work);
706 	struct snd_soc_codec *codec;
707 	int i;
708 
709 	/* our power state is still SNDRV_CTL_POWER_D3hot from suspend time,
710 	 * so userspace apps are blocked from touching us
711 	 */
712 
713 	dev_dbg(card->dev, "ASoC: starting resume work\n");
714 
715 	/* Bring us up into D2 so that DAPM starts enabling things */
716 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2);
717 
718 	if (card->resume_pre)
719 		card->resume_pre(card);
720 
721 	/* resume AC97 DAIs */
722 	for (i = 0; i < card->num_rtd; i++) {
723 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
724 
725 		if (card->rtd[i].dai_link->ignore_suspend)
726 			continue;
727 
728 		if (cpu_dai->driver->resume && cpu_dai->driver->ac97_control)
729 			cpu_dai->driver->resume(cpu_dai);
730 	}
731 
732 	list_for_each_entry(codec, &card->codec_dev_list, card_list) {
733 		/* If the CODEC was idle over suspend then it will have been
734 		 * left with bias OFF or STANDBY and suspended so we must now
735 		 * resume.  Otherwise the suspend was suppressed.
736 		 */
737 		if (codec->driver->resume && codec->suspended) {
738 			switch (codec->dapm.bias_level) {
739 			case SND_SOC_BIAS_STANDBY:
740 			case SND_SOC_BIAS_OFF:
741 				codec->driver->resume(codec);
742 				codec->suspended = 0;
743 				break;
744 			default:
745 				dev_dbg(codec->dev,
746 					"ASoC: CODEC was on over suspend\n");
747 				break;
748 			}
749 		}
750 	}
751 
752 	for (i = 0; i < card->num_rtd; i++) {
753 
754 		if (card->rtd[i].dai_link->ignore_suspend)
755 			continue;
756 
757 		snd_soc_dapm_stream_event(&card->rtd[i],
758 					  SNDRV_PCM_STREAM_PLAYBACK,
759 					  SND_SOC_DAPM_STREAM_RESUME);
760 
761 		snd_soc_dapm_stream_event(&card->rtd[i],
762 					  SNDRV_PCM_STREAM_CAPTURE,
763 					  SND_SOC_DAPM_STREAM_RESUME);
764 	}
765 
766 	/* unmute any active DACs */
767 	for (i = 0; i < card->num_rtd; i++) {
768 		struct snd_soc_dai *dai = card->rtd[i].codec_dai;
769 		struct snd_soc_dai_driver *drv = dai->driver;
770 
771 		if (card->rtd[i].dai_link->ignore_suspend)
772 			continue;
773 
774 		if (drv->ops->digital_mute && dai->playback_active)
775 			drv->ops->digital_mute(dai, 0);
776 	}
777 
778 	for (i = 0; i < card->num_rtd; i++) {
779 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
780 		struct snd_soc_platform *platform = card->rtd[i].platform;
781 
782 		if (card->rtd[i].dai_link->ignore_suspend)
783 			continue;
784 
785 		if (cpu_dai->driver->resume && !cpu_dai->driver->ac97_control)
786 			cpu_dai->driver->resume(cpu_dai);
787 		if (platform->driver->resume && platform->suspended) {
788 			platform->driver->resume(cpu_dai);
789 			platform->suspended = 0;
790 		}
791 	}
792 
793 	if (card->resume_post)
794 		card->resume_post(card);
795 
796 	dev_dbg(card->dev, "ASoC: resume work completed\n");
797 
798 	/* userspace can access us now we are back as we were before */
799 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0);
800 
801 	/* Recheck all analogue paths too */
802 	dapm_mark_io_dirty(&card->dapm);
803 	snd_soc_dapm_sync(&card->dapm);
804 }
805 
806 /* powers up audio subsystem after a suspend */
807 int snd_soc_resume(struct device *dev)
808 {
809 	struct snd_soc_card *card = dev_get_drvdata(dev);
810 	int i, ac97_control = 0;
811 
812 	/* If the initialization of this soc device failed, there is no codec
813 	 * associated with it. Just bail out in this case.
814 	 */
815 	if (list_empty(&card->codec_dev_list))
816 		return 0;
817 
818 	/* activate pins from sleep state */
819 	for (i = 0; i < card->num_rtd; i++) {
820 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
821 		struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai;
822 		if (cpu_dai->active)
823 			pinctrl_pm_select_default_state(cpu_dai->dev);
824 		if (codec_dai->active)
825 			pinctrl_pm_select_default_state(codec_dai->dev);
826 	}
827 
828 	/* AC97 devices might have other drivers hanging off them so
829 	 * need to resume immediately.  Other drivers don't have that
830 	 * problem and may take a substantial amount of time to resume
831 	 * due to I/O costs and anti-pop so handle them out of line.
832 	 */
833 	for (i = 0; i < card->num_rtd; i++) {
834 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
835 		ac97_control |= cpu_dai->driver->ac97_control;
836 	}
837 	if (ac97_control) {
838 		dev_dbg(dev, "ASoC: Resuming AC97 immediately\n");
839 		soc_resume_deferred(&card->deferred_resume_work);
840 	} else {
841 		dev_dbg(dev, "ASoC: Scheduling resume work\n");
842 		if (!schedule_work(&card->deferred_resume_work))
843 			dev_err(dev, "ASoC: resume work item may be lost\n");
844 	}
845 
846 	return 0;
847 }
848 EXPORT_SYMBOL_GPL(snd_soc_resume);
849 #else
850 #define snd_soc_suspend NULL
851 #define snd_soc_resume NULL
852 #endif
853 
854 static const struct snd_soc_dai_ops null_dai_ops = {
855 };
856 
857 static int soc_bind_dai_link(struct snd_soc_card *card, int num)
858 {
859 	struct snd_soc_dai_link *dai_link = &card->dai_link[num];
860 	struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
861 	struct snd_soc_component *component;
862 	struct snd_soc_codec *codec;
863 	struct snd_soc_platform *platform;
864 	struct snd_soc_dai *codec_dai, *cpu_dai;
865 	const char *platform_name;
866 
867 	dev_dbg(card->dev, "ASoC: binding %s at idx %d\n", dai_link->name, num);
868 
869 	/* Find CPU DAI from registered DAIs*/
870 	list_for_each_entry(component, &component_list, list) {
871 		if (dai_link->cpu_of_node &&
872 			component->dev->of_node != dai_link->cpu_of_node)
873 			continue;
874 		if (dai_link->cpu_name &&
875 			strcmp(dev_name(component->dev), dai_link->cpu_name))
876 			continue;
877 		list_for_each_entry(cpu_dai, &component->dai_list, list) {
878 			if (dai_link->cpu_dai_name &&
879 				strcmp(cpu_dai->name, dai_link->cpu_dai_name))
880 				continue;
881 
882 			rtd->cpu_dai = cpu_dai;
883 		}
884 	}
885 
886 	if (!rtd->cpu_dai) {
887 		dev_err(card->dev, "ASoC: CPU DAI %s not registered\n",
888 			dai_link->cpu_dai_name);
889 		return -EPROBE_DEFER;
890 	}
891 
892 	/* Find CODEC from registered CODECs */
893 	list_for_each_entry(codec, &codec_list, list) {
894 		if (dai_link->codec_of_node) {
895 			if (codec->dev->of_node != dai_link->codec_of_node)
896 				continue;
897 		} else {
898 			if (strcmp(codec->name, dai_link->codec_name))
899 				continue;
900 		}
901 
902 		rtd->codec = codec;
903 
904 		/*
905 		 * CODEC found, so find CODEC DAI from registered DAIs from
906 		 * this CODEC
907 		 */
908 		list_for_each_entry(codec_dai, &codec->component.dai_list, list) {
909 			if (!strcmp(codec_dai->name, dai_link->codec_dai_name)) {
910 				rtd->codec_dai = codec_dai;
911 				break;
912 			}
913 		}
914 
915 		if (!rtd->codec_dai) {
916 			dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n",
917 				dai_link->codec_dai_name);
918 			return -EPROBE_DEFER;
919 		}
920 	}
921 
922 	if (!rtd->codec) {
923 		dev_err(card->dev, "ASoC: CODEC %s not registered\n",
924 			dai_link->codec_name);
925 		return -EPROBE_DEFER;
926 	}
927 
928 	/* if there's no platform we match on the empty platform */
929 	platform_name = dai_link->platform_name;
930 	if (!platform_name && !dai_link->platform_of_node)
931 		platform_name = "snd-soc-dummy";
932 
933 	/* find one from the set of registered platforms */
934 	list_for_each_entry(platform, &platform_list, list) {
935 		if (dai_link->platform_of_node) {
936 			if (platform->dev->of_node !=
937 			    dai_link->platform_of_node)
938 				continue;
939 		} else {
940 			if (strcmp(platform->name, platform_name))
941 				continue;
942 		}
943 
944 		rtd->platform = platform;
945 	}
946 	if (!rtd->platform) {
947 		dev_err(card->dev, "ASoC: platform %s not registered\n",
948 			dai_link->platform_name);
949 		return -EPROBE_DEFER;
950 	}
951 
952 	card->num_rtd++;
953 
954 	return 0;
955 }
956 
957 static int soc_remove_platform(struct snd_soc_platform *platform)
958 {
959 	int ret;
960 
961 	if (platform->driver->remove) {
962 		ret = platform->driver->remove(platform);
963 		if (ret < 0)
964 			dev_err(platform->dev, "ASoC: failed to remove %d\n",
965 				ret);
966 	}
967 
968 	/* Make sure all DAPM widgets are freed */
969 	snd_soc_dapm_free(&platform->dapm);
970 
971 	soc_cleanup_platform_debugfs(platform);
972 	platform->probed = 0;
973 	list_del(&platform->card_list);
974 	module_put(platform->dev->driver->owner);
975 
976 	return 0;
977 }
978 
979 static void soc_remove_codec(struct snd_soc_codec *codec)
980 {
981 	int err;
982 
983 	if (codec->driver->remove) {
984 		err = codec->driver->remove(codec);
985 		if (err < 0)
986 			dev_err(codec->dev, "ASoC: failed to remove %d\n", err);
987 	}
988 
989 	/* Make sure all DAPM widgets are freed */
990 	snd_soc_dapm_free(&codec->dapm);
991 
992 	soc_cleanup_codec_debugfs(codec);
993 	codec->probed = 0;
994 	list_del(&codec->card_list);
995 	module_put(codec->dev->driver->owner);
996 }
997 
998 static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order)
999 {
1000 	struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
1001 	struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai;
1002 	int err;
1003 
1004 	/* unregister the rtd device */
1005 	if (rtd->dev_registered) {
1006 		device_remove_file(rtd->dev, &dev_attr_pmdown_time);
1007 		device_remove_file(rtd->dev, &dev_attr_codec_reg);
1008 		device_unregister(rtd->dev);
1009 		rtd->dev_registered = 0;
1010 	}
1011 
1012 	/* remove the CODEC DAI */
1013 	if (codec_dai && codec_dai->probed &&
1014 			codec_dai->driver->remove_order == order) {
1015 		if (codec_dai->driver->remove) {
1016 			err = codec_dai->driver->remove(codec_dai);
1017 			if (err < 0)
1018 				dev_err(codec_dai->dev,
1019 					"ASoC: failed to remove %s: %d\n",
1020 					codec_dai->name, err);
1021 		}
1022 		codec_dai->probed = 0;
1023 		list_del(&codec_dai->card_list);
1024 	}
1025 
1026 	/* remove the cpu_dai */
1027 	if (cpu_dai && cpu_dai->probed &&
1028 			cpu_dai->driver->remove_order == order) {
1029 		if (cpu_dai->driver->remove) {
1030 			err = cpu_dai->driver->remove(cpu_dai);
1031 			if (err < 0)
1032 				dev_err(cpu_dai->dev,
1033 					"ASoC: failed to remove %s: %d\n",
1034 					cpu_dai->name, err);
1035 		}
1036 		cpu_dai->probed = 0;
1037 		list_del(&cpu_dai->card_list);
1038 
1039 		if (!cpu_dai->codec) {
1040 			snd_soc_dapm_free(&cpu_dai->dapm);
1041 			module_put(cpu_dai->dev->driver->owner);
1042 		}
1043 	}
1044 }
1045 
1046 static void soc_remove_link_components(struct snd_soc_card *card, int num,
1047 				       int order)
1048 {
1049 	struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
1050 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1051 	struct snd_soc_dai *codec_dai = rtd->codec_dai;
1052 	struct snd_soc_platform *platform = rtd->platform;
1053 	struct snd_soc_codec *codec;
1054 
1055 	/* remove the platform */
1056 	if (platform && platform->probed &&
1057 	    platform->driver->remove_order == order) {
1058 		soc_remove_platform(platform);
1059 	}
1060 
1061 	/* remove the CODEC-side CODEC */
1062 	if (codec_dai) {
1063 		codec = codec_dai->codec;
1064 		if (codec && codec->probed &&
1065 		    codec->driver->remove_order == order)
1066 			soc_remove_codec(codec);
1067 	}
1068 
1069 	/* remove any CPU-side CODEC */
1070 	if (cpu_dai) {
1071 		codec = cpu_dai->codec;
1072 		if (codec && codec->probed &&
1073 		    codec->driver->remove_order == order)
1074 			soc_remove_codec(codec);
1075 	}
1076 }
1077 
1078 static void soc_remove_dai_links(struct snd_soc_card *card)
1079 {
1080 	int dai, order;
1081 
1082 	for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1083 			order++) {
1084 		for (dai = 0; dai < card->num_rtd; dai++)
1085 			soc_remove_link_dais(card, dai, order);
1086 	}
1087 
1088 	for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1089 			order++) {
1090 		for (dai = 0; dai < card->num_rtd; dai++)
1091 			soc_remove_link_components(card, dai, order);
1092 	}
1093 
1094 	card->num_rtd = 0;
1095 }
1096 
1097 static void soc_set_name_prefix(struct snd_soc_card *card,
1098 				struct snd_soc_codec *codec)
1099 {
1100 	int i;
1101 
1102 	if (card->codec_conf == NULL)
1103 		return;
1104 
1105 	for (i = 0; i < card->num_configs; i++) {
1106 		struct snd_soc_codec_conf *map = &card->codec_conf[i];
1107 		if (map->dev_name && !strcmp(codec->name, map->dev_name)) {
1108 			codec->name_prefix = map->name_prefix;
1109 			break;
1110 		}
1111 	}
1112 }
1113 
1114 static int soc_probe_codec(struct snd_soc_card *card,
1115 			   struct snd_soc_codec *codec)
1116 {
1117 	int ret = 0;
1118 	const struct snd_soc_codec_driver *driver = codec->driver;
1119 	struct snd_soc_dai *dai;
1120 
1121 	codec->card = card;
1122 	codec->dapm.card = card;
1123 	soc_set_name_prefix(card, codec);
1124 
1125 	if (!try_module_get(codec->dev->driver->owner))
1126 		return -ENODEV;
1127 
1128 	soc_init_codec_debugfs(codec);
1129 
1130 	if (driver->dapm_widgets)
1131 		snd_soc_dapm_new_controls(&codec->dapm, driver->dapm_widgets,
1132 					  driver->num_dapm_widgets);
1133 
1134 	/* Create DAPM widgets for each DAI stream */
1135 	list_for_each_entry(dai, &codec->component.dai_list, list)
1136 		snd_soc_dapm_new_dai_widgets(&codec->dapm, dai);
1137 
1138 	codec->dapm.idle_bias_off = driver->idle_bias_off;
1139 
1140 	if (!codec->write && dev_get_regmap(codec->dev, NULL)) {
1141 		/* Set the default I/O up try regmap */
1142 		ret = snd_soc_codec_set_cache_io(codec, NULL);
1143 		if (ret < 0) {
1144 			dev_err(codec->dev,
1145 				"Failed to set cache I/O: %d\n", ret);
1146 			goto err_probe;
1147 		}
1148 	}
1149 
1150 	if (driver->probe) {
1151 		ret = driver->probe(codec);
1152 		if (ret < 0) {
1153 			dev_err(codec->dev,
1154 				"ASoC: failed to probe CODEC %d\n", ret);
1155 			goto err_probe;
1156 		}
1157 		WARN(codec->dapm.idle_bias_off &&
1158 			codec->dapm.bias_level != SND_SOC_BIAS_OFF,
1159 			"codec %s can not start from non-off bias with idle_bias_off==1\n",
1160 			codec->name);
1161 	}
1162 
1163 	if (driver->controls)
1164 		snd_soc_add_codec_controls(codec, driver->controls,
1165 				     driver->num_controls);
1166 	if (driver->dapm_routes)
1167 		snd_soc_dapm_add_routes(&codec->dapm, driver->dapm_routes,
1168 					driver->num_dapm_routes);
1169 
1170 	/* mark codec as probed and add to card codec list */
1171 	codec->probed = 1;
1172 	list_add(&codec->card_list, &card->codec_dev_list);
1173 	list_add(&codec->dapm.list, &card->dapm_list);
1174 
1175 	return 0;
1176 
1177 err_probe:
1178 	soc_cleanup_codec_debugfs(codec);
1179 	module_put(codec->dev->driver->owner);
1180 
1181 	return ret;
1182 }
1183 
1184 static int soc_probe_platform(struct snd_soc_card *card,
1185 			   struct snd_soc_platform *platform)
1186 {
1187 	int ret = 0;
1188 	const struct snd_soc_platform_driver *driver = platform->driver;
1189 	struct snd_soc_component *component;
1190 	struct snd_soc_dai *dai;
1191 
1192 	platform->card = card;
1193 	platform->dapm.card = card;
1194 
1195 	if (!try_module_get(platform->dev->driver->owner))
1196 		return -ENODEV;
1197 
1198 	soc_init_platform_debugfs(platform);
1199 
1200 	if (driver->dapm_widgets)
1201 		snd_soc_dapm_new_controls(&platform->dapm,
1202 			driver->dapm_widgets, driver->num_dapm_widgets);
1203 
1204 	/* Create DAPM widgets for each DAI stream */
1205 	list_for_each_entry(component, &component_list, list) {
1206 		if (component->dev != platform->dev)
1207 			continue;
1208 		list_for_each_entry(dai, &component->dai_list, list)
1209 			snd_soc_dapm_new_dai_widgets(&platform->dapm, dai);
1210 	}
1211 
1212 	platform->dapm.idle_bias_off = 1;
1213 
1214 	if (driver->probe) {
1215 		ret = driver->probe(platform);
1216 		if (ret < 0) {
1217 			dev_err(platform->dev,
1218 				"ASoC: failed to probe platform %d\n", ret);
1219 			goto err_probe;
1220 		}
1221 	}
1222 
1223 	if (driver->controls)
1224 		snd_soc_add_platform_controls(platform, driver->controls,
1225 				     driver->num_controls);
1226 	if (driver->dapm_routes)
1227 		snd_soc_dapm_add_routes(&platform->dapm, driver->dapm_routes,
1228 					driver->num_dapm_routes);
1229 
1230 	/* mark platform as probed and add to card platform list */
1231 	platform->probed = 1;
1232 	list_add(&platform->card_list, &card->platform_dev_list);
1233 	list_add(&platform->dapm.list, &card->dapm_list);
1234 
1235 	return 0;
1236 
1237 err_probe:
1238 	soc_cleanup_platform_debugfs(platform);
1239 	module_put(platform->dev->driver->owner);
1240 
1241 	return ret;
1242 }
1243 
1244 static void rtd_release(struct device *dev)
1245 {
1246 	kfree(dev);
1247 }
1248 
1249 static int soc_post_component_init(struct snd_soc_card *card,
1250 				   struct snd_soc_codec *codec,
1251 				   int num, int dailess)
1252 {
1253 	struct snd_soc_dai_link *dai_link = NULL;
1254 	struct snd_soc_aux_dev *aux_dev = NULL;
1255 	struct snd_soc_pcm_runtime *rtd;
1256 	const char *name;
1257 	int ret = 0;
1258 
1259 	if (!dailess) {
1260 		dai_link = &card->dai_link[num];
1261 		rtd = &card->rtd[num];
1262 		name = dai_link->name;
1263 	} else {
1264 		aux_dev = &card->aux_dev[num];
1265 		rtd = &card->rtd_aux[num];
1266 		name = aux_dev->name;
1267 	}
1268 	rtd->card = card;
1269 
1270 	/* do machine specific initialization */
1271 	if (!dailess && dai_link->init)
1272 		ret = dai_link->init(rtd);
1273 	else if (dailess && aux_dev->init)
1274 		ret = aux_dev->init(&codec->dapm);
1275 	if (ret < 0) {
1276 		dev_err(card->dev, "ASoC: failed to init %s: %d\n", name, ret);
1277 		return ret;
1278 	}
1279 
1280 	/* register the rtd device */
1281 	rtd->codec = codec;
1282 
1283 	rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
1284 	if (!rtd->dev)
1285 		return -ENOMEM;
1286 	device_initialize(rtd->dev);
1287 	rtd->dev->parent = card->dev;
1288 	rtd->dev->release = rtd_release;
1289 	rtd->dev->init_name = name;
1290 	dev_set_drvdata(rtd->dev, rtd);
1291 	mutex_init(&rtd->pcm_mutex);
1292 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients);
1293 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].be_clients);
1294 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].fe_clients);
1295 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].fe_clients);
1296 	ret = device_add(rtd->dev);
1297 	if (ret < 0) {
1298 		/* calling put_device() here to free the rtd->dev */
1299 		put_device(rtd->dev);
1300 		dev_err(card->dev,
1301 			"ASoC: failed to register runtime device: %d\n", ret);
1302 		return ret;
1303 	}
1304 	rtd->dev_registered = 1;
1305 
1306 	/* add DAPM sysfs entries for this codec */
1307 	ret = snd_soc_dapm_sys_add(rtd->dev);
1308 	if (ret < 0)
1309 		dev_err(codec->dev,
1310 			"ASoC: failed to add codec dapm sysfs entries: %d\n", ret);
1311 
1312 	/* add codec sysfs entries */
1313 	ret = device_create_file(rtd->dev, &dev_attr_codec_reg);
1314 	if (ret < 0)
1315 		dev_err(codec->dev,
1316 			"ASoC: failed to add codec sysfs files: %d\n", ret);
1317 
1318 #ifdef CONFIG_DEBUG_FS
1319 	/* add DPCM sysfs entries */
1320 	if (!dailess && !dai_link->dynamic)
1321 		goto out;
1322 
1323 	ret = soc_dpcm_debugfs_add(rtd);
1324 	if (ret < 0)
1325 		dev_err(rtd->dev, "ASoC: failed to add dpcm sysfs entries: %d\n", ret);
1326 
1327 out:
1328 #endif
1329 	return 0;
1330 }
1331 
1332 static int soc_probe_link_components(struct snd_soc_card *card, int num,
1333 				     int order)
1334 {
1335 	struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
1336 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1337 	struct snd_soc_dai *codec_dai = rtd->codec_dai;
1338 	struct snd_soc_platform *platform = rtd->platform;
1339 	int ret;
1340 
1341 	/* probe the CPU-side component, if it is a CODEC */
1342 	if (cpu_dai->codec &&
1343 	    !cpu_dai->codec->probed &&
1344 	    cpu_dai->codec->driver->probe_order == order) {
1345 		ret = soc_probe_codec(card, cpu_dai->codec);
1346 		if (ret < 0)
1347 			return ret;
1348 	}
1349 
1350 	/* probe the CODEC-side component */
1351 	if (!codec_dai->codec->probed &&
1352 	    codec_dai->codec->driver->probe_order == order) {
1353 		ret = soc_probe_codec(card, codec_dai->codec);
1354 		if (ret < 0)
1355 			return ret;
1356 	}
1357 
1358 	/* probe the platform */
1359 	if (!platform->probed &&
1360 	    platform->driver->probe_order == order) {
1361 		ret = soc_probe_platform(card, platform);
1362 		if (ret < 0)
1363 			return ret;
1364 	}
1365 
1366 	return 0;
1367 }
1368 
1369 static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
1370 {
1371 	struct snd_soc_dai_link *dai_link = &card->dai_link[num];
1372 	struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
1373 	struct snd_soc_codec *codec = rtd->codec;
1374 	struct snd_soc_platform *platform = rtd->platform;
1375 	struct snd_soc_dai *codec_dai = rtd->codec_dai;
1376 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1377 	struct snd_soc_dapm_widget *play_w, *capture_w;
1378 	int ret;
1379 
1380 	dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n",
1381 			card->name, num, order);
1382 
1383 	/* config components */
1384 	cpu_dai->platform = platform;
1385 	codec_dai->card = card;
1386 	cpu_dai->card = card;
1387 
1388 	/* set default power off timeout */
1389 	rtd->pmdown_time = pmdown_time;
1390 
1391 	/* probe the cpu_dai */
1392 	if (!cpu_dai->probed &&
1393 			cpu_dai->driver->probe_order == order) {
1394 		if (!cpu_dai->codec) {
1395 			cpu_dai->dapm.card = card;
1396 			if (!try_module_get(cpu_dai->dev->driver->owner))
1397 				return -ENODEV;
1398 
1399 			list_add(&cpu_dai->dapm.list, &card->dapm_list);
1400 		}
1401 
1402 		if (cpu_dai->driver->probe) {
1403 			ret = cpu_dai->driver->probe(cpu_dai);
1404 			if (ret < 0) {
1405 				dev_err(cpu_dai->dev,
1406 					"ASoC: failed to probe CPU DAI %s: %d\n",
1407 					cpu_dai->name, ret);
1408 				module_put(cpu_dai->dev->driver->owner);
1409 				return ret;
1410 			}
1411 		}
1412 		cpu_dai->probed = 1;
1413 		/* mark cpu_dai as probed and add to card dai list */
1414 		list_add(&cpu_dai->card_list, &card->dai_dev_list);
1415 	}
1416 
1417 	/* probe the CODEC DAI */
1418 	if (!codec_dai->probed && codec_dai->driver->probe_order == order) {
1419 		if (codec_dai->driver->probe) {
1420 			ret = codec_dai->driver->probe(codec_dai);
1421 			if (ret < 0) {
1422 				dev_err(codec_dai->dev,
1423 					"ASoC: failed to probe CODEC DAI %s: %d\n",
1424 					codec_dai->name, ret);
1425 				return ret;
1426 			}
1427 		}
1428 
1429 		/* mark codec_dai as probed and add to card dai list */
1430 		codec_dai->probed = 1;
1431 		list_add(&codec_dai->card_list, &card->dai_dev_list);
1432 	}
1433 
1434 	/* complete DAI probe during last probe */
1435 	if (order != SND_SOC_COMP_ORDER_LAST)
1436 		return 0;
1437 
1438 	ret = soc_post_component_init(card, codec, num, 0);
1439 	if (ret)
1440 		return ret;
1441 
1442 	ret = device_create_file(rtd->dev, &dev_attr_pmdown_time);
1443 	if (ret < 0)
1444 		dev_warn(rtd->dev, "ASoC: failed to add pmdown_time sysfs: %d\n",
1445 			ret);
1446 
1447 	if (cpu_dai->driver->compress_dai) {
1448 		/*create compress_device"*/
1449 		ret = soc_new_compress(rtd, num);
1450 		if (ret < 0) {
1451 			dev_err(card->dev, "ASoC: can't create compress %s\n",
1452 					 dai_link->stream_name);
1453 			return ret;
1454 		}
1455 	} else {
1456 
1457 		if (!dai_link->params) {
1458 			/* create the pcm */
1459 			ret = soc_new_pcm(rtd, num);
1460 			if (ret < 0) {
1461 				dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
1462 				       dai_link->stream_name, ret);
1463 				return ret;
1464 			}
1465 		} else {
1466 			INIT_DELAYED_WORK(&rtd->delayed_work,
1467 						codec2codec_close_delayed_work);
1468 
1469 			/* link the DAI widgets */
1470 			play_w = codec_dai->playback_widget;
1471 			capture_w = cpu_dai->capture_widget;
1472 			if (play_w && capture_w) {
1473 				ret = snd_soc_dapm_new_pcm(card, dai_link->params,
1474 						   capture_w, play_w);
1475 				if (ret != 0) {
1476 					dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
1477 						play_w->name, capture_w->name, ret);
1478 					return ret;
1479 				}
1480 			}
1481 
1482 			play_w = cpu_dai->playback_widget;
1483 			capture_w = codec_dai->capture_widget;
1484 			if (play_w && capture_w) {
1485 				ret = snd_soc_dapm_new_pcm(card, dai_link->params,
1486 						   capture_w, play_w);
1487 				if (ret != 0) {
1488 					dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
1489 						play_w->name, capture_w->name, ret);
1490 					return ret;
1491 				}
1492 			}
1493 		}
1494 	}
1495 
1496 	/* add platform data for AC97 devices */
1497 	if (rtd->codec_dai->driver->ac97_control)
1498 		snd_ac97_dev_add_pdata(codec->ac97, rtd->cpu_dai->ac97_pdata);
1499 
1500 	return 0;
1501 }
1502 
1503 #ifdef CONFIG_SND_SOC_AC97_BUS
1504 static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
1505 {
1506 	int ret;
1507 
1508 	/* Only instantiate AC97 if not already done by the adaptor
1509 	 * for the generic AC97 subsystem.
1510 	 */
1511 	if (rtd->codec_dai->driver->ac97_control && !rtd->codec->ac97_registered) {
1512 		/*
1513 		 * It is possible that the AC97 device is already registered to
1514 		 * the device subsystem. This happens when the device is created
1515 		 * via snd_ac97_mixer(). Currently only SoC codec that does so
1516 		 * is the generic AC97 glue but others migh emerge.
1517 		 *
1518 		 * In those cases we don't try to register the device again.
1519 		 */
1520 		if (!rtd->codec->ac97_created)
1521 			return 0;
1522 
1523 		ret = soc_ac97_dev_register(rtd->codec);
1524 		if (ret < 0) {
1525 			dev_err(rtd->codec->dev,
1526 				"ASoC: AC97 device register failed: %d\n", ret);
1527 			return ret;
1528 		}
1529 
1530 		rtd->codec->ac97_registered = 1;
1531 	}
1532 	return 0;
1533 }
1534 
1535 static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
1536 {
1537 	if (codec->ac97_registered) {
1538 		soc_ac97_dev_unregister(codec);
1539 		codec->ac97_registered = 0;
1540 	}
1541 }
1542 #endif
1543 
1544 static int soc_check_aux_dev(struct snd_soc_card *card, int num)
1545 {
1546 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
1547 	struct snd_soc_codec *codec;
1548 
1549 	/* find CODEC from registered CODECs*/
1550 	list_for_each_entry(codec, &codec_list, list) {
1551 		if (!strcmp(codec->name, aux_dev->codec_name))
1552 			return 0;
1553 	}
1554 
1555 	dev_err(card->dev, "ASoC: %s not registered\n", aux_dev->codec_name);
1556 
1557 	return -EPROBE_DEFER;
1558 }
1559 
1560 static int soc_probe_aux_dev(struct snd_soc_card *card, int num)
1561 {
1562 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
1563 	struct snd_soc_codec *codec;
1564 	int ret = -ENODEV;
1565 
1566 	/* find CODEC from registered CODECs*/
1567 	list_for_each_entry(codec, &codec_list, list) {
1568 		if (!strcmp(codec->name, aux_dev->codec_name)) {
1569 			if (codec->probed) {
1570 				dev_err(codec->dev,
1571 					"ASoC: codec already probed");
1572 				ret = -EBUSY;
1573 				goto out;
1574 			}
1575 			goto found;
1576 		}
1577 	}
1578 	/* codec not found */
1579 	dev_err(card->dev, "ASoC: codec %s not found", aux_dev->codec_name);
1580 	return -EPROBE_DEFER;
1581 
1582 found:
1583 	ret = soc_probe_codec(card, codec);
1584 	if (ret < 0)
1585 		return ret;
1586 
1587 	ret = soc_post_component_init(card, codec, num, 1);
1588 
1589 out:
1590 	return ret;
1591 }
1592 
1593 static void soc_remove_aux_dev(struct snd_soc_card *card, int num)
1594 {
1595 	struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num];
1596 	struct snd_soc_codec *codec = rtd->codec;
1597 
1598 	/* unregister the rtd device */
1599 	if (rtd->dev_registered) {
1600 		device_remove_file(rtd->dev, &dev_attr_codec_reg);
1601 		device_unregister(rtd->dev);
1602 		rtd->dev_registered = 0;
1603 	}
1604 
1605 	if (codec && codec->probed)
1606 		soc_remove_codec(codec);
1607 }
1608 
1609 static int snd_soc_init_codec_cache(struct snd_soc_codec *codec)
1610 {
1611 	int ret;
1612 
1613 	if (codec->cache_init)
1614 		return 0;
1615 
1616 	ret = snd_soc_cache_init(codec);
1617 	if (ret < 0) {
1618 		dev_err(codec->dev,
1619 			"ASoC: Failed to set cache compression type: %d\n",
1620 			ret);
1621 		return ret;
1622 	}
1623 	codec->cache_init = 1;
1624 	return 0;
1625 }
1626 
1627 static int snd_soc_instantiate_card(struct snd_soc_card *card)
1628 {
1629 	struct snd_soc_codec *codec;
1630 	struct snd_soc_dai_link *dai_link;
1631 	int ret, i, order, dai_fmt;
1632 
1633 	mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
1634 
1635 	/* bind DAIs */
1636 	for (i = 0; i < card->num_links; i++) {
1637 		ret = soc_bind_dai_link(card, i);
1638 		if (ret != 0)
1639 			goto base_error;
1640 	}
1641 
1642 	/* check aux_devs too */
1643 	for (i = 0; i < card->num_aux_devs; i++) {
1644 		ret = soc_check_aux_dev(card, i);
1645 		if (ret != 0)
1646 			goto base_error;
1647 	}
1648 
1649 	/* initialize the register cache for each available codec */
1650 	list_for_each_entry(codec, &codec_list, list) {
1651 		if (codec->cache_init)
1652 			continue;
1653 		ret = snd_soc_init_codec_cache(codec);
1654 		if (ret < 0)
1655 			goto base_error;
1656 	}
1657 
1658 	/* card bind complete so register a sound card */
1659 	ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
1660 			card->owner, 0, &card->snd_card);
1661 	if (ret < 0) {
1662 		dev_err(card->dev,
1663 			"ASoC: can't create sound card for card %s: %d\n",
1664 			card->name, ret);
1665 		goto base_error;
1666 	}
1667 
1668 	card->dapm.bias_level = SND_SOC_BIAS_OFF;
1669 	card->dapm.dev = card->dev;
1670 	card->dapm.card = card;
1671 	list_add(&card->dapm.list, &card->dapm_list);
1672 
1673 #ifdef CONFIG_DEBUG_FS
1674 	snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root);
1675 #endif
1676 
1677 #ifdef CONFIG_PM_SLEEP
1678 	/* deferred resume work */
1679 	INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
1680 #endif
1681 
1682 	if (card->dapm_widgets)
1683 		snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets,
1684 					  card->num_dapm_widgets);
1685 
1686 	/* initialise the sound card only once */
1687 	if (card->probe) {
1688 		ret = card->probe(card);
1689 		if (ret < 0)
1690 			goto card_probe_error;
1691 	}
1692 
1693 	/* probe all components used by DAI links on this card */
1694 	for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1695 			order++) {
1696 		for (i = 0; i < card->num_links; i++) {
1697 			ret = soc_probe_link_components(card, i, order);
1698 			if (ret < 0) {
1699 				dev_err(card->dev,
1700 					"ASoC: failed to instantiate card %d\n",
1701 					ret);
1702 				goto probe_dai_err;
1703 			}
1704 		}
1705 	}
1706 
1707 	/* probe all DAI links on this card */
1708 	for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
1709 			order++) {
1710 		for (i = 0; i < card->num_links; i++) {
1711 			ret = soc_probe_link_dais(card, i, order);
1712 			if (ret < 0) {
1713 				dev_err(card->dev,
1714 					"ASoC: failed to instantiate card %d\n",
1715 					ret);
1716 				goto probe_dai_err;
1717 			}
1718 		}
1719 	}
1720 
1721 	for (i = 0; i < card->num_aux_devs; i++) {
1722 		ret = soc_probe_aux_dev(card, i);
1723 		if (ret < 0) {
1724 			dev_err(card->dev,
1725 				"ASoC: failed to add auxiliary devices %d\n",
1726 				ret);
1727 			goto probe_aux_dev_err;
1728 		}
1729 	}
1730 
1731 	snd_soc_dapm_link_dai_widgets(card);
1732 	snd_soc_dapm_connect_dai_link_widgets(card);
1733 
1734 	if (card->controls)
1735 		snd_soc_add_card_controls(card, card->controls, card->num_controls);
1736 
1737 	if (card->dapm_routes)
1738 		snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes,
1739 					card->num_dapm_routes);
1740 
1741 	for (i = 0; i < card->num_links; i++) {
1742 		dai_link = &card->dai_link[i];
1743 		dai_fmt = dai_link->dai_fmt;
1744 
1745 		if (dai_fmt) {
1746 			ret = snd_soc_dai_set_fmt(card->rtd[i].codec_dai,
1747 						  dai_fmt);
1748 			if (ret != 0 && ret != -ENOTSUPP)
1749 				dev_warn(card->rtd[i].codec_dai->dev,
1750 					 "ASoC: Failed to set DAI format: %d\n",
1751 					 ret);
1752 		}
1753 
1754 		/* If this is a regular CPU link there will be a platform */
1755 		if (dai_fmt &&
1756 		    (dai_link->platform_name || dai_link->platform_of_node)) {
1757 			ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai,
1758 						  dai_fmt);
1759 			if (ret != 0 && ret != -ENOTSUPP)
1760 				dev_warn(card->rtd[i].cpu_dai->dev,
1761 					 "ASoC: Failed to set DAI format: %d\n",
1762 					 ret);
1763 		} else if (dai_fmt) {
1764 			/* Flip the polarity for the "CPU" end */
1765 			dai_fmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
1766 			switch (dai_link->dai_fmt &
1767 				SND_SOC_DAIFMT_MASTER_MASK) {
1768 			case SND_SOC_DAIFMT_CBM_CFM:
1769 				dai_fmt |= SND_SOC_DAIFMT_CBS_CFS;
1770 				break;
1771 			case SND_SOC_DAIFMT_CBM_CFS:
1772 				dai_fmt |= SND_SOC_DAIFMT_CBS_CFM;
1773 				break;
1774 			case SND_SOC_DAIFMT_CBS_CFM:
1775 				dai_fmt |= SND_SOC_DAIFMT_CBM_CFS;
1776 				break;
1777 			case SND_SOC_DAIFMT_CBS_CFS:
1778 				dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
1779 				break;
1780 			}
1781 
1782 			ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai,
1783 						  dai_fmt);
1784 			if (ret != 0 && ret != -ENOTSUPP)
1785 				dev_warn(card->rtd[i].cpu_dai->dev,
1786 					 "ASoC: Failed to set DAI format: %d\n",
1787 					 ret);
1788 		}
1789 	}
1790 
1791 	snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname),
1792 		 "%s", card->name);
1793 	snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),
1794 		 "%s", card->long_name ? card->long_name : card->name);
1795 	snprintf(card->snd_card->driver, sizeof(card->snd_card->driver),
1796 		 "%s", card->driver_name ? card->driver_name : card->name);
1797 	for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) {
1798 		switch (card->snd_card->driver[i]) {
1799 		case '_':
1800 		case '-':
1801 		case '\0':
1802 			break;
1803 		default:
1804 			if (!isalnum(card->snd_card->driver[i]))
1805 				card->snd_card->driver[i] = '_';
1806 			break;
1807 		}
1808 	}
1809 
1810 	if (card->late_probe) {
1811 		ret = card->late_probe(card);
1812 		if (ret < 0) {
1813 			dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n",
1814 				card->name, ret);
1815 			goto probe_aux_dev_err;
1816 		}
1817 	}
1818 
1819 	if (card->fully_routed)
1820 		list_for_each_entry(codec, &card->codec_dev_list, card_list)
1821 			snd_soc_dapm_auto_nc_codec_pins(codec);
1822 
1823 	snd_soc_dapm_new_widgets(card);
1824 
1825 	ret = snd_card_register(card->snd_card);
1826 	if (ret < 0) {
1827 		dev_err(card->dev, "ASoC: failed to register soundcard %d\n",
1828 				ret);
1829 		goto probe_aux_dev_err;
1830 	}
1831 
1832 #ifdef CONFIG_SND_SOC_AC97_BUS
1833 	/* register any AC97 codecs */
1834 	for (i = 0; i < card->num_rtd; i++) {
1835 		ret = soc_register_ac97_dai_link(&card->rtd[i]);
1836 		if (ret < 0) {
1837 			dev_err(card->dev,
1838 				"ASoC: failed to register AC97: %d\n", ret);
1839 			while (--i >= 0)
1840 				soc_unregister_ac97_dai_link(card->rtd[i].codec);
1841 			goto probe_aux_dev_err;
1842 		}
1843 	}
1844 #endif
1845 
1846 	card->instantiated = 1;
1847 	snd_soc_dapm_sync(&card->dapm);
1848 	mutex_unlock(&card->mutex);
1849 
1850 	return 0;
1851 
1852 probe_aux_dev_err:
1853 	for (i = 0; i < card->num_aux_devs; i++)
1854 		soc_remove_aux_dev(card, i);
1855 
1856 probe_dai_err:
1857 	soc_remove_dai_links(card);
1858 
1859 card_probe_error:
1860 	if (card->remove)
1861 		card->remove(card);
1862 
1863 	snd_card_free(card->snd_card);
1864 
1865 base_error:
1866 	mutex_unlock(&card->mutex);
1867 
1868 	return ret;
1869 }
1870 
1871 /* probes a new socdev */
1872 static int soc_probe(struct platform_device *pdev)
1873 {
1874 	struct snd_soc_card *card = platform_get_drvdata(pdev);
1875 
1876 	/*
1877 	 * no card, so machine driver should be registering card
1878 	 * we should not be here in that case so ret error
1879 	 */
1880 	if (!card)
1881 		return -EINVAL;
1882 
1883 	dev_warn(&pdev->dev,
1884 		 "ASoC: machine %s should use snd_soc_register_card()\n",
1885 		 card->name);
1886 
1887 	/* Bodge while we unpick instantiation */
1888 	card->dev = &pdev->dev;
1889 
1890 	return snd_soc_register_card(card);
1891 }
1892 
1893 static int soc_cleanup_card_resources(struct snd_soc_card *card)
1894 {
1895 	int i;
1896 
1897 	/* make sure any delayed work runs */
1898 	for (i = 0; i < card->num_rtd; i++) {
1899 		struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
1900 		flush_delayed_work(&rtd->delayed_work);
1901 	}
1902 
1903 	/* remove auxiliary devices */
1904 	for (i = 0; i < card->num_aux_devs; i++)
1905 		soc_remove_aux_dev(card, i);
1906 
1907 	/* remove and free each DAI */
1908 	soc_remove_dai_links(card);
1909 
1910 	soc_cleanup_card_debugfs(card);
1911 
1912 	/* remove the card */
1913 	if (card->remove)
1914 		card->remove(card);
1915 
1916 	snd_soc_dapm_free(&card->dapm);
1917 
1918 	snd_card_free(card->snd_card);
1919 	return 0;
1920 
1921 }
1922 
1923 /* removes a socdev */
1924 static int soc_remove(struct platform_device *pdev)
1925 {
1926 	struct snd_soc_card *card = platform_get_drvdata(pdev);
1927 
1928 	snd_soc_unregister_card(card);
1929 	return 0;
1930 }
1931 
1932 int snd_soc_poweroff(struct device *dev)
1933 {
1934 	struct snd_soc_card *card = dev_get_drvdata(dev);
1935 	int i;
1936 
1937 	if (!card->instantiated)
1938 		return 0;
1939 
1940 	/* Flush out pmdown_time work - we actually do want to run it
1941 	 * now, we're shutting down so no imminent restart. */
1942 	for (i = 0; i < card->num_rtd; i++) {
1943 		struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
1944 		flush_delayed_work(&rtd->delayed_work);
1945 	}
1946 
1947 	snd_soc_dapm_shutdown(card);
1948 
1949 	/* deactivate pins to sleep state */
1950 	for (i = 0; i < card->num_rtd; i++) {
1951 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
1952 		struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai;
1953 		pinctrl_pm_select_sleep_state(codec_dai->dev);
1954 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
1955 	}
1956 
1957 	return 0;
1958 }
1959 EXPORT_SYMBOL_GPL(snd_soc_poweroff);
1960 
1961 const struct dev_pm_ops snd_soc_pm_ops = {
1962 	.suspend = snd_soc_suspend,
1963 	.resume = snd_soc_resume,
1964 	.freeze = snd_soc_suspend,
1965 	.thaw = snd_soc_resume,
1966 	.poweroff = snd_soc_poweroff,
1967 	.restore = snd_soc_resume,
1968 };
1969 EXPORT_SYMBOL_GPL(snd_soc_pm_ops);
1970 
1971 /* ASoC platform driver */
1972 static struct platform_driver soc_driver = {
1973 	.driver		= {
1974 		.name		= "soc-audio",
1975 		.owner		= THIS_MODULE,
1976 		.pm		= &snd_soc_pm_ops,
1977 	},
1978 	.probe		= soc_probe,
1979 	.remove		= soc_remove,
1980 };
1981 
1982 /**
1983  * snd_soc_codec_volatile_register: Report if a register is volatile.
1984  *
1985  * @codec: CODEC to query.
1986  * @reg: Register to query.
1987  *
1988  * Boolean function indiciating if a CODEC register is volatile.
1989  */
1990 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec,
1991 				    unsigned int reg)
1992 {
1993 	if (codec->volatile_register)
1994 		return codec->volatile_register(codec, reg);
1995 	else
1996 		return 0;
1997 }
1998 EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register);
1999 
2000 /**
2001  * snd_soc_codec_readable_register: Report if a register is readable.
2002  *
2003  * @codec: CODEC to query.
2004  * @reg: Register to query.
2005  *
2006  * Boolean function indicating if a CODEC register is readable.
2007  */
2008 int snd_soc_codec_readable_register(struct snd_soc_codec *codec,
2009 				    unsigned int reg)
2010 {
2011 	if (codec->readable_register)
2012 		return codec->readable_register(codec, reg);
2013 	else
2014 		return 1;
2015 }
2016 EXPORT_SYMBOL_GPL(snd_soc_codec_readable_register);
2017 
2018 /**
2019  * snd_soc_codec_writable_register: Report if a register is writable.
2020  *
2021  * @codec: CODEC to query.
2022  * @reg: Register to query.
2023  *
2024  * Boolean function indicating if a CODEC register is writable.
2025  */
2026 int snd_soc_codec_writable_register(struct snd_soc_codec *codec,
2027 				    unsigned int reg)
2028 {
2029 	if (codec->writable_register)
2030 		return codec->writable_register(codec, reg);
2031 	else
2032 		return 1;
2033 }
2034 EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register);
2035 
2036 int snd_soc_platform_read(struct snd_soc_platform *platform,
2037 					unsigned int reg)
2038 {
2039 	unsigned int ret;
2040 
2041 	if (!platform->driver->read) {
2042 		dev_err(platform->dev, "ASoC: platform has no read back\n");
2043 		return -1;
2044 	}
2045 
2046 	ret = platform->driver->read(platform, reg);
2047 	dev_dbg(platform->dev, "read %x => %x\n", reg, ret);
2048 	trace_snd_soc_preg_read(platform, reg, ret);
2049 
2050 	return ret;
2051 }
2052 EXPORT_SYMBOL_GPL(snd_soc_platform_read);
2053 
2054 int snd_soc_platform_write(struct snd_soc_platform *platform,
2055 					 unsigned int reg, unsigned int val)
2056 {
2057 	if (!platform->driver->write) {
2058 		dev_err(platform->dev, "ASoC: platform has no write back\n");
2059 		return -1;
2060 	}
2061 
2062 	dev_dbg(platform->dev, "write %x = %x\n", reg, val);
2063 	trace_snd_soc_preg_write(platform, reg, val);
2064 	return platform->driver->write(platform, reg, val);
2065 }
2066 EXPORT_SYMBOL_GPL(snd_soc_platform_write);
2067 
2068 /**
2069  * snd_soc_new_ac97_codec - initailise AC97 device
2070  * @codec: audio codec
2071  * @ops: AC97 bus operations
2072  * @num: AC97 codec number
2073  *
2074  * Initialises AC97 codec resources for use by ad-hoc devices only.
2075  */
2076 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
2077 	struct snd_ac97_bus_ops *ops, int num)
2078 {
2079 	mutex_lock(&codec->mutex);
2080 
2081 	codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
2082 	if (codec->ac97 == NULL) {
2083 		mutex_unlock(&codec->mutex);
2084 		return -ENOMEM;
2085 	}
2086 
2087 	codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL);
2088 	if (codec->ac97->bus == NULL) {
2089 		kfree(codec->ac97);
2090 		codec->ac97 = NULL;
2091 		mutex_unlock(&codec->mutex);
2092 		return -ENOMEM;
2093 	}
2094 
2095 	codec->ac97->bus->ops = ops;
2096 	codec->ac97->num = num;
2097 
2098 	/*
2099 	 * Mark the AC97 device to be created by us. This way we ensure that the
2100 	 * device will be registered with the device subsystem later on.
2101 	 */
2102 	codec->ac97_created = 1;
2103 
2104 	mutex_unlock(&codec->mutex);
2105 	return 0;
2106 }
2107 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec);
2108 
2109 static struct snd_ac97_reset_cfg snd_ac97_rst_cfg;
2110 
2111 static void snd_soc_ac97_warm_reset(struct snd_ac97 *ac97)
2112 {
2113 	struct pinctrl *pctl = snd_ac97_rst_cfg.pctl;
2114 
2115 	pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_warm_reset);
2116 
2117 	gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 1);
2118 
2119 	udelay(10);
2120 
2121 	gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0);
2122 
2123 	pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run);
2124 	msleep(2);
2125 }
2126 
2127 static void snd_soc_ac97_reset(struct snd_ac97 *ac97)
2128 {
2129 	struct pinctrl *pctl = snd_ac97_rst_cfg.pctl;
2130 
2131 	pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_reset);
2132 
2133 	gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0);
2134 	gpio_direction_output(snd_ac97_rst_cfg.gpio_sdata, 0);
2135 	gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 0);
2136 
2137 	udelay(10);
2138 
2139 	gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 1);
2140 
2141 	pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run);
2142 	msleep(2);
2143 }
2144 
2145 static int snd_soc_ac97_parse_pinctl(struct device *dev,
2146 		struct snd_ac97_reset_cfg *cfg)
2147 {
2148 	struct pinctrl *p;
2149 	struct pinctrl_state *state;
2150 	int gpio;
2151 	int ret;
2152 
2153 	p = devm_pinctrl_get(dev);
2154 	if (IS_ERR(p)) {
2155 		dev_err(dev, "Failed to get pinctrl\n");
2156 		return PTR_RET(p);
2157 	}
2158 	cfg->pctl = p;
2159 
2160 	state = pinctrl_lookup_state(p, "ac97-reset");
2161 	if (IS_ERR(state)) {
2162 		dev_err(dev, "Can't find pinctrl state ac97-reset\n");
2163 		return PTR_RET(state);
2164 	}
2165 	cfg->pstate_reset = state;
2166 
2167 	state = pinctrl_lookup_state(p, "ac97-warm-reset");
2168 	if (IS_ERR(state)) {
2169 		dev_err(dev, "Can't find pinctrl state ac97-warm-reset\n");
2170 		return PTR_RET(state);
2171 	}
2172 	cfg->pstate_warm_reset = state;
2173 
2174 	state = pinctrl_lookup_state(p, "ac97-running");
2175 	if (IS_ERR(state)) {
2176 		dev_err(dev, "Can't find pinctrl state ac97-running\n");
2177 		return PTR_RET(state);
2178 	}
2179 	cfg->pstate_run = state;
2180 
2181 	gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 0);
2182 	if (gpio < 0) {
2183 		dev_err(dev, "Can't find ac97-sync gpio\n");
2184 		return gpio;
2185 	}
2186 	ret = devm_gpio_request(dev, gpio, "AC97 link sync");
2187 	if (ret) {
2188 		dev_err(dev, "Failed requesting ac97-sync gpio\n");
2189 		return ret;
2190 	}
2191 	cfg->gpio_sync = gpio;
2192 
2193 	gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 1);
2194 	if (gpio < 0) {
2195 		dev_err(dev, "Can't find ac97-sdata gpio %d\n", gpio);
2196 		return gpio;
2197 	}
2198 	ret = devm_gpio_request(dev, gpio, "AC97 link sdata");
2199 	if (ret) {
2200 		dev_err(dev, "Failed requesting ac97-sdata gpio\n");
2201 		return ret;
2202 	}
2203 	cfg->gpio_sdata = gpio;
2204 
2205 	gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 2);
2206 	if (gpio < 0) {
2207 		dev_err(dev, "Can't find ac97-reset gpio\n");
2208 		return gpio;
2209 	}
2210 	ret = devm_gpio_request(dev, gpio, "AC97 link reset");
2211 	if (ret) {
2212 		dev_err(dev, "Failed requesting ac97-reset gpio\n");
2213 		return ret;
2214 	}
2215 	cfg->gpio_reset = gpio;
2216 
2217 	return 0;
2218 }
2219 
2220 struct snd_ac97_bus_ops *soc_ac97_ops;
2221 EXPORT_SYMBOL_GPL(soc_ac97_ops);
2222 
2223 int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops)
2224 {
2225 	if (ops == soc_ac97_ops)
2226 		return 0;
2227 
2228 	if (soc_ac97_ops && ops)
2229 		return -EBUSY;
2230 
2231 	soc_ac97_ops = ops;
2232 
2233 	return 0;
2234 }
2235 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops);
2236 
2237 /**
2238  * snd_soc_set_ac97_ops_of_reset - Set ac97 ops with generic ac97 reset functions
2239  *
2240  * This function sets the reset and warm_reset properties of ops and parses
2241  * the device node of pdev to get pinctrl states and gpio numbers to use.
2242  */
2243 int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
2244 		struct platform_device *pdev)
2245 {
2246 	struct device *dev = &pdev->dev;
2247 	struct snd_ac97_reset_cfg cfg;
2248 	int ret;
2249 
2250 	ret = snd_soc_ac97_parse_pinctl(dev, &cfg);
2251 	if (ret)
2252 		return ret;
2253 
2254 	ret = snd_soc_set_ac97_ops(ops);
2255 	if (ret)
2256 		return ret;
2257 
2258 	ops->warm_reset = snd_soc_ac97_warm_reset;
2259 	ops->reset = snd_soc_ac97_reset;
2260 
2261 	snd_ac97_rst_cfg = cfg;
2262 	return 0;
2263 }
2264 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops_of_reset);
2265 
2266 /**
2267  * snd_soc_free_ac97_codec - free AC97 codec device
2268  * @codec: audio codec
2269  *
2270  * Frees AC97 codec device resources.
2271  */
2272 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
2273 {
2274 	mutex_lock(&codec->mutex);
2275 #ifdef CONFIG_SND_SOC_AC97_BUS
2276 	soc_unregister_ac97_dai_link(codec);
2277 #endif
2278 	kfree(codec->ac97->bus);
2279 	kfree(codec->ac97);
2280 	codec->ac97 = NULL;
2281 	codec->ac97_created = 0;
2282 	mutex_unlock(&codec->mutex);
2283 }
2284 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec);
2285 
2286 unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg)
2287 {
2288 	unsigned int ret;
2289 
2290 	ret = codec->read(codec, reg);
2291 	dev_dbg(codec->dev, "read %x => %x\n", reg, ret);
2292 	trace_snd_soc_reg_read(codec, reg, ret);
2293 
2294 	return ret;
2295 }
2296 EXPORT_SYMBOL_GPL(snd_soc_read);
2297 
2298 unsigned int snd_soc_write(struct snd_soc_codec *codec,
2299 			   unsigned int reg, unsigned int val)
2300 {
2301 	dev_dbg(codec->dev, "write %x = %x\n", reg, val);
2302 	trace_snd_soc_reg_write(codec, reg, val);
2303 	return codec->write(codec, reg, val);
2304 }
2305 EXPORT_SYMBOL_GPL(snd_soc_write);
2306 
2307 /**
2308  * snd_soc_update_bits - update codec register bits
2309  * @codec: audio codec
2310  * @reg: codec register
2311  * @mask: register mask
2312  * @value: new value
2313  *
2314  * Writes new register value.
2315  *
2316  * Returns 1 for change, 0 for no change, or negative error code.
2317  */
2318 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
2319 				unsigned int mask, unsigned int value)
2320 {
2321 	bool change;
2322 	unsigned int old, new;
2323 	int ret;
2324 
2325 	if (codec->using_regmap) {
2326 		ret = regmap_update_bits_check(codec->control_data, reg,
2327 					       mask, value, &change);
2328 	} else {
2329 		ret = snd_soc_read(codec, reg);
2330 		if (ret < 0)
2331 			return ret;
2332 
2333 		old = ret;
2334 		new = (old & ~mask) | (value & mask);
2335 		change = old != new;
2336 		if (change)
2337 			ret = snd_soc_write(codec, reg, new);
2338 	}
2339 
2340 	if (ret < 0)
2341 		return ret;
2342 
2343 	return change;
2344 }
2345 EXPORT_SYMBOL_GPL(snd_soc_update_bits);
2346 
2347 /**
2348  * snd_soc_update_bits_locked - update codec register bits
2349  * @codec: audio codec
2350  * @reg: codec register
2351  * @mask: register mask
2352  * @value: new value
2353  *
2354  * Writes new register value, and takes the codec mutex.
2355  *
2356  * Returns 1 for change else 0.
2357  */
2358 int snd_soc_update_bits_locked(struct snd_soc_codec *codec,
2359 			       unsigned short reg, unsigned int mask,
2360 			       unsigned int value)
2361 {
2362 	int change;
2363 
2364 	mutex_lock(&codec->mutex);
2365 	change = snd_soc_update_bits(codec, reg, mask, value);
2366 	mutex_unlock(&codec->mutex);
2367 
2368 	return change;
2369 }
2370 EXPORT_SYMBOL_GPL(snd_soc_update_bits_locked);
2371 
2372 /**
2373  * snd_soc_test_bits - test register for change
2374  * @codec: audio codec
2375  * @reg: codec register
2376  * @mask: register mask
2377  * @value: new value
2378  *
2379  * Tests a register with a new value and checks if the new value is
2380  * different from the old value.
2381  *
2382  * Returns 1 for change else 0.
2383  */
2384 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
2385 				unsigned int mask, unsigned int value)
2386 {
2387 	int change;
2388 	unsigned int old, new;
2389 
2390 	old = snd_soc_read(codec, reg);
2391 	new = (old & ~mask) | value;
2392 	change = old != new;
2393 
2394 	return change;
2395 }
2396 EXPORT_SYMBOL_GPL(snd_soc_test_bits);
2397 
2398 /**
2399  * snd_soc_cnew - create new control
2400  * @_template: control template
2401  * @data: control private data
2402  * @long_name: control long name
2403  * @prefix: control name prefix
2404  *
2405  * Create a new mixer control from a template control.
2406  *
2407  * Returns 0 for success, else error.
2408  */
2409 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
2410 				  void *data, const char *long_name,
2411 				  const char *prefix)
2412 {
2413 	struct snd_kcontrol_new template;
2414 	struct snd_kcontrol *kcontrol;
2415 	char *name = NULL;
2416 
2417 	memcpy(&template, _template, sizeof(template));
2418 	template.index = 0;
2419 
2420 	if (!long_name)
2421 		long_name = template.name;
2422 
2423 	if (prefix) {
2424 		name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name);
2425 		if (!name)
2426 			return NULL;
2427 
2428 		template.name = name;
2429 	} else {
2430 		template.name = long_name;
2431 	}
2432 
2433 	kcontrol = snd_ctl_new1(&template, data);
2434 
2435 	kfree(name);
2436 
2437 	return kcontrol;
2438 }
2439 EXPORT_SYMBOL_GPL(snd_soc_cnew);
2440 
2441 static int snd_soc_add_controls(struct snd_card *card, struct device *dev,
2442 	const struct snd_kcontrol_new *controls, int num_controls,
2443 	const char *prefix, void *data)
2444 {
2445 	int err, i;
2446 
2447 	for (i = 0; i < num_controls; i++) {
2448 		const struct snd_kcontrol_new *control = &controls[i];
2449 		err = snd_ctl_add(card, snd_soc_cnew(control, data,
2450 						     control->name, prefix));
2451 		if (err < 0) {
2452 			dev_err(dev, "ASoC: Failed to add %s: %d\n",
2453 				control->name, err);
2454 			return err;
2455 		}
2456 	}
2457 
2458 	return 0;
2459 }
2460 
2461 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
2462 					       const char *name)
2463 {
2464 	struct snd_card *card = soc_card->snd_card;
2465 	struct snd_kcontrol *kctl;
2466 
2467 	if (unlikely(!name))
2468 		return NULL;
2469 
2470 	list_for_each_entry(kctl, &card->controls, list)
2471 		if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name)))
2472 			return kctl;
2473 	return NULL;
2474 }
2475 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol);
2476 
2477 /**
2478  * snd_soc_add_codec_controls - add an array of controls to a codec.
2479  * Convenience function to add a list of controls. Many codecs were
2480  * duplicating this code.
2481  *
2482  * @codec: codec to add controls to
2483  * @controls: array of controls to add
2484  * @num_controls: number of elements in the array
2485  *
2486  * Return 0 for success, else error.
2487  */
2488 int snd_soc_add_codec_controls(struct snd_soc_codec *codec,
2489 	const struct snd_kcontrol_new *controls, int num_controls)
2490 {
2491 	struct snd_card *card = codec->card->snd_card;
2492 
2493 	return snd_soc_add_controls(card, codec->dev, controls, num_controls,
2494 			codec->name_prefix, codec);
2495 }
2496 EXPORT_SYMBOL_GPL(snd_soc_add_codec_controls);
2497 
2498 /**
2499  * snd_soc_add_platform_controls - add an array of controls to a platform.
2500  * Convenience function to add a list of controls.
2501  *
2502  * @platform: platform to add controls to
2503  * @controls: array of controls to add
2504  * @num_controls: number of elements in the array
2505  *
2506  * Return 0 for success, else error.
2507  */
2508 int snd_soc_add_platform_controls(struct snd_soc_platform *platform,
2509 	const struct snd_kcontrol_new *controls, int num_controls)
2510 {
2511 	struct snd_card *card = platform->card->snd_card;
2512 
2513 	return snd_soc_add_controls(card, platform->dev, controls, num_controls,
2514 			NULL, platform);
2515 }
2516 EXPORT_SYMBOL_GPL(snd_soc_add_platform_controls);
2517 
2518 /**
2519  * snd_soc_add_card_controls - add an array of controls to a SoC card.
2520  * Convenience function to add a list of controls.
2521  *
2522  * @soc_card: SoC card to add controls to
2523  * @controls: array of controls to add
2524  * @num_controls: number of elements in the array
2525  *
2526  * Return 0 for success, else error.
2527  */
2528 int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
2529 	const struct snd_kcontrol_new *controls, int num_controls)
2530 {
2531 	struct snd_card *card = soc_card->snd_card;
2532 
2533 	return snd_soc_add_controls(card, soc_card->dev, controls, num_controls,
2534 			NULL, soc_card);
2535 }
2536 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls);
2537 
2538 /**
2539  * snd_soc_add_dai_controls - add an array of controls to a DAI.
2540  * Convienience function to add a list of controls.
2541  *
2542  * @dai: DAI to add controls to
2543  * @controls: array of controls to add
2544  * @num_controls: number of elements in the array
2545  *
2546  * Return 0 for success, else error.
2547  */
2548 int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
2549 	const struct snd_kcontrol_new *controls, int num_controls)
2550 {
2551 	struct snd_card *card = dai->card->snd_card;
2552 
2553 	return snd_soc_add_controls(card, dai->dev, controls, num_controls,
2554 			NULL, dai);
2555 }
2556 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls);
2557 
2558 /**
2559  * snd_soc_info_enum_double - enumerated double mixer info callback
2560  * @kcontrol: mixer control
2561  * @uinfo: control element information
2562  *
2563  * Callback to provide information about a double enumerated
2564  * mixer control.
2565  *
2566  * Returns 0 for success.
2567  */
2568 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
2569 	struct snd_ctl_elem_info *uinfo)
2570 {
2571 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2572 
2573 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2574 	uinfo->count = e->shift_l == e->shift_r ? 1 : 2;
2575 	uinfo->value.enumerated.items = e->items;
2576 
2577 	if (uinfo->value.enumerated.item >= e->items)
2578 		uinfo->value.enumerated.item = e->items - 1;
2579 	strlcpy(uinfo->value.enumerated.name,
2580 		e->texts[uinfo->value.enumerated.item],
2581 		sizeof(uinfo->value.enumerated.name));
2582 	return 0;
2583 }
2584 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
2585 
2586 /**
2587  * snd_soc_get_enum_double - enumerated double mixer get callback
2588  * @kcontrol: mixer control
2589  * @ucontrol: control element information
2590  *
2591  * Callback to get the value of a double enumerated mixer.
2592  *
2593  * Returns 0 for success.
2594  */
2595 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
2596 	struct snd_ctl_elem_value *ucontrol)
2597 {
2598 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2599 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2600 	unsigned int val, item;
2601 	unsigned int reg_val;
2602 
2603 	reg_val = snd_soc_read(codec, e->reg);
2604 	val = (reg_val >> e->shift_l) & e->mask;
2605 	item = snd_soc_enum_val_to_item(e, val);
2606 	ucontrol->value.enumerated.item[0] = item;
2607 	if (e->shift_l != e->shift_r) {
2608 		val = (reg_val >> e->shift_l) & e->mask;
2609 		item = snd_soc_enum_val_to_item(e, val);
2610 		ucontrol->value.enumerated.item[1] = item;
2611 	}
2612 
2613 	return 0;
2614 }
2615 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double);
2616 
2617 /**
2618  * snd_soc_put_enum_double - enumerated double mixer put callback
2619  * @kcontrol: mixer control
2620  * @ucontrol: control element information
2621  *
2622  * Callback to set the value of a double enumerated mixer.
2623  *
2624  * Returns 0 for success.
2625  */
2626 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
2627 	struct snd_ctl_elem_value *ucontrol)
2628 {
2629 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2630 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
2631 	unsigned int *item = ucontrol->value.enumerated.item;
2632 	unsigned int val;
2633 	unsigned int mask;
2634 
2635 	if (item[0] >= e->items)
2636 		return -EINVAL;
2637 	val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l;
2638 	mask = e->mask << e->shift_l;
2639 	if (e->shift_l != e->shift_r) {
2640 		if (item[1] >= e->items)
2641 			return -EINVAL;
2642 		val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r;
2643 		mask |= e->mask << e->shift_r;
2644 	}
2645 
2646 	return snd_soc_update_bits_locked(codec, e->reg, mask, val);
2647 }
2648 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);
2649 
2650 /**
2651  * snd_soc_read_signed - Read a codec register and interprete as signed value
2652  * @codec: codec
2653  * @reg: Register to read
2654  * @mask: Mask to use after shifting the register value
2655  * @shift: Right shift of register value
2656  * @sign_bit: Bit that describes if a number is negative or not.
2657  *
2658  * This functions reads a codec register. The register value is shifted right
2659  * by 'shift' bits and masked with the given 'mask'. Afterwards it translates
2660  * the given registervalue into a signed integer if sign_bit is non-zero.
2661  *
2662  * Returns the register value as signed int.
2663  */
2664 static int snd_soc_read_signed(struct snd_soc_codec *codec, unsigned int reg,
2665 		unsigned int mask, unsigned int shift, unsigned int sign_bit)
2666 {
2667 	int ret;
2668 	unsigned int val;
2669 
2670 	val = (snd_soc_read(codec, reg) >> shift) & mask;
2671 
2672 	if (!sign_bit)
2673 		return val;
2674 
2675 	/* non-negative number */
2676 	if (!(val & BIT(sign_bit)))
2677 		return val;
2678 
2679 	ret = val;
2680 
2681 	/*
2682 	 * The register most probably does not contain a full-sized int.
2683 	 * Instead we have an arbitrary number of bits in a signed
2684 	 * representation which has to be translated into a full-sized int.
2685 	 * This is done by filling up all bits above the sign-bit.
2686 	 */
2687 	ret |= ~((int)(BIT(sign_bit) - 1));
2688 
2689 	return ret;
2690 }
2691 
2692 /**
2693  * snd_soc_info_volsw - single mixer info callback
2694  * @kcontrol: mixer control
2695  * @uinfo: control element information
2696  *
2697  * Callback to provide information about a single mixer control, or a double
2698  * mixer control that spans 2 registers.
2699  *
2700  * Returns 0 for success.
2701  */
2702 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
2703 	struct snd_ctl_elem_info *uinfo)
2704 {
2705 	struct soc_mixer_control *mc =
2706 		(struct soc_mixer_control *)kcontrol->private_value;
2707 	int platform_max;
2708 
2709 	if (!mc->platform_max)
2710 		mc->platform_max = mc->max;
2711 	platform_max = mc->platform_max;
2712 
2713 	if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume"))
2714 		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
2715 	else
2716 		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2717 
2718 	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
2719 	uinfo->value.integer.min = 0;
2720 	uinfo->value.integer.max = platform_max - mc->min;
2721 	return 0;
2722 }
2723 EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
2724 
2725 /**
2726  * snd_soc_get_volsw - single mixer get callback
2727  * @kcontrol: mixer control
2728  * @ucontrol: control element information
2729  *
2730  * Callback to get the value of a single mixer control, or a double mixer
2731  * control that spans 2 registers.
2732  *
2733  * Returns 0 for success.
2734  */
2735 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
2736 	struct snd_ctl_elem_value *ucontrol)
2737 {
2738 	struct soc_mixer_control *mc =
2739 		(struct soc_mixer_control *)kcontrol->private_value;
2740 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2741 	unsigned int reg = mc->reg;
2742 	unsigned int reg2 = mc->rreg;
2743 	unsigned int shift = mc->shift;
2744 	unsigned int rshift = mc->rshift;
2745 	int max = mc->max;
2746 	int min = mc->min;
2747 	int sign_bit = mc->sign_bit;
2748 	unsigned int mask = (1 << fls(max)) - 1;
2749 	unsigned int invert = mc->invert;
2750 
2751 	if (sign_bit)
2752 		mask = BIT(sign_bit + 1) - 1;
2753 
2754 	ucontrol->value.integer.value[0] = snd_soc_read_signed(codec, reg, mask,
2755 			shift, sign_bit) - min;
2756 	if (invert)
2757 		ucontrol->value.integer.value[0] =
2758 			max - ucontrol->value.integer.value[0];
2759 
2760 	if (snd_soc_volsw_is_stereo(mc)) {
2761 		if (reg == reg2)
2762 			ucontrol->value.integer.value[1] =
2763 				snd_soc_read_signed(codec, reg, mask, rshift,
2764 						sign_bit) - min;
2765 		else
2766 			ucontrol->value.integer.value[1] =
2767 				snd_soc_read_signed(codec, reg2, mask, shift,
2768 						sign_bit) - min;
2769 		if (invert)
2770 			ucontrol->value.integer.value[1] =
2771 				max - ucontrol->value.integer.value[1];
2772 	}
2773 
2774 	return 0;
2775 }
2776 EXPORT_SYMBOL_GPL(snd_soc_get_volsw);
2777 
2778 /**
2779  * snd_soc_put_volsw - single mixer put callback
2780  * @kcontrol: mixer control
2781  * @ucontrol: control element information
2782  *
2783  * Callback to set the value of a single mixer control, or a double mixer
2784  * control that spans 2 registers.
2785  *
2786  * Returns 0 for success.
2787  */
2788 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
2789 	struct snd_ctl_elem_value *ucontrol)
2790 {
2791 	struct soc_mixer_control *mc =
2792 		(struct soc_mixer_control *)kcontrol->private_value;
2793 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2794 	unsigned int reg = mc->reg;
2795 	unsigned int reg2 = mc->rreg;
2796 	unsigned int shift = mc->shift;
2797 	unsigned int rshift = mc->rshift;
2798 	int max = mc->max;
2799 	int min = mc->min;
2800 	unsigned int sign_bit = mc->sign_bit;
2801 	unsigned int mask = (1 << fls(max)) - 1;
2802 	unsigned int invert = mc->invert;
2803 	int err;
2804 	bool type_2r = false;
2805 	unsigned int val2 = 0;
2806 	unsigned int val, val_mask;
2807 
2808 	if (sign_bit)
2809 		mask = BIT(sign_bit + 1) - 1;
2810 
2811 	val = ((ucontrol->value.integer.value[0] + min) & mask);
2812 	if (invert)
2813 		val = max - val;
2814 	val_mask = mask << shift;
2815 	val = val << shift;
2816 	if (snd_soc_volsw_is_stereo(mc)) {
2817 		val2 = ((ucontrol->value.integer.value[1] + min) & mask);
2818 		if (invert)
2819 			val2 = max - val2;
2820 		if (reg == reg2) {
2821 			val_mask |= mask << rshift;
2822 			val |= val2 << rshift;
2823 		} else {
2824 			val2 = val2 << shift;
2825 			type_2r = true;
2826 		}
2827 	}
2828 	err = snd_soc_update_bits_locked(codec, reg, val_mask, val);
2829 	if (err < 0)
2830 		return err;
2831 
2832 	if (type_2r)
2833 		err = snd_soc_update_bits_locked(codec, reg2, val_mask, val2);
2834 
2835 	return err;
2836 }
2837 EXPORT_SYMBOL_GPL(snd_soc_put_volsw);
2838 
2839 /**
2840  * snd_soc_get_volsw_sx - single mixer get callback
2841  * @kcontrol: mixer control
2842  * @ucontrol: control element information
2843  *
2844  * Callback to get the value of a single mixer control, or a double mixer
2845  * control that spans 2 registers.
2846  *
2847  * Returns 0 for success.
2848  */
2849 int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol,
2850 		      struct snd_ctl_elem_value *ucontrol)
2851 {
2852 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2853 	struct soc_mixer_control *mc =
2854 	    (struct soc_mixer_control *)kcontrol->private_value;
2855 
2856 	unsigned int reg = mc->reg;
2857 	unsigned int reg2 = mc->rreg;
2858 	unsigned int shift = mc->shift;
2859 	unsigned int rshift = mc->rshift;
2860 	int max = mc->max;
2861 	int min = mc->min;
2862 	int mask = (1 << (fls(min + max) - 1)) - 1;
2863 
2864 	ucontrol->value.integer.value[0] =
2865 	    ((snd_soc_read(codec, reg) >> shift) - min) & mask;
2866 
2867 	if (snd_soc_volsw_is_stereo(mc))
2868 		ucontrol->value.integer.value[1] =
2869 			((snd_soc_read(codec, reg2) >> rshift) - min) & mask;
2870 
2871 	return 0;
2872 }
2873 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_sx);
2874 
2875 /**
2876  * snd_soc_put_volsw_sx - double mixer set callback
2877  * @kcontrol: mixer control
2878  * @uinfo: control element information
2879  *
2880  * Callback to set the value of a double mixer control that spans 2 registers.
2881  *
2882  * Returns 0 for success.
2883  */
2884 int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
2885 			 struct snd_ctl_elem_value *ucontrol)
2886 {
2887 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2888 	struct soc_mixer_control *mc =
2889 	    (struct soc_mixer_control *)kcontrol->private_value;
2890 
2891 	unsigned int reg = mc->reg;
2892 	unsigned int reg2 = mc->rreg;
2893 	unsigned int shift = mc->shift;
2894 	unsigned int rshift = mc->rshift;
2895 	int max = mc->max;
2896 	int min = mc->min;
2897 	int mask = (1 << (fls(min + max) - 1)) - 1;
2898 	int err = 0;
2899 	unsigned short val, val_mask, val2 = 0;
2900 
2901 	val_mask = mask << shift;
2902 	val = (ucontrol->value.integer.value[0] + min) & mask;
2903 	val = val << shift;
2904 
2905 	err = snd_soc_update_bits_locked(codec, reg, val_mask, val);
2906 	if (err < 0)
2907 		return err;
2908 
2909 	if (snd_soc_volsw_is_stereo(mc)) {
2910 		val_mask = mask << rshift;
2911 		val2 = (ucontrol->value.integer.value[1] + min) & mask;
2912 		val2 = val2 << rshift;
2913 
2914 		if (snd_soc_update_bits_locked(codec, reg2, val_mask, val2))
2915 			return err;
2916 	}
2917 	return 0;
2918 }
2919 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx);
2920 
2921 /**
2922  * snd_soc_info_volsw_s8 - signed mixer info callback
2923  * @kcontrol: mixer control
2924  * @uinfo: control element information
2925  *
2926  * Callback to provide information about a signed mixer control.
2927  *
2928  * Returns 0 for success.
2929  */
2930 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol,
2931 	struct snd_ctl_elem_info *uinfo)
2932 {
2933 	struct soc_mixer_control *mc =
2934 		(struct soc_mixer_control *)kcontrol->private_value;
2935 	int platform_max;
2936 	int min = mc->min;
2937 
2938 	if (!mc->platform_max)
2939 		mc->platform_max = mc->max;
2940 	platform_max = mc->platform_max;
2941 
2942 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2943 	uinfo->count = 2;
2944 	uinfo->value.integer.min = 0;
2945 	uinfo->value.integer.max = platform_max - min;
2946 	return 0;
2947 }
2948 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8);
2949 
2950 /**
2951  * snd_soc_get_volsw_s8 - signed mixer get callback
2952  * @kcontrol: mixer control
2953  * @ucontrol: control element information
2954  *
2955  * Callback to get the value of a signed mixer control.
2956  *
2957  * Returns 0 for success.
2958  */
2959 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
2960 	struct snd_ctl_elem_value *ucontrol)
2961 {
2962 	struct soc_mixer_control *mc =
2963 		(struct soc_mixer_control *)kcontrol->private_value;
2964 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2965 	unsigned int reg = mc->reg;
2966 	int min = mc->min;
2967 	int val = snd_soc_read(codec, reg);
2968 
2969 	ucontrol->value.integer.value[0] =
2970 		((signed char)(val & 0xff))-min;
2971 	ucontrol->value.integer.value[1] =
2972 		((signed char)((val >> 8) & 0xff))-min;
2973 	return 0;
2974 }
2975 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8);
2976 
2977 /**
2978  * snd_soc_put_volsw_sgn - signed mixer put callback
2979  * @kcontrol: mixer control
2980  * @ucontrol: control element information
2981  *
2982  * Callback to set the value of a signed mixer control.
2983  *
2984  * Returns 0 for success.
2985  */
2986 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
2987 	struct snd_ctl_elem_value *ucontrol)
2988 {
2989 	struct soc_mixer_control *mc =
2990 		(struct soc_mixer_control *)kcontrol->private_value;
2991 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
2992 	unsigned int reg = mc->reg;
2993 	int min = mc->min;
2994 	unsigned int val;
2995 
2996 	val = (ucontrol->value.integer.value[0]+min) & 0xff;
2997 	val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8;
2998 
2999 	return snd_soc_update_bits_locked(codec, reg, 0xffff, val);
3000 }
3001 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8);
3002 
3003 /**
3004  * snd_soc_info_volsw_range - single mixer info callback with range.
3005  * @kcontrol: mixer control
3006  * @uinfo: control element information
3007  *
3008  * Callback to provide information, within a range, about a single
3009  * mixer control.
3010  *
3011  * returns 0 for success.
3012  */
3013 int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
3014 	struct snd_ctl_elem_info *uinfo)
3015 {
3016 	struct soc_mixer_control *mc =
3017 		(struct soc_mixer_control *)kcontrol->private_value;
3018 	int platform_max;
3019 	int min = mc->min;
3020 
3021 	if (!mc->platform_max)
3022 		mc->platform_max = mc->max;
3023 	platform_max = mc->platform_max;
3024 
3025 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3026 	uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
3027 	uinfo->value.integer.min = 0;
3028 	uinfo->value.integer.max = platform_max - min;
3029 
3030 	return 0;
3031 }
3032 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range);
3033 
3034 /**
3035  * snd_soc_put_volsw_range - single mixer put value callback with range.
3036  * @kcontrol: mixer control
3037  * @ucontrol: control element information
3038  *
3039  * Callback to set the value, within a range, for a single mixer control.
3040  *
3041  * Returns 0 for success.
3042  */
3043 int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
3044 	struct snd_ctl_elem_value *ucontrol)
3045 {
3046 	struct soc_mixer_control *mc =
3047 		(struct soc_mixer_control *)kcontrol->private_value;
3048 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3049 	unsigned int reg = mc->reg;
3050 	unsigned int rreg = mc->rreg;
3051 	unsigned int shift = mc->shift;
3052 	int min = mc->min;
3053 	int max = mc->max;
3054 	unsigned int mask = (1 << fls(max)) - 1;
3055 	unsigned int invert = mc->invert;
3056 	unsigned int val, val_mask;
3057 	int ret;
3058 
3059 	val = ((ucontrol->value.integer.value[0] + min) & mask);
3060 	if (invert)
3061 		val = max - val;
3062 	val_mask = mask << shift;
3063 	val = val << shift;
3064 
3065 	ret = snd_soc_update_bits_locked(codec, reg, val_mask, val);
3066 	if (ret < 0)
3067 		return ret;
3068 
3069 	if (snd_soc_volsw_is_stereo(mc)) {
3070 		val = ((ucontrol->value.integer.value[1] + min) & mask);
3071 		if (invert)
3072 			val = max - val;
3073 		val_mask = mask << shift;
3074 		val = val << shift;
3075 
3076 		ret = snd_soc_update_bits_locked(codec, rreg, val_mask, val);
3077 	}
3078 
3079 	return ret;
3080 }
3081 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range);
3082 
3083 /**
3084  * snd_soc_get_volsw_range - single mixer get callback with range
3085  * @kcontrol: mixer control
3086  * @ucontrol: control element information
3087  *
3088  * Callback to get the value, within a range, of a single mixer control.
3089  *
3090  * Returns 0 for success.
3091  */
3092 int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
3093 	struct snd_ctl_elem_value *ucontrol)
3094 {
3095 	struct soc_mixer_control *mc =
3096 		(struct soc_mixer_control *)kcontrol->private_value;
3097 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3098 	unsigned int reg = mc->reg;
3099 	unsigned int rreg = mc->rreg;
3100 	unsigned int shift = mc->shift;
3101 	int min = mc->min;
3102 	int max = mc->max;
3103 	unsigned int mask = (1 << fls(max)) - 1;
3104 	unsigned int invert = mc->invert;
3105 
3106 	ucontrol->value.integer.value[0] =
3107 		(snd_soc_read(codec, reg) >> shift) & mask;
3108 	if (invert)
3109 		ucontrol->value.integer.value[0] =
3110 			max - ucontrol->value.integer.value[0];
3111 	ucontrol->value.integer.value[0] =
3112 		ucontrol->value.integer.value[0] - min;
3113 
3114 	if (snd_soc_volsw_is_stereo(mc)) {
3115 		ucontrol->value.integer.value[1] =
3116 			(snd_soc_read(codec, rreg) >> shift) & mask;
3117 		if (invert)
3118 			ucontrol->value.integer.value[1] =
3119 				max - ucontrol->value.integer.value[1];
3120 		ucontrol->value.integer.value[1] =
3121 			ucontrol->value.integer.value[1] - min;
3122 	}
3123 
3124 	return 0;
3125 }
3126 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
3127 
3128 /**
3129  * snd_soc_limit_volume - Set new limit to an existing volume control.
3130  *
3131  * @codec: where to look for the control
3132  * @name: Name of the control
3133  * @max: new maximum limit
3134  *
3135  * Return 0 for success, else error.
3136  */
3137 int snd_soc_limit_volume(struct snd_soc_codec *codec,
3138 	const char *name, int max)
3139 {
3140 	struct snd_card *card = codec->card->snd_card;
3141 	struct snd_kcontrol *kctl;
3142 	struct soc_mixer_control *mc;
3143 	int found = 0;
3144 	int ret = -EINVAL;
3145 
3146 	/* Sanity check for name and max */
3147 	if (unlikely(!name || max <= 0))
3148 		return -EINVAL;
3149 
3150 	list_for_each_entry(kctl, &card->controls, list) {
3151 		if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) {
3152 			found = 1;
3153 			break;
3154 		}
3155 	}
3156 	if (found) {
3157 		mc = (struct soc_mixer_control *)kctl->private_value;
3158 		if (max <= mc->max) {
3159 			mc->platform_max = max;
3160 			ret = 0;
3161 		}
3162 	}
3163 	return ret;
3164 }
3165 EXPORT_SYMBOL_GPL(snd_soc_limit_volume);
3166 
3167 int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
3168 		       struct snd_ctl_elem_info *uinfo)
3169 {
3170 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3171 	struct soc_bytes *params = (void *)kcontrol->private_value;
3172 
3173 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
3174 	uinfo->count = params->num_regs * codec->val_bytes;
3175 
3176 	return 0;
3177 }
3178 EXPORT_SYMBOL_GPL(snd_soc_bytes_info);
3179 
3180 int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
3181 		      struct snd_ctl_elem_value *ucontrol)
3182 {
3183 	struct soc_bytes *params = (void *)kcontrol->private_value;
3184 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3185 	int ret;
3186 
3187 	if (codec->using_regmap)
3188 		ret = regmap_raw_read(codec->control_data, params->base,
3189 				      ucontrol->value.bytes.data,
3190 				      params->num_regs * codec->val_bytes);
3191 	else
3192 		ret = -EINVAL;
3193 
3194 	/* Hide any masked bytes to ensure consistent data reporting */
3195 	if (ret == 0 && params->mask) {
3196 		switch (codec->val_bytes) {
3197 		case 1:
3198 			ucontrol->value.bytes.data[0] &= ~params->mask;
3199 			break;
3200 		case 2:
3201 			((u16 *)(&ucontrol->value.bytes.data))[0]
3202 				&= cpu_to_be16(~params->mask);
3203 			break;
3204 		case 4:
3205 			((u32 *)(&ucontrol->value.bytes.data))[0]
3206 				&= cpu_to_be32(~params->mask);
3207 			break;
3208 		default:
3209 			return -EINVAL;
3210 		}
3211 	}
3212 
3213 	return ret;
3214 }
3215 EXPORT_SYMBOL_GPL(snd_soc_bytes_get);
3216 
3217 int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
3218 		      struct snd_ctl_elem_value *ucontrol)
3219 {
3220 	struct soc_bytes *params = (void *)kcontrol->private_value;
3221 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3222 	int ret, len;
3223 	unsigned int val, mask;
3224 	void *data;
3225 
3226 	if (!codec->using_regmap)
3227 		return -EINVAL;
3228 
3229 	len = params->num_regs * codec->val_bytes;
3230 
3231 	data = kmemdup(ucontrol->value.bytes.data, len, GFP_KERNEL | GFP_DMA);
3232 	if (!data)
3233 		return -ENOMEM;
3234 
3235 	/*
3236 	 * If we've got a mask then we need to preserve the register
3237 	 * bits.  We shouldn't modify the incoming data so take a
3238 	 * copy.
3239 	 */
3240 	if (params->mask) {
3241 		ret = regmap_read(codec->control_data, params->base, &val);
3242 		if (ret != 0)
3243 			goto out;
3244 
3245 		val &= params->mask;
3246 
3247 		switch (codec->val_bytes) {
3248 		case 1:
3249 			((u8 *)data)[0] &= ~params->mask;
3250 			((u8 *)data)[0] |= val;
3251 			break;
3252 		case 2:
3253 			mask = ~params->mask;
3254 			ret = regmap_parse_val(codec->control_data,
3255 							&mask, &mask);
3256 			if (ret != 0)
3257 				goto out;
3258 
3259 			((u16 *)data)[0] &= mask;
3260 
3261 			ret = regmap_parse_val(codec->control_data,
3262 							&val, &val);
3263 			if (ret != 0)
3264 				goto out;
3265 
3266 			((u16 *)data)[0] |= val;
3267 			break;
3268 		case 4:
3269 			mask = ~params->mask;
3270 			ret = regmap_parse_val(codec->control_data,
3271 							&mask, &mask);
3272 			if (ret != 0)
3273 				goto out;
3274 
3275 			((u32 *)data)[0] &= mask;
3276 
3277 			ret = regmap_parse_val(codec->control_data,
3278 							&val, &val);
3279 			if (ret != 0)
3280 				goto out;
3281 
3282 			((u32 *)data)[0] |= val;
3283 			break;
3284 		default:
3285 			ret = -EINVAL;
3286 			goto out;
3287 		}
3288 	}
3289 
3290 	ret = regmap_raw_write(codec->control_data, params->base,
3291 			       data, len);
3292 
3293 out:
3294 	kfree(data);
3295 
3296 	return ret;
3297 }
3298 EXPORT_SYMBOL_GPL(snd_soc_bytes_put);
3299 
3300 /**
3301  * snd_soc_info_xr_sx - signed multi register info callback
3302  * @kcontrol: mreg control
3303  * @uinfo: control element information
3304  *
3305  * Callback to provide information of a control that can
3306  * span multiple codec registers which together
3307  * forms a single signed value in a MSB/LSB manner.
3308  *
3309  * Returns 0 for success.
3310  */
3311 int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol,
3312 	struct snd_ctl_elem_info *uinfo)
3313 {
3314 	struct soc_mreg_control *mc =
3315 		(struct soc_mreg_control *)kcontrol->private_value;
3316 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3317 	uinfo->count = 1;
3318 	uinfo->value.integer.min = mc->min;
3319 	uinfo->value.integer.max = mc->max;
3320 
3321 	return 0;
3322 }
3323 EXPORT_SYMBOL_GPL(snd_soc_info_xr_sx);
3324 
3325 /**
3326  * snd_soc_get_xr_sx - signed multi register get callback
3327  * @kcontrol: mreg control
3328  * @ucontrol: control element information
3329  *
3330  * Callback to get the value of a control that can span
3331  * multiple codec registers which together forms a single
3332  * signed value in a MSB/LSB manner. The control supports
3333  * specifying total no of bits used to allow for bitfields
3334  * across the multiple codec registers.
3335  *
3336  * Returns 0 for success.
3337  */
3338 int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol,
3339 	struct snd_ctl_elem_value *ucontrol)
3340 {
3341 	struct soc_mreg_control *mc =
3342 		(struct soc_mreg_control *)kcontrol->private_value;
3343 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3344 	unsigned int regbase = mc->regbase;
3345 	unsigned int regcount = mc->regcount;
3346 	unsigned int regwshift = codec->driver->reg_word_size * BITS_PER_BYTE;
3347 	unsigned int regwmask = (1<<regwshift)-1;
3348 	unsigned int invert = mc->invert;
3349 	unsigned long mask = (1UL<<mc->nbits)-1;
3350 	long min = mc->min;
3351 	long max = mc->max;
3352 	long val = 0;
3353 	unsigned long regval;
3354 	unsigned int i;
3355 
3356 	for (i = 0; i < regcount; i++) {
3357 		regval = snd_soc_read(codec, regbase+i) & regwmask;
3358 		val |= regval << (regwshift*(regcount-i-1));
3359 	}
3360 	val &= mask;
3361 	if (min < 0 && val > max)
3362 		val |= ~mask;
3363 	if (invert)
3364 		val = max - val;
3365 	ucontrol->value.integer.value[0] = val;
3366 
3367 	return 0;
3368 }
3369 EXPORT_SYMBOL_GPL(snd_soc_get_xr_sx);
3370 
3371 /**
3372  * snd_soc_put_xr_sx - signed multi register get callback
3373  * @kcontrol: mreg control
3374  * @ucontrol: control element information
3375  *
3376  * Callback to set the value of a control that can span
3377  * multiple codec registers which together forms a single
3378  * signed value in a MSB/LSB manner. The control supports
3379  * specifying total no of bits used to allow for bitfields
3380  * across the multiple codec registers.
3381  *
3382  * Returns 0 for success.
3383  */
3384 int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol,
3385 	struct snd_ctl_elem_value *ucontrol)
3386 {
3387 	struct soc_mreg_control *mc =
3388 		(struct soc_mreg_control *)kcontrol->private_value;
3389 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3390 	unsigned int regbase = mc->regbase;
3391 	unsigned int regcount = mc->regcount;
3392 	unsigned int regwshift = codec->driver->reg_word_size * BITS_PER_BYTE;
3393 	unsigned int regwmask = (1<<regwshift)-1;
3394 	unsigned int invert = mc->invert;
3395 	unsigned long mask = (1UL<<mc->nbits)-1;
3396 	long max = mc->max;
3397 	long val = ucontrol->value.integer.value[0];
3398 	unsigned int i, regval, regmask;
3399 	int err;
3400 
3401 	if (invert)
3402 		val = max - val;
3403 	val &= mask;
3404 	for (i = 0; i < regcount; i++) {
3405 		regval = (val >> (regwshift*(regcount-i-1))) & regwmask;
3406 		regmask = (mask >> (regwshift*(regcount-i-1))) & regwmask;
3407 		err = snd_soc_update_bits_locked(codec, regbase+i,
3408 				regmask, regval);
3409 		if (err < 0)
3410 			return err;
3411 	}
3412 
3413 	return 0;
3414 }
3415 EXPORT_SYMBOL_GPL(snd_soc_put_xr_sx);
3416 
3417 /**
3418  * snd_soc_get_strobe - strobe get callback
3419  * @kcontrol: mixer control
3420  * @ucontrol: control element information
3421  *
3422  * Callback get the value of a strobe mixer control.
3423  *
3424  * Returns 0 for success.
3425  */
3426 int snd_soc_get_strobe(struct snd_kcontrol *kcontrol,
3427 	struct snd_ctl_elem_value *ucontrol)
3428 {
3429 	struct soc_mixer_control *mc =
3430 		(struct soc_mixer_control *)kcontrol->private_value;
3431 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3432 	unsigned int reg = mc->reg;
3433 	unsigned int shift = mc->shift;
3434 	unsigned int mask = 1 << shift;
3435 	unsigned int invert = mc->invert != 0;
3436 	unsigned int val = snd_soc_read(codec, reg) & mask;
3437 
3438 	if (shift != 0 && val != 0)
3439 		val = val >> shift;
3440 	ucontrol->value.enumerated.item[0] = val ^ invert;
3441 
3442 	return 0;
3443 }
3444 EXPORT_SYMBOL_GPL(snd_soc_get_strobe);
3445 
3446 /**
3447  * snd_soc_put_strobe - strobe put callback
3448  * @kcontrol: mixer control
3449  * @ucontrol: control element information
3450  *
3451  * Callback strobe a register bit to high then low (or the inverse)
3452  * in one pass of a single mixer enum control.
3453  *
3454  * Returns 1 for success.
3455  */
3456 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
3457 	struct snd_ctl_elem_value *ucontrol)
3458 {
3459 	struct soc_mixer_control *mc =
3460 		(struct soc_mixer_control *)kcontrol->private_value;
3461 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
3462 	unsigned int reg = mc->reg;
3463 	unsigned int shift = mc->shift;
3464 	unsigned int mask = 1 << shift;
3465 	unsigned int invert = mc->invert != 0;
3466 	unsigned int strobe = ucontrol->value.enumerated.item[0] != 0;
3467 	unsigned int val1 = (strobe ^ invert) ? mask : 0;
3468 	unsigned int val2 = (strobe ^ invert) ? 0 : mask;
3469 	int err;
3470 
3471 	err = snd_soc_update_bits_locked(codec, reg, mask, val1);
3472 	if (err < 0)
3473 		return err;
3474 
3475 	err = snd_soc_update_bits_locked(codec, reg, mask, val2);
3476 	return err;
3477 }
3478 EXPORT_SYMBOL_GPL(snd_soc_put_strobe);
3479 
3480 /**
3481  * snd_soc_dai_set_sysclk - configure DAI system or master clock.
3482  * @dai: DAI
3483  * @clk_id: DAI specific clock ID
3484  * @freq: new clock frequency in Hz
3485  * @dir: new clock direction - input/output.
3486  *
3487  * Configures the DAI master (MCLK) or system (SYSCLK) clocking.
3488  */
3489 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
3490 	unsigned int freq, int dir)
3491 {
3492 	if (dai->driver && dai->driver->ops->set_sysclk)
3493 		return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir);
3494 	else if (dai->codec && dai->codec->driver->set_sysclk)
3495 		return dai->codec->driver->set_sysclk(dai->codec, clk_id, 0,
3496 						      freq, dir);
3497 	else
3498 		return -ENOTSUPP;
3499 }
3500 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk);
3501 
3502 /**
3503  * snd_soc_codec_set_sysclk - configure CODEC system or master clock.
3504  * @codec: CODEC
3505  * @clk_id: DAI specific clock ID
3506  * @source: Source for the clock
3507  * @freq: new clock frequency in Hz
3508  * @dir: new clock direction - input/output.
3509  *
3510  * Configures the CODEC master (MCLK) or system (SYSCLK) clocking.
3511  */
3512 int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id,
3513 			     int source, unsigned int freq, int dir)
3514 {
3515 	if (codec->driver->set_sysclk)
3516 		return codec->driver->set_sysclk(codec, clk_id, source,
3517 						 freq, dir);
3518 	else
3519 		return -ENOTSUPP;
3520 }
3521 EXPORT_SYMBOL_GPL(snd_soc_codec_set_sysclk);
3522 
3523 /**
3524  * snd_soc_dai_set_clkdiv - configure DAI clock dividers.
3525  * @dai: DAI
3526  * @div_id: DAI specific clock divider ID
3527  * @div: new clock divisor.
3528  *
3529  * Configures the clock dividers. This is used to derive the best DAI bit and
3530  * frame clocks from the system or master clock. It's best to set the DAI bit
3531  * and frame clocks as low as possible to save system power.
3532  */
3533 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
3534 	int div_id, int div)
3535 {
3536 	if (dai->driver && dai->driver->ops->set_clkdiv)
3537 		return dai->driver->ops->set_clkdiv(dai, div_id, div);
3538 	else
3539 		return -EINVAL;
3540 }
3541 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv);
3542 
3543 /**
3544  * snd_soc_dai_set_pll - configure DAI PLL.
3545  * @dai: DAI
3546  * @pll_id: DAI specific PLL ID
3547  * @source: DAI specific source for the PLL
3548  * @freq_in: PLL input clock frequency in Hz
3549  * @freq_out: requested PLL output clock frequency in Hz
3550  *
3551  * Configures and enables PLL to generate output clock based on input clock.
3552  */
3553 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
3554 	unsigned int freq_in, unsigned int freq_out)
3555 {
3556 	if (dai->driver && dai->driver->ops->set_pll)
3557 		return dai->driver->ops->set_pll(dai, pll_id, source,
3558 					 freq_in, freq_out);
3559 	else if (dai->codec && dai->codec->driver->set_pll)
3560 		return dai->codec->driver->set_pll(dai->codec, pll_id, source,
3561 						   freq_in, freq_out);
3562 	else
3563 		return -EINVAL;
3564 }
3565 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll);
3566 
3567 /*
3568  * snd_soc_codec_set_pll - configure codec PLL.
3569  * @codec: CODEC
3570  * @pll_id: DAI specific PLL ID
3571  * @source: DAI specific source for the PLL
3572  * @freq_in: PLL input clock frequency in Hz
3573  * @freq_out: requested PLL output clock frequency in Hz
3574  *
3575  * Configures and enables PLL to generate output clock based on input clock.
3576  */
3577 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source,
3578 			  unsigned int freq_in, unsigned int freq_out)
3579 {
3580 	if (codec->driver->set_pll)
3581 		return codec->driver->set_pll(codec, pll_id, source,
3582 					      freq_in, freq_out);
3583 	else
3584 		return -EINVAL;
3585 }
3586 EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll);
3587 
3588 /**
3589  * snd_soc_dai_set_bclk_ratio - configure BCLK to sample rate ratio.
3590  * @dai: DAI
3591  * @ratio Ratio of BCLK to Sample rate.
3592  *
3593  * Configures the DAI for a preset BCLK to sample rate ratio.
3594  */
3595 int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
3596 {
3597 	if (dai->driver && dai->driver->ops->set_bclk_ratio)
3598 		return dai->driver->ops->set_bclk_ratio(dai, ratio);
3599 	else
3600 		return -EINVAL;
3601 }
3602 EXPORT_SYMBOL_GPL(snd_soc_dai_set_bclk_ratio);
3603 
3604 /**
3605  * snd_soc_dai_set_fmt - configure DAI hardware audio format.
3606  * @dai: DAI
3607  * @fmt: SND_SOC_DAIFMT_ format value.
3608  *
3609  * Configures the DAI hardware format and clocking.
3610  */
3611 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
3612 {
3613 	if (dai->driver == NULL)
3614 		return -EINVAL;
3615 	if (dai->driver->ops->set_fmt == NULL)
3616 		return -ENOTSUPP;
3617 	return dai->driver->ops->set_fmt(dai, fmt);
3618 }
3619 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);
3620 
3621 /**
3622  * snd_soc_xlate_tdm_slot - generate tx/rx slot mask.
3623  * @slots: Number of slots in use.
3624  * @tx_mask: bitmask representing active TX slots.
3625  * @rx_mask: bitmask representing active RX slots.
3626  *
3627  * Generates the TDM tx and rx slot default masks for DAI.
3628  */
3629 static int snd_soc_xlate_tdm_slot_mask(unsigned int slots,
3630 					  unsigned int *tx_mask,
3631 					  unsigned int *rx_mask)
3632 {
3633 	if (*tx_mask || *rx_mask)
3634 		return 0;
3635 
3636 	if (!slots)
3637 		return -EINVAL;
3638 
3639 	*tx_mask = (1 << slots) - 1;
3640 	*rx_mask = (1 << slots) - 1;
3641 
3642 	return 0;
3643 }
3644 
3645 /**
3646  * snd_soc_dai_set_tdm_slot - configure DAI TDM.
3647  * @dai: DAI
3648  * @tx_mask: bitmask representing active TX slots.
3649  * @rx_mask: bitmask representing active RX slots.
3650  * @slots: Number of slots in use.
3651  * @slot_width: Width in bits for each slot.
3652  *
3653  * Configures a DAI for TDM operation. Both mask and slots are codec and DAI
3654  * specific.
3655  */
3656 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
3657 	unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
3658 {
3659 	if (dai->driver && dai->driver->ops->xlate_tdm_slot_mask)
3660 		dai->driver->ops->xlate_tdm_slot_mask(slots,
3661 						&tx_mask, &rx_mask);
3662 	else
3663 		snd_soc_xlate_tdm_slot_mask(slots, &tx_mask, &rx_mask);
3664 
3665 	if (dai->driver && dai->driver->ops->set_tdm_slot)
3666 		return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask,
3667 				slots, slot_width);
3668 	else
3669 		return -ENOTSUPP;
3670 }
3671 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot);
3672 
3673 /**
3674  * snd_soc_dai_set_channel_map - configure DAI audio channel map
3675  * @dai: DAI
3676  * @tx_num: how many TX channels
3677  * @tx_slot: pointer to an array which imply the TX slot number channel
3678  *           0~num-1 uses
3679  * @rx_num: how many RX channels
3680  * @rx_slot: pointer to an array which imply the RX slot number channel
3681  *           0~num-1 uses
3682  *
3683  * configure the relationship between channel number and TDM slot number.
3684  */
3685 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
3686 	unsigned int tx_num, unsigned int *tx_slot,
3687 	unsigned int rx_num, unsigned int *rx_slot)
3688 {
3689 	if (dai->driver && dai->driver->ops->set_channel_map)
3690 		return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot,
3691 			rx_num, rx_slot);
3692 	else
3693 		return -EINVAL;
3694 }
3695 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map);
3696 
3697 /**
3698  * snd_soc_dai_set_tristate - configure DAI system or master clock.
3699  * @dai: DAI
3700  * @tristate: tristate enable
3701  *
3702  * Tristates the DAI so that others can use it.
3703  */
3704 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
3705 {
3706 	if (dai->driver && dai->driver->ops->set_tristate)
3707 		return dai->driver->ops->set_tristate(dai, tristate);
3708 	else
3709 		return -EINVAL;
3710 }
3711 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate);
3712 
3713 /**
3714  * snd_soc_dai_digital_mute - configure DAI system or master clock.
3715  * @dai: DAI
3716  * @mute: mute enable
3717  * @direction: stream to mute
3718  *
3719  * Mutes the DAI DAC.
3720  */
3721 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
3722 			     int direction)
3723 {
3724 	if (!dai->driver)
3725 		return -ENOTSUPP;
3726 
3727 	if (dai->driver->ops->mute_stream)
3728 		return dai->driver->ops->mute_stream(dai, mute, direction);
3729 	else if (direction == SNDRV_PCM_STREAM_PLAYBACK &&
3730 		 dai->driver->ops->digital_mute)
3731 		return dai->driver->ops->digital_mute(dai, mute);
3732 	else
3733 		return -ENOTSUPP;
3734 }
3735 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute);
3736 
3737 /**
3738  * snd_soc_register_card - Register a card with the ASoC core
3739  *
3740  * @card: Card to register
3741  *
3742  */
3743 int snd_soc_register_card(struct snd_soc_card *card)
3744 {
3745 	int i, ret;
3746 
3747 	if (!card->name || !card->dev)
3748 		return -EINVAL;
3749 
3750 	for (i = 0; i < card->num_links; i++) {
3751 		struct snd_soc_dai_link *link = &card->dai_link[i];
3752 
3753 		/*
3754 		 * Codec must be specified by 1 of name or OF node,
3755 		 * not both or neither.
3756 		 */
3757 		if (!!link->codec_name == !!link->codec_of_node) {
3758 			dev_err(card->dev,
3759 				"ASoC: Neither/both codec name/of_node are set for %s\n",
3760 				link->name);
3761 			return -EINVAL;
3762 		}
3763 		/* Codec DAI name must be specified */
3764 		if (!link->codec_dai_name) {
3765 			dev_err(card->dev,
3766 				"ASoC: codec_dai_name not set for %s\n",
3767 				link->name);
3768 			return -EINVAL;
3769 		}
3770 
3771 		/*
3772 		 * Platform may be specified by either name or OF node, but
3773 		 * can be left unspecified, and a dummy platform will be used.
3774 		 */
3775 		if (link->platform_name && link->platform_of_node) {
3776 			dev_err(card->dev,
3777 				"ASoC: Both platform name/of_node are set for %s\n",
3778 				link->name);
3779 			return -EINVAL;
3780 		}
3781 
3782 		/*
3783 		 * CPU device may be specified by either name or OF node, but
3784 		 * can be left unspecified, and will be matched based on DAI
3785 		 * name alone..
3786 		 */
3787 		if (link->cpu_name && link->cpu_of_node) {
3788 			dev_err(card->dev,
3789 				"ASoC: Neither/both cpu name/of_node are set for %s\n",
3790 				link->name);
3791 			return -EINVAL;
3792 		}
3793 		/*
3794 		 * At least one of CPU DAI name or CPU device name/node must be
3795 		 * specified
3796 		 */
3797 		if (!link->cpu_dai_name &&
3798 		    !(link->cpu_name || link->cpu_of_node)) {
3799 			dev_err(card->dev,
3800 				"ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n",
3801 				link->name);
3802 			return -EINVAL;
3803 		}
3804 	}
3805 
3806 	dev_set_drvdata(card->dev, card);
3807 
3808 	snd_soc_initialize_card_lists(card);
3809 
3810 	soc_init_card_debugfs(card);
3811 
3812 	card->rtd = devm_kzalloc(card->dev,
3813 				 sizeof(struct snd_soc_pcm_runtime) *
3814 				 (card->num_links + card->num_aux_devs),
3815 				 GFP_KERNEL);
3816 	if (card->rtd == NULL)
3817 		return -ENOMEM;
3818 	card->num_rtd = 0;
3819 	card->rtd_aux = &card->rtd[card->num_links];
3820 
3821 	for (i = 0; i < card->num_links; i++)
3822 		card->rtd[i].dai_link = &card->dai_link[i];
3823 
3824 	INIT_LIST_HEAD(&card->list);
3825 	INIT_LIST_HEAD(&card->dapm_dirty);
3826 	card->instantiated = 0;
3827 	mutex_init(&card->mutex);
3828 	mutex_init(&card->dapm_mutex);
3829 
3830 	ret = snd_soc_instantiate_card(card);
3831 	if (ret != 0)
3832 		soc_cleanup_card_debugfs(card);
3833 
3834 	/* deactivate pins to sleep state */
3835 	for (i = 0; i < card->num_rtd; i++) {
3836 		struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
3837 		struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai;
3838 		if (!codec_dai->active)
3839 			pinctrl_pm_select_sleep_state(codec_dai->dev);
3840 		if (!cpu_dai->active)
3841 			pinctrl_pm_select_sleep_state(cpu_dai->dev);
3842 	}
3843 
3844 	return ret;
3845 }
3846 EXPORT_SYMBOL_GPL(snd_soc_register_card);
3847 
3848 /**
3849  * snd_soc_unregister_card - Unregister a card with the ASoC core
3850  *
3851  * @card: Card to unregister
3852  *
3853  */
3854 int snd_soc_unregister_card(struct snd_soc_card *card)
3855 {
3856 	if (card->instantiated)
3857 		soc_cleanup_card_resources(card);
3858 	dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name);
3859 
3860 	return 0;
3861 }
3862 EXPORT_SYMBOL_GPL(snd_soc_unregister_card);
3863 
3864 /*
3865  * Simplify DAI link configuration by removing ".-1" from device names
3866  * and sanitizing names.
3867  */
3868 static char *fmt_single_name(struct device *dev, int *id)
3869 {
3870 	char *found, name[NAME_SIZE];
3871 	int id1, id2;
3872 
3873 	if (dev_name(dev) == NULL)
3874 		return NULL;
3875 
3876 	strlcpy(name, dev_name(dev), NAME_SIZE);
3877 
3878 	/* are we a "%s.%d" name (platform and SPI components) */
3879 	found = strstr(name, dev->driver->name);
3880 	if (found) {
3881 		/* get ID */
3882 		if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) {
3883 
3884 			/* discard ID from name if ID == -1 */
3885 			if (*id == -1)
3886 				found[strlen(dev->driver->name)] = '\0';
3887 		}
3888 
3889 	} else {
3890 		/* I2C component devices are named "bus-addr"  */
3891 		if (sscanf(name, "%x-%x", &id1, &id2) == 2) {
3892 			char tmp[NAME_SIZE];
3893 
3894 			/* create unique ID number from I2C addr and bus */
3895 			*id = ((id1 & 0xffff) << 16) + id2;
3896 
3897 			/* sanitize component name for DAI link creation */
3898 			snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name);
3899 			strlcpy(name, tmp, NAME_SIZE);
3900 		} else
3901 			*id = 0;
3902 	}
3903 
3904 	return kstrdup(name, GFP_KERNEL);
3905 }
3906 
3907 /*
3908  * Simplify DAI link naming for single devices with multiple DAIs by removing
3909  * any ".-1" and using the DAI name (instead of device name).
3910  */
3911 static inline char *fmt_multiple_name(struct device *dev,
3912 		struct snd_soc_dai_driver *dai_drv)
3913 {
3914 	if (dai_drv->name == NULL) {
3915 		dev_err(dev,
3916 			"ASoC: error - multiple DAI %s registered with no name\n",
3917 			dev_name(dev));
3918 		return NULL;
3919 	}
3920 
3921 	return kstrdup(dai_drv->name, GFP_KERNEL);
3922 }
3923 
3924 /**
3925  * snd_soc_unregister_dai - Unregister DAIs from the ASoC core
3926  *
3927  * @component: The component for which the DAIs should be unregistered
3928  */
3929 static void snd_soc_unregister_dais(struct snd_soc_component *component)
3930 {
3931 	struct snd_soc_dai *dai, *_dai;
3932 
3933 	list_for_each_entry_safe(dai, _dai, &component->dai_list, list) {
3934 		dev_dbg(component->dev, "ASoC: Unregistered DAI '%s'\n",
3935 			dai->name);
3936 		list_del(&dai->list);
3937 		kfree(dai->name);
3938 		kfree(dai);
3939 	}
3940 }
3941 
3942 /**
3943  * snd_soc_register_dais - Register a DAI with the ASoC core
3944  *
3945  * @component: The component the DAIs are registered for
3946  * @codec: The CODEC that the DAIs are registered for, NULL if the component is
3947  *         not a CODEC.
3948  * @dai_drv: DAI driver to use for the DAIs
3949  * @count: Number of DAIs
3950  * @legacy_dai_naming: Use the legacy naming scheme and let the DAI inherit the
3951  *                     parent's name.
3952  */
3953 static int snd_soc_register_dais(struct snd_soc_component *component,
3954 	struct snd_soc_codec *codec, struct snd_soc_dai_driver *dai_drv,
3955 	size_t count, bool legacy_dai_naming)
3956 {
3957 	struct device *dev = component->dev;
3958 	struct snd_soc_dai *dai;
3959 	unsigned int i;
3960 	int ret;
3961 
3962 	dev_dbg(dev, "ASoC: dai register %s #%Zu\n", dev_name(dev), count);
3963 
3964 	for (i = 0; i < count; i++) {
3965 
3966 		dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
3967 		if (dai == NULL) {
3968 			ret = -ENOMEM;
3969 			goto err;
3970 		}
3971 
3972 		/*
3973 		 * Back in the old days when we still had component-less DAIs,
3974 		 * instead of having a static name, component-less DAIs would
3975 		 * inherit the name of the parent device so it is possible to
3976 		 * register multiple instances of the DAI. We still need to keep
3977 		 * the same naming style even though those DAIs are not
3978 		 * component-less anymore.
3979 		 */
3980 		if (count == 1 && legacy_dai_naming) {
3981 			dai->name = fmt_single_name(dev, &dai->id);
3982 		} else {
3983 			dai->name = fmt_multiple_name(dev, &dai_drv[i]);
3984 			if (dai_drv[i].id)
3985 				dai->id = dai_drv[i].id;
3986 			else
3987 				dai->id = i;
3988 		}
3989 		if (dai->name == NULL) {
3990 			kfree(dai);
3991 			ret = -ENOMEM;
3992 			goto err;
3993 		}
3994 
3995 		dai->component = component;
3996 		dai->codec = codec;
3997 		dai->dev = dev;
3998 		dai->driver = &dai_drv[i];
3999 		dai->dapm.dev = dev;
4000 		if (!dai->driver->ops)
4001 			dai->driver->ops = &null_dai_ops;
4002 
4003 		if (!dai->codec)
4004 			dai->dapm.idle_bias_off = 1;
4005 
4006 		list_add(&dai->list, &component->dai_list);
4007 
4008 		dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name);
4009 	}
4010 
4011 	return 0;
4012 
4013 err:
4014 	snd_soc_unregister_dais(component);
4015 
4016 	return ret;
4017 }
4018 
4019 /**
4020  * snd_soc_register_component - Register a component with the ASoC core
4021  *
4022  */
4023 static int
4024 __snd_soc_register_component(struct device *dev,
4025 			     struct snd_soc_component *cmpnt,
4026 			     const struct snd_soc_component_driver *cmpnt_drv,
4027 			     struct snd_soc_codec *codec,
4028 			     struct snd_soc_dai_driver *dai_drv,
4029 			     int num_dai, bool allow_single_dai)
4030 {
4031 	int ret;
4032 
4033 	dev_dbg(dev, "component register %s\n", dev_name(dev));
4034 
4035 	if (!cmpnt) {
4036 		dev_err(dev, "ASoC: Failed to connecting component\n");
4037 		return -ENOMEM;
4038 	}
4039 
4040 	cmpnt->name = fmt_single_name(dev, &cmpnt->id);
4041 	if (!cmpnt->name) {
4042 		dev_err(dev, "ASoC: Failed to simplifying name\n");
4043 		return -ENOMEM;
4044 	}
4045 
4046 	cmpnt->dev	= dev;
4047 	cmpnt->driver	= cmpnt_drv;
4048 	cmpnt->dai_drv	= dai_drv;
4049 	cmpnt->num_dai	= num_dai;
4050 	INIT_LIST_HEAD(&cmpnt->dai_list);
4051 
4052 	ret = snd_soc_register_dais(cmpnt, codec, dai_drv, num_dai,
4053 		allow_single_dai);
4054 	if (ret < 0) {
4055 		dev_err(dev, "ASoC: Failed to regster DAIs: %d\n", ret);
4056 		goto error_component_name;
4057 	}
4058 
4059 	mutex_lock(&client_mutex);
4060 	list_add(&cmpnt->list, &component_list);
4061 	mutex_unlock(&client_mutex);
4062 
4063 	dev_dbg(cmpnt->dev, "ASoC: Registered component '%s'\n", cmpnt->name);
4064 
4065 	return ret;
4066 
4067 error_component_name:
4068 	kfree(cmpnt->name);
4069 
4070 	return ret;
4071 }
4072 
4073 int snd_soc_register_component(struct device *dev,
4074 			       const struct snd_soc_component_driver *cmpnt_drv,
4075 			       struct snd_soc_dai_driver *dai_drv,
4076 			       int num_dai)
4077 {
4078 	struct snd_soc_component *cmpnt;
4079 
4080 	cmpnt = devm_kzalloc(dev, sizeof(*cmpnt), GFP_KERNEL);
4081 	if (!cmpnt) {
4082 		dev_err(dev, "ASoC: Failed to allocate memory\n");
4083 		return -ENOMEM;
4084 	}
4085 
4086 	cmpnt->ignore_pmdown_time = true;
4087 
4088 	return __snd_soc_register_component(dev, cmpnt, cmpnt_drv, NULL,
4089 					    dai_drv, num_dai, true);
4090 }
4091 EXPORT_SYMBOL_GPL(snd_soc_register_component);
4092 
4093 /**
4094  * snd_soc_unregister_component - Unregister a component from the ASoC core
4095  *
4096  */
4097 void snd_soc_unregister_component(struct device *dev)
4098 {
4099 	struct snd_soc_component *cmpnt;
4100 
4101 	list_for_each_entry(cmpnt, &component_list, list) {
4102 		if (dev == cmpnt->dev)
4103 			goto found;
4104 	}
4105 	return;
4106 
4107 found:
4108 	snd_soc_unregister_dais(cmpnt);
4109 
4110 	mutex_lock(&client_mutex);
4111 	list_del(&cmpnt->list);
4112 	mutex_unlock(&client_mutex);
4113 
4114 	dev_dbg(dev, "ASoC: Unregistered component '%s'\n", cmpnt->name);
4115 	kfree(cmpnt->name);
4116 }
4117 EXPORT_SYMBOL_GPL(snd_soc_unregister_component);
4118 
4119 /**
4120  * snd_soc_add_platform - Add a platform to the ASoC core
4121  * @dev: The parent device for the platform
4122  * @platform: The platform to add
4123  * @platform_driver: The driver for the platform
4124  */
4125 int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform,
4126 		const struct snd_soc_platform_driver *platform_drv)
4127 {
4128 	/* create platform component name */
4129 	platform->name = fmt_single_name(dev, &platform->id);
4130 	if (platform->name == NULL)
4131 		return -ENOMEM;
4132 
4133 	platform->dev = dev;
4134 	platform->driver = platform_drv;
4135 	platform->dapm.dev = dev;
4136 	platform->dapm.platform = platform;
4137 	platform->dapm.stream_event = platform_drv->stream_event;
4138 	mutex_init(&platform->mutex);
4139 
4140 	mutex_lock(&client_mutex);
4141 	list_add(&platform->list, &platform_list);
4142 	mutex_unlock(&client_mutex);
4143 
4144 	dev_dbg(dev, "ASoC: Registered platform '%s'\n", platform->name);
4145 
4146 	return 0;
4147 }
4148 EXPORT_SYMBOL_GPL(snd_soc_add_platform);
4149 
4150 /**
4151  * snd_soc_register_platform - Register a platform with the ASoC core
4152  *
4153  * @platform: platform to register
4154  */
4155 int snd_soc_register_platform(struct device *dev,
4156 		const struct snd_soc_platform_driver *platform_drv)
4157 {
4158 	struct snd_soc_platform *platform;
4159 	int ret;
4160 
4161 	dev_dbg(dev, "ASoC: platform register %s\n", dev_name(dev));
4162 
4163 	platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL);
4164 	if (platform == NULL)
4165 		return -ENOMEM;
4166 
4167 	ret = snd_soc_add_platform(dev, platform, platform_drv);
4168 	if (ret)
4169 		kfree(platform);
4170 
4171 	return ret;
4172 }
4173 EXPORT_SYMBOL_GPL(snd_soc_register_platform);
4174 
4175 /**
4176  * snd_soc_remove_platform - Remove a platform from the ASoC core
4177  * @platform: the platform to remove
4178  */
4179 void snd_soc_remove_platform(struct snd_soc_platform *platform)
4180 {
4181 	mutex_lock(&client_mutex);
4182 	list_del(&platform->list);
4183 	mutex_unlock(&client_mutex);
4184 
4185 	dev_dbg(platform->dev, "ASoC: Unregistered platform '%s'\n",
4186 		platform->name);
4187 	kfree(platform->name);
4188 }
4189 EXPORT_SYMBOL_GPL(snd_soc_remove_platform);
4190 
4191 struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev)
4192 {
4193 	struct snd_soc_platform *platform;
4194 
4195 	list_for_each_entry(platform, &platform_list, list) {
4196 		if (dev == platform->dev)
4197 			return platform;
4198 	}
4199 
4200 	return NULL;
4201 }
4202 EXPORT_SYMBOL_GPL(snd_soc_lookup_platform);
4203 
4204 /**
4205  * snd_soc_unregister_platform - Unregister a platform from the ASoC core
4206  *
4207  * @platform: platform to unregister
4208  */
4209 void snd_soc_unregister_platform(struct device *dev)
4210 {
4211 	struct snd_soc_platform *platform;
4212 
4213 	platform = snd_soc_lookup_platform(dev);
4214 	if (!platform)
4215 		return;
4216 
4217 	snd_soc_remove_platform(platform);
4218 	kfree(platform);
4219 }
4220 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform);
4221 
4222 static u64 codec_format_map[] = {
4223 	SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE,
4224 	SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE,
4225 	SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE,
4226 	SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE,
4227 	SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE,
4228 	SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE,
4229 	SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
4230 	SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE,
4231 	SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE,
4232 	SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE,
4233 	SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE,
4234 	SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE,
4235 	SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE,
4236 	SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE,
4237 	SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE
4238 	| SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE,
4239 };
4240 
4241 /* Fix up the DAI formats for endianness: codecs don't actually see
4242  * the endianness of the data but we're using the CPU format
4243  * definitions which do need to include endianness so we ensure that
4244  * codec DAIs always have both big and little endian variants set.
4245  */
4246 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream)
4247 {
4248 	int i;
4249 
4250 	for (i = 0; i < ARRAY_SIZE(codec_format_map); i++)
4251 		if (stream->formats & codec_format_map[i])
4252 			stream->formats |= codec_format_map[i];
4253 }
4254 
4255 /**
4256  * snd_soc_register_codec - Register a codec with the ASoC core
4257  *
4258  * @codec: codec to register
4259  */
4260 int snd_soc_register_codec(struct device *dev,
4261 			   const struct snd_soc_codec_driver *codec_drv,
4262 			   struct snd_soc_dai_driver *dai_drv,
4263 			   int num_dai)
4264 {
4265 	struct snd_soc_codec *codec;
4266 	int ret, i;
4267 
4268 	dev_dbg(dev, "codec register %s\n", dev_name(dev));
4269 
4270 	codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
4271 	if (codec == NULL)
4272 		return -ENOMEM;
4273 
4274 	/* create CODEC component name */
4275 	codec->name = fmt_single_name(dev, &codec->id);
4276 	if (codec->name == NULL) {
4277 		ret = -ENOMEM;
4278 		goto fail_codec;
4279 	}
4280 
4281 	codec->write = codec_drv->write;
4282 	codec->read = codec_drv->read;
4283 	codec->volatile_register = codec_drv->volatile_register;
4284 	codec->readable_register = codec_drv->readable_register;
4285 	codec->writable_register = codec_drv->writable_register;
4286 	codec->component.ignore_pmdown_time = codec_drv->ignore_pmdown_time;
4287 	codec->dapm.bias_level = SND_SOC_BIAS_OFF;
4288 	codec->dapm.dev = dev;
4289 	codec->dapm.codec = codec;
4290 	codec->dapm.seq_notifier = codec_drv->seq_notifier;
4291 	codec->dapm.stream_event = codec_drv->stream_event;
4292 	codec->dev = dev;
4293 	codec->driver = codec_drv;
4294 	codec->num_dai = num_dai;
4295 	mutex_init(&codec->mutex);
4296 
4297 	for (i = 0; i < num_dai; i++) {
4298 		fixup_codec_formats(&dai_drv[i].playback);
4299 		fixup_codec_formats(&dai_drv[i].capture);
4300 	}
4301 
4302 	mutex_lock(&client_mutex);
4303 	list_add(&codec->list, &codec_list);
4304 	mutex_unlock(&client_mutex);
4305 
4306 	/* register component */
4307 	ret = __snd_soc_register_component(dev, &codec->component,
4308 					   &codec_drv->component_driver,
4309 					   codec, dai_drv, num_dai, false);
4310 	if (ret < 0) {
4311 		dev_err(codec->dev, "ASoC: Failed to regster component: %d\n", ret);
4312 		goto fail_codec_name;
4313 	}
4314 
4315 	dev_dbg(codec->dev, "ASoC: Registered codec '%s'\n", codec->name);
4316 	return 0;
4317 
4318 fail_codec_name:
4319 	mutex_lock(&client_mutex);
4320 	list_del(&codec->list);
4321 	mutex_unlock(&client_mutex);
4322 
4323 	kfree(codec->name);
4324 fail_codec:
4325 	kfree(codec);
4326 	return ret;
4327 }
4328 EXPORT_SYMBOL_GPL(snd_soc_register_codec);
4329 
4330 /**
4331  * snd_soc_unregister_codec - Unregister a codec from the ASoC core
4332  *
4333  * @codec: codec to unregister
4334  */
4335 void snd_soc_unregister_codec(struct device *dev)
4336 {
4337 	struct snd_soc_codec *codec;
4338 
4339 	list_for_each_entry(codec, &codec_list, list) {
4340 		if (dev == codec->dev)
4341 			goto found;
4342 	}
4343 	return;
4344 
4345 found:
4346 	snd_soc_unregister_component(dev);
4347 
4348 	mutex_lock(&client_mutex);
4349 	list_del(&codec->list);
4350 	mutex_unlock(&client_mutex);
4351 
4352 	dev_dbg(codec->dev, "ASoC: Unregistered codec '%s'\n", codec->name);
4353 
4354 	snd_soc_cache_exit(codec);
4355 	kfree(codec->name);
4356 	kfree(codec);
4357 }
4358 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec);
4359 
4360 /* Retrieve a card's name from device tree */
4361 int snd_soc_of_parse_card_name(struct snd_soc_card *card,
4362 			       const char *propname)
4363 {
4364 	struct device_node *np = card->dev->of_node;
4365 	int ret;
4366 
4367 	ret = of_property_read_string_index(np, propname, 0, &card->name);
4368 	/*
4369 	 * EINVAL means the property does not exist. This is fine providing
4370 	 * card->name was previously set, which is checked later in
4371 	 * snd_soc_register_card.
4372 	 */
4373 	if (ret < 0 && ret != -EINVAL) {
4374 		dev_err(card->dev,
4375 			"ASoC: Property '%s' could not be read: %d\n",
4376 			propname, ret);
4377 		return ret;
4378 	}
4379 
4380 	return 0;
4381 }
4382 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name);
4383 
4384 static const struct snd_soc_dapm_widget simple_widgets[] = {
4385 	SND_SOC_DAPM_MIC("Microphone", NULL),
4386 	SND_SOC_DAPM_LINE("Line", NULL),
4387 	SND_SOC_DAPM_HP("Headphone", NULL),
4388 	SND_SOC_DAPM_SPK("Speaker", NULL),
4389 };
4390 
4391 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
4392 					  const char *propname)
4393 {
4394 	struct device_node *np = card->dev->of_node;
4395 	struct snd_soc_dapm_widget *widgets;
4396 	const char *template, *wname;
4397 	int i, j, num_widgets, ret;
4398 
4399 	num_widgets = of_property_count_strings(np, propname);
4400 	if (num_widgets < 0) {
4401 		dev_err(card->dev,
4402 			"ASoC: Property '%s' does not exist\n",	propname);
4403 		return -EINVAL;
4404 	}
4405 	if (num_widgets & 1) {
4406 		dev_err(card->dev,
4407 			"ASoC: Property '%s' length is not even\n", propname);
4408 		return -EINVAL;
4409 	}
4410 
4411 	num_widgets /= 2;
4412 	if (!num_widgets) {
4413 		dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
4414 			propname);
4415 		return -EINVAL;
4416 	}
4417 
4418 	widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets),
4419 			       GFP_KERNEL);
4420 	if (!widgets) {
4421 		dev_err(card->dev,
4422 			"ASoC: Could not allocate memory for widgets\n");
4423 		return -ENOMEM;
4424 	}
4425 
4426 	for (i = 0; i < num_widgets; i++) {
4427 		ret = of_property_read_string_index(np, propname,
4428 			2 * i, &template);
4429 		if (ret) {
4430 			dev_err(card->dev,
4431 				"ASoC: Property '%s' index %d read error:%d\n",
4432 				propname, 2 * i, ret);
4433 			return -EINVAL;
4434 		}
4435 
4436 		for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) {
4437 			if (!strncmp(template, simple_widgets[j].name,
4438 				     strlen(simple_widgets[j].name))) {
4439 				widgets[i] = simple_widgets[j];
4440 				break;
4441 			}
4442 		}
4443 
4444 		if (j >= ARRAY_SIZE(simple_widgets)) {
4445 			dev_err(card->dev,
4446 				"ASoC: DAPM widget '%s' is not supported\n",
4447 				template);
4448 			return -EINVAL;
4449 		}
4450 
4451 		ret = of_property_read_string_index(np, propname,
4452 						    (2 * i) + 1,
4453 						    &wname);
4454 		if (ret) {
4455 			dev_err(card->dev,
4456 				"ASoC: Property '%s' index %d read error:%d\n",
4457 				propname, (2 * i) + 1, ret);
4458 			return -EINVAL;
4459 		}
4460 
4461 		widgets[i].name = wname;
4462 	}
4463 
4464 	card->dapm_widgets = widgets;
4465 	card->num_dapm_widgets = num_widgets;
4466 
4467 	return 0;
4468 }
4469 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets);
4470 
4471 int snd_soc_of_parse_tdm_slot(struct device_node *np,
4472 			      unsigned int *slots,
4473 			      unsigned int *slot_width)
4474 {
4475 	u32 val;
4476 	int ret;
4477 
4478 	if (of_property_read_bool(np, "dai-tdm-slot-num")) {
4479 		ret = of_property_read_u32(np, "dai-tdm-slot-num", &val);
4480 		if (ret)
4481 			return ret;
4482 
4483 		if (slots)
4484 			*slots = val;
4485 	}
4486 
4487 	if (of_property_read_bool(np, "dai-tdm-slot-width")) {
4488 		ret = of_property_read_u32(np, "dai-tdm-slot-width", &val);
4489 		if (ret)
4490 			return ret;
4491 
4492 		if (slot_width)
4493 			*slot_width = val;
4494 	}
4495 
4496 	return 0;
4497 }
4498 EXPORT_SYMBOL_GPL(snd_soc_of_parse_tdm_slot);
4499 
4500 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
4501 				   const char *propname)
4502 {
4503 	struct device_node *np = card->dev->of_node;
4504 	int num_routes;
4505 	struct snd_soc_dapm_route *routes;
4506 	int i, ret;
4507 
4508 	num_routes = of_property_count_strings(np, propname);
4509 	if (num_routes < 0 || num_routes & 1) {
4510 		dev_err(card->dev,
4511 			"ASoC: Property '%s' does not exist or its length is not even\n",
4512 			propname);
4513 		return -EINVAL;
4514 	}
4515 	num_routes /= 2;
4516 	if (!num_routes) {
4517 		dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
4518 			propname);
4519 		return -EINVAL;
4520 	}
4521 
4522 	routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes),
4523 			      GFP_KERNEL);
4524 	if (!routes) {
4525 		dev_err(card->dev,
4526 			"ASoC: Could not allocate DAPM route table\n");
4527 		return -EINVAL;
4528 	}
4529 
4530 	for (i = 0; i < num_routes; i++) {
4531 		ret = of_property_read_string_index(np, propname,
4532 			2 * i, &routes[i].sink);
4533 		if (ret) {
4534 			dev_err(card->dev,
4535 				"ASoC: Property '%s' index %d could not be read: %d\n",
4536 				propname, 2 * i, ret);
4537 			return -EINVAL;
4538 		}
4539 		ret = of_property_read_string_index(np, propname,
4540 			(2 * i) + 1, &routes[i].source);
4541 		if (ret) {
4542 			dev_err(card->dev,
4543 				"ASoC: Property '%s' index %d could not be read: %d\n",
4544 				propname, (2 * i) + 1, ret);
4545 			return -EINVAL;
4546 		}
4547 	}
4548 
4549 	card->num_dapm_routes = num_routes;
4550 	card->dapm_routes = routes;
4551 
4552 	return 0;
4553 }
4554 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing);
4555 
4556 unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
4557 				     const char *prefix)
4558 {
4559 	int ret, i;
4560 	char prop[128];
4561 	unsigned int format = 0;
4562 	int bit, frame;
4563 	const char *str;
4564 	struct {
4565 		char *name;
4566 		unsigned int val;
4567 	} of_fmt_table[] = {
4568 		{ "i2s",	SND_SOC_DAIFMT_I2S },
4569 		{ "right_j",	SND_SOC_DAIFMT_RIGHT_J },
4570 		{ "left_j",	SND_SOC_DAIFMT_LEFT_J },
4571 		{ "dsp_a",	SND_SOC_DAIFMT_DSP_A },
4572 		{ "dsp_b",	SND_SOC_DAIFMT_DSP_B },
4573 		{ "ac97",	SND_SOC_DAIFMT_AC97 },
4574 		{ "pdm",	SND_SOC_DAIFMT_PDM},
4575 		{ "msb",	SND_SOC_DAIFMT_MSB },
4576 		{ "lsb",	SND_SOC_DAIFMT_LSB },
4577 	};
4578 
4579 	if (!prefix)
4580 		prefix = "";
4581 
4582 	/*
4583 	 * check "[prefix]format = xxx"
4584 	 * SND_SOC_DAIFMT_FORMAT_MASK area
4585 	 */
4586 	snprintf(prop, sizeof(prop), "%sformat", prefix);
4587 	ret = of_property_read_string(np, prop, &str);
4588 	if (ret == 0) {
4589 		for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) {
4590 			if (strcmp(str, of_fmt_table[i].name) == 0) {
4591 				format |= of_fmt_table[i].val;
4592 				break;
4593 			}
4594 		}
4595 	}
4596 
4597 	/*
4598 	 * check "[prefix]continuous-clock"
4599 	 * SND_SOC_DAIFMT_CLOCK_MASK area
4600 	 */
4601 	snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix);
4602 	if (of_get_property(np, prop, NULL))
4603 		format |= SND_SOC_DAIFMT_CONT;
4604 	else
4605 		format |= SND_SOC_DAIFMT_GATED;
4606 
4607 	/*
4608 	 * check "[prefix]bitclock-inversion"
4609 	 * check "[prefix]frame-inversion"
4610 	 * SND_SOC_DAIFMT_INV_MASK area
4611 	 */
4612 	snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix);
4613 	bit = !!of_get_property(np, prop, NULL);
4614 
4615 	snprintf(prop, sizeof(prop), "%sframe-inversion", prefix);
4616 	frame = !!of_get_property(np, prop, NULL);
4617 
4618 	switch ((bit << 4) + frame) {
4619 	case 0x11:
4620 		format |= SND_SOC_DAIFMT_IB_IF;
4621 		break;
4622 	case 0x10:
4623 		format |= SND_SOC_DAIFMT_IB_NF;
4624 		break;
4625 	case 0x01:
4626 		format |= SND_SOC_DAIFMT_NB_IF;
4627 		break;
4628 	default:
4629 		/* SND_SOC_DAIFMT_NB_NF is default */
4630 		break;
4631 	}
4632 
4633 	/*
4634 	 * check "[prefix]bitclock-master"
4635 	 * check "[prefix]frame-master"
4636 	 * SND_SOC_DAIFMT_MASTER_MASK area
4637 	 */
4638 	snprintf(prop, sizeof(prop), "%sbitclock-master", prefix);
4639 	bit = !!of_get_property(np, prop, NULL);
4640 
4641 	snprintf(prop, sizeof(prop), "%sframe-master", prefix);
4642 	frame = !!of_get_property(np, prop, NULL);
4643 
4644 	switch ((bit << 4) + frame) {
4645 	case 0x11:
4646 		format |= SND_SOC_DAIFMT_CBM_CFM;
4647 		break;
4648 	case 0x10:
4649 		format |= SND_SOC_DAIFMT_CBM_CFS;
4650 		break;
4651 	case 0x01:
4652 		format |= SND_SOC_DAIFMT_CBS_CFM;
4653 		break;
4654 	default:
4655 		format |= SND_SOC_DAIFMT_CBS_CFS;
4656 		break;
4657 	}
4658 
4659 	return format;
4660 }
4661 EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt);
4662 
4663 int snd_soc_of_get_dai_name(struct device_node *of_node,
4664 			    const char **dai_name)
4665 {
4666 	struct snd_soc_component *pos;
4667 	struct of_phandle_args args;
4668 	int ret;
4669 
4670 	ret = of_parse_phandle_with_args(of_node, "sound-dai",
4671 					 "#sound-dai-cells", 0, &args);
4672 	if (ret)
4673 		return ret;
4674 
4675 	ret = -EPROBE_DEFER;
4676 
4677 	mutex_lock(&client_mutex);
4678 	list_for_each_entry(pos, &component_list, list) {
4679 		if (pos->dev->of_node != args.np)
4680 			continue;
4681 
4682 		if (pos->driver->of_xlate_dai_name) {
4683 			ret = pos->driver->of_xlate_dai_name(pos, &args, dai_name);
4684 		} else {
4685 			int id = -1;
4686 
4687 			switch (args.args_count) {
4688 			case 0:
4689 				id = 0; /* same as dai_drv[0] */
4690 				break;
4691 			case 1:
4692 				id = args.args[0];
4693 				break;
4694 			default:
4695 				/* not supported */
4696 				break;
4697 			}
4698 
4699 			if (id < 0 || id >= pos->num_dai) {
4700 				ret = -EINVAL;
4701 				break;
4702 			}
4703 
4704 			ret = 0;
4705 
4706 			*dai_name = pos->dai_drv[id].name;
4707 			if (!*dai_name)
4708 				*dai_name = pos->name;
4709 		}
4710 
4711 		break;
4712 	}
4713 	mutex_unlock(&client_mutex);
4714 
4715 	of_node_put(args.np);
4716 
4717 	return ret;
4718 }
4719 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name);
4720 
4721 static int __init snd_soc_init(void)
4722 {
4723 #ifdef CONFIG_DEBUG_FS
4724 	snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL);
4725 	if (IS_ERR(snd_soc_debugfs_root) || !snd_soc_debugfs_root) {
4726 		pr_warn("ASoC: Failed to create debugfs directory\n");
4727 		snd_soc_debugfs_root = NULL;
4728 	}
4729 
4730 	if (!debugfs_create_file("codecs", 0444, snd_soc_debugfs_root, NULL,
4731 				 &codec_list_fops))
4732 		pr_warn("ASoC: Failed to create CODEC list debugfs file\n");
4733 
4734 	if (!debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL,
4735 				 &dai_list_fops))
4736 		pr_warn("ASoC: Failed to create DAI list debugfs file\n");
4737 
4738 	if (!debugfs_create_file("platforms", 0444, snd_soc_debugfs_root, NULL,
4739 				 &platform_list_fops))
4740 		pr_warn("ASoC: Failed to create platform list debugfs file\n");
4741 #endif
4742 
4743 	snd_soc_util_init();
4744 
4745 	return platform_driver_register(&soc_driver);
4746 }
4747 module_init(snd_soc_init);
4748 
4749 static void __exit snd_soc_exit(void)
4750 {
4751 	snd_soc_util_exit();
4752 
4753 #ifdef CONFIG_DEBUG_FS
4754 	debugfs_remove_recursive(snd_soc_debugfs_root);
4755 #endif
4756 	platform_driver_unregister(&soc_driver);
4757 }
4758 module_exit(snd_soc_exit);
4759 
4760 /* Module information */
4761 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
4762 MODULE_DESCRIPTION("ALSA SoC Core");
4763 MODULE_LICENSE("GPL");
4764 MODULE_ALIAS("platform:soc-audio");
4765