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