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