cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

soc-core.c (87859B)


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