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