xref: /openbmc/linux/sound/soc/soc-core.c (revision e8bd417a)
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // soc-core.c  --  ALSA SoC Audio Layer
4 //
5 // Copyright 2005 Wolfson Microelectronics PLC.
6 // Copyright 2005 Openedhand Ltd.
7 // Copyright (C) 2010 Slimlogic Ltd.
8 // Copyright (C) 2010 Texas Instruments Inc.
9 //
10 // Author: Liam Girdwood <lrg@slimlogic.co.uk>
11 //         with code, comments and ideas from :-
12 //         Richard Purdie <richard@openedhand.com>
13 //
14 //  TODO:
15 //   o Add hw rules to enforce rates, etc.
16 //   o More testing with other codecs/machines.
17 //   o Add more codecs and platforms to ensure good API coverage.
18 //   o Support TDM on PCM and I2S
19 
20 #include <linux/module.h>
21 #include <linux/moduleparam.h>
22 #include <linux/init.h>
23 #include <linux/delay.h>
24 #include <linux/pm.h>
25 #include <linux/bitops.h>
26 #include <linux/debugfs.h>
27 #include <linux/platform_device.h>
28 #include <linux/pinctrl/consumer.h>
29 #include <linux/ctype.h>
30 #include <linux/slab.h>
31 #include <linux/of.h>
32 #include <linux/of_graph.h>
33 #include <linux/dmi.h>
34 #include <sound/core.h>
35 #include <sound/jack.h>
36 #include <sound/pcm.h>
37 #include <sound/pcm_params.h>
38 #include <sound/soc.h>
39 #include <sound/soc-dpcm.h>
40 #include <sound/soc-topology.h>
41 #include <sound/initval.h>
42 
43 #define CREATE_TRACE_POINTS
44 #include <trace/events/asoc.h>
45 
46 #define NAME_SIZE	32
47 
48 #ifdef CONFIG_DEBUG_FS
49 struct dentry *snd_soc_debugfs_root;
50 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root);
51 #endif
52 
53 static DEFINE_MUTEX(client_mutex);
54 static LIST_HEAD(component_list);
55 static LIST_HEAD(unbind_card_list);
56 
57 #define for_each_component(component)			\
58 	list_for_each_entry(component, &component_list, list)
59 
60 /*
61  * This is used if driver don't need to have CPU/Codec/Platform
62  * dai_link. see soc.h
63  */
64 struct snd_soc_dai_link_component null_dailink_component[0];
65 EXPORT_SYMBOL_GPL(null_dailink_component);
66 
67 /*
68  * This is a timeout to do a DAPM powerdown after a stream is closed().
69  * It can be used to eliminate pops between different playback streams, e.g.
70  * between two audio tracks.
71  */
72 static int pmdown_time = 5000;
73 module_param(pmdown_time, int, 0);
74 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
75 
76 /*
77  * If a DMI filed contain strings in this blacklist (e.g.
78  * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken
79  * as invalid and dropped when setting the card long name from DMI info.
80  */
81 static const char * const dmi_blacklist[] = {
82 	"To be filled by OEM",
83 	"TBD by OEM",
84 	"Default String",
85 	"Board Manufacturer",
86 	"Board Vendor Name",
87 	"Board Product Name",
88 	NULL,	/* terminator */
89 };
90 
91 static ssize_t pmdown_time_show(struct device *dev,
92 				struct device_attribute *attr, char *buf)
93 {
94 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
95 
96 	return sprintf(buf, "%ld\n", rtd->pmdown_time);
97 }
98 
99 static ssize_t pmdown_time_set(struct device *dev,
100 			       struct device_attribute *attr,
101 			       const char *buf, size_t count)
102 {
103 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
104 	int ret;
105 
106 	ret = kstrtol(buf, 10, &rtd->pmdown_time);
107 	if (ret)
108 		return ret;
109 
110 	return count;
111 }
112 
113 static DEVICE_ATTR(pmdown_time, 0644, pmdown_time_show, pmdown_time_set);
114 
115 static struct attribute *soc_dev_attrs[] = {
116 	&dev_attr_pmdown_time.attr,
117 	NULL
118 };
119 
120 static umode_t soc_dev_attr_is_visible(struct kobject *kobj,
121 				       struct attribute *attr, int idx)
122 {
123 	struct device *dev = kobj_to_dev(kobj);
124 	struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
125 
126 	if (attr == &dev_attr_pmdown_time.attr)
127 		return attr->mode; /* always visible */
128 	return rtd->num_codecs ? attr->mode : 0; /* enabled only with codec */
129 }
130 
131 static const struct attribute_group soc_dapm_dev_group = {
132 	.attrs = soc_dapm_dev_attrs,
133 	.is_visible = soc_dev_attr_is_visible,
134 };
135 
136 static const struct attribute_group soc_dev_group = {
137 	.attrs = soc_dev_attrs,
138 	.is_visible = soc_dev_attr_is_visible,
139 };
140 
141 static const struct attribute_group *soc_dev_attr_groups[] = {
142 	&soc_dapm_dev_group,
143 	&soc_dev_group,
144 	NULL
145 };
146 
147 #ifdef CONFIG_DEBUG_FS
148 static void soc_init_component_debugfs(struct snd_soc_component *component)
149 {
150 	if (!component->card->debugfs_card_root)
151 		return;
152 
153 	if (component->debugfs_prefix) {
154 		char *name;
155 
156 		name = kasprintf(GFP_KERNEL, "%s:%s",
157 			component->debugfs_prefix, component->name);
158 		if (name) {
159 			component->debugfs_root = debugfs_create_dir(name,
160 				component->card->debugfs_card_root);
161 			kfree(name);
162 		}
163 	} else {
164 		component->debugfs_root = debugfs_create_dir(component->name,
165 				component->card->debugfs_card_root);
166 	}
167 
168 	if (IS_ERR(component->debugfs_root)) {
169 		dev_warn(component->dev,
170 			"ASoC: Failed to create component debugfs directory: %ld\n",
171 			PTR_ERR(component->debugfs_root));
172 		return;
173 	}
174 
175 	snd_soc_dapm_debugfs_init(snd_soc_component_get_dapm(component),
176 		component->debugfs_root);
177 }
178 
179 static void soc_cleanup_component_debugfs(struct snd_soc_component *component)
180 {
181 	debugfs_remove_recursive(component->debugfs_root);
182 }
183 
184 static int dai_list_show(struct seq_file *m, void *v)
185 {
186 	struct snd_soc_component *component;
187 	struct snd_soc_dai *dai;
188 
189 	mutex_lock(&client_mutex);
190 
191 	for_each_component(component)
192 		for_each_component_dais(component, dai)
193 			seq_printf(m, "%s\n", dai->name);
194 
195 	mutex_unlock(&client_mutex);
196 
197 	return 0;
198 }
199 DEFINE_SHOW_ATTRIBUTE(dai_list);
200 
201 static int component_list_show(struct seq_file *m, void *v)
202 {
203 	struct snd_soc_component *component;
204 
205 	mutex_lock(&client_mutex);
206 
207 	for_each_component(component)
208 		seq_printf(m, "%s\n", component->name);
209 
210 	mutex_unlock(&client_mutex);
211 
212 	return 0;
213 }
214 DEFINE_SHOW_ATTRIBUTE(component_list);
215 
216 static void soc_init_card_debugfs(struct snd_soc_card *card)
217 {
218 	if (!snd_soc_debugfs_root)
219 		return;
220 
221 	card->debugfs_card_root = debugfs_create_dir(card->name,
222 						     snd_soc_debugfs_root);
223 	if (IS_ERR(card->debugfs_card_root)) {
224 		dev_warn(card->dev,
225 			 "ASoC: Failed to create card debugfs directory: %ld\n",
226 			 PTR_ERR(card->debugfs_card_root));
227 		card->debugfs_card_root = NULL;
228 		return;
229 	}
230 
231 	card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644,
232 						    card->debugfs_card_root,
233 						    &card->pop_time);
234 	if (IS_ERR(card->debugfs_pop_time))
235 		dev_warn(card->dev,
236 			 "ASoC: Failed to create pop time debugfs file: %ld\n",
237 			 PTR_ERR(card->debugfs_pop_time));
238 }
239 
240 static void soc_cleanup_card_debugfs(struct snd_soc_card *card)
241 {
242 	if (!card->debugfs_card_root)
243 		return;
244 	debugfs_remove_recursive(card->debugfs_card_root);
245 	card->debugfs_card_root = NULL;
246 }
247 
248 static void snd_soc_debugfs_init(void)
249 {
250 	snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL);
251 	if (IS_ERR_OR_NULL(snd_soc_debugfs_root)) {
252 		pr_warn("ASoC: Failed to create debugfs directory\n");
253 		snd_soc_debugfs_root = NULL;
254 		return;
255 	}
256 
257 	if (!debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL,
258 				 &dai_list_fops))
259 		pr_warn("ASoC: Failed to create DAI list debugfs file\n");
260 
261 	if (!debugfs_create_file("components", 0444, snd_soc_debugfs_root, NULL,
262 				 &component_list_fops))
263 		pr_warn("ASoC: Failed to create component list debugfs file\n");
264 }
265 
266 static void snd_soc_debugfs_exit(void)
267 {
268 	debugfs_remove_recursive(snd_soc_debugfs_root);
269 }
270 
271 #else
272 
273 static inline void soc_init_component_debugfs(
274 	struct snd_soc_component *component)
275 {
276 }
277 
278 static inline void soc_cleanup_component_debugfs(
279 	struct snd_soc_component *component)
280 {
281 }
282 
283 static inline void soc_init_card_debugfs(struct snd_soc_card *card)
284 {
285 }
286 
287 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card)
288 {
289 }
290 
291 static inline void snd_soc_debugfs_init(void)
292 {
293 }
294 
295 static inline void snd_soc_debugfs_exit(void)
296 {
297 }
298 
299 #endif
300 
301 static int snd_soc_rtdcom_add(struct snd_soc_pcm_runtime *rtd,
302 			      struct snd_soc_component *component)
303 {
304 	struct snd_soc_rtdcom_list *rtdcom;
305 	struct snd_soc_rtdcom_list *new_rtdcom;
306 
307 	for_each_rtdcom(rtd, rtdcom) {
308 		/* already connected */
309 		if (rtdcom->component == component)
310 			return 0;
311 	}
312 
313 	new_rtdcom = kmalloc(sizeof(*new_rtdcom), GFP_KERNEL);
314 	if (!new_rtdcom)
315 		return -ENOMEM;
316 
317 	new_rtdcom->component = component;
318 	INIT_LIST_HEAD(&new_rtdcom->list);
319 
320 	list_add_tail(&new_rtdcom->list, &rtd->component_list);
321 
322 	return 0;
323 }
324 
325 static void snd_soc_rtdcom_del_all(struct snd_soc_pcm_runtime *rtd)
326 {
327 	struct snd_soc_rtdcom_list *rtdcom1, *rtdcom2;
328 
329 	for_each_rtdcom_safe(rtd, rtdcom1, rtdcom2)
330 		kfree(rtdcom1);
331 
332 	INIT_LIST_HEAD(&rtd->component_list);
333 }
334 
335 struct snd_soc_component *snd_soc_rtdcom_lookup(struct snd_soc_pcm_runtime *rtd,
336 						const char *driver_name)
337 {
338 	struct snd_soc_rtdcom_list *rtdcom;
339 
340 	if (!driver_name)
341 		return NULL;
342 
343 	for_each_rtdcom(rtd, rtdcom) {
344 		const char *component_name = rtdcom->component->driver->name;
345 
346 		if (!component_name)
347 			continue;
348 
349 		if ((component_name == driver_name) ||
350 		    strcmp(component_name, driver_name) == 0)
351 			return rtdcom->component;
352 	}
353 
354 	return NULL;
355 }
356 EXPORT_SYMBOL_GPL(snd_soc_rtdcom_lookup);
357 
358 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
359 		const char *dai_link, int stream)
360 {
361 	struct snd_soc_pcm_runtime *rtd;
362 
363 	for_each_card_rtds(card, rtd) {
364 		if (rtd->dai_link->no_pcm &&
365 			!strcmp(rtd->dai_link->name, dai_link))
366 			return rtd->pcm->streams[stream].substream;
367 	}
368 	dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link);
369 	return NULL;
370 }
371 EXPORT_SYMBOL_GPL(snd_soc_get_dai_substream);
372 
373 static const struct snd_soc_ops null_snd_soc_ops;
374 
375 static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
376 	struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
377 {
378 	struct snd_soc_pcm_runtime *rtd;
379 
380 	rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL);
381 	if (!rtd)
382 		return NULL;
383 
384 	INIT_LIST_HEAD(&rtd->component_list);
385 	rtd->card = card;
386 	rtd->dai_link = dai_link;
387 	if (!rtd->dai_link->ops)
388 		rtd->dai_link->ops = &null_snd_soc_ops;
389 
390 	rtd->codec_dais = kcalloc(dai_link->num_codecs,
391 					sizeof(struct snd_soc_dai *),
392 					GFP_KERNEL);
393 	if (!rtd->codec_dais) {
394 		kfree(rtd);
395 		return NULL;
396 	}
397 
398 	return rtd;
399 }
400 
401 static void soc_free_pcm_runtime(struct snd_soc_pcm_runtime *rtd)
402 {
403 	kfree(rtd->codec_dais);
404 	snd_soc_rtdcom_del_all(rtd);
405 	kfree(rtd);
406 }
407 
408 static void soc_add_pcm_runtime(struct snd_soc_card *card,
409 		struct snd_soc_pcm_runtime *rtd)
410 {
411 	list_add_tail(&rtd->list, &card->rtd_list);
412 	rtd->num = card->num_rtd;
413 	card->num_rtd++;
414 }
415 
416 static void soc_remove_pcm_runtimes(struct snd_soc_card *card)
417 {
418 	struct snd_soc_pcm_runtime *rtd, *_rtd;
419 
420 	for_each_card_rtds_safe(card, rtd, _rtd) {
421 		list_del(&rtd->list);
422 		soc_free_pcm_runtime(rtd);
423 	}
424 
425 	card->num_rtd = 0;
426 }
427 
428 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
429 		const char *dai_link)
430 {
431 	struct snd_soc_pcm_runtime *rtd;
432 
433 	for_each_card_rtds(card, rtd) {
434 		if (!strcmp(rtd->dai_link->name, dai_link))
435 			return rtd;
436 	}
437 	dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link);
438 	return NULL;
439 }
440 EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime);
441 
442 static void snd_soc_flush_all_delayed_work(struct snd_soc_card *card)
443 {
444 	struct snd_soc_pcm_runtime *rtd;
445 
446 	for_each_card_rtds(card, rtd)
447 		flush_delayed_work(&rtd->delayed_work);
448 }
449 
450 static void codec2codec_close_delayed_work(struct work_struct *work)
451 {
452 	/*
453 	 * Currently nothing to do for c2c links
454 	 * Since c2c links are internal nodes in the DAPM graph and
455 	 * don't interface with the outside world or application layer
456 	 * we don't have to do any special handling on close.
457 	 */
458 }
459 
460 #ifdef CONFIG_PM_SLEEP
461 /* powers down audio subsystem for suspend */
462 int snd_soc_suspend(struct device *dev)
463 {
464 	struct snd_soc_card *card = dev_get_drvdata(dev);
465 	struct snd_soc_component *component;
466 	struct snd_soc_pcm_runtime *rtd;
467 	int i;
468 
469 	/* If the card is not initialized yet there is nothing to do */
470 	if (!card->instantiated)
471 		return 0;
472 
473 	/*
474 	 * Due to the resume being scheduled into a workqueue we could
475 	 * suspend before that's finished - wait for it to complete.
476 	 */
477 	snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0);
478 
479 	/* we're going to block userspace touching us until resume completes */
480 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot);
481 
482 	/* mute any active DACs */
483 	for_each_card_rtds(card, rtd) {
484 		struct snd_soc_dai *dai;
485 
486 		if (rtd->dai_link->ignore_suspend)
487 			continue;
488 
489 		for_each_rtd_codec_dai(rtd, i, dai) {
490 			struct snd_soc_dai_driver *drv = dai->driver;
491 
492 			if (drv->ops->digital_mute && dai->playback_active)
493 				drv->ops->digital_mute(dai, 1);
494 		}
495 	}
496 
497 	/* suspend all pcms */
498 	for_each_card_rtds(card, rtd) {
499 		if (rtd->dai_link->ignore_suspend)
500 			continue;
501 
502 		snd_pcm_suspend_all(rtd->pcm);
503 	}
504 
505 	if (card->suspend_pre)
506 		card->suspend_pre(card);
507 
508 	for_each_card_rtds(card, rtd) {
509 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
510 
511 		if (rtd->dai_link->ignore_suspend)
512 			continue;
513 
514 		if (cpu_dai->driver->suspend && !cpu_dai->driver->bus_control)
515 			cpu_dai->driver->suspend(cpu_dai);
516 	}
517 
518 	/* close any waiting streams */
519 	snd_soc_flush_all_delayed_work(card);
520 
521 	for_each_card_rtds(card, rtd) {
522 
523 		if (rtd->dai_link->ignore_suspend)
524 			continue;
525 
526 		snd_soc_dapm_stream_event(rtd,
527 					  SNDRV_PCM_STREAM_PLAYBACK,
528 					  SND_SOC_DAPM_STREAM_SUSPEND);
529 
530 		snd_soc_dapm_stream_event(rtd,
531 					  SNDRV_PCM_STREAM_CAPTURE,
532 					  SND_SOC_DAPM_STREAM_SUSPEND);
533 	}
534 
535 	/* Recheck all endpoints too, their state is affected by suspend */
536 	dapm_mark_endpoints_dirty(card);
537 	snd_soc_dapm_sync(&card->dapm);
538 
539 	/* suspend all COMPONENTs */
540 	for_each_card_components(card, component) {
541 		struct snd_soc_dapm_context *dapm =
542 				snd_soc_component_get_dapm(component);
543 
544 		/*
545 		 * If there are paths active then the COMPONENT will be held
546 		 * with bias _ON and should not be suspended.
547 		 */
548 		if (!component->suspended) {
549 			switch (snd_soc_dapm_get_bias_level(dapm)) {
550 			case SND_SOC_BIAS_STANDBY:
551 				/*
552 				 * If the COMPONENT is capable of idle
553 				 * bias off then being in STANDBY
554 				 * means it's doing something,
555 				 * otherwise fall through.
556 				 */
557 				if (dapm->idle_bias_off) {
558 					dev_dbg(component->dev,
559 						"ASoC: idle_bias_off CODEC on over suspend\n");
560 					break;
561 				}
562 				/* fall through */
563 
564 			case SND_SOC_BIAS_OFF:
565 				if (component->driver->suspend)
566 					component->driver->suspend(component);
567 				component->suspended = 1;
568 				if (component->regmap)
569 					regcache_mark_dirty(component->regmap);
570 				/* deactivate pins to sleep state */
571 				pinctrl_pm_select_sleep_state(component->dev);
572 				break;
573 			default:
574 				dev_dbg(component->dev,
575 					"ASoC: COMPONENT is on over suspend\n");
576 				break;
577 			}
578 		}
579 	}
580 
581 	for_each_card_rtds(card, rtd) {
582 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
583 
584 		if (rtd->dai_link->ignore_suspend)
585 			continue;
586 
587 		if (cpu_dai->driver->suspend && cpu_dai->driver->bus_control)
588 			cpu_dai->driver->suspend(cpu_dai);
589 
590 		/* deactivate pins to sleep state */
591 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
592 	}
593 
594 	if (card->suspend_post)
595 		card->suspend_post(card);
596 
597 	return 0;
598 }
599 EXPORT_SYMBOL_GPL(snd_soc_suspend);
600 
601 /*
602  * deferred resume work, so resume can complete before we finished
603  * setting our codec back up, which can be very slow on I2C
604  */
605 static void soc_resume_deferred(struct work_struct *work)
606 {
607 	struct snd_soc_card *card =
608 			container_of(work, struct snd_soc_card,
609 				     deferred_resume_work);
610 	struct snd_soc_pcm_runtime *rtd;
611 	struct snd_soc_component *component;
612 	int i;
613 
614 	/*
615 	 * our power state is still SNDRV_CTL_POWER_D3hot from suspend time,
616 	 * so userspace apps are blocked from touching us
617 	 */
618 
619 	dev_dbg(card->dev, "ASoC: starting resume work\n");
620 
621 	/* Bring us up into D2 so that DAPM starts enabling things */
622 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2);
623 
624 	if (card->resume_pre)
625 		card->resume_pre(card);
626 
627 	/* resume control bus DAIs */
628 	for_each_card_rtds(card, rtd) {
629 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
630 
631 		if (rtd->dai_link->ignore_suspend)
632 			continue;
633 
634 		if (cpu_dai->driver->resume && cpu_dai->driver->bus_control)
635 			cpu_dai->driver->resume(cpu_dai);
636 	}
637 
638 	for_each_card_components(card, component) {
639 		if (component->suspended) {
640 			if (component->driver->resume)
641 				component->driver->resume(component);
642 			component->suspended = 0;
643 		}
644 	}
645 
646 	for_each_card_rtds(card, rtd) {
647 
648 		if (rtd->dai_link->ignore_suspend)
649 			continue;
650 
651 		snd_soc_dapm_stream_event(rtd,
652 					  SNDRV_PCM_STREAM_PLAYBACK,
653 					  SND_SOC_DAPM_STREAM_RESUME);
654 
655 		snd_soc_dapm_stream_event(rtd,
656 					  SNDRV_PCM_STREAM_CAPTURE,
657 					  SND_SOC_DAPM_STREAM_RESUME);
658 	}
659 
660 	/* unmute any active DACs */
661 	for_each_card_rtds(card, rtd) {
662 		struct snd_soc_dai *dai;
663 
664 		if (rtd->dai_link->ignore_suspend)
665 			continue;
666 
667 		for_each_rtd_codec_dai(rtd, i, dai) {
668 			struct snd_soc_dai_driver *drv = dai->driver;
669 
670 			if (drv->ops->digital_mute && dai->playback_active)
671 				drv->ops->digital_mute(dai, 0);
672 		}
673 	}
674 
675 	for_each_card_rtds(card, rtd) {
676 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
677 
678 		if (rtd->dai_link->ignore_suspend)
679 			continue;
680 
681 		if (cpu_dai->driver->resume && !cpu_dai->driver->bus_control)
682 			cpu_dai->driver->resume(cpu_dai);
683 	}
684 
685 	if (card->resume_post)
686 		card->resume_post(card);
687 
688 	dev_dbg(card->dev, "ASoC: resume work completed\n");
689 
690 	/* Recheck all endpoints too, their state is affected by suspend */
691 	dapm_mark_endpoints_dirty(card);
692 	snd_soc_dapm_sync(&card->dapm);
693 
694 	/* userspace can access us now we are back as we were before */
695 	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0);
696 }
697 
698 /* powers up audio subsystem after a suspend */
699 int snd_soc_resume(struct device *dev)
700 {
701 	struct snd_soc_card *card = dev_get_drvdata(dev);
702 	bool bus_control = false;
703 	struct snd_soc_pcm_runtime *rtd;
704 	struct snd_soc_dai *codec_dai;
705 	int i;
706 
707 	/* If the card is not initialized yet there is nothing to do */
708 	if (!card->instantiated)
709 		return 0;
710 
711 	/* activate pins from sleep state */
712 	for_each_card_rtds(card, rtd) {
713 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
714 
715 		if (cpu_dai->active)
716 			pinctrl_pm_select_default_state(cpu_dai->dev);
717 
718 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
719 			if (codec_dai->active)
720 				pinctrl_pm_select_default_state(codec_dai->dev);
721 		}
722 	}
723 
724 	/*
725 	 * DAIs that also act as the control bus master might have other drivers
726 	 * hanging off them so need to resume immediately. Other drivers don't
727 	 * have that problem and may take a substantial amount of time to resume
728 	 * due to I/O costs and anti-pop so handle them out of line.
729 	 */
730 	for_each_card_rtds(card, rtd) {
731 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
732 
733 		bus_control |= cpu_dai->driver->bus_control;
734 	}
735 	if (bus_control) {
736 		dev_dbg(dev, "ASoC: Resuming control bus master immediately\n");
737 		soc_resume_deferred(&card->deferred_resume_work);
738 	} else {
739 		dev_dbg(dev, "ASoC: Scheduling resume work\n");
740 		if (!schedule_work(&card->deferred_resume_work))
741 			dev_err(dev, "ASoC: resume work item may be lost\n");
742 	}
743 
744 	return 0;
745 }
746 EXPORT_SYMBOL_GPL(snd_soc_resume);
747 #else
748 #define snd_soc_suspend NULL
749 #define snd_soc_resume NULL
750 #endif
751 
752 static const struct snd_soc_dai_ops null_dai_ops = {
753 };
754 
755 static struct device_node
756 *soc_component_to_node(struct snd_soc_component *component)
757 {
758 	struct device_node *of_node;
759 
760 	of_node = component->dev->of_node;
761 	if (!of_node && component->dev->parent)
762 		of_node = component->dev->parent->of_node;
763 
764 	return of_node;
765 }
766 
767 static int snd_soc_is_matching_component(
768 	const struct snd_soc_dai_link_component *dlc,
769 	struct snd_soc_component *component)
770 {
771 	struct device_node *component_of_node;
772 
773 	if (!dlc)
774 		return 0;
775 
776 	component_of_node = soc_component_to_node(component);
777 
778 	if (dlc->of_node && component_of_node != dlc->of_node)
779 		return 0;
780 	if (dlc->name && strcmp(component->name, dlc->name))
781 		return 0;
782 
783 	return 1;
784 }
785 
786 static struct snd_soc_component *soc_find_component(
787 	const struct snd_soc_dai_link_component *dlc)
788 {
789 	struct snd_soc_component *component;
790 
791 	lockdep_assert_held(&client_mutex);
792 
793 	/*
794 	 * NOTE
795 	 *
796 	 * It returns *1st* found component, but some driver
797 	 * has few components by same of_node/name
798 	 * ex)
799 	 *	CPU component and generic DMAEngine component
800 	 */
801 	for_each_component(component)
802 		if (snd_soc_is_matching_component(dlc, component))
803 			return component;
804 
805 	return NULL;
806 }
807 
808 /**
809  * snd_soc_find_dai - Find a registered DAI
810  *
811  * @dlc: name of the DAI or the DAI driver and optional component info to match
812  *
813  * This function will search all registered components and their DAIs to
814  * find the DAI of the same name. The component's of_node and name
815  * should also match if being specified.
816  *
817  * Return: pointer of DAI, or NULL if not found.
818  */
819 struct snd_soc_dai *snd_soc_find_dai(
820 	const struct snd_soc_dai_link_component *dlc)
821 {
822 	struct snd_soc_component *component;
823 	struct snd_soc_dai *dai;
824 
825 	lockdep_assert_held(&client_mutex);
826 
827 	/* Find CPU DAI from registered DAIs */
828 	for_each_component(component) {
829 		if (!snd_soc_is_matching_component(dlc, component))
830 			continue;
831 		for_each_component_dais(component, dai) {
832 			if (dlc->dai_name && strcmp(dai->name, dlc->dai_name)
833 			    && (!dai->driver->name
834 				|| strcmp(dai->driver->name, dlc->dai_name)))
835 				continue;
836 
837 			return dai;
838 		}
839 	}
840 
841 	return NULL;
842 }
843 EXPORT_SYMBOL_GPL(snd_soc_find_dai);
844 
845 /**
846  * snd_soc_find_dai_link - Find a DAI link
847  *
848  * @card: soc card
849  * @id: DAI link ID to match
850  * @name: DAI link name to match, optional
851  * @stream_name: DAI link stream name to match, optional
852  *
853  * This function will search all existing DAI links of the soc card to
854  * find the link of the same ID. Since DAI links may not have their
855  * unique ID, so name and stream name should also match if being
856  * specified.
857  *
858  * Return: pointer of DAI link, or NULL if not found.
859  */
860 struct snd_soc_dai_link *snd_soc_find_dai_link(struct snd_soc_card *card,
861 					       int id, const char *name,
862 					       const char *stream_name)
863 {
864 	struct snd_soc_dai_link *link, *_link;
865 
866 	lockdep_assert_held(&client_mutex);
867 
868 	for_each_card_links_safe(card, link, _link) {
869 		if (link->id != id)
870 			continue;
871 
872 		if (name && (!link->name || strcmp(name, link->name)))
873 			continue;
874 
875 		if (stream_name && (!link->stream_name
876 			|| strcmp(stream_name, link->stream_name)))
877 			continue;
878 
879 		return link;
880 	}
881 
882 	return NULL;
883 }
884 EXPORT_SYMBOL_GPL(snd_soc_find_dai_link);
885 
886 static bool soc_is_dai_link_bound(struct snd_soc_card *card,
887 		struct snd_soc_dai_link *dai_link)
888 {
889 	struct snd_soc_pcm_runtime *rtd;
890 
891 	for_each_card_rtds(card, rtd) {
892 		if (rtd->dai_link == dai_link)
893 			return true;
894 	}
895 
896 	return false;
897 }
898 
899 static int soc_bind_dai_link(struct snd_soc_card *card,
900 	struct snd_soc_dai_link *dai_link)
901 {
902 	struct snd_soc_pcm_runtime *rtd;
903 	struct snd_soc_dai_link_component *codec, *platform;
904 	struct snd_soc_component *component;
905 	int i;
906 
907 	if (dai_link->ignore)
908 		return 0;
909 
910 	dev_dbg(card->dev, "ASoC: binding %s\n", dai_link->name);
911 
912 	if (soc_is_dai_link_bound(card, dai_link)) {
913 		dev_dbg(card->dev, "ASoC: dai link %s already bound\n",
914 			dai_link->name);
915 		return 0;
916 	}
917 
918 	rtd = soc_new_pcm_runtime(card, dai_link);
919 	if (!rtd)
920 		return -ENOMEM;
921 
922 	/* FIXME: we need multi CPU support in the future */
923 	rtd->cpu_dai = snd_soc_find_dai(dai_link->cpus);
924 	if (!rtd->cpu_dai) {
925 		dev_info(card->dev, "ASoC: CPU DAI %s not registered\n",
926 			 dai_link->cpus->dai_name);
927 		goto _err_defer;
928 	}
929 	snd_soc_rtdcom_add(rtd, rtd->cpu_dai->component);
930 
931 	/* Find CODEC from registered CODECs */
932 	rtd->num_codecs = dai_link->num_codecs;
933 	for_each_link_codecs(dai_link, i, codec) {
934 		rtd->codec_dais[i] = snd_soc_find_dai(codec);
935 		if (!rtd->codec_dais[i]) {
936 			dev_info(card->dev, "ASoC: CODEC DAI %s not registered\n",
937 				 codec->dai_name);
938 			goto _err_defer;
939 		}
940 
941 		snd_soc_rtdcom_add(rtd, rtd->codec_dais[i]->component);
942 	}
943 
944 	/* Single codec links expect codec and codec_dai in runtime data */
945 	rtd->codec_dai = rtd->codec_dais[0];
946 
947 	/* Find PLATFORM from registered PLATFORMs */
948 	for_each_link_platforms(dai_link, i, platform) {
949 		for_each_component(component) {
950 			if (!snd_soc_is_matching_component(platform, component))
951 				continue;
952 
953 			snd_soc_rtdcom_add(rtd, component);
954 		}
955 	}
956 
957 	soc_add_pcm_runtime(card, rtd);
958 	return 0;
959 
960 _err_defer:
961 	soc_free_pcm_runtime(rtd);
962 	return -EPROBE_DEFER;
963 }
964 
965 static void soc_cleanup_component(struct snd_soc_component *component)
966 {
967 	snd_soc_component_set_jack(component, NULL, NULL);
968 	list_del(&component->card_list);
969 	snd_soc_dapm_free(snd_soc_component_get_dapm(component));
970 	soc_cleanup_component_debugfs(component);
971 	component->card = NULL;
972 	if (!component->driver->module_get_upon_open)
973 		module_put(component->dev->driver->owner);
974 }
975 
976 static void soc_remove_component(struct snd_soc_component *component)
977 {
978 	if (!component->card)
979 		return;
980 
981 	if (component->driver->remove)
982 		component->driver->remove(component);
983 
984 	soc_cleanup_component(component);
985 }
986 
987 static void soc_remove_dai(struct snd_soc_dai *dai, int order)
988 {
989 	int err;
990 
991 	if (!dai || !dai->probed || !dai->driver ||
992 	    dai->driver->remove_order != order)
993 		return;
994 
995 	if (dai->driver->remove) {
996 		err = dai->driver->remove(dai);
997 		if (err < 0)
998 			dev_err(dai->dev,
999 				"ASoC: failed to remove %s: %d\n",
1000 				dai->name, err);
1001 	}
1002 	dai->probed = 0;
1003 }
1004 
1005 static void soc_remove_link_dais(struct snd_soc_card *card,
1006 		struct snd_soc_pcm_runtime *rtd, int order)
1007 {
1008 	int i;
1009 	struct snd_soc_dai *codec_dai;
1010 
1011 	/* unregister the rtd device */
1012 	if (rtd->dev_registered) {
1013 		device_unregister(rtd->dev);
1014 		rtd->dev_registered = 0;
1015 	}
1016 
1017 	/* remove the CODEC DAI */
1018 	for_each_rtd_codec_dai(rtd, i, codec_dai)
1019 		soc_remove_dai(codec_dai, order);
1020 
1021 	soc_remove_dai(rtd->cpu_dai, order);
1022 }
1023 
1024 static void soc_remove_link_components(struct snd_soc_card *card,
1025 	struct snd_soc_pcm_runtime *rtd, int order)
1026 {
1027 	struct snd_soc_component *component;
1028 	struct snd_soc_rtdcom_list *rtdcom;
1029 
1030 	for_each_rtdcom(rtd, rtdcom) {
1031 		component = rtdcom->component;
1032 
1033 		if (component->driver->remove_order == order)
1034 			soc_remove_component(component);
1035 	}
1036 }
1037 
1038 static void soc_remove_dai_links(struct snd_soc_card *card)
1039 {
1040 	int order;
1041 	struct snd_soc_pcm_runtime *rtd;
1042 	struct snd_soc_dai_link *link, *_link;
1043 
1044 	for_each_comp_order(order) {
1045 		for_each_card_rtds(card, rtd)
1046 			soc_remove_link_dais(card, rtd, order);
1047 	}
1048 
1049 	for_each_comp_order(order) {
1050 		for_each_card_rtds(card, rtd)
1051 			soc_remove_link_components(card, rtd, order);
1052 	}
1053 
1054 	for_each_card_links_safe(card, link, _link) {
1055 		if (link->dobj.type == SND_SOC_DOBJ_DAI_LINK)
1056 			dev_warn(card->dev, "Topology forgot to remove link %s?\n",
1057 				link->name);
1058 
1059 		list_del(&link->list);
1060 	}
1061 }
1062 
1063 static int soc_init_dai_link(struct snd_soc_card *card,
1064 			     struct snd_soc_dai_link *link)
1065 {
1066 	int i;
1067 	struct snd_soc_dai_link_component *codec, *platform;
1068 
1069 	for_each_link_codecs(link, i, codec) {
1070 		/*
1071 		 * Codec must be specified by 1 of name or OF node,
1072 		 * not both or neither.
1073 		 */
1074 		if (!!codec->name == !!codec->of_node) {
1075 			dev_err(card->dev, "ASoC: Neither/both codec name/of_node are set for %s\n",
1076 				link->name);
1077 			return -EINVAL;
1078 		}
1079 
1080 		/* Codec DAI name must be specified */
1081 		if (!codec->dai_name) {
1082 			dev_err(card->dev, "ASoC: codec_dai_name not set for %s\n",
1083 				link->name);
1084 			return -EINVAL;
1085 		}
1086 
1087 		/*
1088 		 * Defer card registration if codec component is not added to
1089 		 * component list.
1090 		 */
1091 		if (!soc_find_component(codec))
1092 			return -EPROBE_DEFER;
1093 	}
1094 
1095 	for_each_link_platforms(link, i, platform) {
1096 		/*
1097 		 * Platform may be specified by either name or OF node, but it
1098 		 * can be left unspecified, then no components will be inserted
1099 		 * in the rtdcom list
1100 		 */
1101 		if (!!platform->name == !!platform->of_node) {
1102 			dev_err(card->dev,
1103 				"ASoC: Neither/both platform name/of_node are set for %s\n",
1104 				link->name);
1105 			return -EINVAL;
1106 		}
1107 
1108 		/*
1109 		 * Defer card registration if platform component is not added to
1110 		 * component list.
1111 		 */
1112 		if (!soc_find_component(platform))
1113 			return -EPROBE_DEFER;
1114 	}
1115 
1116 	/* FIXME */
1117 	if (link->num_cpus > 1) {
1118 		dev_err(card->dev,
1119 			"ASoC: multi cpu is not yet supported %s\n",
1120 			link->name);
1121 		return -EINVAL;
1122 	}
1123 
1124 	/*
1125 	 * CPU device may be specified by either name or OF node, but
1126 	 * can be left unspecified, and will be matched based on DAI
1127 	 * name alone..
1128 	 */
1129 	if (link->cpus->name && link->cpus->of_node) {
1130 		dev_err(card->dev,
1131 			"ASoC: Neither/both cpu name/of_node are set for %s\n",
1132 			link->name);
1133 		return -EINVAL;
1134 	}
1135 
1136 	/*
1137 	 * Defer card registartion if cpu dai component is not added to
1138 	 * component list.
1139 	 */
1140 	if ((link->cpus->of_node || link->cpus->name) &&
1141 	    !soc_find_component(link->cpus))
1142 		return -EPROBE_DEFER;
1143 
1144 	/*
1145 	 * At least one of CPU DAI name or CPU device name/node must be
1146 	 * specified
1147 	 */
1148 	if (!link->cpus->dai_name &&
1149 	    !(link->cpus->name || link->cpus->of_node)) {
1150 		dev_err(card->dev,
1151 			"ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n",
1152 			link->name);
1153 		return -EINVAL;
1154 	}
1155 
1156 	return 0;
1157 }
1158 
1159 void snd_soc_disconnect_sync(struct device *dev)
1160 {
1161 	struct snd_soc_component *component =
1162 			snd_soc_lookup_component(dev, NULL);
1163 
1164 	if (!component || !component->card)
1165 		return;
1166 
1167 	snd_card_disconnect_sync(component->card->snd_card);
1168 }
1169 EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync);
1170 
1171 /**
1172  * snd_soc_add_dai_link - Add a DAI link dynamically
1173  * @card: The ASoC card to which the DAI link is added
1174  * @dai_link: The new DAI link to add
1175  *
1176  * This function adds a DAI link to the ASoC card's link list.
1177  *
1178  * Note: Topology can use this API to add DAI links when probing the
1179  * topology component. And machine drivers can still define static
1180  * DAI links in dai_link array.
1181  */
1182 int snd_soc_add_dai_link(struct snd_soc_card *card,
1183 		struct snd_soc_dai_link *dai_link)
1184 {
1185 	if (dai_link->dobj.type
1186 	    && dai_link->dobj.type != SND_SOC_DOBJ_DAI_LINK) {
1187 		dev_err(card->dev, "Invalid dai link type %d\n",
1188 			dai_link->dobj.type);
1189 		return -EINVAL;
1190 	}
1191 
1192 	lockdep_assert_held(&client_mutex);
1193 	/*
1194 	 * Notify the machine driver for extra initialization
1195 	 * on the link created by topology.
1196 	 */
1197 	if (dai_link->dobj.type && card->add_dai_link)
1198 		card->add_dai_link(card, dai_link);
1199 
1200 	list_add_tail(&dai_link->list, &card->dai_link_list);
1201 
1202 	return 0;
1203 }
1204 EXPORT_SYMBOL_GPL(snd_soc_add_dai_link);
1205 
1206 /**
1207  * snd_soc_remove_dai_link - Remove a DAI link from the list
1208  * @card: The ASoC card that owns the link
1209  * @dai_link: The DAI link to remove
1210  *
1211  * This function removes a DAI link from the ASoC card's link list.
1212  *
1213  * For DAI links previously added by topology, topology should
1214  * remove them by using the dobj embedded in the link.
1215  */
1216 void snd_soc_remove_dai_link(struct snd_soc_card *card,
1217 			     struct snd_soc_dai_link *dai_link)
1218 {
1219 	struct snd_soc_dai_link *link, *_link;
1220 
1221 	if (dai_link->dobj.type
1222 	    && dai_link->dobj.type != SND_SOC_DOBJ_DAI_LINK) {
1223 		dev_err(card->dev, "Invalid dai link type %d\n",
1224 			dai_link->dobj.type);
1225 		return;
1226 	}
1227 
1228 	lockdep_assert_held(&client_mutex);
1229 	/*
1230 	 * Notify the machine driver for extra destruction
1231 	 * on the link created by topology.
1232 	 */
1233 	if (dai_link->dobj.type && card->remove_dai_link)
1234 		card->remove_dai_link(card, dai_link);
1235 
1236 	for_each_card_links_safe(card, link, _link) {
1237 		if (link == dai_link) {
1238 			list_del(&link->list);
1239 			return;
1240 		}
1241 	}
1242 }
1243 EXPORT_SYMBOL_GPL(snd_soc_remove_dai_link);
1244 
1245 static void soc_set_of_name_prefix(struct snd_soc_component *component)
1246 {
1247 	struct device_node *component_of_node = soc_component_to_node(component);
1248 	const char *str;
1249 	int ret;
1250 
1251 	ret = of_property_read_string(component_of_node, "sound-name-prefix",
1252 				      &str);
1253 	if (!ret)
1254 		component->name_prefix = str;
1255 }
1256 
1257 static void soc_set_name_prefix(struct snd_soc_card *card,
1258 				struct snd_soc_component *component)
1259 {
1260 	int i;
1261 
1262 	for (i = 0; i < card->num_configs && card->codec_conf; i++) {
1263 		struct snd_soc_codec_conf *map = &card->codec_conf[i];
1264 		struct device_node *component_of_node = soc_component_to_node(component);
1265 
1266 		if (map->of_node && component_of_node != map->of_node)
1267 			continue;
1268 		if (map->dev_name && strcmp(component->name, map->dev_name))
1269 			continue;
1270 		component->name_prefix = map->name_prefix;
1271 		return;
1272 	}
1273 
1274 	/*
1275 	 * If there is no configuration table or no match in the table,
1276 	 * check if a prefix is provided in the node
1277 	 */
1278 	soc_set_of_name_prefix(component);
1279 }
1280 
1281 static int soc_probe_component(struct snd_soc_card *card,
1282 	struct snd_soc_component *component)
1283 {
1284 	struct snd_soc_dapm_context *dapm =
1285 			snd_soc_component_get_dapm(component);
1286 	struct snd_soc_dai *dai;
1287 	int ret;
1288 
1289 	if (!strcmp(component->name, "snd-soc-dummy"))
1290 		return 0;
1291 
1292 	if (component->card) {
1293 		if (component->card != card) {
1294 			dev_err(component->dev,
1295 				"Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n",
1296 				card->name, component->card->name);
1297 			return -ENODEV;
1298 		}
1299 		return 0;
1300 	}
1301 
1302 	if (!component->driver->module_get_upon_open &&
1303 	    !try_module_get(component->dev->driver->owner))
1304 		return -ENODEV;
1305 
1306 	component->card = card;
1307 	dapm->card = card;
1308 	INIT_LIST_HEAD(&component->card_list);
1309 	INIT_LIST_HEAD(&dapm->list);
1310 	soc_set_name_prefix(card, component);
1311 
1312 	soc_init_component_debugfs(component);
1313 
1314 	if (component->driver->dapm_widgets) {
1315 		ret = snd_soc_dapm_new_controls(dapm,
1316 					component->driver->dapm_widgets,
1317 					component->driver->num_dapm_widgets);
1318 
1319 		if (ret != 0) {
1320 			dev_err(component->dev,
1321 				"Failed to create new controls %d\n", ret);
1322 			goto err_probe;
1323 		}
1324 	}
1325 
1326 	for_each_component_dais(component, dai) {
1327 		ret = snd_soc_dapm_new_dai_widgets(dapm, dai);
1328 		if (ret != 0) {
1329 			dev_err(component->dev,
1330 				"Failed to create DAI widgets %d\n", ret);
1331 			goto err_probe;
1332 		}
1333 	}
1334 
1335 	if (component->driver->probe) {
1336 		ret = component->driver->probe(component);
1337 		if (ret < 0) {
1338 			dev_err(component->dev,
1339 				"ASoC: failed to probe component %d\n", ret);
1340 			goto err_probe;
1341 		}
1342 	}
1343 	WARN(dapm->idle_bias_off &&
1344 	     dapm->bias_level != SND_SOC_BIAS_OFF,
1345 	     "codec %s can not start from non-off bias with idle_bias_off==1\n",
1346 	     component->name);
1347 
1348 	/* machine specific init */
1349 	if (component->init) {
1350 		ret = component->init(component);
1351 		if (ret < 0) {
1352 			dev_err(component->dev,
1353 				"Failed to do machine specific init %d\n", ret);
1354 			goto err_probe;
1355 		}
1356 	}
1357 
1358 	if (component->driver->controls)
1359 		snd_soc_add_component_controls(component,
1360 					       component->driver->controls,
1361 					       component->driver->num_controls);
1362 	if (component->driver->dapm_routes)
1363 		snd_soc_dapm_add_routes(dapm,
1364 					component->driver->dapm_routes,
1365 					component->driver->num_dapm_routes);
1366 
1367 	list_add(&dapm->list, &card->dapm_list);
1368 	/* see for_each_card_components */
1369 	list_add(&component->card_list, &card->component_dev_list);
1370 
1371 err_probe:
1372 	if (ret < 0)
1373 		soc_cleanup_component(component);
1374 
1375 	return ret;
1376 }
1377 
1378 static void rtd_release(struct device *dev)
1379 {
1380 	kfree(dev);
1381 }
1382 
1383 static int soc_post_component_init(struct snd_soc_pcm_runtime *rtd,
1384 	const char *name)
1385 {
1386 	int ret = 0;
1387 
1388 	/* register the rtd device */
1389 	rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
1390 	if (!rtd->dev)
1391 		return -ENOMEM;
1392 	device_initialize(rtd->dev);
1393 	rtd->dev->parent = rtd->card->dev;
1394 	rtd->dev->release = rtd_release;
1395 	rtd->dev->groups = soc_dev_attr_groups;
1396 	dev_set_name(rtd->dev, "%s", name);
1397 	dev_set_drvdata(rtd->dev, rtd);
1398 	mutex_init(&rtd->pcm_mutex);
1399 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients);
1400 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].be_clients);
1401 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].fe_clients);
1402 	INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].fe_clients);
1403 	ret = device_add(rtd->dev);
1404 	if (ret < 0) {
1405 		/* calling put_device() here to free the rtd->dev */
1406 		put_device(rtd->dev);
1407 		dev_err(rtd->card->dev,
1408 			"ASoC: failed to register runtime device: %d\n", ret);
1409 		return ret;
1410 	}
1411 	rtd->dev_registered = 1;
1412 	return 0;
1413 }
1414 
1415 static int soc_probe_link_components(struct snd_soc_card *card,
1416 				     struct snd_soc_pcm_runtime *rtd, int order)
1417 {
1418 	struct snd_soc_component *component;
1419 	struct snd_soc_rtdcom_list *rtdcom;
1420 	int ret;
1421 
1422 	for_each_rtdcom(rtd, rtdcom) {
1423 		component = rtdcom->component;
1424 
1425 		if (component->driver->probe_order == order) {
1426 			ret = soc_probe_component(card, component);
1427 			if (ret < 0)
1428 				return ret;
1429 		}
1430 	}
1431 
1432 	return 0;
1433 }
1434 
1435 static int soc_probe_dai(struct snd_soc_dai *dai, int order)
1436 {
1437 	if (dai->probed ||
1438 	    dai->driver->probe_order != order)
1439 		return 0;
1440 
1441 	if (dai->driver->probe) {
1442 		int ret = dai->driver->probe(dai);
1443 
1444 		if (ret < 0) {
1445 			dev_err(dai->dev, "ASoC: failed to probe DAI %s: %d\n",
1446 				dai->name, ret);
1447 			return ret;
1448 		}
1449 	}
1450 
1451 	dai->probed = 1;
1452 
1453 	return 0;
1454 }
1455 
1456 static int soc_link_dai_pcm_new(struct snd_soc_dai **dais, int num_dais,
1457 				struct snd_soc_pcm_runtime *rtd)
1458 {
1459 	int i, ret = 0;
1460 
1461 	for (i = 0; i < num_dais; ++i) {
1462 		struct snd_soc_dai_driver *drv = dais[i]->driver;
1463 
1464 		if (drv->pcm_new)
1465 			ret = drv->pcm_new(rtd, dais[i]);
1466 		if (ret < 0) {
1467 			dev_err(dais[i]->dev,
1468 				"ASoC: Failed to bind %s with pcm device\n",
1469 				dais[i]->name);
1470 			return ret;
1471 		}
1472 	}
1473 
1474 	return 0;
1475 }
1476 
1477 static int soc_probe_link_dais(struct snd_soc_card *card,
1478 		struct snd_soc_pcm_runtime *rtd, int order)
1479 {
1480 	struct snd_soc_dai_link *dai_link = rtd->dai_link;
1481 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1482 	struct snd_soc_rtdcom_list *rtdcom;
1483 	struct snd_soc_component *component;
1484 	struct snd_soc_dai *codec_dai;
1485 	int i, ret, num;
1486 
1487 	dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n",
1488 			card->name, rtd->num, order);
1489 
1490 	/* set default power off timeout */
1491 	rtd->pmdown_time = pmdown_time;
1492 
1493 	ret = soc_probe_dai(cpu_dai, order);
1494 	if (ret)
1495 		return ret;
1496 
1497 	/* probe the CODEC DAI */
1498 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1499 		ret = soc_probe_dai(codec_dai, order);
1500 		if (ret)
1501 			return ret;
1502 	}
1503 
1504 	/* complete DAI probe during last probe */
1505 	if (order != SND_SOC_COMP_ORDER_LAST)
1506 		return 0;
1507 
1508 	/* do machine specific initialization */
1509 	if (dai_link->init) {
1510 		ret = dai_link->init(rtd);
1511 		if (ret < 0) {
1512 			dev_err(card->dev, "ASoC: failed to init %s: %d\n",
1513 				dai_link->name, ret);
1514 			return ret;
1515 		}
1516 	}
1517 
1518 	if (dai_link->dai_fmt) {
1519 		ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
1520 		if (ret)
1521 			return ret;
1522 	}
1523 
1524 	ret = soc_post_component_init(rtd, dai_link->name);
1525 	if (ret)
1526 		return ret;
1527 
1528 #ifdef CONFIG_DEBUG_FS
1529 	/* add DPCM sysfs entries */
1530 	if (dai_link->dynamic)
1531 		soc_dpcm_debugfs_add(rtd);
1532 #endif
1533 
1534 	num = rtd->num;
1535 
1536 	/*
1537 	 * most drivers will register their PCMs using DAI link ordering but
1538 	 * topology based drivers can use the DAI link id field to set PCM
1539 	 * device number and then use rtd + a base offset of the BEs.
1540 	 */
1541 	for_each_rtdcom(rtd, rtdcom) {
1542 		component = rtdcom->component;
1543 
1544 		if (!component->driver->use_dai_pcm_id)
1545 			continue;
1546 
1547 		if (rtd->dai_link->no_pcm)
1548 			num += component->driver->be_pcm_base;
1549 		else
1550 			num = rtd->dai_link->id;
1551 	}
1552 
1553 	if (cpu_dai->driver->compress_new) {
1554 		/* create compress_device" */
1555 		ret = cpu_dai->driver->compress_new(rtd, num);
1556 		if (ret < 0) {
1557 			dev_err(card->dev, "ASoC: can't create compress %s\n",
1558 					 dai_link->stream_name);
1559 			return ret;
1560 		}
1561 	} else if (!dai_link->params) {
1562 		/* create the pcm */
1563 		ret = soc_new_pcm(rtd, num);
1564 		if (ret < 0) {
1565 			dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
1566 				dai_link->stream_name, ret);
1567 			return ret;
1568 		}
1569 		ret = soc_link_dai_pcm_new(&cpu_dai, 1, rtd);
1570 		if (ret < 0)
1571 			return ret;
1572 		ret = soc_link_dai_pcm_new(rtd->codec_dais,
1573 					   rtd->num_codecs, rtd);
1574 		if (ret < 0)
1575 			return ret;
1576 	} else {
1577 		INIT_DELAYED_WORK(&rtd->delayed_work,
1578 				  codec2codec_close_delayed_work);
1579 	}
1580 
1581 	return 0;
1582 }
1583 
1584 static int soc_bind_aux_dev(struct snd_soc_card *card, int num)
1585 {
1586 	struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
1587 	struct snd_soc_component *component;
1588 	struct snd_soc_dai_link_component dlc;
1589 
1590 	if (aux_dev->codec_of_node || aux_dev->codec_name) {
1591 		/* codecs, usually analog devices */
1592 		dlc.name = aux_dev->codec_name;
1593 		dlc.of_node = aux_dev->codec_of_node;
1594 		component = soc_find_component(&dlc);
1595 		if (!component) {
1596 			if (dlc.of_node)
1597 				dlc.name = of_node_full_name(dlc.of_node);
1598 			goto err_defer;
1599 		}
1600 	} else if (aux_dev->name) {
1601 		/* generic components */
1602 		dlc.name = aux_dev->name;
1603 		dlc.of_node = NULL;
1604 		component = soc_find_component(&dlc);
1605 		if (!component)
1606 			goto err_defer;
1607 	} else {
1608 		dev_err(card->dev, "ASoC: Invalid auxiliary device\n");
1609 		return -EINVAL;
1610 	}
1611 
1612 	component->init = aux_dev->init;
1613 	list_add(&component->card_aux_list, &card->aux_comp_list);
1614 
1615 	return 0;
1616 
1617 err_defer:
1618 	dev_err(card->dev, "ASoC: %s not registered\n", dlc.name);
1619 	return -EPROBE_DEFER;
1620 }
1621 
1622 static int soc_probe_aux_devices(struct snd_soc_card *card)
1623 {
1624 	struct snd_soc_component *comp;
1625 	int order;
1626 	int ret;
1627 
1628 	for_each_comp_order(order) {
1629 		list_for_each_entry(comp, &card->aux_comp_list, card_aux_list) {
1630 			if (comp->driver->probe_order == order) {
1631 				ret = soc_probe_component(card,	comp);
1632 				if (ret < 0) {
1633 					dev_err(card->dev,
1634 						"ASoC: failed to probe aux component %s %d\n",
1635 						comp->name, ret);
1636 					return ret;
1637 				}
1638 			}
1639 		}
1640 	}
1641 
1642 	return 0;
1643 }
1644 
1645 static void soc_remove_aux_devices(struct snd_soc_card *card)
1646 {
1647 	struct snd_soc_component *comp, *_comp;
1648 	int order;
1649 
1650 	for_each_comp_order(order) {
1651 		list_for_each_entry_safe(comp, _comp,
1652 			&card->aux_comp_list, card_aux_list) {
1653 
1654 			if (comp->driver->remove_order == order) {
1655 				soc_remove_component(comp);
1656 				/* remove it from the card's aux_comp_list */
1657 				list_del(&comp->card_aux_list);
1658 			}
1659 		}
1660 	}
1661 }
1662 
1663 /**
1664  * snd_soc_runtime_set_dai_fmt() - Change DAI link format for a ASoC runtime
1665  * @rtd: The runtime for which the DAI link format should be changed
1666  * @dai_fmt: The new DAI link format
1667  *
1668  * This function updates the DAI link format for all DAIs connected to the DAI
1669  * link for the specified runtime.
1670  *
1671  * Note: For setups with a static format set the dai_fmt field in the
1672  * corresponding snd_dai_link struct instead of using this function.
1673  *
1674  * Returns 0 on success, otherwise a negative error code.
1675  */
1676 int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,
1677 	unsigned int dai_fmt)
1678 {
1679 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
1680 	struct snd_soc_dai *codec_dai;
1681 	unsigned int i;
1682 	int ret;
1683 
1684 	for_each_rtd_codec_dai(rtd, i, codec_dai) {
1685 		ret = snd_soc_dai_set_fmt(codec_dai, dai_fmt);
1686 		if (ret != 0 && ret != -ENOTSUPP) {
1687 			dev_warn(codec_dai->dev,
1688 				 "ASoC: Failed to set DAI format: %d\n", ret);
1689 			return ret;
1690 		}
1691 	}
1692 
1693 	/*
1694 	 * Flip the polarity for the "CPU" end of a CODEC<->CODEC link
1695 	 * the component which has non_legacy_dai_naming is Codec
1696 	 */
1697 	if (cpu_dai->component->driver->non_legacy_dai_naming) {
1698 		unsigned int inv_dai_fmt;
1699 
1700 		inv_dai_fmt = dai_fmt & ~SND_SOC_DAIFMT_MASTER_MASK;
1701 		switch (dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) {
1702 		case SND_SOC_DAIFMT_CBM_CFM:
1703 			inv_dai_fmt |= SND_SOC_DAIFMT_CBS_CFS;
1704 			break;
1705 		case SND_SOC_DAIFMT_CBM_CFS:
1706 			inv_dai_fmt |= SND_SOC_DAIFMT_CBS_CFM;
1707 			break;
1708 		case SND_SOC_DAIFMT_CBS_CFM:
1709 			inv_dai_fmt |= SND_SOC_DAIFMT_CBM_CFS;
1710 			break;
1711 		case SND_SOC_DAIFMT_CBS_CFS:
1712 			inv_dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
1713 			break;
1714 		}
1715 
1716 		dai_fmt = inv_dai_fmt;
1717 	}
1718 
1719 	ret = snd_soc_dai_set_fmt(cpu_dai, dai_fmt);
1720 	if (ret != 0 && ret != -ENOTSUPP) {
1721 		dev_warn(cpu_dai->dev,
1722 			 "ASoC: Failed to set DAI format: %d\n", ret);
1723 		return ret;
1724 	}
1725 
1726 	return 0;
1727 }
1728 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt);
1729 
1730 #ifdef CONFIG_DMI
1731 /*
1732  * Trim special characters, and replace '-' with '_' since '-' is used to
1733  * separate different DMI fields in the card long name. Only number and
1734  * alphabet characters and a few separator characters are kept.
1735  */
1736 static void cleanup_dmi_name(char *name)
1737 {
1738 	int i, j = 0;
1739 
1740 	for (i = 0; name[i]; i++) {
1741 		if (isalnum(name[i]) || (name[i] == '.')
1742 		    || (name[i] == '_'))
1743 			name[j++] = name[i];
1744 		else if (name[i] == '-')
1745 			name[j++] = '_';
1746 	}
1747 
1748 	name[j] = '\0';
1749 }
1750 
1751 /*
1752  * Check if a DMI field is valid, i.e. not containing any string
1753  * in the black list.
1754  */
1755 static int is_dmi_valid(const char *field)
1756 {
1757 	int i = 0;
1758 
1759 	while (dmi_blacklist[i]) {
1760 		if (strstr(field, dmi_blacklist[i]))
1761 			return 0;
1762 		i++;
1763 	}
1764 
1765 	return 1;
1766 }
1767 
1768 /**
1769  * snd_soc_set_dmi_name() - Register DMI names to card
1770  * @card: The card to register DMI names
1771  * @flavour: The flavour "differentiator" for the card amongst its peers.
1772  *
1773  * An Intel machine driver may be used by many different devices but are
1774  * difficult for userspace to differentiate, since machine drivers ususally
1775  * use their own name as the card short name and leave the card long name
1776  * blank. To differentiate such devices and fix bugs due to lack of
1777  * device-specific configurations, this function allows DMI info to be used
1778  * as the sound card long name, in the format of
1779  * "vendor-product-version-board"
1780  * (Character '-' is used to separate different DMI fields here).
1781  * This will help the user space to load the device-specific Use Case Manager
1782  * (UCM) configurations for the card.
1783  *
1784  * Possible card long names may be:
1785  * DellInc.-XPS139343-01-0310JH
1786  * ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA
1787  * Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX
1788  *
1789  * This function also supports flavoring the card longname to provide
1790  * the extra differentiation, like "vendor-product-version-board-flavor".
1791  *
1792  * We only keep number and alphabet characters and a few separator characters
1793  * in the card long name since UCM in the user space uses the card long names
1794  * as card configuration directory names and AudoConf cannot support special
1795  * charactors like SPACE.
1796  *
1797  * Returns 0 on success, otherwise a negative error code.
1798  */
1799 int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1800 {
1801 	const char *vendor, *product, *product_version, *board;
1802 	size_t longname_buf_size = sizeof(card->snd_card->longname);
1803 	size_t len;
1804 
1805 	if (card->long_name)
1806 		return 0; /* long name already set by driver or from DMI */
1807 
1808 	/* make up dmi long name as: vendor.product.version.board */
1809 	vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1810 	if (!vendor || !is_dmi_valid(vendor)) {
1811 		dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
1812 		return 0;
1813 	}
1814 
1815 	snprintf(card->dmi_longname, sizeof(card->snd_card->longname),
1816 			 "%s", vendor);
1817 	cleanup_dmi_name(card->dmi_longname);
1818 
1819 	product = dmi_get_system_info(DMI_PRODUCT_NAME);
1820 	if (product && is_dmi_valid(product)) {
1821 		len = strlen(card->dmi_longname);
1822 		snprintf(card->dmi_longname + len,
1823 			 longname_buf_size - len,
1824 			 "-%s", product);
1825 
1826 		len++;	/* skip the separator "-" */
1827 		if (len < longname_buf_size)
1828 			cleanup_dmi_name(card->dmi_longname + len);
1829 
1830 		/*
1831 		 * some vendors like Lenovo may only put a self-explanatory
1832 		 * name in the product version field
1833 		 */
1834 		product_version = dmi_get_system_info(DMI_PRODUCT_VERSION);
1835 		if (product_version && is_dmi_valid(product_version)) {
1836 			len = strlen(card->dmi_longname);
1837 			snprintf(card->dmi_longname + len,
1838 				 longname_buf_size - len,
1839 				 "-%s", product_version);
1840 
1841 			len++;
1842 			if (len < longname_buf_size)
1843 				cleanup_dmi_name(card->dmi_longname + len);
1844 		}
1845 	}
1846 
1847 	board = dmi_get_system_info(DMI_BOARD_NAME);
1848 	if (board && is_dmi_valid(board)) {
1849 		len = strlen(card->dmi_longname);
1850 		snprintf(card->dmi_longname + len,
1851 			 longname_buf_size - len,
1852 			 "-%s", board);
1853 
1854 		len++;
1855 		if (len < longname_buf_size)
1856 			cleanup_dmi_name(card->dmi_longname + len);
1857 	} else if (!product) {
1858 		/* fall back to using legacy name */
1859 		dev_warn(card->dev, "ASoC: no DMI board/product name!\n");
1860 		return 0;
1861 	}
1862 
1863 	/* Add flavour to dmi long name */
1864 	if (flavour) {
1865 		len = strlen(card->dmi_longname);
1866 		snprintf(card->dmi_longname + len,
1867 			 longname_buf_size - len,
1868 			 "-%s", flavour);
1869 
1870 		len++;
1871 		if (len < longname_buf_size)
1872 			cleanup_dmi_name(card->dmi_longname + len);
1873 	}
1874 
1875 	/* set the card long name */
1876 	card->long_name = card->dmi_longname;
1877 
1878 	return 0;
1879 }
1880 EXPORT_SYMBOL_GPL(snd_soc_set_dmi_name);
1881 #endif /* CONFIG_DMI */
1882 
1883 static void soc_check_tplg_fes(struct snd_soc_card *card)
1884 {
1885 	struct snd_soc_component *component;
1886 	const struct snd_soc_component_driver *comp_drv;
1887 	struct snd_soc_dai_link *dai_link;
1888 	int i;
1889 
1890 	for_each_component(component) {
1891 
1892 		/* does this component override FEs ? */
1893 		if (!component->driver->ignore_machine)
1894 			continue;
1895 
1896 		/* for this machine ? */
1897 		if (!strcmp(component->driver->ignore_machine,
1898 			    card->dev->driver->name))
1899 			goto match;
1900 		if (strcmp(component->driver->ignore_machine,
1901 			   dev_name(card->dev)))
1902 			continue;
1903 match:
1904 		/* machine matches, so override the rtd data */
1905 		for_each_card_prelinks(card, i, dai_link) {
1906 
1907 			/* ignore this FE */
1908 			if (dai_link->dynamic) {
1909 				dai_link->ignore = true;
1910 				continue;
1911 			}
1912 
1913 			dev_info(card->dev, "info: override FE DAI link %s\n",
1914 				 card->dai_link[i].name);
1915 
1916 			/* override platform component */
1917 			if (!dai_link->platforms) {
1918 				dev_err(card->dev, "init platform error");
1919 				continue;
1920 			}
1921 			dai_link->platforms->name = component->name;
1922 
1923 			/* convert non BE into BE */
1924 			dai_link->no_pcm = 1;
1925 
1926 			/* override any BE fixups */
1927 			dai_link->be_hw_params_fixup =
1928 				component->driver->be_hw_params_fixup;
1929 
1930 			/*
1931 			 * most BE links don't set stream name, so set it to
1932 			 * dai link name if it's NULL to help bind widgets.
1933 			 */
1934 			if (!dai_link->stream_name)
1935 				dai_link->stream_name = dai_link->name;
1936 		}
1937 
1938 		/* Inform userspace we are using alternate topology */
1939 		if (component->driver->topology_name_prefix) {
1940 
1941 			/* topology shortname created? */
1942 			if (!card->topology_shortname_created) {
1943 				comp_drv = component->driver;
1944 
1945 				snprintf(card->topology_shortname, 32, "%s-%s",
1946 					 comp_drv->topology_name_prefix,
1947 					 card->name);
1948 				card->topology_shortname_created = true;
1949 			}
1950 
1951 			/* use topology shortname */
1952 			card->name = card->topology_shortname;
1953 		}
1954 	}
1955 }
1956 
1957 static int soc_cleanup_card_resources(struct snd_soc_card *card)
1958 {
1959 	/* free the ALSA card at first; this syncs with pending operations */
1960 	if (card->snd_card) {
1961 		snd_card_free(card->snd_card);
1962 		card->snd_card = NULL;
1963 	}
1964 
1965 	/* remove and free each DAI */
1966 	soc_remove_dai_links(card);
1967 	soc_remove_pcm_runtimes(card);
1968 
1969 	/* remove auxiliary devices */
1970 	soc_remove_aux_devices(card);
1971 
1972 	snd_soc_dapm_free(&card->dapm);
1973 	soc_cleanup_card_debugfs(card);
1974 
1975 	/* remove the card */
1976 	if (card->remove)
1977 		card->remove(card);
1978 
1979 	return 0;
1980 }
1981 
1982 static int snd_soc_instantiate_card(struct snd_soc_card *card)
1983 {
1984 	struct snd_soc_pcm_runtime *rtd;
1985 	struct snd_soc_dai_link *dai_link;
1986 	int ret, i, order;
1987 
1988 	mutex_lock(&client_mutex);
1989 	for_each_card_prelinks(card, i, dai_link) {
1990 		ret = soc_init_dai_link(card, dai_link);
1991 		if (ret) {
1992 			dev_err(card->dev, "ASoC: failed to init link %s: %d\n",
1993 				dai_link->name, ret);
1994 			mutex_unlock(&client_mutex);
1995 			return ret;
1996 		}
1997 	}
1998 	mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
1999 
2000 	card->dapm.bias_level = SND_SOC_BIAS_OFF;
2001 	card->dapm.dev = card->dev;
2002 	card->dapm.card = card;
2003 	list_add(&card->dapm.list, &card->dapm_list);
2004 
2005 	/* check whether any platform is ignore machine FE and using topology */
2006 	soc_check_tplg_fes(card);
2007 
2008 	/* bind DAIs */
2009 	for_each_card_prelinks(card, i, dai_link) {
2010 		ret = soc_bind_dai_link(card, dai_link);
2011 		if (ret != 0)
2012 			goto probe_end;
2013 	}
2014 
2015 	/* bind aux_devs too */
2016 	for (i = 0; i < card->num_aux_devs; i++) {
2017 		ret = soc_bind_aux_dev(card, i);
2018 		if (ret != 0)
2019 			goto probe_end;
2020 	}
2021 
2022 	/* add predefined DAI links to the list */
2023 	for_each_card_prelinks(card, i, dai_link)
2024 		snd_soc_add_dai_link(card, dai_link);
2025 
2026 	/* card bind complete so register a sound card */
2027 	ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
2028 			card->owner, 0, &card->snd_card);
2029 	if (ret < 0) {
2030 		dev_err(card->dev,
2031 			"ASoC: can't create sound card for card %s: %d\n",
2032 			card->name, ret);
2033 		goto probe_end;
2034 	}
2035 
2036 	soc_init_card_debugfs(card);
2037 
2038 #ifdef CONFIG_DEBUG_FS
2039 	snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root);
2040 #endif
2041 
2042 #ifdef CONFIG_PM_SLEEP
2043 	/* deferred resume work */
2044 	INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
2045 #endif
2046 
2047 	if (card->dapm_widgets)
2048 		snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets,
2049 					  card->num_dapm_widgets);
2050 
2051 	if (card->of_dapm_widgets)
2052 		snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets,
2053 					  card->num_of_dapm_widgets);
2054 
2055 	/* initialise the sound card only once */
2056 	if (card->probe) {
2057 		ret = card->probe(card);
2058 		if (ret < 0)
2059 			goto probe_end;
2060 	}
2061 
2062 	/* probe all components used by DAI links on this card */
2063 	for_each_comp_order(order) {
2064 		for_each_card_rtds(card, rtd) {
2065 			ret = soc_probe_link_components(card, rtd, order);
2066 			if (ret < 0) {
2067 				dev_err(card->dev,
2068 					"ASoC: failed to instantiate card %d\n",
2069 					ret);
2070 				goto probe_end;
2071 			}
2072 		}
2073 	}
2074 
2075 	/* probe auxiliary components */
2076 	ret = soc_probe_aux_devices(card);
2077 	if (ret < 0)
2078 		goto probe_end;
2079 
2080 	/*
2081 	 * Find new DAI links added during probing components and bind them.
2082 	 * Components with topology may bring new DAIs and DAI links.
2083 	 */
2084 	for_each_card_links(card, dai_link) {
2085 		if (soc_is_dai_link_bound(card, dai_link))
2086 			continue;
2087 
2088 		ret = soc_init_dai_link(card, dai_link);
2089 		if (ret)
2090 			goto probe_end;
2091 		ret = soc_bind_dai_link(card, dai_link);
2092 		if (ret)
2093 			goto probe_end;
2094 	}
2095 
2096 	/* probe all DAI links on this card */
2097 	for_each_comp_order(order) {
2098 		for_each_card_rtds(card, rtd) {
2099 			ret = soc_probe_link_dais(card, rtd, order);
2100 			if (ret < 0) {
2101 				dev_err(card->dev,
2102 					"ASoC: failed to instantiate card %d\n",
2103 					ret);
2104 				goto probe_end;
2105 			}
2106 		}
2107 	}
2108 
2109 	snd_soc_dapm_link_dai_widgets(card);
2110 	snd_soc_dapm_connect_dai_link_widgets(card);
2111 
2112 	if (card->controls)
2113 		snd_soc_add_card_controls(card, card->controls,
2114 					  card->num_controls);
2115 
2116 	if (card->dapm_routes)
2117 		snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes,
2118 					card->num_dapm_routes);
2119 
2120 	if (card->of_dapm_routes)
2121 		snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes,
2122 					card->num_of_dapm_routes);
2123 
2124 	/* try to set some sane longname if DMI is available */
2125 	snd_soc_set_dmi_name(card, NULL);
2126 
2127 	snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname),
2128 		 "%s", card->name);
2129 	snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),
2130 		 "%s", card->long_name ? card->long_name : card->name);
2131 	snprintf(card->snd_card->driver, sizeof(card->snd_card->driver),
2132 		 "%s", card->driver_name ? card->driver_name : card->name);
2133 	for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) {
2134 		switch (card->snd_card->driver[i]) {
2135 		case '_':
2136 		case '-':
2137 		case '\0':
2138 			break;
2139 		default:
2140 			if (!isalnum(card->snd_card->driver[i]))
2141 				card->snd_card->driver[i] = '_';
2142 			break;
2143 		}
2144 	}
2145 
2146 	if (card->late_probe) {
2147 		ret = card->late_probe(card);
2148 		if (ret < 0) {
2149 			dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n",
2150 				card->name, ret);
2151 			goto probe_end;
2152 		}
2153 	}
2154 
2155 	snd_soc_dapm_new_widgets(card);
2156 
2157 	ret = snd_card_register(card->snd_card);
2158 	if (ret < 0) {
2159 		dev_err(card->dev, "ASoC: failed to register soundcard %d\n",
2160 				ret);
2161 		goto probe_end;
2162 	}
2163 
2164 	card->instantiated = 1;
2165 	dapm_mark_endpoints_dirty(card);
2166 	snd_soc_dapm_sync(&card->dapm);
2167 
2168 probe_end:
2169 	if (ret < 0)
2170 		soc_cleanup_card_resources(card);
2171 
2172 	mutex_unlock(&card->mutex);
2173 	mutex_unlock(&client_mutex);
2174 
2175 	return ret;
2176 }
2177 
2178 /* probes a new socdev */
2179 static int soc_probe(struct platform_device *pdev)
2180 {
2181 	struct snd_soc_card *card = platform_get_drvdata(pdev);
2182 
2183 	/*
2184 	 * no card, so machine driver should be registering card
2185 	 * we should not be here in that case so ret error
2186 	 */
2187 	if (!card)
2188 		return -EINVAL;
2189 
2190 	dev_warn(&pdev->dev,
2191 		 "ASoC: machine %s should use snd_soc_register_card()\n",
2192 		 card->name);
2193 
2194 	/* Bodge while we unpick instantiation */
2195 	card->dev = &pdev->dev;
2196 
2197 	return snd_soc_register_card(card);
2198 }
2199 
2200 /* removes a socdev */
2201 static int soc_remove(struct platform_device *pdev)
2202 {
2203 	struct snd_soc_card *card = platform_get_drvdata(pdev);
2204 
2205 	snd_soc_unregister_card(card);
2206 	return 0;
2207 }
2208 
2209 int snd_soc_poweroff(struct device *dev)
2210 {
2211 	struct snd_soc_card *card = dev_get_drvdata(dev);
2212 	struct snd_soc_pcm_runtime *rtd;
2213 
2214 	if (!card->instantiated)
2215 		return 0;
2216 
2217 	/*
2218 	 * Flush out pmdown_time work - we actually do want to run it
2219 	 * now, we're shutting down so no imminent restart.
2220 	 */
2221 	snd_soc_flush_all_delayed_work(card);
2222 
2223 	snd_soc_dapm_shutdown(card);
2224 
2225 	/* deactivate pins to sleep state */
2226 	for_each_card_rtds(card, rtd) {
2227 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
2228 		struct snd_soc_dai *codec_dai;
2229 		int i;
2230 
2231 		pinctrl_pm_select_sleep_state(cpu_dai->dev);
2232 		for_each_rtd_codec_dai(rtd, i, codec_dai) {
2233 			pinctrl_pm_select_sleep_state(codec_dai->dev);
2234 		}
2235 	}
2236 
2237 	return 0;
2238 }
2239 EXPORT_SYMBOL_GPL(snd_soc_poweroff);
2240 
2241 const struct dev_pm_ops snd_soc_pm_ops = {
2242 	.suspend = snd_soc_suspend,
2243 	.resume = snd_soc_resume,
2244 	.freeze = snd_soc_suspend,
2245 	.thaw = snd_soc_resume,
2246 	.poweroff = snd_soc_poweroff,
2247 	.restore = snd_soc_resume,
2248 };
2249 EXPORT_SYMBOL_GPL(snd_soc_pm_ops);
2250 
2251 /* ASoC platform driver */
2252 static struct platform_driver soc_driver = {
2253 	.driver		= {
2254 		.name		= "soc-audio",
2255 		.pm		= &snd_soc_pm_ops,
2256 	},
2257 	.probe		= soc_probe,
2258 	.remove		= soc_remove,
2259 };
2260 
2261 /**
2262  * snd_soc_cnew - create new control
2263  * @_template: control template
2264  * @data: control private data
2265  * @long_name: control long name
2266  * @prefix: control name prefix
2267  *
2268  * Create a new mixer control from a template control.
2269  *
2270  * Returns 0 for success, else error.
2271  */
2272 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
2273 				  void *data, const char *long_name,
2274 				  const char *prefix)
2275 {
2276 	struct snd_kcontrol_new template;
2277 	struct snd_kcontrol *kcontrol;
2278 	char *name = NULL;
2279 
2280 	memcpy(&template, _template, sizeof(template));
2281 	template.index = 0;
2282 
2283 	if (!long_name)
2284 		long_name = template.name;
2285 
2286 	if (prefix) {
2287 		name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name);
2288 		if (!name)
2289 			return NULL;
2290 
2291 		template.name = name;
2292 	} else {
2293 		template.name = long_name;
2294 	}
2295 
2296 	kcontrol = snd_ctl_new1(&template, data);
2297 
2298 	kfree(name);
2299 
2300 	return kcontrol;
2301 }
2302 EXPORT_SYMBOL_GPL(snd_soc_cnew);
2303 
2304 static int snd_soc_add_controls(struct snd_card *card, struct device *dev,
2305 	const struct snd_kcontrol_new *controls, int num_controls,
2306 	const char *prefix, void *data)
2307 {
2308 	int err, i;
2309 
2310 	for (i = 0; i < num_controls; i++) {
2311 		const struct snd_kcontrol_new *control = &controls[i];
2312 
2313 		err = snd_ctl_add(card, snd_soc_cnew(control, data,
2314 						     control->name, prefix));
2315 		if (err < 0) {
2316 			dev_err(dev, "ASoC: Failed to add %s: %d\n",
2317 				control->name, err);
2318 			return err;
2319 		}
2320 	}
2321 
2322 	return 0;
2323 }
2324 
2325 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
2326 					       const char *name)
2327 {
2328 	struct snd_card *card = soc_card->snd_card;
2329 	struct snd_kcontrol *kctl;
2330 
2331 	if (unlikely(!name))
2332 		return NULL;
2333 
2334 	list_for_each_entry(kctl, &card->controls, list)
2335 		if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name)))
2336 			return kctl;
2337 	return NULL;
2338 }
2339 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol);
2340 
2341 /**
2342  * snd_soc_add_component_controls - Add an array of controls to a component.
2343  *
2344  * @component: Component to add controls to
2345  * @controls: Array of controls to add
2346  * @num_controls: Number of elements in the array
2347  *
2348  * Return: 0 for success, else error.
2349  */
2350 int snd_soc_add_component_controls(struct snd_soc_component *component,
2351 	const struct snd_kcontrol_new *controls, unsigned int num_controls)
2352 {
2353 	struct snd_card *card = component->card->snd_card;
2354 
2355 	return snd_soc_add_controls(card, component->dev, controls,
2356 			num_controls, component->name_prefix, component);
2357 }
2358 EXPORT_SYMBOL_GPL(snd_soc_add_component_controls);
2359 
2360 /**
2361  * snd_soc_add_card_controls - add an array of controls to a SoC card.
2362  * Convenience function to add a list of controls.
2363  *
2364  * @soc_card: SoC card to add controls to
2365  * @controls: array of controls to add
2366  * @num_controls: number of elements in the array
2367  *
2368  * Return 0 for success, else error.
2369  */
2370 int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
2371 	const struct snd_kcontrol_new *controls, int num_controls)
2372 {
2373 	struct snd_card *card = soc_card->snd_card;
2374 
2375 	return snd_soc_add_controls(card, soc_card->dev, controls, num_controls,
2376 			NULL, soc_card);
2377 }
2378 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls);
2379 
2380 /**
2381  * snd_soc_add_dai_controls - add an array of controls to a DAI.
2382  * Convienience function to add a list of controls.
2383  *
2384  * @dai: DAI to add controls to
2385  * @controls: array of controls to add
2386  * @num_controls: number of elements in the array
2387  *
2388  * Return 0 for success, else error.
2389  */
2390 int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
2391 	const struct snd_kcontrol_new *controls, int num_controls)
2392 {
2393 	struct snd_card *card = dai->component->card->snd_card;
2394 
2395 	return snd_soc_add_controls(card, dai->dev, controls, num_controls,
2396 			NULL, dai);
2397 }
2398 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls);
2399 
2400 /**
2401  * snd_soc_dai_set_sysclk - configure DAI system or master clock.
2402  * @dai: DAI
2403  * @clk_id: DAI specific clock ID
2404  * @freq: new clock frequency in Hz
2405  * @dir: new clock direction - input/output.
2406  *
2407  * Configures the DAI master (MCLK) or system (SYSCLK) clocking.
2408  */
2409 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
2410 	unsigned int freq, int dir)
2411 {
2412 	if (dai->driver->ops->set_sysclk)
2413 		return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir);
2414 
2415 	return snd_soc_component_set_sysclk(dai->component, clk_id, 0,
2416 					    freq, dir);
2417 }
2418 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk);
2419 
2420 /**
2421  * snd_soc_component_set_sysclk - configure COMPONENT system or master clock.
2422  * @component: COMPONENT
2423  * @clk_id: DAI specific clock ID
2424  * @source: Source for the clock
2425  * @freq: new clock frequency in Hz
2426  * @dir: new clock direction - input/output.
2427  *
2428  * Configures the CODEC master (MCLK) or system (SYSCLK) clocking.
2429  */
2430 int snd_soc_component_set_sysclk(struct snd_soc_component *component,
2431 				 int clk_id, int source, unsigned int freq,
2432 				 int dir)
2433 {
2434 	if (component->driver->set_sysclk)
2435 		return component->driver->set_sysclk(component, clk_id, source,
2436 						 freq, dir);
2437 
2438 	return -ENOTSUPP;
2439 }
2440 EXPORT_SYMBOL_GPL(snd_soc_component_set_sysclk);
2441 
2442 /**
2443  * snd_soc_dai_set_clkdiv - configure DAI clock dividers.
2444  * @dai: DAI
2445  * @div_id: DAI specific clock divider ID
2446  * @div: new clock divisor.
2447  *
2448  * Configures the clock dividers. This is used to derive the best DAI bit and
2449  * frame clocks from the system or master clock. It's best to set the DAI bit
2450  * and frame clocks as low as possible to save system power.
2451  */
2452 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
2453 	int div_id, int div)
2454 {
2455 	if (dai->driver->ops->set_clkdiv)
2456 		return dai->driver->ops->set_clkdiv(dai, div_id, div);
2457 	else
2458 		return -EINVAL;
2459 }
2460 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv);
2461 
2462 /**
2463  * snd_soc_dai_set_pll - configure DAI PLL.
2464  * @dai: DAI
2465  * @pll_id: DAI specific PLL ID
2466  * @source: DAI specific source for the PLL
2467  * @freq_in: PLL input clock frequency in Hz
2468  * @freq_out: requested PLL output clock frequency in Hz
2469  *
2470  * Configures and enables PLL to generate output clock based on input clock.
2471  */
2472 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
2473 	unsigned int freq_in, unsigned int freq_out)
2474 {
2475 	if (dai->driver->ops->set_pll)
2476 		return dai->driver->ops->set_pll(dai, pll_id, source,
2477 					 freq_in, freq_out);
2478 
2479 	return snd_soc_component_set_pll(dai->component, pll_id, source,
2480 					 freq_in, freq_out);
2481 }
2482 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll);
2483 
2484 /*
2485  * snd_soc_component_set_pll - configure component PLL.
2486  * @component: COMPONENT
2487  * @pll_id: DAI specific PLL ID
2488  * @source: DAI specific source for the PLL
2489  * @freq_in: PLL input clock frequency in Hz
2490  * @freq_out: requested PLL output clock frequency in Hz
2491  *
2492  * Configures and enables PLL to generate output clock based on input clock.
2493  */
2494 int snd_soc_component_set_pll(struct snd_soc_component *component, int pll_id,
2495 			      int source, unsigned int freq_in,
2496 			      unsigned int freq_out)
2497 {
2498 	if (component->driver->set_pll)
2499 		return component->driver->set_pll(component, pll_id, source,
2500 						  freq_in, freq_out);
2501 
2502 	return -EINVAL;
2503 }
2504 EXPORT_SYMBOL_GPL(snd_soc_component_set_pll);
2505 
2506 /**
2507  * snd_soc_dai_set_bclk_ratio - configure BCLK to sample rate ratio.
2508  * @dai: DAI
2509  * @ratio: Ratio of BCLK to Sample rate.
2510  *
2511  * Configures the DAI for a preset BCLK to sample rate ratio.
2512  */
2513 int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
2514 {
2515 	if (dai->driver->ops->set_bclk_ratio)
2516 		return dai->driver->ops->set_bclk_ratio(dai, ratio);
2517 	else
2518 		return -EINVAL;
2519 }
2520 EXPORT_SYMBOL_GPL(snd_soc_dai_set_bclk_ratio);
2521 
2522 /**
2523  * snd_soc_dai_set_fmt - configure DAI hardware audio format.
2524  * @dai: DAI
2525  * @fmt: SND_SOC_DAIFMT_* format value.
2526  *
2527  * Configures the DAI hardware format and clocking.
2528  */
2529 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
2530 {
2531 	if (dai->driver->ops->set_fmt == NULL)
2532 		return -ENOTSUPP;
2533 	return dai->driver->ops->set_fmt(dai, fmt);
2534 }
2535 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);
2536 
2537 /**
2538  * snd_soc_xlate_tdm_slot - generate tx/rx slot mask.
2539  * @slots: Number of slots in use.
2540  * @tx_mask: bitmask representing active TX slots.
2541  * @rx_mask: bitmask representing active RX slots.
2542  *
2543  * Generates the TDM tx and rx slot default masks for DAI.
2544  */
2545 static int snd_soc_xlate_tdm_slot_mask(unsigned int slots,
2546 				       unsigned int *tx_mask,
2547 				       unsigned int *rx_mask)
2548 {
2549 	if (*tx_mask || *rx_mask)
2550 		return 0;
2551 
2552 	if (!slots)
2553 		return -EINVAL;
2554 
2555 	*tx_mask = (1 << slots) - 1;
2556 	*rx_mask = (1 << slots) - 1;
2557 
2558 	return 0;
2559 }
2560 
2561 /**
2562  * snd_soc_dai_set_tdm_slot() - Configures a DAI for TDM operation
2563  * @dai: The DAI to configure
2564  * @tx_mask: bitmask representing active TX slots.
2565  * @rx_mask: bitmask representing active RX slots.
2566  * @slots: Number of slots in use.
2567  * @slot_width: Width in bits for each slot.
2568  *
2569  * This function configures the specified DAI for TDM operation. @slot contains
2570  * the total number of slots of the TDM stream and @slot_with the width of each
2571  * slot in bit clock cycles. @tx_mask and @rx_mask are bitmasks specifying the
2572  * active slots of the TDM stream for the specified DAI, i.e. which slots the
2573  * DAI should write to or read from. If a bit is set the corresponding slot is
2574  * active, if a bit is cleared the corresponding slot is inactive. Bit 0 maps to
2575  * the first slot, bit 1 to the second slot and so on. The first active slot
2576  * maps to the first channel of the DAI, the second active slot to the second
2577  * channel and so on.
2578  *
2579  * TDM mode can be disabled by passing 0 for @slots. In this case @tx_mask,
2580  * @rx_mask and @slot_width will be ignored.
2581  *
2582  * Returns 0 on success, a negative error code otherwise.
2583  */
2584 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
2585 	unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
2586 {
2587 	if (dai->driver->ops->xlate_tdm_slot_mask)
2588 		dai->driver->ops->xlate_tdm_slot_mask(slots,
2589 						&tx_mask, &rx_mask);
2590 	else
2591 		snd_soc_xlate_tdm_slot_mask(slots, &tx_mask, &rx_mask);
2592 
2593 	dai->tx_mask = tx_mask;
2594 	dai->rx_mask = rx_mask;
2595 
2596 	if (dai->driver->ops->set_tdm_slot)
2597 		return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask,
2598 				slots, slot_width);
2599 	else
2600 		return -ENOTSUPP;
2601 }
2602 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot);
2603 
2604 /**
2605  * snd_soc_dai_set_channel_map - configure DAI audio channel map
2606  * @dai: DAI
2607  * @tx_num: how many TX channels
2608  * @tx_slot: pointer to an array which imply the TX slot number channel
2609  *           0~num-1 uses
2610  * @rx_num: how many RX channels
2611  * @rx_slot: pointer to an array which imply the RX slot number channel
2612  *           0~num-1 uses
2613  *
2614  * configure the relationship between channel number and TDM slot number.
2615  */
2616 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
2617 	unsigned int tx_num, unsigned int *tx_slot,
2618 	unsigned int rx_num, unsigned int *rx_slot)
2619 {
2620 	if (dai->driver->ops->set_channel_map)
2621 		return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot,
2622 			rx_num, rx_slot);
2623 	else
2624 		return -ENOTSUPP;
2625 }
2626 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map);
2627 
2628 /**
2629  * snd_soc_dai_get_channel_map - Get DAI audio channel map
2630  * @dai: DAI
2631  * @tx_num: how many TX channels
2632  * @tx_slot: pointer to an array which imply the TX slot number channel
2633  *           0~num-1 uses
2634  * @rx_num: how many RX channels
2635  * @rx_slot: pointer to an array which imply the RX slot number channel
2636  *           0~num-1 uses
2637  */
2638 int snd_soc_dai_get_channel_map(struct snd_soc_dai *dai,
2639 	unsigned int *tx_num, unsigned int *tx_slot,
2640 	unsigned int *rx_num, unsigned int *rx_slot)
2641 {
2642 	if (dai->driver->ops->get_channel_map)
2643 		return dai->driver->ops->get_channel_map(dai, tx_num, tx_slot,
2644 			rx_num, rx_slot);
2645 	else
2646 		return -ENOTSUPP;
2647 }
2648 EXPORT_SYMBOL_GPL(snd_soc_dai_get_channel_map);
2649 
2650 /**
2651  * snd_soc_dai_set_tristate - configure DAI system or master clock.
2652  * @dai: DAI
2653  * @tristate: tristate enable
2654  *
2655  * Tristates the DAI so that others can use it.
2656  */
2657 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
2658 {
2659 	if (dai->driver->ops->set_tristate)
2660 		return dai->driver->ops->set_tristate(dai, tristate);
2661 	else
2662 		return -EINVAL;
2663 }
2664 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate);
2665 
2666 /**
2667  * snd_soc_dai_digital_mute - configure DAI system or master clock.
2668  * @dai: DAI
2669  * @mute: mute enable
2670  * @direction: stream to mute
2671  *
2672  * Mutes the DAI DAC.
2673  */
2674 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
2675 			     int direction)
2676 {
2677 	if (dai->driver->ops->mute_stream)
2678 		return dai->driver->ops->mute_stream(dai, mute, direction);
2679 	else if (direction == SNDRV_PCM_STREAM_PLAYBACK &&
2680 		 dai->driver->ops->digital_mute)
2681 		return dai->driver->ops->digital_mute(dai, mute);
2682 	else
2683 		return -ENOTSUPP;
2684 }
2685 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute);
2686 
2687 static int snd_soc_bind_card(struct snd_soc_card *card)
2688 {
2689 	struct snd_soc_pcm_runtime *rtd;
2690 	int ret;
2691 
2692 	ret = snd_soc_instantiate_card(card);
2693 	if (ret != 0)
2694 		return ret;
2695 
2696 	/* deactivate pins to sleep state */
2697 	for_each_card_rtds(card, rtd) {
2698 		struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
2699 		struct snd_soc_dai *codec_dai;
2700 		int j;
2701 
2702 		for_each_rtd_codec_dai(rtd, j, codec_dai) {
2703 			if (!codec_dai->active)
2704 				pinctrl_pm_select_sleep_state(codec_dai->dev);
2705 		}
2706 
2707 		if (!cpu_dai->active)
2708 			pinctrl_pm_select_sleep_state(cpu_dai->dev);
2709 	}
2710 
2711 	return ret;
2712 }
2713 
2714 /**
2715  * snd_soc_register_card - Register a card with the ASoC core
2716  *
2717  * @card: Card to register
2718  *
2719  */
2720 int snd_soc_register_card(struct snd_soc_card *card)
2721 {
2722 	if (!card->name || !card->dev)
2723 		return -EINVAL;
2724 
2725 	dev_set_drvdata(card->dev, card);
2726 
2727 	snd_soc_initialize_card_lists(card);
2728 
2729 	INIT_LIST_HEAD(&card->dai_link_list);
2730 
2731 	INIT_LIST_HEAD(&card->rtd_list);
2732 	card->num_rtd = 0;
2733 
2734 	INIT_LIST_HEAD(&card->dapm_dirty);
2735 	INIT_LIST_HEAD(&card->dobj_list);
2736 	card->instantiated = 0;
2737 	mutex_init(&card->mutex);
2738 	mutex_init(&card->dapm_mutex);
2739 	spin_lock_init(&card->dpcm_lock);
2740 
2741 	return snd_soc_bind_card(card);
2742 }
2743 EXPORT_SYMBOL_GPL(snd_soc_register_card);
2744 
2745 static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister)
2746 {
2747 	struct snd_soc_pcm_runtime *rtd;
2748 	int order;
2749 
2750 	if (card->instantiated) {
2751 		card->instantiated = false;
2752 		snd_soc_dapm_shutdown(card);
2753 		snd_soc_flush_all_delayed_work(card);
2754 
2755 		/* remove all components used by DAI links on this card */
2756 		for_each_comp_order(order) {
2757 			for_each_card_rtds(card, rtd) {
2758 				soc_remove_link_components(card, rtd, order);
2759 			}
2760 		}
2761 
2762 		soc_cleanup_card_resources(card);
2763 		if (!unregister)
2764 			list_add(&card->list, &unbind_card_list);
2765 	} else {
2766 		if (unregister)
2767 			list_del(&card->list);
2768 	}
2769 }
2770 
2771 /**
2772  * snd_soc_unregister_card - Unregister a card with the ASoC core
2773  *
2774  * @card: Card to unregister
2775  *
2776  */
2777 int snd_soc_unregister_card(struct snd_soc_card *card)
2778 {
2779 	mutex_lock(&client_mutex);
2780 	snd_soc_unbind_card(card, true);
2781 	mutex_unlock(&client_mutex);
2782 	dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name);
2783 
2784 	return 0;
2785 }
2786 EXPORT_SYMBOL_GPL(snd_soc_unregister_card);
2787 
2788 /*
2789  * Simplify DAI link configuration by removing ".-1" from device names
2790  * and sanitizing names.
2791  */
2792 static char *fmt_single_name(struct device *dev, int *id)
2793 {
2794 	char *found, name[NAME_SIZE];
2795 	int id1, id2;
2796 
2797 	if (dev_name(dev) == NULL)
2798 		return NULL;
2799 
2800 	strlcpy(name, dev_name(dev), NAME_SIZE);
2801 
2802 	/* are we a "%s.%d" name (platform and SPI components) */
2803 	found = strstr(name, dev->driver->name);
2804 	if (found) {
2805 		/* get ID */
2806 		if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) {
2807 
2808 			/* discard ID from name if ID == -1 */
2809 			if (*id == -1)
2810 				found[strlen(dev->driver->name)] = '\0';
2811 		}
2812 
2813 	} else {
2814 		/* I2C component devices are named "bus-addr" */
2815 		if (sscanf(name, "%x-%x", &id1, &id2) == 2) {
2816 			char tmp[NAME_SIZE];
2817 
2818 			/* create unique ID number from I2C addr and bus */
2819 			*id = ((id1 & 0xffff) << 16) + id2;
2820 
2821 			/* sanitize component name for DAI link creation */
2822 			snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name,
2823 				 name);
2824 			strlcpy(name, tmp, NAME_SIZE);
2825 		} else
2826 			*id = 0;
2827 	}
2828 
2829 	return kstrdup(name, GFP_KERNEL);
2830 }
2831 
2832 /*
2833  * Simplify DAI link naming for single devices with multiple DAIs by removing
2834  * any ".-1" and using the DAI name (instead of device name).
2835  */
2836 static inline char *fmt_multiple_name(struct device *dev,
2837 		struct snd_soc_dai_driver *dai_drv)
2838 {
2839 	if (dai_drv->name == NULL) {
2840 		dev_err(dev,
2841 			"ASoC: error - multiple DAI %s registered with no name\n",
2842 			dev_name(dev));
2843 		return NULL;
2844 	}
2845 
2846 	return kstrdup(dai_drv->name, GFP_KERNEL);
2847 }
2848 
2849 /**
2850  * snd_soc_unregister_dai - Unregister DAIs from the ASoC core
2851  *
2852  * @component: The component for which the DAIs should be unregistered
2853  */
2854 static void snd_soc_unregister_dais(struct snd_soc_component *component)
2855 {
2856 	struct snd_soc_dai *dai, *_dai;
2857 
2858 	for_each_component_dais_safe(component, dai, _dai) {
2859 		dev_dbg(component->dev, "ASoC: Unregistered DAI '%s'\n",
2860 			dai->name);
2861 		list_del(&dai->list);
2862 		kfree(dai->name);
2863 		kfree(dai);
2864 	}
2865 }
2866 
2867 /* Create a DAI and add it to the component's DAI list */
2868 static struct snd_soc_dai *soc_add_dai(struct snd_soc_component *component,
2869 	struct snd_soc_dai_driver *dai_drv,
2870 	bool legacy_dai_naming)
2871 {
2872 	struct device *dev = component->dev;
2873 	struct snd_soc_dai *dai;
2874 
2875 	dev_dbg(dev, "ASoC: dynamically register DAI %s\n", dev_name(dev));
2876 
2877 	dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
2878 	if (dai == NULL)
2879 		return NULL;
2880 
2881 	/*
2882 	 * Back in the old days when we still had component-less DAIs,
2883 	 * instead of having a static name, component-less DAIs would
2884 	 * inherit the name of the parent device so it is possible to
2885 	 * register multiple instances of the DAI. We still need to keep
2886 	 * the same naming style even though those DAIs are not
2887 	 * component-less anymore.
2888 	 */
2889 	if (legacy_dai_naming &&
2890 	    (dai_drv->id == 0 || dai_drv->name == NULL)) {
2891 		dai->name = fmt_single_name(dev, &dai->id);
2892 	} else {
2893 		dai->name = fmt_multiple_name(dev, dai_drv);
2894 		if (dai_drv->id)
2895 			dai->id = dai_drv->id;
2896 		else
2897 			dai->id = component->num_dai;
2898 	}
2899 	if (dai->name == NULL) {
2900 		kfree(dai);
2901 		return NULL;
2902 	}
2903 
2904 	dai->component = component;
2905 	dai->dev = dev;
2906 	dai->driver = dai_drv;
2907 	if (!dai->driver->ops)
2908 		dai->driver->ops = &null_dai_ops;
2909 
2910 	/* see for_each_component_dais */
2911 	list_add_tail(&dai->list, &component->dai_list);
2912 	component->num_dai++;
2913 
2914 	dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name);
2915 	return dai;
2916 }
2917 
2918 /**
2919  * snd_soc_register_dais - Register a DAI with the ASoC core
2920  *
2921  * @component: The component the DAIs are registered for
2922  * @dai_drv: DAI driver to use for the DAIs
2923  * @count: Number of DAIs
2924  */
2925 static int snd_soc_register_dais(struct snd_soc_component *component,
2926 				 struct snd_soc_dai_driver *dai_drv,
2927 				 size_t count)
2928 {
2929 	struct device *dev = component->dev;
2930 	struct snd_soc_dai *dai;
2931 	unsigned int i;
2932 	int ret;
2933 
2934 	dev_dbg(dev, "ASoC: dai register %s #%zu\n", dev_name(dev), count);
2935 
2936 	for (i = 0; i < count; i++) {
2937 
2938 		dai = soc_add_dai(component, dai_drv + i, count == 1 &&
2939 				  !component->driver->non_legacy_dai_naming);
2940 		if (dai == NULL) {
2941 			ret = -ENOMEM;
2942 			goto err;
2943 		}
2944 	}
2945 
2946 	return 0;
2947 
2948 err:
2949 	snd_soc_unregister_dais(component);
2950 
2951 	return ret;
2952 }
2953 
2954 /**
2955  * snd_soc_register_dai - Register a DAI dynamically & create its widgets
2956  *
2957  * @component: The component the DAIs are registered for
2958  * @dai_drv: DAI driver to use for the DAI
2959  *
2960  * Topology can use this API to register DAIs when probing a component.
2961  * These DAIs's widgets will be freed in the card cleanup and the DAIs
2962  * will be freed in the component cleanup.
2963  */
2964 int snd_soc_register_dai(struct snd_soc_component *component,
2965 	struct snd_soc_dai_driver *dai_drv)
2966 {
2967 	struct snd_soc_dapm_context *dapm =
2968 		snd_soc_component_get_dapm(component);
2969 	struct snd_soc_dai *dai;
2970 	int ret;
2971 
2972 	if (dai_drv->dobj.type != SND_SOC_DOBJ_PCM) {
2973 		dev_err(component->dev, "Invalid dai type %d\n",
2974 			dai_drv->dobj.type);
2975 		return -EINVAL;
2976 	}
2977 
2978 	lockdep_assert_held(&client_mutex);
2979 	dai = soc_add_dai(component, dai_drv, false);
2980 	if (!dai)
2981 		return -ENOMEM;
2982 
2983 	/*
2984 	 * Create the DAI widgets here. After adding DAIs, topology may
2985 	 * also add routes that need these widgets as source or sink.
2986 	 */
2987 	ret = snd_soc_dapm_new_dai_widgets(dapm, dai);
2988 	if (ret != 0) {
2989 		dev_err(component->dev,
2990 			"Failed to create DAI widgets %d\n", ret);
2991 	}
2992 
2993 	return ret;
2994 }
2995 EXPORT_SYMBOL_GPL(snd_soc_register_dai);
2996 
2997 static void snd_soc_component_seq_notifier(struct snd_soc_dapm_context *dapm,
2998 	enum snd_soc_dapm_type type, int subseq)
2999 {
3000 	struct snd_soc_component *component = dapm->component;
3001 
3002 	component->driver->seq_notifier(component, type, subseq);
3003 }
3004 
3005 static int snd_soc_component_stream_event(struct snd_soc_dapm_context *dapm,
3006 	int event)
3007 {
3008 	struct snd_soc_component *component = dapm->component;
3009 
3010 	return component->driver->stream_event(component, event);
3011 }
3012 
3013 static int snd_soc_component_set_bias_level(struct snd_soc_dapm_context *dapm,
3014 					enum snd_soc_bias_level level)
3015 {
3016 	struct snd_soc_component *component = dapm->component;
3017 
3018 	return component->driver->set_bias_level(component, level);
3019 }
3020 
3021 static int snd_soc_component_initialize(struct snd_soc_component *component,
3022 	const struct snd_soc_component_driver *driver, struct device *dev)
3023 {
3024 	struct snd_soc_dapm_context *dapm;
3025 
3026 	component->name = fmt_single_name(dev, &component->id);
3027 	if (!component->name) {
3028 		dev_err(dev, "ASoC: Failed to allocate name\n");
3029 		return -ENOMEM;
3030 	}
3031 
3032 	component->dev = dev;
3033 	component->driver = driver;
3034 
3035 	dapm = snd_soc_component_get_dapm(component);
3036 	dapm->dev = dev;
3037 	dapm->component = component;
3038 	dapm->bias_level = SND_SOC_BIAS_OFF;
3039 	dapm->idle_bias_off = !driver->idle_bias_on;
3040 	dapm->suspend_bias_off = driver->suspend_bias_off;
3041 	if (driver->seq_notifier)
3042 		dapm->seq_notifier = snd_soc_component_seq_notifier;
3043 	if (driver->stream_event)
3044 		dapm->stream_event = snd_soc_component_stream_event;
3045 	if (driver->set_bias_level)
3046 		dapm->set_bias_level = snd_soc_component_set_bias_level;
3047 
3048 	INIT_LIST_HEAD(&component->dai_list);
3049 	mutex_init(&component->io_mutex);
3050 
3051 	return 0;
3052 }
3053 
3054 static void snd_soc_component_setup_regmap(struct snd_soc_component *component)
3055 {
3056 	int val_bytes = regmap_get_val_bytes(component->regmap);
3057 
3058 	/* Errors are legitimate for non-integer byte multiples */
3059 	if (val_bytes > 0)
3060 		component->val_bytes = val_bytes;
3061 }
3062 
3063 #ifdef CONFIG_REGMAP
3064 
3065 /**
3066  * snd_soc_component_init_regmap() - Initialize regmap instance for the
3067  *                                   component
3068  * @component: The component for which to initialize the regmap instance
3069  * @regmap: The regmap instance that should be used by the component
3070  *
3071  * This function allows deferred assignment of the regmap instance that is
3072  * associated with the component. Only use this if the regmap instance is not
3073  * yet ready when the component is registered. The function must also be called
3074  * before the first IO attempt of the component.
3075  */
3076 void snd_soc_component_init_regmap(struct snd_soc_component *component,
3077 	struct regmap *regmap)
3078 {
3079 	component->regmap = regmap;
3080 	snd_soc_component_setup_regmap(component);
3081 }
3082 EXPORT_SYMBOL_GPL(snd_soc_component_init_regmap);
3083 
3084 /**
3085  * snd_soc_component_exit_regmap() - De-initialize regmap instance for the
3086  *                                   component
3087  * @component: The component for which to de-initialize the regmap instance
3088  *
3089  * Calls regmap_exit() on the regmap instance associated to the component and
3090  * removes the regmap instance from the component.
3091  *
3092  * This function should only be used if snd_soc_component_init_regmap() was used
3093  * to initialize the regmap instance.
3094  */
3095 void snd_soc_component_exit_regmap(struct snd_soc_component *component)
3096 {
3097 	regmap_exit(component->regmap);
3098 	component->regmap = NULL;
3099 }
3100 EXPORT_SYMBOL_GPL(snd_soc_component_exit_regmap);
3101 
3102 #endif
3103 
3104 static void snd_soc_component_add(struct snd_soc_component *component)
3105 {
3106 	mutex_lock(&client_mutex);
3107 
3108 	if (!component->driver->write && !component->driver->read) {
3109 		if (!component->regmap)
3110 			component->regmap = dev_get_regmap(component->dev,
3111 							   NULL);
3112 		if (component->regmap)
3113 			snd_soc_component_setup_regmap(component);
3114 	}
3115 
3116 	/* see for_each_component */
3117 	list_add(&component->list, &component_list);
3118 	INIT_LIST_HEAD(&component->dobj_list);
3119 
3120 	mutex_unlock(&client_mutex);
3121 }
3122 
3123 static void snd_soc_component_cleanup(struct snd_soc_component *component)
3124 {
3125 	snd_soc_unregister_dais(component);
3126 	kfree(component->name);
3127 }
3128 
3129 static void snd_soc_component_del_unlocked(struct snd_soc_component *component)
3130 {
3131 	struct snd_soc_card *card = component->card;
3132 
3133 	if (card)
3134 		snd_soc_unbind_card(card, false);
3135 
3136 	list_del(&component->list);
3137 }
3138 
3139 #define ENDIANNESS_MAP(name) \
3140 	(SNDRV_PCM_FMTBIT_##name##LE | SNDRV_PCM_FMTBIT_##name##BE)
3141 static u64 endianness_format_map[] = {
3142 	ENDIANNESS_MAP(S16_),
3143 	ENDIANNESS_MAP(U16_),
3144 	ENDIANNESS_MAP(S24_),
3145 	ENDIANNESS_MAP(U24_),
3146 	ENDIANNESS_MAP(S32_),
3147 	ENDIANNESS_MAP(U32_),
3148 	ENDIANNESS_MAP(S24_3),
3149 	ENDIANNESS_MAP(U24_3),
3150 	ENDIANNESS_MAP(S20_3),
3151 	ENDIANNESS_MAP(U20_3),
3152 	ENDIANNESS_MAP(S18_3),
3153 	ENDIANNESS_MAP(U18_3),
3154 	ENDIANNESS_MAP(FLOAT_),
3155 	ENDIANNESS_MAP(FLOAT64_),
3156 	ENDIANNESS_MAP(IEC958_SUBFRAME_),
3157 };
3158 
3159 /*
3160  * Fix up the DAI formats for endianness: codecs don't actually see
3161  * the endianness of the data but we're using the CPU format
3162  * definitions which do need to include endianness so we ensure that
3163  * codec DAIs always have both big and little endian variants set.
3164  */
3165 static void convert_endianness_formats(struct snd_soc_pcm_stream *stream)
3166 {
3167 	int i;
3168 
3169 	for (i = 0; i < ARRAY_SIZE(endianness_format_map); i++)
3170 		if (stream->formats & endianness_format_map[i])
3171 			stream->formats |= endianness_format_map[i];
3172 }
3173 
3174 static void snd_soc_try_rebind_card(void)
3175 {
3176 	struct snd_soc_card *card, *c;
3177 
3178 	if (!list_empty(&unbind_card_list)) {
3179 		list_for_each_entry_safe(card, c, &unbind_card_list, list) {
3180 			if (!snd_soc_bind_card(card))
3181 				list_del(&card->list);
3182 		}
3183 	}
3184 }
3185 
3186 int snd_soc_add_component(struct device *dev,
3187 			struct snd_soc_component *component,
3188 			const struct snd_soc_component_driver *component_driver,
3189 			struct snd_soc_dai_driver *dai_drv,
3190 			int num_dai)
3191 {
3192 	int ret;
3193 	int i;
3194 
3195 	ret = snd_soc_component_initialize(component, component_driver, dev);
3196 	if (ret)
3197 		goto err_free;
3198 
3199 	if (component_driver->endianness) {
3200 		for (i = 0; i < num_dai; i++) {
3201 			convert_endianness_formats(&dai_drv[i].playback);
3202 			convert_endianness_formats(&dai_drv[i].capture);
3203 		}
3204 	}
3205 
3206 	ret = snd_soc_register_dais(component, dai_drv, num_dai);
3207 	if (ret < 0) {
3208 		dev_err(dev, "ASoC: Failed to register DAIs: %d\n", ret);
3209 		goto err_cleanup;
3210 	}
3211 
3212 	snd_soc_component_add(component);
3213 	snd_soc_try_rebind_card();
3214 
3215 	return 0;
3216 
3217 err_cleanup:
3218 	snd_soc_component_cleanup(component);
3219 err_free:
3220 	return ret;
3221 }
3222 EXPORT_SYMBOL_GPL(snd_soc_add_component);
3223 
3224 int snd_soc_register_component(struct device *dev,
3225 			const struct snd_soc_component_driver *component_driver,
3226 			struct snd_soc_dai_driver *dai_drv,
3227 			int num_dai)
3228 {
3229 	struct snd_soc_component *component;
3230 
3231 	component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL);
3232 	if (!component)
3233 		return -ENOMEM;
3234 
3235 	return snd_soc_add_component(dev, component, component_driver,
3236 				     dai_drv, num_dai);
3237 }
3238 EXPORT_SYMBOL_GPL(snd_soc_register_component);
3239 
3240 /**
3241  * snd_soc_unregister_component - Unregister all related component
3242  * from the ASoC core
3243  *
3244  * @dev: The device to unregister
3245  */
3246 static int __snd_soc_unregister_component(struct device *dev)
3247 {
3248 	struct snd_soc_component *component;
3249 	int found = 0;
3250 
3251 	mutex_lock(&client_mutex);
3252 	for_each_component(component) {
3253 		if (dev != component->dev)
3254 			continue;
3255 
3256 		snd_soc_tplg_component_remove(component,
3257 					      SND_SOC_TPLG_INDEX_ALL);
3258 		snd_soc_component_del_unlocked(component);
3259 		found = 1;
3260 		break;
3261 	}
3262 	mutex_unlock(&client_mutex);
3263 
3264 	if (found)
3265 		snd_soc_component_cleanup(component);
3266 
3267 	return found;
3268 }
3269 
3270 void snd_soc_unregister_component(struct device *dev)
3271 {
3272 	while (__snd_soc_unregister_component(dev))
3273 		;
3274 }
3275 EXPORT_SYMBOL_GPL(snd_soc_unregister_component);
3276 
3277 struct snd_soc_component *snd_soc_lookup_component(struct device *dev,
3278 						   const char *driver_name)
3279 {
3280 	struct snd_soc_component *component;
3281 	struct snd_soc_component *ret;
3282 
3283 	ret = NULL;
3284 	mutex_lock(&client_mutex);
3285 	for_each_component(component) {
3286 		if (dev != component->dev)
3287 			continue;
3288 
3289 		if (driver_name &&
3290 		    (driver_name != component->driver->name) &&
3291 		    (strcmp(component->driver->name, driver_name) != 0))
3292 			continue;
3293 
3294 		ret = component;
3295 		break;
3296 	}
3297 	mutex_unlock(&client_mutex);
3298 
3299 	return ret;
3300 }
3301 EXPORT_SYMBOL_GPL(snd_soc_lookup_component);
3302 
3303 /* Retrieve a card's name from device tree */
3304 int snd_soc_of_parse_card_name(struct snd_soc_card *card,
3305 			       const char *propname)
3306 {
3307 	struct device_node *np;
3308 	int ret;
3309 
3310 	if (!card->dev) {
3311 		pr_err("card->dev is not set before calling %s\n", __func__);
3312 		return -EINVAL;
3313 	}
3314 
3315 	np = card->dev->of_node;
3316 
3317 	ret = of_property_read_string_index(np, propname, 0, &card->name);
3318 	/*
3319 	 * EINVAL means the property does not exist. This is fine providing
3320 	 * card->name was previously set, which is checked later in
3321 	 * snd_soc_register_card.
3322 	 */
3323 	if (ret < 0 && ret != -EINVAL) {
3324 		dev_err(card->dev,
3325 			"ASoC: Property '%s' could not be read: %d\n",
3326 			propname, ret);
3327 		return ret;
3328 	}
3329 
3330 	return 0;
3331 }
3332 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name);
3333 
3334 static const struct snd_soc_dapm_widget simple_widgets[] = {
3335 	SND_SOC_DAPM_MIC("Microphone", NULL),
3336 	SND_SOC_DAPM_LINE("Line", NULL),
3337 	SND_SOC_DAPM_HP("Headphone", NULL),
3338 	SND_SOC_DAPM_SPK("Speaker", NULL),
3339 };
3340 
3341 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
3342 					  const char *propname)
3343 {
3344 	struct device_node *np = card->dev->of_node;
3345 	struct snd_soc_dapm_widget *widgets;
3346 	const char *template, *wname;
3347 	int i, j, num_widgets, ret;
3348 
3349 	num_widgets = of_property_count_strings(np, propname);
3350 	if (num_widgets < 0) {
3351 		dev_err(card->dev,
3352 			"ASoC: Property '%s' does not exist\n",	propname);
3353 		return -EINVAL;
3354 	}
3355 	if (num_widgets & 1) {
3356 		dev_err(card->dev,
3357 			"ASoC: Property '%s' length is not even\n", propname);
3358 		return -EINVAL;
3359 	}
3360 
3361 	num_widgets /= 2;
3362 	if (!num_widgets) {
3363 		dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
3364 			propname);
3365 		return -EINVAL;
3366 	}
3367 
3368 	widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets),
3369 			       GFP_KERNEL);
3370 	if (!widgets) {
3371 		dev_err(card->dev,
3372 			"ASoC: Could not allocate memory for widgets\n");
3373 		return -ENOMEM;
3374 	}
3375 
3376 	for (i = 0; i < num_widgets; i++) {
3377 		ret = of_property_read_string_index(np, propname,
3378 			2 * i, &template);
3379 		if (ret) {
3380 			dev_err(card->dev,
3381 				"ASoC: Property '%s' index %d read error:%d\n",
3382 				propname, 2 * i, ret);
3383 			return -EINVAL;
3384 		}
3385 
3386 		for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) {
3387 			if (!strncmp(template, simple_widgets[j].name,
3388 				     strlen(simple_widgets[j].name))) {
3389 				widgets[i] = simple_widgets[j];
3390 				break;
3391 			}
3392 		}
3393 
3394 		if (j >= ARRAY_SIZE(simple_widgets)) {
3395 			dev_err(card->dev,
3396 				"ASoC: DAPM widget '%s' is not supported\n",
3397 				template);
3398 			return -EINVAL;
3399 		}
3400 
3401 		ret = of_property_read_string_index(np, propname,
3402 						    (2 * i) + 1,
3403 						    &wname);
3404 		if (ret) {
3405 			dev_err(card->dev,
3406 				"ASoC: Property '%s' index %d read error:%d\n",
3407 				propname, (2 * i) + 1, ret);
3408 			return -EINVAL;
3409 		}
3410 
3411 		widgets[i].name = wname;
3412 	}
3413 
3414 	card->of_dapm_widgets = widgets;
3415 	card->num_of_dapm_widgets = num_widgets;
3416 
3417 	return 0;
3418 }
3419 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets);
3420 
3421 int snd_soc_of_get_slot_mask(struct device_node *np,
3422 			     const char *prop_name,
3423 			     unsigned int *mask)
3424 {
3425 	u32 val;
3426 	const __be32 *of_slot_mask = of_get_property(np, prop_name, &val);
3427 	int i;
3428 
3429 	if (!of_slot_mask)
3430 		return 0;
3431 	val /= sizeof(u32);
3432 	for (i = 0; i < val; i++)
3433 		if (be32_to_cpup(&of_slot_mask[i]))
3434 			*mask |= (1 << i);
3435 
3436 	return val;
3437 }
3438 EXPORT_SYMBOL_GPL(snd_soc_of_get_slot_mask);
3439 
3440 int snd_soc_of_parse_tdm_slot(struct device_node *np,
3441 			      unsigned int *tx_mask,
3442 			      unsigned int *rx_mask,
3443 			      unsigned int *slots,
3444 			      unsigned int *slot_width)
3445 {
3446 	u32 val;
3447 	int ret;
3448 
3449 	if (tx_mask)
3450 		snd_soc_of_get_slot_mask(np, "dai-tdm-slot-tx-mask", tx_mask);
3451 	if (rx_mask)
3452 		snd_soc_of_get_slot_mask(np, "dai-tdm-slot-rx-mask", rx_mask);
3453 
3454 	if (of_property_read_bool(np, "dai-tdm-slot-num")) {
3455 		ret = of_property_read_u32(np, "dai-tdm-slot-num", &val);
3456 		if (ret)
3457 			return ret;
3458 
3459 		if (slots)
3460 			*slots = val;
3461 	}
3462 
3463 	if (of_property_read_bool(np, "dai-tdm-slot-width")) {
3464 		ret = of_property_read_u32(np, "dai-tdm-slot-width", &val);
3465 		if (ret)
3466 			return ret;
3467 
3468 		if (slot_width)
3469 			*slot_width = val;
3470 	}
3471 
3472 	return 0;
3473 }
3474 EXPORT_SYMBOL_GPL(snd_soc_of_parse_tdm_slot);
3475 
3476 void snd_soc_of_parse_node_prefix(struct device_node *np,
3477 				  struct snd_soc_codec_conf *codec_conf,
3478 				  struct device_node *of_node,
3479 				  const char *propname)
3480 {
3481 	const char *str;
3482 	int ret;
3483 
3484 	ret = of_property_read_string(np, propname, &str);
3485 	if (ret < 0) {
3486 		/* no prefix is not error */
3487 		return;
3488 	}
3489 
3490 	codec_conf->of_node	= of_node;
3491 	codec_conf->name_prefix	= str;
3492 }
3493 EXPORT_SYMBOL_GPL(snd_soc_of_parse_node_prefix);
3494 
3495 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
3496 				   const char *propname)
3497 {
3498 	struct device_node *np = card->dev->of_node;
3499 	int num_routes;
3500 	struct snd_soc_dapm_route *routes;
3501 	int i, ret;
3502 
3503 	num_routes = of_property_count_strings(np, propname);
3504 	if (num_routes < 0 || num_routes & 1) {
3505 		dev_err(card->dev,
3506 			"ASoC: Property '%s' does not exist or its length is not even\n",
3507 			propname);
3508 		return -EINVAL;
3509 	}
3510 	num_routes /= 2;
3511 	if (!num_routes) {
3512 		dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
3513 			propname);
3514 		return -EINVAL;
3515 	}
3516 
3517 	routes = devm_kcalloc(card->dev, num_routes, sizeof(*routes),
3518 			      GFP_KERNEL);
3519 	if (!routes) {
3520 		dev_err(card->dev,
3521 			"ASoC: Could not allocate DAPM route table\n");
3522 		return -EINVAL;
3523 	}
3524 
3525 	for (i = 0; i < num_routes; i++) {
3526 		ret = of_property_read_string_index(np, propname,
3527 			2 * i, &routes[i].sink);
3528 		if (ret) {
3529 			dev_err(card->dev,
3530 				"ASoC: Property '%s' index %d could not be read: %d\n",
3531 				propname, 2 * i, ret);
3532 			return -EINVAL;
3533 		}
3534 		ret = of_property_read_string_index(np, propname,
3535 			(2 * i) + 1, &routes[i].source);
3536 		if (ret) {
3537 			dev_err(card->dev,
3538 				"ASoC: Property '%s' index %d could not be read: %d\n",
3539 				propname, (2 * i) + 1, ret);
3540 			return -EINVAL;
3541 		}
3542 	}
3543 
3544 	card->num_of_dapm_routes = num_routes;
3545 	card->of_dapm_routes = routes;
3546 
3547 	return 0;
3548 }
3549 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing);
3550 
3551 unsigned int snd_soc_of_parse_daifmt(struct device_node *np,
3552 				     const char *prefix,
3553 				     struct device_node **bitclkmaster,
3554 				     struct device_node **framemaster)
3555 {
3556 	int ret, i;
3557 	char prop[128];
3558 	unsigned int format = 0;
3559 	int bit, frame;
3560 	const char *str;
3561 	struct {
3562 		char *name;
3563 		unsigned int val;
3564 	} of_fmt_table[] = {
3565 		{ "i2s",	SND_SOC_DAIFMT_I2S },
3566 		{ "right_j",	SND_SOC_DAIFMT_RIGHT_J },
3567 		{ "left_j",	SND_SOC_DAIFMT_LEFT_J },
3568 		{ "dsp_a",	SND_SOC_DAIFMT_DSP_A },
3569 		{ "dsp_b",	SND_SOC_DAIFMT_DSP_B },
3570 		{ "ac97",	SND_SOC_DAIFMT_AC97 },
3571 		{ "pdm",	SND_SOC_DAIFMT_PDM},
3572 		{ "msb",	SND_SOC_DAIFMT_MSB },
3573 		{ "lsb",	SND_SOC_DAIFMT_LSB },
3574 	};
3575 
3576 	if (!prefix)
3577 		prefix = "";
3578 
3579 	/*
3580 	 * check "dai-format = xxx"
3581 	 * or    "[prefix]format = xxx"
3582 	 * SND_SOC_DAIFMT_FORMAT_MASK area
3583 	 */
3584 	ret = of_property_read_string(np, "dai-format", &str);
3585 	if (ret < 0) {
3586 		snprintf(prop, sizeof(prop), "%sformat", prefix);
3587 		ret = of_property_read_string(np, prop, &str);
3588 	}
3589 	if (ret == 0) {
3590 		for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) {
3591 			if (strcmp(str, of_fmt_table[i].name) == 0) {
3592 				format |= of_fmt_table[i].val;
3593 				break;
3594 			}
3595 		}
3596 	}
3597 
3598 	/*
3599 	 * check "[prefix]continuous-clock"
3600 	 * SND_SOC_DAIFMT_CLOCK_MASK area
3601 	 */
3602 	snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix);
3603 	if (of_property_read_bool(np, prop))
3604 		format |= SND_SOC_DAIFMT_CONT;
3605 	else
3606 		format |= SND_SOC_DAIFMT_GATED;
3607 
3608 	/*
3609 	 * check "[prefix]bitclock-inversion"
3610 	 * check "[prefix]frame-inversion"
3611 	 * SND_SOC_DAIFMT_INV_MASK area
3612 	 */
3613 	snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix);
3614 	bit = !!of_get_property(np, prop, NULL);
3615 
3616 	snprintf(prop, sizeof(prop), "%sframe-inversion", prefix);
3617 	frame = !!of_get_property(np, prop, NULL);
3618 
3619 	switch ((bit << 4) + frame) {
3620 	case 0x11:
3621 		format |= SND_SOC_DAIFMT_IB_IF;
3622 		break;
3623 	case 0x10:
3624 		format |= SND_SOC_DAIFMT_IB_NF;
3625 		break;
3626 	case 0x01:
3627 		format |= SND_SOC_DAIFMT_NB_IF;
3628 		break;
3629 	default:
3630 		/* SND_SOC_DAIFMT_NB_NF is default */
3631 		break;
3632 	}
3633 
3634 	/*
3635 	 * check "[prefix]bitclock-master"
3636 	 * check "[prefix]frame-master"
3637 	 * SND_SOC_DAIFMT_MASTER_MASK area
3638 	 */
3639 	snprintf(prop, sizeof(prop), "%sbitclock-master", prefix);
3640 	bit = !!of_get_property(np, prop, NULL);
3641 	if (bit && bitclkmaster)
3642 		*bitclkmaster = of_parse_phandle(np, prop, 0);
3643 
3644 	snprintf(prop, sizeof(prop), "%sframe-master", prefix);
3645 	frame = !!of_get_property(np, prop, NULL);
3646 	if (frame && framemaster)
3647 		*framemaster = of_parse_phandle(np, prop, 0);
3648 
3649 	switch ((bit << 4) + frame) {
3650 	case 0x11:
3651 		format |= SND_SOC_DAIFMT_CBM_CFM;
3652 		break;
3653 	case 0x10:
3654 		format |= SND_SOC_DAIFMT_CBM_CFS;
3655 		break;
3656 	case 0x01:
3657 		format |= SND_SOC_DAIFMT_CBS_CFM;
3658 		break;
3659 	default:
3660 		format |= SND_SOC_DAIFMT_CBS_CFS;
3661 		break;
3662 	}
3663 
3664 	return format;
3665 }
3666 EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt);
3667 
3668 int snd_soc_get_dai_id(struct device_node *ep)
3669 {
3670 	struct snd_soc_component *component;
3671 	struct snd_soc_dai_link_component dlc;
3672 	int ret;
3673 
3674 	dlc.of_node	= of_graph_get_port_parent(ep);
3675 	dlc.name	= NULL;
3676 	/*
3677 	 * For example HDMI case, HDMI has video/sound port,
3678 	 * but ALSA SoC needs sound port number only.
3679 	 * Thus counting HDMI DT port/endpoint doesn't work.
3680 	 * Then, it should have .of_xlate_dai_id
3681 	 */
3682 	ret = -ENOTSUPP;
3683 	mutex_lock(&client_mutex);
3684 	component = soc_find_component(&dlc);
3685 	if (component &&
3686 	    component->driver->of_xlate_dai_id)
3687 		ret = component->driver->of_xlate_dai_id(component, ep);
3688 	mutex_unlock(&client_mutex);
3689 
3690 	of_node_put(dlc.of_node);
3691 
3692 	return ret;
3693 }
3694 EXPORT_SYMBOL_GPL(snd_soc_get_dai_id);
3695 
3696 int snd_soc_get_dai_name(struct of_phandle_args *args,
3697 				const char **dai_name)
3698 {
3699 	struct snd_soc_component *pos;
3700 	struct device_node *component_of_node;
3701 	int ret = -EPROBE_DEFER;
3702 
3703 	mutex_lock(&client_mutex);
3704 	for_each_component(pos) {
3705 		component_of_node = soc_component_to_node(pos);
3706 
3707 		if (component_of_node != args->np)
3708 			continue;
3709 
3710 		if (pos->driver->of_xlate_dai_name) {
3711 			ret = pos->driver->of_xlate_dai_name(pos,
3712 							     args,
3713 							     dai_name);
3714 		} else {
3715 			struct snd_soc_dai *dai;
3716 			int id = -1;
3717 
3718 			switch (args->args_count) {
3719 			case 0:
3720 				id = 0; /* same as dai_drv[0] */
3721 				break;
3722 			case 1:
3723 				id = args->args[0];
3724 				break;
3725 			default:
3726 				/* not supported */
3727 				break;
3728 			}
3729 
3730 			if (id < 0 || id >= pos->num_dai) {
3731 				ret = -EINVAL;
3732 				continue;
3733 			}
3734 
3735 			ret = 0;
3736 
3737 			/* find target DAI */
3738 			for_each_component_dais(pos, dai) {
3739 				if (id == 0)
3740 					break;
3741 				id--;
3742 			}
3743 
3744 			*dai_name = dai->driver->name;
3745 			if (!*dai_name)
3746 				*dai_name = pos->name;
3747 		}
3748 
3749 		break;
3750 	}
3751 	mutex_unlock(&client_mutex);
3752 	return ret;
3753 }
3754 EXPORT_SYMBOL_GPL(snd_soc_get_dai_name);
3755 
3756 int snd_soc_of_get_dai_name(struct device_node *of_node,
3757 			    const char **dai_name)
3758 {
3759 	struct of_phandle_args args;
3760 	int ret;
3761 
3762 	ret = of_parse_phandle_with_args(of_node, "sound-dai",
3763 					 "#sound-dai-cells", 0, &args);
3764 	if (ret)
3765 		return ret;
3766 
3767 	ret = snd_soc_get_dai_name(&args, dai_name);
3768 
3769 	of_node_put(args.np);
3770 
3771 	return ret;
3772 }
3773 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name);
3774 
3775 /*
3776  * snd_soc_of_put_dai_link_codecs - Dereference device nodes in the codecs array
3777  * @dai_link: DAI link
3778  *
3779  * Dereference device nodes acquired by snd_soc_of_get_dai_link_codecs().
3780  */
3781 void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link)
3782 {
3783 	struct snd_soc_dai_link_component *component;
3784 	int index;
3785 
3786 	for_each_link_codecs(dai_link, index, component) {
3787 		if (!component->of_node)
3788 			break;
3789 		of_node_put(component->of_node);
3790 		component->of_node = NULL;
3791 	}
3792 }
3793 EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_codecs);
3794 
3795 /*
3796  * snd_soc_of_get_dai_link_codecs - Parse a list of CODECs in the devicetree
3797  * @dev: Card device
3798  * @of_node: Device node
3799  * @dai_link: DAI link
3800  *
3801  * Builds an array of CODEC DAI components from the DAI link property
3802  * 'sound-dai'.
3803  * The array is set in the DAI link and the number of DAIs is set accordingly.
3804  * The device nodes in the array (of_node) must be dereferenced by calling
3805  * snd_soc_of_put_dai_link_codecs() on @dai_link.
3806  *
3807  * Returns 0 for success
3808  */
3809 int snd_soc_of_get_dai_link_codecs(struct device *dev,
3810 				   struct device_node *of_node,
3811 				   struct snd_soc_dai_link *dai_link)
3812 {
3813 	struct of_phandle_args args;
3814 	struct snd_soc_dai_link_component *component;
3815 	char *name;
3816 	int index, num_codecs, ret;
3817 
3818 	/* Count the number of CODECs */
3819 	name = "sound-dai";
3820 	num_codecs = of_count_phandle_with_args(of_node, name,
3821 						"#sound-dai-cells");
3822 	if (num_codecs <= 0) {
3823 		if (num_codecs == -ENOENT)
3824 			dev_err(dev, "No 'sound-dai' property\n");
3825 		else
3826 			dev_err(dev, "Bad phandle in 'sound-dai'\n");
3827 		return num_codecs;
3828 	}
3829 	component = devm_kcalloc(dev,
3830 				 num_codecs, sizeof(*component),
3831 				 GFP_KERNEL);
3832 	if (!component)
3833 		return -ENOMEM;
3834 	dai_link->codecs = component;
3835 	dai_link->num_codecs = num_codecs;
3836 
3837 	/* Parse the list */
3838 	for_each_link_codecs(dai_link, index, component) {
3839 		ret = of_parse_phandle_with_args(of_node, name,
3840 						 "#sound-dai-cells",
3841 						 index, &args);
3842 		if (ret)
3843 			goto err;
3844 		component->of_node = args.np;
3845 		ret = snd_soc_get_dai_name(&args, &component->dai_name);
3846 		if (ret < 0)
3847 			goto err;
3848 	}
3849 	return 0;
3850 err:
3851 	snd_soc_of_put_dai_link_codecs(dai_link);
3852 	dai_link->codecs = NULL;
3853 	dai_link->num_codecs = 0;
3854 	return ret;
3855 }
3856 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_codecs);
3857 
3858 static int __init snd_soc_init(void)
3859 {
3860 	snd_soc_debugfs_init();
3861 	snd_soc_util_init();
3862 
3863 	return platform_driver_register(&soc_driver);
3864 }
3865 module_init(snd_soc_init);
3866 
3867 static void __exit snd_soc_exit(void)
3868 {
3869 	snd_soc_util_exit();
3870 	snd_soc_debugfs_exit();
3871 
3872 	platform_driver_unregister(&soc_driver);
3873 }
3874 module_exit(snd_soc_exit);
3875 
3876 /* Module information */
3877 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
3878 MODULE_DESCRIPTION("ALSA SoC Core");
3879 MODULE_LICENSE("GPL");
3880 MODULE_ALIAS("platform:soc-audio");
3881