Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 //
0003 // soc-core.c  --  ALSA SoC Audio Layer
0004 //
0005 // Copyright 2005 Wolfson Microelectronics PLC.
0006 // Copyright 2005 Openedhand Ltd.
0007 // Copyright (C) 2010 Slimlogic Ltd.
0008 // Copyright (C) 2010 Texas Instruments Inc.
0009 //
0010 // Author: Liam Girdwood <lrg@slimlogic.co.uk>
0011 //         with code, comments and ideas from :-
0012 //         Richard Purdie <richard@openedhand.com>
0013 //
0014 //  TODO:
0015 //   o Add hw rules to enforce rates, etc.
0016 //   o More testing with other codecs/machines.
0017 //   o Add more codecs and platforms to ensure good API coverage.
0018 //   o Support TDM on PCM and I2S
0019 
0020 #include <linux/module.h>
0021 #include <linux/moduleparam.h>
0022 #include <linux/init.h>
0023 #include <linux/delay.h>
0024 #include <linux/pm.h>
0025 #include <linux/bitops.h>
0026 #include <linux/debugfs.h>
0027 #include <linux/platform_device.h>
0028 #include <linux/pinctrl/consumer.h>
0029 #include <linux/ctype.h>
0030 #include <linux/slab.h>
0031 #include <linux/of.h>
0032 #include <linux/of_graph.h>
0033 #include <linux/dmi.h>
0034 #include <linux/acpi.h>
0035 #include <sound/core.h>
0036 #include <sound/pcm.h>
0037 #include <sound/pcm_params.h>
0038 #include <sound/soc.h>
0039 #include <sound/soc-dpcm.h>
0040 #include <sound/soc-topology.h>
0041 #include <sound/soc-link.h>
0042 #include <sound/initval.h>
0043 
0044 #define CREATE_TRACE_POINTS
0045 #include <trace/events/asoc.h>
0046 
0047 static DEFINE_MUTEX(client_mutex);
0048 static LIST_HEAD(component_list);
0049 static LIST_HEAD(unbind_card_list);
0050 
0051 #define for_each_component(component)           \
0052     list_for_each_entry(component, &component_list, list)
0053 
0054 /*
0055  * This is used if driver don't need to have CPU/Codec/Platform
0056  * dai_link. see soc.h
0057  */
0058 struct snd_soc_dai_link_component null_dailink_component[0];
0059 EXPORT_SYMBOL_GPL(null_dailink_component);
0060 
0061 /*
0062  * This is a timeout to do a DAPM powerdown after a stream is closed().
0063  * It can be used to eliminate pops between different playback streams, e.g.
0064  * between two audio tracks.
0065  */
0066 static int pmdown_time = 5000;
0067 module_param(pmdown_time, int, 0);
0068 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
0069 
0070 static ssize_t pmdown_time_show(struct device *dev,
0071                 struct device_attribute *attr, char *buf)
0072 {
0073     struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
0074 
0075     return sprintf(buf, "%ld\n", rtd->pmdown_time);
0076 }
0077 
0078 static ssize_t pmdown_time_store(struct device *dev,
0079                  struct device_attribute *attr,
0080                  const char *buf, size_t count)
0081 {
0082     struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
0083     int ret;
0084 
0085     ret = kstrtol(buf, 10, &rtd->pmdown_time);
0086     if (ret)
0087         return ret;
0088 
0089     return count;
0090 }
0091 
0092 static DEVICE_ATTR_RW(pmdown_time);
0093 
0094 static struct attribute *soc_dev_attrs[] = {
0095     &dev_attr_pmdown_time.attr,
0096     NULL
0097 };
0098 
0099 static umode_t soc_dev_attr_is_visible(struct kobject *kobj,
0100                        struct attribute *attr, int idx)
0101 {
0102     struct device *dev = kobj_to_dev(kobj);
0103     struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev);
0104 
0105     if (!rtd)
0106         return 0;
0107 
0108     if (attr == &dev_attr_pmdown_time.attr)
0109         return attr->mode; /* always visible */
0110     return rtd->num_codecs ? attr->mode : 0; /* enabled only with codec */
0111 }
0112 
0113 static const struct attribute_group soc_dapm_dev_group = {
0114     .attrs = soc_dapm_dev_attrs,
0115     .is_visible = soc_dev_attr_is_visible,
0116 };
0117 
0118 static const struct attribute_group soc_dev_group = {
0119     .attrs = soc_dev_attrs,
0120     .is_visible = soc_dev_attr_is_visible,
0121 };
0122 
0123 static const struct attribute_group *soc_dev_attr_groups[] = {
0124     &soc_dapm_dev_group,
0125     &soc_dev_group,
0126     NULL
0127 };
0128 
0129 #ifdef CONFIG_DEBUG_FS
0130 struct dentry *snd_soc_debugfs_root;
0131 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root);
0132 
0133 static void soc_init_component_debugfs(struct snd_soc_component *component)
0134 {
0135     if (!component->card->debugfs_card_root)
0136         return;
0137 
0138     if (component->debugfs_prefix) {
0139         char *name;
0140 
0141         name = kasprintf(GFP_KERNEL, "%s:%s",
0142             component->debugfs_prefix, component->name);
0143         if (name) {
0144             component->debugfs_root = debugfs_create_dir(name,
0145                 component->card->debugfs_card_root);
0146             kfree(name);
0147         }
0148     } else {
0149         component->debugfs_root = debugfs_create_dir(component->name,
0150                 component->card->debugfs_card_root);
0151     }
0152 
0153     snd_soc_dapm_debugfs_init(snd_soc_component_get_dapm(component),
0154         component->debugfs_root);
0155 }
0156 
0157 static void soc_cleanup_component_debugfs(struct snd_soc_component *component)
0158 {
0159     if (!component->debugfs_root)
0160         return;
0161     debugfs_remove_recursive(component->debugfs_root);
0162     component->debugfs_root = NULL;
0163 }
0164 
0165 static int dai_list_show(struct seq_file *m, void *v)
0166 {
0167     struct snd_soc_component *component;
0168     struct snd_soc_dai *dai;
0169 
0170     mutex_lock(&client_mutex);
0171 
0172     for_each_component(component)
0173         for_each_component_dais(component, dai)
0174             seq_printf(m, "%s\n", dai->name);
0175 
0176     mutex_unlock(&client_mutex);
0177 
0178     return 0;
0179 }
0180 DEFINE_SHOW_ATTRIBUTE(dai_list);
0181 
0182 static int component_list_show(struct seq_file *m, void *v)
0183 {
0184     struct snd_soc_component *component;
0185 
0186     mutex_lock(&client_mutex);
0187 
0188     for_each_component(component)
0189         seq_printf(m, "%s\n", component->name);
0190 
0191     mutex_unlock(&client_mutex);
0192 
0193     return 0;
0194 }
0195 DEFINE_SHOW_ATTRIBUTE(component_list);
0196 
0197 static void soc_init_card_debugfs(struct snd_soc_card *card)
0198 {
0199     card->debugfs_card_root = debugfs_create_dir(card->name,
0200                              snd_soc_debugfs_root);
0201 
0202     debugfs_create_u32("dapm_pop_time", 0644, card->debugfs_card_root,
0203                &card->pop_time);
0204 
0205     snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root);
0206 }
0207 
0208 static void soc_cleanup_card_debugfs(struct snd_soc_card *card)
0209 {
0210     debugfs_remove_recursive(card->debugfs_card_root);
0211     card->debugfs_card_root = NULL;
0212 }
0213 
0214 static void snd_soc_debugfs_init(void)
0215 {
0216     snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL);
0217 
0218     debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL,
0219                 &dai_list_fops);
0220 
0221     debugfs_create_file("components", 0444, snd_soc_debugfs_root, NULL,
0222                 &component_list_fops);
0223 }
0224 
0225 static void snd_soc_debugfs_exit(void)
0226 {
0227     debugfs_remove_recursive(snd_soc_debugfs_root);
0228 }
0229 
0230 #else
0231 
0232 static inline void soc_init_component_debugfs(struct snd_soc_component *component) { }
0233 static inline void soc_cleanup_component_debugfs(struct snd_soc_component *component) { }
0234 static inline void soc_init_card_debugfs(struct snd_soc_card *card) { }
0235 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) { }
0236 static inline void snd_soc_debugfs_init(void) { }
0237 static inline void snd_soc_debugfs_exit(void) { }
0238 
0239 #endif
0240 
0241 static int snd_soc_rtd_add_component(struct snd_soc_pcm_runtime *rtd,
0242                      struct snd_soc_component *component)
0243 {
0244     struct snd_soc_component *comp;
0245     int i;
0246 
0247     for_each_rtd_components(rtd, i, comp) {
0248         /* already connected */
0249         if (comp == component)
0250             return 0;
0251     }
0252 
0253     /* see for_each_rtd_components */
0254     rtd->components[rtd->num_components] = component;
0255     rtd->num_components++;
0256 
0257     return 0;
0258 }
0259 
0260 struct snd_soc_component *snd_soc_rtdcom_lookup(struct snd_soc_pcm_runtime *rtd,
0261                         const char *driver_name)
0262 {
0263     struct snd_soc_component *component;
0264     int i;
0265 
0266     if (!driver_name)
0267         return NULL;
0268 
0269     /*
0270      * NOTE
0271      *
0272      * snd_soc_rtdcom_lookup() will find component from rtd by using
0273      * specified driver name.
0274      * But, if many components which have same driver name are connected
0275      * to 1 rtd, this function will return 1st found component.
0276      */
0277     for_each_rtd_components(rtd, i, component) {
0278         const char *component_name = component->driver->name;
0279 
0280         if (!component_name)
0281             continue;
0282 
0283         if ((component_name == driver_name) ||
0284             strcmp(component_name, driver_name) == 0)
0285             return component;
0286     }
0287 
0288     return NULL;
0289 }
0290 EXPORT_SYMBOL_GPL(snd_soc_rtdcom_lookup);
0291 
0292 struct snd_soc_component
0293 *snd_soc_lookup_component_nolocked(struct device *dev, const char *driver_name)
0294 {
0295     struct snd_soc_component *component;
0296     struct snd_soc_component *found_component;
0297 
0298     found_component = NULL;
0299     for_each_component(component) {
0300         if ((dev == component->dev) &&
0301             (!driver_name ||
0302              (driver_name == component->driver->name) ||
0303              (strcmp(component->driver->name, driver_name) == 0))) {
0304             found_component = component;
0305             break;
0306         }
0307     }
0308 
0309     return found_component;
0310 }
0311 EXPORT_SYMBOL_GPL(snd_soc_lookup_component_nolocked);
0312 
0313 struct snd_soc_component *snd_soc_lookup_component(struct device *dev,
0314                            const char *driver_name)
0315 {
0316     struct snd_soc_component *component;
0317 
0318     mutex_lock(&client_mutex);
0319     component = snd_soc_lookup_component_nolocked(dev, driver_name);
0320     mutex_unlock(&client_mutex);
0321 
0322     return component;
0323 }
0324 EXPORT_SYMBOL_GPL(snd_soc_lookup_component);
0325 
0326 struct snd_soc_pcm_runtime
0327 *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
0328              struct snd_soc_dai_link *dai_link)
0329 {
0330     struct snd_soc_pcm_runtime *rtd;
0331 
0332     for_each_card_rtds(card, rtd) {
0333         if (rtd->dai_link == dai_link)
0334             return rtd;
0335     }
0336     dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link->name);
0337     return NULL;
0338 }
0339 EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime);
0340 
0341 /*
0342  * Power down the audio subsystem pmdown_time msecs after close is called.
0343  * This is to ensure there are no pops or clicks in between any music tracks
0344  * due to DAPM power cycling.
0345  */
0346 void snd_soc_close_delayed_work(struct snd_soc_pcm_runtime *rtd)
0347 {
0348     struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
0349     int playback = SNDRV_PCM_STREAM_PLAYBACK;
0350 
0351     mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
0352 
0353     dev_dbg(rtd->dev,
0354         "ASoC: pop wq checking: %s status: %s waiting: %s\n",
0355         codec_dai->driver->playback.stream_name,
0356         snd_soc_dai_stream_active(codec_dai, playback) ?
0357         "active" : "inactive",
0358         rtd->pop_wait ? "yes" : "no");
0359 
0360     /* are we waiting on this codec DAI stream */
0361     if (rtd->pop_wait == 1) {
0362         rtd->pop_wait = 0;
0363         snd_soc_dapm_stream_event(rtd, playback,
0364                       SND_SOC_DAPM_STREAM_STOP);
0365     }
0366 
0367     mutex_unlock(&rtd->card->pcm_mutex);
0368 }
0369 EXPORT_SYMBOL_GPL(snd_soc_close_delayed_work);
0370 
0371 static void soc_release_rtd_dev(struct device *dev)
0372 {
0373     /* "dev" means "rtd->dev" */
0374     kfree(dev);
0375 }
0376 
0377 static void soc_free_pcm_runtime(struct snd_soc_pcm_runtime *rtd)
0378 {
0379     if (!rtd)
0380         return;
0381 
0382     list_del(&rtd->list);
0383 
0384     if (delayed_work_pending(&rtd->delayed_work))
0385         flush_delayed_work(&rtd->delayed_work);
0386     snd_soc_pcm_component_free(rtd);
0387 
0388     /*
0389      * we don't need to call kfree() for rtd->dev
0390      * see
0391      *  soc_release_rtd_dev()
0392      *
0393      * We don't need rtd->dev NULL check, because
0394      * it is alloced *before* rtd.
0395      * see
0396      *  soc_new_pcm_runtime()
0397      *
0398      * We don't need to mind freeing for rtd,
0399      * because it was created from dev (= rtd->dev)
0400      * see
0401      *  soc_new_pcm_runtime()
0402      *
0403      *      rtd = devm_kzalloc(dev, ...);
0404      *      rtd->dev = dev
0405      */
0406     device_unregister(rtd->dev);
0407 }
0408 
0409 static void close_delayed_work(struct work_struct *work) {
0410     struct snd_soc_pcm_runtime *rtd =
0411             container_of(work, struct snd_soc_pcm_runtime,
0412                      delayed_work.work);
0413 
0414     if (rtd->close_delayed_work_func)
0415         rtd->close_delayed_work_func(rtd);
0416 }
0417 
0418 static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
0419     struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
0420 {
0421     struct snd_soc_pcm_runtime *rtd;
0422     struct snd_soc_component *component;
0423     struct device *dev;
0424     int ret;
0425     int stream;
0426 
0427     /*
0428      * for rtd->dev
0429      */
0430     dev = kzalloc(sizeof(struct device), GFP_KERNEL);
0431     if (!dev)
0432         return NULL;
0433 
0434     dev->parent = card->dev;
0435     dev->release    = soc_release_rtd_dev;
0436 
0437     dev_set_name(dev, "%s", dai_link->name);
0438 
0439     ret = device_register(dev);
0440     if (ret < 0) {
0441         put_device(dev); /* soc_release_rtd_dev */
0442         return NULL;
0443     }
0444 
0445     /*
0446      * for rtd
0447      */
0448     rtd = devm_kzalloc(dev,
0449                sizeof(*rtd) +
0450                sizeof(*component) * (dai_link->num_cpus +
0451                          dai_link->num_codecs +
0452                          dai_link->num_platforms),
0453                GFP_KERNEL);
0454     if (!rtd) {
0455         device_unregister(dev);
0456         return NULL;
0457     }
0458 
0459     rtd->dev = dev;
0460     INIT_LIST_HEAD(&rtd->list);
0461     for_each_pcm_streams(stream) {
0462         INIT_LIST_HEAD(&rtd->dpcm[stream].be_clients);
0463         INIT_LIST_HEAD(&rtd->dpcm[stream].fe_clients);
0464     }
0465     dev_set_drvdata(dev, rtd);
0466     INIT_DELAYED_WORK(&rtd->delayed_work, close_delayed_work);
0467 
0468     /*
0469      * for rtd->dais
0470      */
0471     rtd->dais = devm_kcalloc(dev, dai_link->num_cpus + dai_link->num_codecs,
0472                     sizeof(struct snd_soc_dai *),
0473                     GFP_KERNEL);
0474     if (!rtd->dais)
0475         goto free_rtd;
0476 
0477     /*
0478      * dais = [][][][][][][][][][][][][][][][][][]
0479      *    ^cpu_dais         ^codec_dais
0480      *    |--- num_cpus ---|--- num_codecs --|
0481      * see
0482      *  asoc_rtd_to_cpu()
0483      *  asoc_rtd_to_codec()
0484      */
0485     rtd->num_cpus   = dai_link->num_cpus;
0486     rtd->num_codecs = dai_link->num_codecs;
0487     rtd->card   = card;
0488     rtd->dai_link   = dai_link;
0489     rtd->num    = card->num_rtd++;
0490 
0491     /* see for_each_card_rtds */
0492     list_add_tail(&rtd->list, &card->rtd_list);
0493 
0494     ret = device_add_groups(dev, soc_dev_attr_groups);
0495     if (ret < 0)
0496         goto free_rtd;
0497 
0498     return rtd;
0499 
0500 free_rtd:
0501     soc_free_pcm_runtime(rtd);
0502     return NULL;
0503 }
0504 
0505 static void snd_soc_flush_all_delayed_work(struct snd_soc_card *card)
0506 {
0507     struct snd_soc_pcm_runtime *rtd;
0508 
0509     for_each_card_rtds(card, rtd)
0510         flush_delayed_work(&rtd->delayed_work);
0511 }
0512 
0513 #ifdef CONFIG_PM_SLEEP
0514 static void soc_playback_digital_mute(struct snd_soc_card *card, int mute)
0515 {
0516     struct snd_soc_pcm_runtime *rtd;
0517     struct snd_soc_dai *dai;
0518     int playback = SNDRV_PCM_STREAM_PLAYBACK;
0519     int i;
0520 
0521     for_each_card_rtds(card, rtd) {
0522 
0523         if (rtd->dai_link->ignore_suspend)
0524             continue;
0525 
0526         for_each_rtd_dais(rtd, i, dai) {
0527             if (snd_soc_dai_stream_active(dai, playback))
0528                 snd_soc_dai_digital_mute(dai, mute, playback);
0529         }
0530     }
0531 }
0532 
0533 static void soc_dapm_suspend_resume(struct snd_soc_card *card, int event)
0534 {
0535     struct snd_soc_pcm_runtime *rtd;
0536     int stream;
0537 
0538     for_each_card_rtds(card, rtd) {
0539 
0540         if (rtd->dai_link->ignore_suspend)
0541             continue;
0542 
0543         for_each_pcm_streams(stream)
0544             snd_soc_dapm_stream_event(rtd, stream, event);
0545     }
0546 }
0547 
0548 /* powers down audio subsystem for suspend */
0549 int snd_soc_suspend(struct device *dev)
0550 {
0551     struct snd_soc_card *card = dev_get_drvdata(dev);
0552     struct snd_soc_component *component;
0553     struct snd_soc_pcm_runtime *rtd;
0554     int i;
0555 
0556     /* If the card is not initialized yet there is nothing to do */
0557     if (!card->instantiated)
0558         return 0;
0559 
0560     /*
0561      * Due to the resume being scheduled into a workqueue we could
0562      * suspend before that's finished - wait for it to complete.
0563      */
0564     snd_power_wait(card->snd_card);
0565 
0566     /* we're going to block userspace touching us until resume completes */
0567     snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot);
0568 
0569     /* mute any active DACs */
0570     soc_playback_digital_mute(card, 1);
0571 
0572     /* suspend all pcms */
0573     for_each_card_rtds(card, rtd) {
0574         if (rtd->dai_link->ignore_suspend)
0575             continue;
0576 
0577         snd_pcm_suspend_all(rtd->pcm);
0578     }
0579 
0580     snd_soc_card_suspend_pre(card);
0581 
0582     /* close any waiting streams */
0583     snd_soc_flush_all_delayed_work(card);
0584 
0585     soc_dapm_suspend_resume(card, SND_SOC_DAPM_STREAM_SUSPEND);
0586 
0587     /* Recheck all endpoints too, their state is affected by suspend */
0588     dapm_mark_endpoints_dirty(card);
0589     snd_soc_dapm_sync(&card->dapm);
0590 
0591     /* suspend all COMPONENTs */
0592     for_each_card_rtds(card, rtd) {
0593 
0594         if (rtd->dai_link->ignore_suspend)
0595             continue;
0596 
0597         for_each_rtd_components(rtd, i, component) {
0598             struct snd_soc_dapm_context *dapm =
0599                 snd_soc_component_get_dapm(component);
0600 
0601             /*
0602              * ignore if component was already suspended
0603              */
0604             if (snd_soc_component_is_suspended(component))
0605                 continue;
0606 
0607             /*
0608              * If there are paths active then the COMPONENT will be
0609              * held with bias _ON and should not be suspended.
0610              */
0611             switch (snd_soc_dapm_get_bias_level(dapm)) {
0612             case SND_SOC_BIAS_STANDBY:
0613                 /*
0614                  * If the COMPONENT is capable of idle
0615                  * bias off then being in STANDBY
0616                  * means it's doing something,
0617                  * otherwise fall through.
0618                  */
0619                 if (dapm->idle_bias_off) {
0620                     dev_dbg(component->dev,
0621                         "ASoC: idle_bias_off CODEC on over suspend\n");
0622                     break;
0623                 }
0624                 fallthrough;
0625 
0626             case SND_SOC_BIAS_OFF:
0627                 snd_soc_component_suspend(component);
0628                 if (component->regmap)
0629                     regcache_mark_dirty(component->regmap);
0630                 /* deactivate pins to sleep state */
0631                 pinctrl_pm_select_sleep_state(component->dev);
0632                 break;
0633             default:
0634                 dev_dbg(component->dev,
0635                     "ASoC: COMPONENT is on over suspend\n");
0636                 break;
0637             }
0638         }
0639     }
0640 
0641     snd_soc_card_suspend_post(card);
0642 
0643     return 0;
0644 }
0645 EXPORT_SYMBOL_GPL(snd_soc_suspend);
0646 
0647 /*
0648  * deferred resume work, so resume can complete before we finished
0649  * setting our codec back up, which can be very slow on I2C
0650  */
0651 static void soc_resume_deferred(struct work_struct *work)
0652 {
0653     struct snd_soc_card *card =
0654             container_of(work, struct snd_soc_card,
0655                      deferred_resume_work);
0656     struct snd_soc_component *component;
0657 
0658     /*
0659      * our power state is still SNDRV_CTL_POWER_D3hot from suspend time,
0660      * so userspace apps are blocked from touching us
0661      */
0662 
0663     dev_dbg(card->dev, "ASoC: starting resume work\n");
0664 
0665     /* Bring us up into D2 so that DAPM starts enabling things */
0666     snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2);
0667 
0668     snd_soc_card_resume_pre(card);
0669 
0670     for_each_card_components(card, component) {
0671         if (snd_soc_component_is_suspended(component))
0672             snd_soc_component_resume(component);
0673     }
0674 
0675     soc_dapm_suspend_resume(card, SND_SOC_DAPM_STREAM_RESUME);
0676 
0677     /* unmute any active DACs */
0678     soc_playback_digital_mute(card, 0);
0679 
0680     snd_soc_card_resume_post(card);
0681 
0682     dev_dbg(card->dev, "ASoC: resume work completed\n");
0683 
0684     /* Recheck all endpoints too, their state is affected by suspend */
0685     dapm_mark_endpoints_dirty(card);
0686     snd_soc_dapm_sync(&card->dapm);
0687 
0688     /* userspace can access us now we are back as we were before */
0689     snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0);
0690 }
0691 
0692 /* powers up audio subsystem after a suspend */
0693 int snd_soc_resume(struct device *dev)
0694 {
0695     struct snd_soc_card *card = dev_get_drvdata(dev);
0696     struct snd_soc_component *component;
0697 
0698     /* If the card is not initialized yet there is nothing to do */
0699     if (!card->instantiated)
0700         return 0;
0701 
0702     /* activate pins from sleep state */
0703     for_each_card_components(card, component)
0704         if (snd_soc_component_active(component))
0705             pinctrl_pm_select_default_state(component->dev);
0706 
0707     dev_dbg(dev, "ASoC: Scheduling resume work\n");
0708     if (!schedule_work(&card->deferred_resume_work))
0709         dev_err(dev, "ASoC: resume work item may be lost\n");
0710 
0711     return 0;
0712 }
0713 EXPORT_SYMBOL_GPL(snd_soc_resume);
0714 
0715 static void soc_resume_init(struct snd_soc_card *card)
0716 {
0717     /* deferred resume work */
0718     INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
0719 }
0720 #else
0721 #define snd_soc_suspend NULL
0722 #define snd_soc_resume NULL
0723 static inline void soc_resume_init(struct snd_soc_card *card) { }
0724 #endif
0725 
0726 static struct device_node
0727 *soc_component_to_node(struct snd_soc_component *component)
0728 {
0729     struct device_node *of_node;
0730 
0731     of_node = component->dev->of_node;
0732     if (!of_node && component->dev->parent)
0733         of_node = component->dev->parent->of_node;
0734 
0735     return of_node;
0736 }
0737 
0738 static int snd_soc_is_matching_component(
0739     const struct snd_soc_dai_link_component *dlc,
0740     struct snd_soc_component *component)
0741 {
0742     struct device_node *component_of_node;
0743 
0744     if (!dlc)
0745         return 0;
0746 
0747     component_of_node = soc_component_to_node(component);
0748 
0749     if (dlc->of_node && component_of_node != dlc->of_node)
0750         return 0;
0751     if (dlc->name && strcmp(component->name, dlc->name))
0752         return 0;
0753 
0754     return 1;
0755 }
0756 
0757 static struct snd_soc_component *soc_find_component(
0758     const struct snd_soc_dai_link_component *dlc)
0759 {
0760     struct snd_soc_component *component;
0761 
0762     lockdep_assert_held(&client_mutex);
0763 
0764     /*
0765      * NOTE
0766      *
0767      * It returns *1st* found component, but some driver
0768      * has few components by same of_node/name
0769      * ex)
0770      *  CPU component and generic DMAEngine component
0771      */
0772     for_each_component(component)
0773         if (snd_soc_is_matching_component(dlc, component))
0774             return component;
0775 
0776     return NULL;
0777 }
0778 
0779 /**
0780  * snd_soc_find_dai - Find a registered DAI
0781  *
0782  * @dlc: name of the DAI or the DAI driver and optional component info to match
0783  *
0784  * This function will search all registered components and their DAIs to
0785  * find the DAI of the same name. The component's of_node and name
0786  * should also match if being specified.
0787  *
0788  * Return: pointer of DAI, or NULL if not found.
0789  */
0790 struct snd_soc_dai *snd_soc_find_dai(
0791     const struct snd_soc_dai_link_component *dlc)
0792 {
0793     struct snd_soc_component *component;
0794     struct snd_soc_dai *dai;
0795 
0796     lockdep_assert_held(&client_mutex);
0797 
0798     /* Find CPU DAI from registered DAIs */
0799     for_each_component(component) {
0800         if (!snd_soc_is_matching_component(dlc, component))
0801             continue;
0802         for_each_component_dais(component, dai) {
0803             if (dlc->dai_name && strcmp(dai->name, dlc->dai_name)
0804                 && (!dai->driver->name
0805                 || strcmp(dai->driver->name, dlc->dai_name)))
0806                 continue;
0807 
0808             return dai;
0809         }
0810     }
0811 
0812     return NULL;
0813 }
0814 EXPORT_SYMBOL_GPL(snd_soc_find_dai);
0815 
0816 struct snd_soc_dai *snd_soc_find_dai_with_mutex(
0817     const struct snd_soc_dai_link_component *dlc)
0818 {
0819     struct snd_soc_dai *dai;
0820 
0821     mutex_lock(&client_mutex);
0822     dai = snd_soc_find_dai(dlc);
0823     mutex_unlock(&client_mutex);
0824 
0825     return dai;
0826 }
0827 EXPORT_SYMBOL_GPL(snd_soc_find_dai_with_mutex);
0828 
0829 static int soc_dai_link_sanity_check(struct snd_soc_card *card,
0830                      struct snd_soc_dai_link *link)
0831 {
0832     int i;
0833     struct snd_soc_dai_link_component *cpu, *codec, *platform;
0834 
0835     for_each_link_codecs(link, i, codec) {
0836         /*
0837          * Codec must be specified by 1 of name or OF node,
0838          * not both or neither.
0839          */
0840         if (!!codec->name == !!codec->of_node) {
0841             dev_err(card->dev, "ASoC: Neither/both codec name/of_node are set for %s\n",
0842                 link->name);
0843             return -EINVAL;
0844         }
0845 
0846         /* Codec DAI name must be specified */
0847         if (!codec->dai_name) {
0848             dev_err(card->dev, "ASoC: codec_dai_name not set for %s\n",
0849                 link->name);
0850             return -EINVAL;
0851         }
0852 
0853         /*
0854          * Defer card registration if codec component is not added to
0855          * component list.
0856          */
0857         if (!soc_find_component(codec)) {
0858             dev_dbg(card->dev,
0859                 "ASoC: codec component %s not found for link %s\n",
0860                 codec->name, link->name);
0861             return -EPROBE_DEFER;
0862         }
0863     }
0864 
0865     for_each_link_platforms(link, i, platform) {
0866         /*
0867          * Platform may be specified by either name or OF node, but it
0868          * can be left unspecified, then no components will be inserted
0869          * in the rtdcom list
0870          */
0871         if (!!platform->name == !!platform->of_node) {
0872             dev_err(card->dev,
0873                 "ASoC: Neither/both platform name/of_node are set for %s\n",
0874                 link->name);
0875             return -EINVAL;
0876         }
0877 
0878         /*
0879          * Defer card registration if platform component is not added to
0880          * component list.
0881          */
0882         if (!soc_find_component(platform)) {
0883             dev_dbg(card->dev,
0884                 "ASoC: platform component %s not found for link %s\n",
0885                 platform->name, link->name);
0886             return -EPROBE_DEFER;
0887         }
0888     }
0889 
0890     for_each_link_cpus(link, i, cpu) {
0891         /*
0892          * CPU device may be specified by either name or OF node, but
0893          * can be left unspecified, and will be matched based on DAI
0894          * name alone..
0895          */
0896         if (cpu->name && cpu->of_node) {
0897             dev_err(card->dev,
0898                 "ASoC: Neither/both cpu name/of_node are set for %s\n",
0899                 link->name);
0900             return -EINVAL;
0901         }
0902 
0903         /*
0904          * Defer card registration if cpu dai component is not added to
0905          * component list.
0906          */
0907         if ((cpu->of_node || cpu->name) &&
0908             !soc_find_component(cpu)) {
0909             dev_dbg(card->dev,
0910                 "ASoC: cpu component %s not found for link %s\n",
0911                 cpu->name, link->name);
0912             return -EPROBE_DEFER;
0913         }
0914 
0915         /*
0916          * At least one of CPU DAI name or CPU device name/node must be
0917          * specified
0918          */
0919         if (!cpu->dai_name &&
0920             !(cpu->name || cpu->of_node)) {
0921             dev_err(card->dev,
0922                 "ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n",
0923                 link->name);
0924             return -EINVAL;
0925         }
0926     }
0927 
0928     return 0;
0929 }
0930 
0931 /**
0932  * snd_soc_remove_pcm_runtime - Remove a pcm_runtime from card
0933  * @card: The ASoC card to which the pcm_runtime has
0934  * @rtd: The pcm_runtime to remove
0935  *
0936  * This function removes a pcm_runtime from the ASoC card.
0937  */
0938 void snd_soc_remove_pcm_runtime(struct snd_soc_card *card,
0939                 struct snd_soc_pcm_runtime *rtd)
0940 {
0941     lockdep_assert_held(&client_mutex);
0942 
0943     /* release machine specific resources */
0944     snd_soc_link_exit(rtd);
0945 
0946     /*
0947      * Notify the machine driver for extra destruction
0948      */
0949     snd_soc_card_remove_dai_link(card, rtd->dai_link);
0950 
0951     soc_free_pcm_runtime(rtd);
0952 }
0953 EXPORT_SYMBOL_GPL(snd_soc_remove_pcm_runtime);
0954 
0955 /**
0956  * snd_soc_add_pcm_runtime - Add a pcm_runtime dynamically via dai_link
0957  * @card: The ASoC card to which the pcm_runtime is added
0958  * @dai_link: The DAI link to find pcm_runtime
0959  *
0960  * This function adds a pcm_runtime ASoC card by using dai_link.
0961  *
0962  * Note: Topology can use this API to add pcm_runtime when probing the
0963  * topology component. And machine drivers can still define static
0964  * DAI links in dai_link array.
0965  */
0966 int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
0967                 struct snd_soc_dai_link *dai_link)
0968 {
0969     struct snd_soc_pcm_runtime *rtd;
0970     struct snd_soc_dai_link_component *codec, *platform, *cpu;
0971     struct snd_soc_component *component;
0972     int i, ret;
0973 
0974     lockdep_assert_held(&client_mutex);
0975 
0976     /*
0977      * Notify the machine driver for extra initialization
0978      */
0979     ret = snd_soc_card_add_dai_link(card, dai_link);
0980     if (ret < 0)
0981         return ret;
0982 
0983     if (dai_link->ignore)
0984         return 0;
0985 
0986     dev_dbg(card->dev, "ASoC: binding %s\n", dai_link->name);
0987 
0988     ret = soc_dai_link_sanity_check(card, dai_link);
0989     if (ret < 0)
0990         return ret;
0991 
0992     rtd = soc_new_pcm_runtime(card, dai_link);
0993     if (!rtd)
0994         return -ENOMEM;
0995 
0996     for_each_link_cpus(dai_link, i, cpu) {
0997         asoc_rtd_to_cpu(rtd, i) = snd_soc_find_dai(cpu);
0998         if (!asoc_rtd_to_cpu(rtd, i)) {
0999             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 }
1034 EXPORT_SYMBOL_GPL(snd_soc_add_pcm_runtime);
1035 
1036 static 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;
1101 found:
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  */
1212 int 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 i;
1218     int ret;
1219 
1220     if (!dai_fmt)
1221         return 0;
1222 
1223     for_each_rtd_codec_dais(rtd, i, codec_dai) {
1224         ret = snd_soc_dai_set_fmt(codec_dai, dai_fmt);
1225         if (ret != 0 && ret != -ENOTSUPP)
1226             return ret;
1227     }
1228 
1229     /* Flip the polarity for the "CPU" end of link */
1230     dai_fmt = snd_soc_daifmt_clock_provider_flipped(dai_fmt);
1231 
1232     for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
1233         ret = snd_soc_dai_set_fmt(cpu_dai, dai_fmt);
1234         if (ret != 0 && ret != -ENOTSUPP)
1235             return ret;
1236     }
1237 
1238     return 0;
1239 }
1240 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt);
1241 
1242 static int soc_init_pcm_runtime(struct snd_soc_card *card,
1243                 struct snd_soc_pcm_runtime *rtd)
1244 {
1245     struct snd_soc_dai_link *dai_link = rtd->dai_link;
1246     struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
1247     struct snd_soc_component *component;
1248     int ret, num, i;
1249 
1250     /* set default power off timeout */
1251     rtd->pmdown_time = pmdown_time;
1252 
1253     /* do machine specific initialization */
1254     ret = snd_soc_link_init(rtd);
1255     if (ret < 0)
1256         return ret;
1257 
1258     snd_soc_runtime_get_dai_fmt(rtd);
1259     ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
1260     if (ret)
1261         return ret;
1262 
1263     /* add DPCM sysfs entries */
1264     soc_dpcm_debugfs_add(rtd);
1265 
1266     num = rtd->num;
1267 
1268     /*
1269      * most drivers will register their PCMs using DAI link ordering but
1270      * topology based drivers can use the DAI link id field to set PCM
1271      * device number and then use rtd + a base offset of the BEs.
1272      */
1273     for_each_rtd_components(rtd, i, component) {
1274         if (!component->driver->use_dai_pcm_id)
1275             continue;
1276 
1277         if (rtd->dai_link->no_pcm)
1278             num += component->driver->be_pcm_base;
1279         else
1280             num = rtd->dai_link->id;
1281     }
1282 
1283     /* create compress_device if possible */
1284     ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
1285     if (ret != -ENOTSUPP)
1286         return ret;
1287 
1288     /* create the pcm */
1289     ret = soc_new_pcm(rtd, num);
1290     if (ret < 0) {
1291         dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
1292             dai_link->stream_name, ret);
1293         return ret;
1294     }
1295 
1296     return snd_soc_pcm_dai_new(rtd);
1297 }
1298 
1299 static void soc_set_name_prefix(struct snd_soc_card *card,
1300                 struct snd_soc_component *component)
1301 {
1302     struct device_node *of_node = soc_component_to_node(component);
1303     const char *str;
1304     int ret, i;
1305 
1306     for (i = 0; i < card->num_configs; i++) {
1307         struct snd_soc_codec_conf *map = &card->codec_conf[i];
1308 
1309         if (snd_soc_is_matching_component(&map->dlc, component) &&
1310             map->name_prefix) {
1311             component->name_prefix = map->name_prefix;
1312             return;
1313         }
1314     }
1315 
1316     /*
1317      * If there is no configuration table or no match in the table,
1318      * check if a prefix is provided in the node
1319      */
1320     ret = of_property_read_string(of_node, "sound-name-prefix", &str);
1321     if (ret < 0)
1322         return;
1323 
1324     component->name_prefix = str;
1325 }
1326 
1327 static void soc_remove_component(struct snd_soc_component *component,
1328                  int probed)
1329 {
1330 
1331     if (!component->card)
1332         return;
1333 
1334     if (probed)
1335         snd_soc_component_remove(component);
1336 
1337     list_del_init(&component->card_list);
1338     snd_soc_dapm_free(snd_soc_component_get_dapm(component));
1339     soc_cleanup_component_debugfs(component);
1340     component->card = NULL;
1341     snd_soc_component_module_put_when_remove(component);
1342 }
1343 
1344 static int soc_probe_component(struct snd_soc_card *card,
1345                    struct snd_soc_component *component)
1346 {
1347     struct snd_soc_dapm_context *dapm =
1348         snd_soc_component_get_dapm(component);
1349     struct snd_soc_dai *dai;
1350     int probed = 0;
1351     int ret;
1352 
1353     if (snd_soc_component_is_dummy(component))
1354         return 0;
1355 
1356     if (component->card) {
1357         if (component->card != card) {
1358             dev_err(component->dev,
1359                 "Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n",
1360                 card->name, component->card->name);
1361             return -ENODEV;
1362         }
1363         return 0;
1364     }
1365 
1366     ret = snd_soc_component_module_get_when_probe(component);
1367     if (ret < 0)
1368         return ret;
1369 
1370     component->card = card;
1371     soc_set_name_prefix(card, component);
1372 
1373     soc_init_component_debugfs(component);
1374 
1375     snd_soc_dapm_init(dapm, card, component);
1376 
1377     ret = snd_soc_dapm_new_controls(dapm,
1378                     component->driver->dapm_widgets,
1379                     component->driver->num_dapm_widgets);
1380 
1381     if (ret != 0) {
1382         dev_err(component->dev,
1383             "Failed to create new controls %d\n", ret);
1384         goto err_probe;
1385     }
1386 
1387     for_each_component_dais(component, dai) {
1388         ret = snd_soc_dapm_new_dai_widgets(dapm, dai);
1389         if (ret != 0) {
1390             dev_err(component->dev,
1391                 "Failed to create DAI widgets %d\n", ret);
1392             goto err_probe;
1393         }
1394     }
1395 
1396     ret = snd_soc_component_probe(component);
1397     if (ret < 0)
1398         goto err_probe;
1399 
1400     WARN(dapm->idle_bias_off &&
1401          dapm->bias_level != SND_SOC_BIAS_OFF,
1402          "codec %s can not start from non-off bias with idle_bias_off==1\n",
1403          component->name);
1404     probed = 1;
1405 
1406     /*
1407      * machine specific init
1408      * see
1409      *  snd_soc_component_set_aux()
1410      */
1411     ret = snd_soc_component_init(component);
1412     if (ret < 0)
1413         goto err_probe;
1414 
1415     ret = snd_soc_add_component_controls(component,
1416                          component->driver->controls,
1417                          component->driver->num_controls);
1418     if (ret < 0)
1419         goto err_probe;
1420 
1421     ret = snd_soc_dapm_add_routes(dapm,
1422                       component->driver->dapm_routes,
1423                       component->driver->num_dapm_routes);
1424     if (ret < 0) {
1425         if (card->disable_route_checks) {
1426             dev_info(card->dev,
1427                  "%s: disable_route_checks set, ignoring errors on add_routes\n",
1428                  __func__);
1429         } else {
1430             dev_err(card->dev,
1431                 "%s: snd_soc_dapm_add_routes failed: %d\n",
1432                 __func__, ret);
1433             goto err_probe;
1434         }
1435     }
1436 
1437     /* see for_each_card_components */
1438     list_add(&component->card_list, &card->component_dev_list);
1439 
1440 err_probe:
1441     if (ret < 0)
1442         soc_remove_component(component, probed);
1443 
1444     return ret;
1445 }
1446 
1447 static void soc_remove_link_dais(struct snd_soc_card *card)
1448 {
1449     struct snd_soc_pcm_runtime *rtd;
1450     int order;
1451 
1452     for_each_comp_order(order) {
1453         for_each_card_rtds(card, rtd) {
1454             /* remove all rtd connected DAIs in good order */
1455             snd_soc_pcm_dai_remove(rtd, order);
1456         }
1457     }
1458 }
1459 
1460 static int soc_probe_link_dais(struct snd_soc_card *card)
1461 {
1462     struct snd_soc_pcm_runtime *rtd;
1463     int order, ret;
1464 
1465     for_each_comp_order(order) {
1466         for_each_card_rtds(card, rtd) {
1467 
1468             dev_dbg(card->dev,
1469                 "ASoC: probe %s dai link %d late %d\n",
1470                 card->name, rtd->num, order);
1471 
1472             /* probe all rtd connected DAIs in good order */
1473             ret = snd_soc_pcm_dai_probe(rtd, order);
1474             if (ret)
1475                 return ret;
1476         }
1477     }
1478 
1479     return 0;
1480 }
1481 
1482 static void soc_remove_link_components(struct snd_soc_card *card)
1483 {
1484     struct snd_soc_component *component;
1485     struct snd_soc_pcm_runtime *rtd;
1486     int i, order;
1487 
1488     for_each_comp_order(order) {
1489         for_each_card_rtds(card, rtd) {
1490             for_each_rtd_components(rtd, i, component) {
1491                 if (component->driver->remove_order != order)
1492                     continue;
1493 
1494                 soc_remove_component(component, 1);
1495             }
1496         }
1497     }
1498 }
1499 
1500 static int soc_probe_link_components(struct snd_soc_card *card)
1501 {
1502     struct snd_soc_component *component;
1503     struct snd_soc_pcm_runtime *rtd;
1504     int i, ret, order;
1505 
1506     for_each_comp_order(order) {
1507         for_each_card_rtds(card, rtd) {
1508             for_each_rtd_components(rtd, i, component) {
1509                 if (component->driver->probe_order != order)
1510                     continue;
1511 
1512                 ret = soc_probe_component(card, component);
1513                 if (ret < 0)
1514                     return ret;
1515             }
1516         }
1517     }
1518 
1519     return 0;
1520 }
1521 
1522 static void soc_unbind_aux_dev(struct snd_soc_card *card)
1523 {
1524     struct snd_soc_component *component, *_component;
1525 
1526     for_each_card_auxs_safe(card, component, _component) {
1527         /* for snd_soc_component_init() */
1528         snd_soc_component_set_aux(component, NULL);
1529         list_del(&component->card_aux_list);
1530     }
1531 }
1532 
1533 static int soc_bind_aux_dev(struct snd_soc_card *card)
1534 {
1535     struct snd_soc_component *component;
1536     struct snd_soc_aux_dev *aux;
1537     int i;
1538 
1539     for_each_card_pre_auxs(card, i, aux) {
1540         /* codecs, usually analog devices */
1541         component = soc_find_component(&aux->dlc);
1542         if (!component)
1543             return -EPROBE_DEFER;
1544 
1545         /* for snd_soc_component_init() */
1546         snd_soc_component_set_aux(component, aux);
1547         /* see for_each_card_auxs */
1548         list_add(&component->card_aux_list, &card->aux_comp_list);
1549     }
1550     return 0;
1551 }
1552 
1553 static int soc_probe_aux_devices(struct snd_soc_card *card)
1554 {
1555     struct snd_soc_component *component;
1556     int order;
1557     int ret;
1558 
1559     for_each_comp_order(order) {
1560         for_each_card_auxs(card, component) {
1561             if (component->driver->probe_order != order)
1562                 continue;
1563 
1564             ret = soc_probe_component(card, component);
1565             if (ret < 0)
1566                 return ret;
1567         }
1568     }
1569 
1570     return 0;
1571 }
1572 
1573 static void soc_remove_aux_devices(struct snd_soc_card *card)
1574 {
1575     struct snd_soc_component *comp, *_comp;
1576     int order;
1577 
1578     for_each_comp_order(order) {
1579         for_each_card_auxs_safe(card, comp, _comp) {
1580             if (comp->driver->remove_order == order)
1581                 soc_remove_component(comp, 1);
1582         }
1583     }
1584 }
1585 
1586 #ifdef CONFIG_DMI
1587 /*
1588  * If a DMI filed contain strings in this blacklist (e.g.
1589  * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken
1590  * as invalid and dropped when setting the card long name from DMI info.
1591  */
1592 static const char * const dmi_blacklist[] = {
1593     "To be filled by OEM",
1594     "TBD by OEM",
1595     "Default String",
1596     "Board Manufacturer",
1597     "Board Vendor Name",
1598     "Board Product Name",
1599     NULL,   /* terminator */
1600 };
1601 
1602 /*
1603  * Trim special characters, and replace '-' with '_' since '-' is used to
1604  * separate different DMI fields in the card long name. Only number and
1605  * alphabet characters and a few separator characters are kept.
1606  */
1607 static void cleanup_dmi_name(char *name)
1608 {
1609     int i, j = 0;
1610 
1611     for (i = 0; name[i]; i++) {
1612         if (isalnum(name[i]) || (name[i] == '.')
1613             || (name[i] == '_'))
1614             name[j++] = name[i];
1615         else if (name[i] == '-')
1616             name[j++] = '_';
1617     }
1618 
1619     name[j] = '\0';
1620 }
1621 
1622 /*
1623  * Check if a DMI field is valid, i.e. not containing any string
1624  * in the black list.
1625  */
1626 static int is_dmi_valid(const char *field)
1627 {
1628     int i = 0;
1629 
1630     while (dmi_blacklist[i]) {
1631         if (strstr(field, dmi_blacklist[i]))
1632             return 0;
1633         i++;
1634     }
1635 
1636     return 1;
1637 }
1638 
1639 /*
1640  * Append a string to card->dmi_longname with character cleanups.
1641  */
1642 static void append_dmi_string(struct snd_soc_card *card, const char *str)
1643 {
1644     char *dst = card->dmi_longname;
1645     size_t dst_len = sizeof(card->dmi_longname);
1646     size_t len;
1647 
1648     len = strlen(dst);
1649     snprintf(dst + len, dst_len - len, "-%s", str);
1650 
1651     len++;  /* skip the separator "-" */
1652     if (len < dst_len)
1653         cleanup_dmi_name(dst + len);
1654 }
1655 
1656 /**
1657  * snd_soc_set_dmi_name() - Register DMI names to card
1658  * @card: The card to register DMI names
1659  * @flavour: The flavour "differentiator" for the card amongst its peers.
1660  *
1661  * An Intel machine driver may be used by many different devices but are
1662  * difficult for userspace to differentiate, since machine drivers ususally
1663  * use their own name as the card short name and leave the card long name
1664  * blank. To differentiate such devices and fix bugs due to lack of
1665  * device-specific configurations, this function allows DMI info to be used
1666  * as the sound card long name, in the format of
1667  * "vendor-product-version-board"
1668  * (Character '-' is used to separate different DMI fields here).
1669  * This will help the user space to load the device-specific Use Case Manager
1670  * (UCM) configurations for the card.
1671  *
1672  * Possible card long names may be:
1673  * DellInc.-XPS139343-01-0310JH
1674  * ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA
1675  * Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX
1676  *
1677  * This function also supports flavoring the card longname to provide
1678  * the extra differentiation, like "vendor-product-version-board-flavor".
1679  *
1680  * We only keep number and alphabet characters and a few separator characters
1681  * in the card long name since UCM in the user space uses the card long names
1682  * as card configuration directory names and AudoConf cannot support special
1683  * charactors like SPACE.
1684  *
1685  * Returns 0 on success, otherwise a negative error code.
1686  */
1687 int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1688 {
1689     const char *vendor, *product, *board;
1690 
1691     if (card->long_name)
1692         return 0; /* long name already set by driver or from DMI */
1693 
1694     if (!dmi_available)
1695         return 0;
1696 
1697     /* make up dmi long name as: vendor-product-version-board */
1698     vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1699     if (!vendor || !is_dmi_valid(vendor)) {
1700         dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
1701         return 0;
1702     }
1703 
1704     snprintf(card->dmi_longname, sizeof(card->dmi_longname), "%s", vendor);
1705     cleanup_dmi_name(card->dmi_longname);
1706 
1707     product = dmi_get_system_info(DMI_PRODUCT_NAME);
1708     if (product && is_dmi_valid(product)) {
1709         const char *product_version = dmi_get_system_info(DMI_PRODUCT_VERSION);
1710 
1711         append_dmi_string(card, product);
1712 
1713         /*
1714          * some vendors like Lenovo may only put a self-explanatory
1715          * name in the product version field
1716          */
1717         if (product_version && is_dmi_valid(product_version))
1718             append_dmi_string(card, product_version);
1719     }
1720 
1721     board = dmi_get_system_info(DMI_BOARD_NAME);
1722     if (board && is_dmi_valid(board)) {
1723         if (!product || strcasecmp(board, product))
1724             append_dmi_string(card, board);
1725     } else if (!product) {
1726         /* fall back to using legacy name */
1727         dev_warn(card->dev, "ASoC: no DMI board/product name!\n");
1728         return 0;
1729     }
1730 
1731     /* Add flavour to dmi long name */
1732     if (flavour)
1733         append_dmi_string(card, flavour);
1734 
1735     /* set the card long name */
1736     card->long_name = card->dmi_longname;
1737 
1738     return 0;
1739 }
1740 EXPORT_SYMBOL_GPL(snd_soc_set_dmi_name);
1741 #endif /* CONFIG_DMI */
1742 
1743 static void soc_check_tplg_fes(struct snd_soc_card *card)
1744 {
1745     struct snd_soc_component *component;
1746     const struct snd_soc_component_driver *comp_drv;
1747     struct snd_soc_dai_link *dai_link;
1748     int i;
1749 
1750     for_each_component(component) {
1751 
1752         /* does this component override BEs ? */
1753         if (!component->driver->ignore_machine)
1754             continue;
1755 
1756         /* for this machine ? */
1757         if (!strcmp(component->driver->ignore_machine,
1758                 card->dev->driver->name))
1759             goto match;
1760         if (strcmp(component->driver->ignore_machine,
1761                dev_name(card->dev)))
1762             continue;
1763 match:
1764         /* machine matches, so override the rtd data */
1765         for_each_card_prelinks(card, i, dai_link) {
1766 
1767             /* ignore this FE */
1768             if (dai_link->dynamic) {
1769                 dai_link->ignore = true;
1770                 continue;
1771             }
1772 
1773             dev_dbg(card->dev, "info: override BE DAI link %s\n",
1774                 card->dai_link[i].name);
1775 
1776             /* override platform component */
1777             if (!dai_link->platforms) {
1778                 dev_err(card->dev, "init platform error");
1779                 continue;
1780             }
1781 
1782             if (component->dev->of_node)
1783                 dai_link->platforms->of_node = component->dev->of_node;
1784             else
1785                 dai_link->platforms->name = component->name;
1786 
1787             /* convert non BE into BE */
1788             if (!dai_link->no_pcm) {
1789                 dai_link->no_pcm = 1;
1790 
1791                 if (dai_link->dpcm_playback)
1792                     dev_warn(card->dev,
1793                          "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_playback=1\n",
1794                          dai_link->name);
1795                 if (dai_link->dpcm_capture)
1796                     dev_warn(card->dev,
1797                          "invalid configuration, dailink %s has flags no_pcm=0 and dpcm_capture=1\n",
1798                          dai_link->name);
1799 
1800                 /* convert normal link into DPCM one */
1801                 if (!(dai_link->dpcm_playback ||
1802                       dai_link->dpcm_capture)) {
1803                     dai_link->dpcm_playback = !dai_link->capture_only;
1804                     dai_link->dpcm_capture = !dai_link->playback_only;
1805                 }
1806             }
1807 
1808             /*
1809              * override any BE fixups
1810              * see
1811              *  snd_soc_link_be_hw_params_fixup()
1812              */
1813             dai_link->be_hw_params_fixup =
1814                 component->driver->be_hw_params_fixup;
1815 
1816             /*
1817              * most BE links don't set stream name, so set it to
1818              * dai link name if it's NULL to help bind widgets.
1819              */
1820             if (!dai_link->stream_name)
1821                 dai_link->stream_name = dai_link->name;
1822         }
1823 
1824         /* Inform userspace we are using alternate topology */
1825         if (component->driver->topology_name_prefix) {
1826 
1827             /* topology shortname created? */
1828             if (!card->topology_shortname_created) {
1829                 comp_drv = component->driver;
1830 
1831                 snprintf(card->topology_shortname, 32, "%s-%s",
1832                      comp_drv->topology_name_prefix,
1833                      card->name);
1834                 card->topology_shortname_created = true;
1835             }
1836 
1837             /* use topology shortname */
1838             card->name = card->topology_shortname;
1839         }
1840     }
1841 }
1842 
1843 #define soc_setup_card_name(name, name1, name2, norm)       \
1844     __soc_setup_card_name(name, sizeof(name), name1, name2, norm)
1845 static void __soc_setup_card_name(char *name, int len,
1846                   const char *name1, const char *name2,
1847                   int normalization)
1848 {
1849     int i;
1850 
1851     snprintf(name, len, "%s", name1 ? name1 : name2);
1852 
1853     if (!normalization)
1854         return;
1855 
1856     /*
1857      * Name normalization
1858      *
1859      * The driver name is somewhat special, as it's used as a key for
1860      * searches in the user-space.
1861      *
1862      * ex)
1863      *  "abcd??efg" -> "abcd__efg"
1864      */
1865     for (i = 0; i < len; i++) {
1866         switch (name[i]) {
1867         case '_':
1868         case '-':
1869         case '\0':
1870             break;
1871         default:
1872             if (!isalnum(name[i]))
1873                 name[i] = '_';
1874             break;
1875         }
1876     }
1877 }
1878 
1879 static void soc_cleanup_card_resources(struct snd_soc_card *card)
1880 {
1881     struct snd_soc_pcm_runtime *rtd, *n;
1882 
1883     if (card->snd_card)
1884         snd_card_disconnect_sync(card->snd_card);
1885 
1886     snd_soc_dapm_shutdown(card);
1887 
1888     /* remove and free each DAI */
1889     soc_remove_link_dais(card);
1890     soc_remove_link_components(card);
1891 
1892     for_each_card_rtds_safe(card, rtd, n)
1893         snd_soc_remove_pcm_runtime(card, rtd);
1894 
1895     /* remove auxiliary devices */
1896     soc_remove_aux_devices(card);
1897     soc_unbind_aux_dev(card);
1898 
1899     snd_soc_dapm_free(&card->dapm);
1900     soc_cleanup_card_debugfs(card);
1901 
1902     /* remove the card */
1903     snd_soc_card_remove(card);
1904 
1905     if (card->snd_card) {
1906         snd_card_free(card->snd_card);
1907         card->snd_card = NULL;
1908     }
1909 }
1910 
1911 static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister)
1912 {
1913     if (card->instantiated) {
1914         card->instantiated = false;
1915         snd_soc_flush_all_delayed_work(card);
1916 
1917         soc_cleanup_card_resources(card);
1918         if (!unregister)
1919             list_add(&card->list, &unbind_card_list);
1920     } else {
1921         if (unregister)
1922             list_del(&card->list);
1923     }
1924 }
1925 
1926 static int snd_soc_bind_card(struct snd_soc_card *card)
1927 {
1928     struct snd_soc_pcm_runtime *rtd;
1929     struct snd_soc_component *component;
1930     struct snd_soc_dai_link *dai_link;
1931     int ret, i;
1932 
1933     mutex_lock(&client_mutex);
1934     mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT);
1935 
1936     snd_soc_dapm_init(&card->dapm, card, NULL);
1937 
1938     /* check whether any platform is ignore machine FE and using topology */
1939     soc_check_tplg_fes(card);
1940 
1941     /* bind aux_devs too */
1942     ret = soc_bind_aux_dev(card);
1943     if (ret < 0)
1944         goto probe_end;
1945 
1946     /* add predefined DAI links to the list */
1947     card->num_rtd = 0;
1948     for_each_card_prelinks(card, i, dai_link) {
1949         ret = snd_soc_add_pcm_runtime(card, dai_link);
1950         if (ret < 0)
1951             goto probe_end;
1952     }
1953 
1954     /* card bind complete so register a sound card */
1955     ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
1956             card->owner, 0, &card->snd_card);
1957     if (ret < 0) {
1958         dev_err(card->dev,
1959             "ASoC: can't create sound card for card %s: %d\n",
1960             card->name, ret);
1961         goto probe_end;
1962     }
1963 
1964     soc_init_card_debugfs(card);
1965 
1966     soc_resume_init(card);
1967 
1968     ret = snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets,
1969                     card->num_dapm_widgets);
1970     if (ret < 0)
1971         goto probe_end;
1972 
1973     ret = snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets,
1974                     card->num_of_dapm_widgets);
1975     if (ret < 0)
1976         goto probe_end;
1977 
1978     /* initialise the sound card only once */
1979     ret = snd_soc_card_probe(card);
1980     if (ret < 0)
1981         goto probe_end;
1982 
1983     /* probe all components used by DAI links on this card */
1984     ret = soc_probe_link_components(card);
1985     if (ret < 0) {
1986         dev_err(card->dev,
1987             "ASoC: failed to instantiate card %d\n", ret);
1988         goto probe_end;
1989     }
1990 
1991     /* probe auxiliary components */
1992     ret = soc_probe_aux_devices(card);
1993     if (ret < 0) {
1994         dev_err(card->dev,
1995             "ASoC: failed to probe aux component %d\n", ret);
1996         goto probe_end;
1997     }
1998 
1999     /* probe all DAI links on this card */
2000     ret = soc_probe_link_dais(card);
2001     if (ret < 0) {
2002         dev_err(card->dev,
2003             "ASoC: failed to instantiate card %d\n", ret);
2004         goto probe_end;
2005     }
2006 
2007     for_each_card_rtds(card, rtd) {
2008         ret = soc_init_pcm_runtime(card, rtd);
2009         if (ret < 0)
2010             goto probe_end;
2011     }
2012 
2013     snd_soc_dapm_link_dai_widgets(card);
2014     snd_soc_dapm_connect_dai_link_widgets(card);
2015 
2016     ret = snd_soc_add_card_controls(card, card->controls,
2017                     card->num_controls);
2018     if (ret < 0)
2019         goto probe_end;
2020 
2021     ret = snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes,
2022                       card->num_dapm_routes);
2023     if (ret < 0) {
2024         if (card->disable_route_checks) {
2025             dev_info(card->dev,
2026                  "%s: disable_route_checks set, ignoring errors on add_routes\n",
2027                  __func__);
2028         } else {
2029             dev_err(card->dev,
2030                  "%s: snd_soc_dapm_add_routes failed: %d\n",
2031                  __func__, ret);
2032             goto probe_end;
2033         }
2034     }
2035 
2036     ret = snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes,
2037                       card->num_of_dapm_routes);
2038     if (ret < 0)
2039         goto probe_end;
2040 
2041     /* try to set some sane longname if DMI is available */
2042     snd_soc_set_dmi_name(card, NULL);
2043 
2044     soc_setup_card_name(card->snd_card->shortname,
2045                 card->name, NULL, 0);
2046     soc_setup_card_name(card->snd_card->longname,
2047                 card->long_name, card->name, 0);
2048     soc_setup_card_name(card->snd_card->driver,
2049                 card->driver_name, card->name, 1);
2050 
2051     if (card->components) {
2052         /* the current implementation of snd_component_add() accepts */
2053         /* multiple components in the string separated by space, */
2054         /* but the string collision (identical string) check might */
2055         /* not work correctly */
2056         ret = snd_component_add(card->snd_card, card->components);
2057         if (ret < 0) {
2058             dev_err(card->dev, "ASoC: %s snd_component_add() failed: %d\n",
2059                 card->name, ret);
2060             goto probe_end;
2061         }
2062     }
2063 
2064     ret = snd_soc_card_late_probe(card);
2065     if (ret < 0)
2066         goto probe_end;
2067 
2068     snd_soc_dapm_new_widgets(card);
2069     snd_soc_card_fixup_controls(card);
2070 
2071     ret = snd_card_register(card->snd_card);
2072     if (ret < 0) {
2073         dev_err(card->dev, "ASoC: failed to register soundcard %d\n",
2074                 ret);
2075         goto probe_end;
2076     }
2077 
2078     card->instantiated = 1;
2079     dapm_mark_endpoints_dirty(card);
2080     snd_soc_dapm_sync(&card->dapm);
2081 
2082     /* deactivate pins to sleep state */
2083     for_each_card_components(card, component)
2084         if (!snd_soc_component_active(component))
2085             pinctrl_pm_select_sleep_state(component->dev);
2086 
2087 probe_end:
2088     if (ret < 0)
2089         soc_cleanup_card_resources(card);
2090 
2091     mutex_unlock(&card->mutex);
2092     mutex_unlock(&client_mutex);
2093 
2094     return ret;
2095 }
2096 
2097 /* probes a new socdev */
2098 static int soc_probe(struct platform_device *pdev)
2099 {
2100     struct snd_soc_card *card = platform_get_drvdata(pdev);
2101 
2102     /*
2103      * no card, so machine driver should be registering card
2104      * we should not be here in that case so ret error
2105      */
2106     if (!card)
2107         return -EINVAL;
2108 
2109     dev_warn(&pdev->dev,
2110          "ASoC: machine %s should use snd_soc_register_card()\n",
2111          card->name);
2112 
2113     /* Bodge while we unpick instantiation */
2114     card->dev = &pdev->dev;
2115 
2116     return devm_snd_soc_register_card(&pdev->dev, card);
2117 }
2118 
2119 int snd_soc_poweroff(struct device *dev)
2120 {
2121     struct snd_soc_card *card = dev_get_drvdata(dev);
2122     struct snd_soc_component *component;
2123 
2124     if (!card->instantiated)
2125         return 0;
2126 
2127     /*
2128      * Flush out pmdown_time work - we actually do want to run it
2129      * now, we're shutting down so no imminent restart.
2130      */
2131     snd_soc_flush_all_delayed_work(card);
2132 
2133     snd_soc_dapm_shutdown(card);
2134 
2135     /* deactivate pins to sleep state */
2136     for_each_card_components(card, component)
2137         pinctrl_pm_select_sleep_state(component->dev);
2138 
2139     return 0;
2140 }
2141 EXPORT_SYMBOL_GPL(snd_soc_poweroff);
2142 
2143 const struct dev_pm_ops snd_soc_pm_ops = {
2144     .suspend = snd_soc_suspend,
2145     .resume = snd_soc_resume,
2146     .freeze = snd_soc_suspend,
2147     .thaw = snd_soc_resume,
2148     .poweroff = snd_soc_poweroff,
2149     .restore = snd_soc_resume,
2150 };
2151 EXPORT_SYMBOL_GPL(snd_soc_pm_ops);
2152 
2153 /* ASoC platform driver */
2154 static struct platform_driver soc_driver = {
2155     .driver     = {
2156         .name       = "soc-audio",
2157         .pm     = &snd_soc_pm_ops,
2158     },
2159     .probe      = soc_probe,
2160 };
2161 
2162 /**
2163  * snd_soc_cnew - create new control
2164  * @_template: control template
2165  * @data: control private data
2166  * @long_name: control long name
2167  * @prefix: control name prefix
2168  *
2169  * Create a new mixer control from a template control.
2170  *
2171  * Returns 0 for success, else error.
2172  */
2173 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
2174                   void *data, const char *long_name,
2175                   const char *prefix)
2176 {
2177     struct snd_kcontrol_new template;
2178     struct snd_kcontrol *kcontrol;
2179     char *name = NULL;
2180 
2181     memcpy(&template, _template, sizeof(template));
2182     template.index = 0;
2183 
2184     if (!long_name)
2185         long_name = template.name;
2186 
2187     if (prefix) {
2188         name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name);
2189         if (!name)
2190             return NULL;
2191 
2192         template.name = name;
2193     } else {
2194         template.name = long_name;
2195     }
2196 
2197     kcontrol = snd_ctl_new1(&template, data);
2198 
2199     kfree(name);
2200 
2201     return kcontrol;
2202 }
2203 EXPORT_SYMBOL_GPL(snd_soc_cnew);
2204 
2205 static int snd_soc_add_controls(struct snd_card *card, struct device *dev,
2206     const struct snd_kcontrol_new *controls, int num_controls,
2207     const char *prefix, void *data)
2208 {
2209     int i;
2210 
2211     for (i = 0; i < num_controls; i++) {
2212         const struct snd_kcontrol_new *control = &controls[i];
2213         int err = snd_ctl_add(card, snd_soc_cnew(control, data,
2214                              control->name, prefix));
2215         if (err < 0) {
2216             dev_err(dev, "ASoC: Failed to add %s: %d\n",
2217                 control->name, err);
2218             return err;
2219         }
2220     }
2221 
2222     return 0;
2223 }
2224 
2225 /**
2226  * snd_soc_add_component_controls - Add an array of controls to a component.
2227  *
2228  * @component: Component to add controls to
2229  * @controls: Array of controls to add
2230  * @num_controls: Number of elements in the array
2231  *
2232  * Return: 0 for success, else error.
2233  */
2234 int snd_soc_add_component_controls(struct snd_soc_component *component,
2235     const struct snd_kcontrol_new *controls, unsigned int num_controls)
2236 {
2237     struct snd_card *card = component->card->snd_card;
2238 
2239     return snd_soc_add_controls(card, component->dev, controls,
2240             num_controls, component->name_prefix, component);
2241 }
2242 EXPORT_SYMBOL_GPL(snd_soc_add_component_controls);
2243 
2244 /**
2245  * snd_soc_add_card_controls - add an array of controls to a SoC card.
2246  * Convenience function to add a list of controls.
2247  *
2248  * @soc_card: SoC card to add controls to
2249  * @controls: array of controls to add
2250  * @num_controls: number of elements in the array
2251  *
2252  * Return 0 for success, else error.
2253  */
2254 int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
2255     const struct snd_kcontrol_new *controls, int num_controls)
2256 {
2257     struct snd_card *card = soc_card->snd_card;
2258 
2259     return snd_soc_add_controls(card, soc_card->dev, controls, num_controls,
2260             NULL, soc_card);
2261 }
2262 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls);
2263 
2264 /**
2265  * snd_soc_add_dai_controls - add an array of controls to a DAI.
2266  * Convienience function to add a list of controls.
2267  *
2268  * @dai: DAI to add controls to
2269  * @controls: array of controls to add
2270  * @num_controls: number of elements in the array
2271  *
2272  * Return 0 for success, else error.
2273  */
2274 int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
2275     const struct snd_kcontrol_new *controls, int num_controls)
2276 {
2277     struct snd_card *card = dai->component->card->snd_card;
2278 
2279     return snd_soc_add_controls(card, dai->dev, controls, num_controls,
2280             NULL, dai);
2281 }
2282 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls);
2283 
2284 /**
2285  * snd_soc_register_card - Register a card with the ASoC core
2286  *
2287  * @card: Card to register
2288  *
2289  */
2290 int snd_soc_register_card(struct snd_soc_card *card)
2291 {
2292     if (!card->name || !card->dev)
2293         return -EINVAL;
2294 
2295     dev_set_drvdata(card->dev, card);
2296 
2297     INIT_LIST_HEAD(&card->widgets);
2298     INIT_LIST_HEAD(&card->paths);
2299     INIT_LIST_HEAD(&card->dapm_list);
2300     INIT_LIST_HEAD(&card->aux_comp_list);
2301     INIT_LIST_HEAD(&card->component_dev_list);
2302     INIT_LIST_HEAD(&card->list);
2303     INIT_LIST_HEAD(&card->rtd_list);
2304     INIT_LIST_HEAD(&card->dapm_dirty);
2305     INIT_LIST_HEAD(&card->dobj_list);
2306 
2307     card->instantiated = 0;
2308     mutex_init(&card->mutex);
2309     mutex_init(&card->dapm_mutex);
2310     mutex_init(&card->pcm_mutex);
2311 
2312     return snd_soc_bind_card(card);
2313 }
2314 EXPORT_SYMBOL_GPL(snd_soc_register_card);
2315 
2316 /**
2317  * snd_soc_unregister_card - Unregister a card with the ASoC core
2318  *
2319  * @card: Card to unregister
2320  *
2321  */
2322 void snd_soc_unregister_card(struct snd_soc_card *card)
2323 {
2324     mutex_lock(&client_mutex);
2325     snd_soc_unbind_card(card, true);
2326     mutex_unlock(&client_mutex);
2327     dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name);
2328 }
2329 EXPORT_SYMBOL_GPL(snd_soc_unregister_card);
2330 
2331 /*
2332  * Simplify DAI link configuration by removing ".-1" from device names
2333  * and sanitizing names.
2334  */
2335 static char *fmt_single_name(struct device *dev, int *id)
2336 {
2337     const char *devname = dev_name(dev);
2338     char *found, *name;
2339     unsigned int id1, id2;
2340 
2341     if (devname == NULL)
2342         return NULL;
2343 
2344     name = devm_kstrdup(dev, devname, GFP_KERNEL);
2345     if (!name)
2346         return NULL;
2347 
2348     /* are we a "%s.%d" name (platform and SPI components) */
2349     found = strstr(name, dev->driver->name);
2350     if (found) {
2351         /* get ID */
2352         if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) {
2353 
2354             /* discard ID from name if ID == -1 */
2355             if (*id == -1)
2356                 found[strlen(dev->driver->name)] = '\0';
2357         }
2358 
2359     /* I2C component devices are named "bus-addr" */
2360     } else if (sscanf(name, "%x-%x", &id1, &id2) == 2) {
2361 
2362         /* create unique ID number from I2C addr and bus */
2363         *id = ((id1 & 0xffff) << 16) + id2;
2364 
2365         devm_kfree(dev, name);
2366 
2367         /* sanitize component name for DAI link creation */
2368         name = devm_kasprintf(dev, GFP_KERNEL, "%s.%s", dev->driver->name, devname);
2369     } else {
2370         *id = 0;
2371     }
2372 
2373     return name;
2374 }
2375 
2376 /*
2377  * Simplify DAI link naming for single devices with multiple DAIs by removing
2378  * any ".-1" and using the DAI name (instead of device name).
2379  */
2380 static inline char *fmt_multiple_name(struct device *dev,
2381         struct snd_soc_dai_driver *dai_drv)
2382 {
2383     if (dai_drv->name == NULL) {
2384         dev_err(dev,
2385             "ASoC: error - multiple DAI %s registered with no name\n",
2386             dev_name(dev));
2387         return NULL;
2388     }
2389 
2390     return devm_kstrdup(dev, dai_drv->name, GFP_KERNEL);
2391 }
2392 
2393 void snd_soc_unregister_dai(struct snd_soc_dai *dai)
2394 {
2395     dev_dbg(dai->dev, "ASoC: Unregistered DAI '%s'\n", dai->name);
2396     list_del(&dai->list);
2397 }
2398 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai);
2399 
2400 /**
2401  * snd_soc_register_dai - Register a DAI dynamically & create its widgets
2402  *
2403  * @component: The component the DAIs are registered for
2404  * @dai_drv: DAI driver to use for the DAI
2405  * @legacy_dai_naming: if %true, use legacy single-name format;
2406  *  if %false, use multiple-name format;
2407  *
2408  * Topology can use this API to register DAIs when probing a component.
2409  * These DAIs's widgets will be freed in the card cleanup and the DAIs
2410  * will be freed in the component cleanup.
2411  */
2412 struct snd_soc_dai *snd_soc_register_dai(struct snd_soc_component *component,
2413                      struct snd_soc_dai_driver *dai_drv,
2414                      bool legacy_dai_naming)
2415 {
2416     struct device *dev = component->dev;
2417     struct snd_soc_dai *dai;
2418 
2419     dev_dbg(dev, "ASoC: dynamically register DAI %s\n", dev_name(dev));
2420 
2421     lockdep_assert_held(&client_mutex);
2422 
2423     dai = devm_kzalloc(dev, sizeof(*dai), GFP_KERNEL);
2424     if (dai == NULL)
2425         return NULL;
2426 
2427     /*
2428      * Back in the old days when we still had component-less DAIs,
2429      * instead of having a static name, component-less DAIs would
2430      * inherit the name of the parent device so it is possible to
2431      * register multiple instances of the DAI. We still need to keep
2432      * the same naming style even though those DAIs are not
2433      * component-less anymore.
2434      */
2435     if (legacy_dai_naming &&
2436         (dai_drv->id == 0 || dai_drv->name == NULL)) {
2437         dai->name = fmt_single_name(dev, &dai->id);
2438     } else {
2439         dai->name = fmt_multiple_name(dev, dai_drv);
2440         if (dai_drv->id)
2441             dai->id = dai_drv->id;
2442         else
2443             dai->id = component->num_dai;
2444     }
2445     if (!dai->name)
2446         return NULL;
2447 
2448     dai->component = component;
2449     dai->dev = dev;
2450     dai->driver = dai_drv;
2451 
2452     /* see for_each_component_dais */
2453     list_add_tail(&dai->list, &component->dai_list);
2454     component->num_dai++;
2455 
2456     dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name);
2457     return dai;
2458 }
2459 EXPORT_SYMBOL_GPL(snd_soc_register_dai);
2460 
2461 /**
2462  * snd_soc_unregister_dais - Unregister DAIs from the ASoC core
2463  *
2464  * @component: The component for which the DAIs should be unregistered
2465  */
2466 static void snd_soc_unregister_dais(struct snd_soc_component *component)
2467 {
2468     struct snd_soc_dai *dai, *_dai;
2469 
2470     for_each_component_dais_safe(component, dai, _dai)
2471         snd_soc_unregister_dai(dai);
2472 }
2473 
2474 /**
2475  * snd_soc_register_dais - Register a DAI with the ASoC core
2476  *
2477  * @component: The component the DAIs are registered for
2478  * @dai_drv: DAI driver to use for the DAIs
2479  * @count: Number of DAIs
2480  */
2481 static int snd_soc_register_dais(struct snd_soc_component *component,
2482                  struct snd_soc_dai_driver *dai_drv,
2483                  size_t count)
2484 {
2485     struct snd_soc_dai *dai;
2486     unsigned int i;
2487     int ret;
2488 
2489     for (i = 0; i < count; i++) {
2490         dai = snd_soc_register_dai(component, dai_drv + i, count == 1 &&
2491                        component->driver->legacy_dai_naming);
2492         if (dai == NULL) {
2493             ret = -ENOMEM;
2494             goto err;
2495         }
2496     }
2497 
2498     return 0;
2499 
2500 err:
2501     snd_soc_unregister_dais(component);
2502 
2503     return ret;
2504 }
2505 
2506 #define ENDIANNESS_MAP(name) \
2507     (SNDRV_PCM_FMTBIT_##name##LE | SNDRV_PCM_FMTBIT_##name##BE)
2508 static u64 endianness_format_map[] = {
2509     ENDIANNESS_MAP(S16_),
2510     ENDIANNESS_MAP(U16_),
2511     ENDIANNESS_MAP(S24_),
2512     ENDIANNESS_MAP(U24_),
2513     ENDIANNESS_MAP(S32_),
2514     ENDIANNESS_MAP(U32_),
2515     ENDIANNESS_MAP(S24_3),
2516     ENDIANNESS_MAP(U24_3),
2517     ENDIANNESS_MAP(S20_3),
2518     ENDIANNESS_MAP(U20_3),
2519     ENDIANNESS_MAP(S18_3),
2520     ENDIANNESS_MAP(U18_3),
2521     ENDIANNESS_MAP(FLOAT_),
2522     ENDIANNESS_MAP(FLOAT64_),
2523     ENDIANNESS_MAP(IEC958_SUBFRAME_),
2524 };
2525 
2526 /*
2527  * Fix up the DAI formats for endianness: codecs don't actually see
2528  * the endianness of the data but we're using the CPU format
2529  * definitions which do need to include endianness so we ensure that
2530  * codec DAIs always have both big and little endian variants set.
2531  */
2532 static void convert_endianness_formats(struct snd_soc_pcm_stream *stream)
2533 {
2534     int i;
2535 
2536     for (i = 0; i < ARRAY_SIZE(endianness_format_map); i++)
2537         if (stream->formats & endianness_format_map[i])
2538             stream->formats |= endianness_format_map[i];
2539 }
2540 
2541 static void snd_soc_try_rebind_card(void)
2542 {
2543     struct snd_soc_card *card, *c;
2544 
2545     list_for_each_entry_safe(card, c, &unbind_card_list, list)
2546         if (!snd_soc_bind_card(card))
2547             list_del(&card->list);
2548 }
2549 
2550 static void snd_soc_del_component_unlocked(struct snd_soc_component *component)
2551 {
2552     struct snd_soc_card *card = component->card;
2553 
2554     snd_soc_unregister_dais(component);
2555 
2556     if (card)
2557         snd_soc_unbind_card(card, false);
2558 
2559     list_del(&component->list);
2560 }
2561 
2562 int snd_soc_component_initialize(struct snd_soc_component *component,
2563                  const struct snd_soc_component_driver *driver,
2564                  struct device *dev)
2565 {
2566     INIT_LIST_HEAD(&component->dai_list);
2567     INIT_LIST_HEAD(&component->dobj_list);
2568     INIT_LIST_HEAD(&component->card_list);
2569     INIT_LIST_HEAD(&component->list);
2570     mutex_init(&component->io_mutex);
2571 
2572     component->name = fmt_single_name(dev, &component->id);
2573     if (!component->name) {
2574         dev_err(dev, "ASoC: Failed to allocate name\n");
2575         return -ENOMEM;
2576     }
2577 
2578     component->dev      = dev;
2579     component->driver   = driver;
2580 
2581 #ifdef CONFIG_DEBUG_FS
2582     if (!component->debugfs_prefix)
2583         component->debugfs_prefix = driver->debugfs_prefix;
2584 #endif
2585 
2586     return 0;
2587 }
2588 EXPORT_SYMBOL_GPL(snd_soc_component_initialize);
2589 
2590 int snd_soc_add_component(struct snd_soc_component *component,
2591               struct snd_soc_dai_driver *dai_drv,
2592               int num_dai)
2593 {
2594     int ret;
2595     int i;
2596 
2597     mutex_lock(&client_mutex);
2598 
2599     if (component->driver->endianness) {
2600         for (i = 0; i < num_dai; i++) {
2601             convert_endianness_formats(&dai_drv[i].playback);
2602             convert_endianness_formats(&dai_drv[i].capture);
2603         }
2604     }
2605 
2606     ret = snd_soc_register_dais(component, dai_drv, num_dai);
2607     if (ret < 0) {
2608         dev_err(component->dev, "ASoC: Failed to register DAIs: %d\n",
2609             ret);
2610         goto err_cleanup;
2611     }
2612 
2613     if (!component->driver->write && !component->driver->read) {
2614         if (!component->regmap)
2615             component->regmap = dev_get_regmap(component->dev,
2616                                NULL);
2617         if (component->regmap)
2618             snd_soc_component_setup_regmap(component);
2619     }
2620 
2621     /* see for_each_component */
2622     list_add(&component->list, &component_list);
2623 
2624 err_cleanup:
2625     if (ret < 0)
2626         snd_soc_del_component_unlocked(component);
2627 
2628     mutex_unlock(&client_mutex);
2629 
2630     if (ret == 0)
2631         snd_soc_try_rebind_card();
2632 
2633     return ret;
2634 }
2635 EXPORT_SYMBOL_GPL(snd_soc_add_component);
2636 
2637 int snd_soc_register_component(struct device *dev,
2638             const struct snd_soc_component_driver *component_driver,
2639             struct snd_soc_dai_driver *dai_drv,
2640             int num_dai)
2641 {
2642     struct snd_soc_component *component;
2643     int ret;
2644 
2645     component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL);
2646     if (!component)
2647         return -ENOMEM;
2648 
2649     ret = snd_soc_component_initialize(component, component_driver, dev);
2650     if (ret < 0)
2651         return ret;
2652 
2653     return snd_soc_add_component(component, dai_drv, num_dai);
2654 }
2655 EXPORT_SYMBOL_GPL(snd_soc_register_component);
2656 
2657 /**
2658  * snd_soc_unregister_component_by_driver - Unregister component using a given driver
2659  * from the ASoC core
2660  *
2661  * @dev: The device to unregister
2662  * @component_driver: The component driver to unregister
2663  */
2664 void snd_soc_unregister_component_by_driver(struct device *dev,
2665                         const struct snd_soc_component_driver *component_driver)
2666 {
2667     struct snd_soc_component *component;
2668 
2669     if (!component_driver)
2670         return;
2671 
2672     mutex_lock(&client_mutex);
2673     component = snd_soc_lookup_component_nolocked(dev, component_driver->name);
2674     if (!component)
2675         goto out;
2676 
2677     snd_soc_del_component_unlocked(component);
2678 
2679 out:
2680     mutex_unlock(&client_mutex);
2681 }
2682 EXPORT_SYMBOL_GPL(snd_soc_unregister_component_by_driver);
2683 
2684 /**
2685  * snd_soc_unregister_component - Unregister all related component
2686  * from the ASoC core
2687  *
2688  * @dev: The device to unregister
2689  */
2690 void snd_soc_unregister_component(struct device *dev)
2691 {
2692     mutex_lock(&client_mutex);
2693     while (1) {
2694         struct snd_soc_component *component = snd_soc_lookup_component_nolocked(dev, NULL);
2695 
2696         if (!component)
2697             break;
2698 
2699         snd_soc_del_component_unlocked(component);
2700     }
2701     mutex_unlock(&client_mutex);
2702 }
2703 EXPORT_SYMBOL_GPL(snd_soc_unregister_component);
2704 
2705 /* Retrieve a card's name from device tree */
2706 int snd_soc_of_parse_card_name(struct snd_soc_card *card,
2707                    const char *propname)
2708 {
2709     struct device_node *np;
2710     int ret;
2711 
2712     if (!card->dev) {
2713         pr_err("card->dev is not set before calling %s\n", __func__);
2714         return -EINVAL;
2715     }
2716 
2717     np = card->dev->of_node;
2718 
2719     ret = of_property_read_string_index(np, propname, 0, &card->name);
2720     /*
2721      * EINVAL means the property does not exist. This is fine providing
2722      * card->name was previously set, which is checked later in
2723      * snd_soc_register_card.
2724      */
2725     if (ret < 0 && ret != -EINVAL) {
2726         dev_err(card->dev,
2727             "ASoC: Property '%s' could not be read: %d\n",
2728             propname, ret);
2729         return ret;
2730     }
2731 
2732     return 0;
2733 }
2734 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name);
2735 
2736 static const struct snd_soc_dapm_widget simple_widgets[] = {
2737     SND_SOC_DAPM_MIC("Microphone", NULL),
2738     SND_SOC_DAPM_LINE("Line", NULL),
2739     SND_SOC_DAPM_HP("Headphone", NULL),
2740     SND_SOC_DAPM_SPK("Speaker", NULL),
2741 };
2742 
2743 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
2744                       const char *propname)
2745 {
2746     struct device_node *np = card->dev->of_node;
2747     struct snd_soc_dapm_widget *widgets;
2748     const char *template, *wname;
2749     int i, j, num_widgets;
2750 
2751     num_widgets = of_property_count_strings(np, propname);
2752     if (num_widgets < 0) {
2753         dev_err(card->dev,
2754             "ASoC: Property '%s' does not exist\n", propname);
2755         return -EINVAL;
2756     }
2757     if (!num_widgets) {
2758         dev_err(card->dev, "ASoC: Property '%s's length is zero\n",
2759             propname);
2760         return -EINVAL;
2761     }
2762     if (num_widgets & 1) {
2763         dev_err(card->dev,
2764             "ASoC: Property '%s' length is not even\n", propname);
2765         return -EINVAL;
2766     }
2767 
2768     num_widgets /= 2;
2769 
2770     widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets),
2771                    GFP_KERNEL);
2772     if (!widgets) {
2773         dev_err(card->dev,
2774             "ASoC: Could not allocate memory for widgets\n");
2775         return -ENOMEM;
2776     }
2777 
2778     for (i = 0; i < num_widgets; i++) {
2779         int ret = of_property_read_string_index(np, propname,
2780                             2 * i, &template);
2781         if (ret) {
2782             dev_err(card->dev,
2783                 "ASoC: Property '%s' index %d read error:%d\n",
2784                 propname, 2 * i, ret);
2785             return -EINVAL;
2786         }
2787 
2788         for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) {
2789             if (!strncmp(template, simple_widgets[j].name,
2790                      strlen(simple_widgets[j].name))) {
2791                 widgets[i] = simple_widgets[j];
2792                 break;
2793             }
2794         }
2795 
2796         if (j >= ARRAY_SIZE(simple_widgets)) {
2797             dev_err(card->dev,
2798                 "ASoC: DAPM widget '%s' is not supported\n",
2799                 template);
2800             return -EINVAL;
2801         }
2802 
2803         ret = of_property_read_string_index(np, propname,
2804                             (2 * i) + 1,
2805                             &wname);
2806         if (ret) {
2807             dev_err(card->dev,
2808                 "ASoC: Property '%s' index %d read error:%d\n",
2809                 propname, (2 * i) + 1, ret);
2810             return -EINVAL;
2811         }
2812 
2813         widgets[i].name = wname;
2814     }
2815 
2816     card->of_dapm_widgets = widgets;
2817     card->num_of_dapm_widgets = num_widgets;
2818 
2819     return 0;
2820 }
2821 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets);
2822 
2823 int snd_soc_of_parse_pin_switches(struct snd_soc_card *card, const char *prop)
2824 {
2825     const unsigned int nb_controls_max = 16;
2826     const char **strings, *control_name;
2827     struct snd_kcontrol_new *controls;
2828     struct device *dev = card->dev;
2829     unsigned int i, nb_controls;
2830     int ret;
2831 
2832     if (!of_property_read_bool(dev->of_node, prop))
2833         return 0;
2834 
2835     strings = devm_kcalloc(dev, nb_controls_max,
2836                    sizeof(*strings), GFP_KERNEL);
2837     if (!strings)
2838         return -ENOMEM;
2839 
2840     ret = of_property_read_string_array(dev->of_node, prop,
2841                         strings, nb_controls_max);
2842     if (ret < 0)
2843         return ret;
2844 
2845     nb_controls = (unsigned int)ret;
2846 
2847     controls = devm_kcalloc(dev, nb_controls,
2848                 sizeof(*controls), GFP_KERNEL);
2849     if (!controls)
2850         return -ENOMEM;
2851 
2852     for (i = 0; i < nb_controls; i++) {
2853         control_name = devm_kasprintf(dev, GFP_KERNEL,
2854                           "%s Switch", strings[i]);
2855         if (!control_name)
2856             return -ENOMEM;
2857 
2858         controls[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2859         controls[i].name = control_name;
2860         controls[i].info = snd_soc_dapm_info_pin_switch;
2861         controls[i].get = snd_soc_dapm_get_pin_switch;
2862         controls[i].put = snd_soc_dapm_put_pin_switch;
2863         controls[i].private_value = (unsigned long)strings[i];
2864     }
2865 
2866     card->controls = controls;
2867     card->num_controls = nb_controls;
2868 
2869     return 0;
2870 }
2871 EXPORT_SYMBOL_GPL(snd_soc_of_parse_pin_switches);
2872 
2873 int snd_soc_of_get_slot_mask(struct device_node *np,
2874                  const char *prop_name,
2875                  unsigned int *mask)
2876 {
2877     u32 val;
2878     const __be32 *of_slot_mask = of_get_property(np, prop_name, &val);
2879     int i;
2880 
2881     if (!of_slot_mask)
2882         return 0;
2883     val /= sizeof(u32);
2884     for (i = 0; i < val; i++)
2885         if (be32_to_cpup(&of_slot_mask[i]))
2886             *mask |= (1 << i);
2887 
2888     return val;
2889 }
2890 EXPORT_SYMBOL_GPL(snd_soc_of_get_slot_mask);
2891 
2892 int snd_soc_of_parse_tdm_slot(struct device_node *np,
2893                   unsigned int *tx_mask,
2894                   unsigned int *rx_mask,
2895                   unsigned int *slots,
2896                   unsigned int *slot_width)
2897 {
2898     u32 val;
2899     int ret;
2900 
2901     if (tx_mask)
2902         snd_soc_of_get_slot_mask(np, "dai-tdm-slot-tx-mask", tx_mask);
2903     if (rx_mask)
2904         snd_soc_of_get_slot_mask(np, "dai-tdm-slot-rx-mask", rx_mask);
2905 
2906     if (of_property_read_bool(np, "dai-tdm-slot-num")) {
2907         ret = of_property_read_u32(np, "dai-tdm-slot-num", &val);
2908         if (ret)
2909             return ret;
2910 
2911         if (slots)
2912             *slots = val;
2913     }
2914 
2915     if (of_property_read_bool(np, "dai-tdm-slot-width")) {
2916         ret = of_property_read_u32(np, "dai-tdm-slot-width", &val);
2917         if (ret)
2918             return ret;
2919 
2920         if (slot_width)
2921             *slot_width = val;
2922     }
2923 
2924     return 0;
2925 }
2926 EXPORT_SYMBOL_GPL(snd_soc_of_parse_tdm_slot);
2927 
2928 void snd_soc_of_parse_node_prefix(struct device_node *np,
2929                   struct snd_soc_codec_conf *codec_conf,
2930                   struct device_node *of_node,
2931                   const char *propname)
2932 {
2933     const char *str;
2934     int ret;
2935 
2936     ret = of_property_read_string(np, propname, &str);
2937     if (ret < 0) {
2938         /* no prefix is not error */
2939         return;
2940     }
2941 
2942     codec_conf->dlc.of_node = of_node;
2943     codec_conf->name_prefix = str;
2944 }
2945 EXPORT_SYMBOL_GPL(snd_soc_of_parse_node_prefix);
2946 
2947 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
2948                    const char *propname)
2949 {
2950     struct device_node *np = card->dev->of_node;
2951     int num_routes;
2952     struct snd_soc_dapm_route *routes;
2953     int i;
2954 
2955     num_routes = of_property_count_strings(np, propname);
2956     if (num_routes < 0 || num_routes & 1) {
2957         dev_err(card->dev,
2958             "ASoC: Property '%s' does not exist or its length is not even\n",
2959             propname);
2960         return -EINVAL;
2961     }
2962     num_routes /= 2;
2963 
2964     routes = devm_kcalloc(card->dev, num_routes, sizeof(*routes),
2965                   GFP_KERNEL);
2966     if (!routes) {
2967         dev_err(card->dev,
2968             "ASoC: Could not allocate DAPM route table\n");
2969         return -ENOMEM;
2970     }
2971 
2972     for (i = 0; i < num_routes; i++) {
2973         int ret = of_property_read_string_index(np, propname,
2974                             2 * i, &routes[i].sink);
2975         if (ret) {
2976             dev_err(card->dev,
2977                 "ASoC: Property '%s' index %d could not be read: %d\n",
2978                 propname, 2 * i, ret);
2979             return -EINVAL;
2980         }
2981         ret = of_property_read_string_index(np, propname,
2982             (2 * i) + 1, &routes[i].source);
2983         if (ret) {
2984             dev_err(card->dev,
2985                 "ASoC: Property '%s' index %d could not be read: %d\n",
2986                 propname, (2 * i) + 1, ret);
2987             return -EINVAL;
2988         }
2989     }
2990 
2991     card->num_of_dapm_routes = num_routes;
2992     card->of_dapm_routes = routes;
2993 
2994     return 0;
2995 }
2996 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing);
2997 
2998 int snd_soc_of_parse_aux_devs(struct snd_soc_card *card, const char *propname)
2999 {
3000     struct device_node *node = card->dev->of_node;
3001     struct snd_soc_aux_dev *aux;
3002     int num, i;
3003 
3004     num = of_count_phandle_with_args(node, propname, NULL);
3005     if (num == -ENOENT) {
3006         return 0;
3007     } else if (num < 0) {
3008         dev_err(card->dev, "ASOC: Property '%s' could not be read: %d\n",
3009             propname, num);
3010         return num;
3011     }
3012 
3013     aux = devm_kcalloc(card->dev, num, sizeof(*aux), GFP_KERNEL);
3014     if (!aux)
3015         return -ENOMEM;
3016     card->aux_dev = aux;
3017     card->num_aux_devs = num;
3018 
3019     for_each_card_pre_auxs(card, i, aux) {
3020         aux->dlc.of_node = of_parse_phandle(node, propname, i);
3021         if (!aux->dlc.of_node)
3022             return -EINVAL;
3023     }
3024 
3025     return 0;
3026 }
3027 EXPORT_SYMBOL_GPL(snd_soc_of_parse_aux_devs);
3028 
3029 unsigned int snd_soc_daifmt_clock_provider_flipped(unsigned int dai_fmt)
3030 {
3031     unsigned int inv_dai_fmt = dai_fmt & ~SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK;
3032 
3033     switch (dai_fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
3034     case SND_SOC_DAIFMT_CBP_CFP:
3035         inv_dai_fmt |= SND_SOC_DAIFMT_CBC_CFC;
3036         break;
3037     case SND_SOC_DAIFMT_CBP_CFC:
3038         inv_dai_fmt |= SND_SOC_DAIFMT_CBC_CFP;
3039         break;
3040     case SND_SOC_DAIFMT_CBC_CFP:
3041         inv_dai_fmt |= SND_SOC_DAIFMT_CBP_CFC;
3042         break;
3043     case SND_SOC_DAIFMT_CBC_CFC:
3044         inv_dai_fmt |= SND_SOC_DAIFMT_CBP_CFP;
3045         break;
3046     }
3047 
3048     return inv_dai_fmt;
3049 }
3050 EXPORT_SYMBOL_GPL(snd_soc_daifmt_clock_provider_flipped);
3051 
3052 unsigned int snd_soc_daifmt_clock_provider_from_bitmap(unsigned int bit_frame)
3053 {
3054     /*
3055      * bit_frame is return value from
3056      *  snd_soc_daifmt_parse_clock_provider_raw()
3057      */
3058 
3059     /* Codec base */
3060     switch (bit_frame) {
3061     case 0x11:
3062         return SND_SOC_DAIFMT_CBP_CFP;
3063     case 0x10:
3064         return SND_SOC_DAIFMT_CBP_CFC;
3065     case 0x01:
3066         return SND_SOC_DAIFMT_CBC_CFP;
3067     default:
3068         return SND_SOC_DAIFMT_CBC_CFC;
3069     }
3070 
3071     return 0;
3072 }
3073 EXPORT_SYMBOL_GPL(snd_soc_daifmt_clock_provider_from_bitmap);
3074 
3075 unsigned int snd_soc_daifmt_parse_format(struct device_node *np,
3076                      const char *prefix)
3077 {
3078     int ret;
3079     char prop[128];
3080     unsigned int format = 0;
3081     int bit, frame;
3082     const char *str;
3083     struct {
3084         char *name;
3085         unsigned int val;
3086     } of_fmt_table[] = {
3087         { "i2s",    SND_SOC_DAIFMT_I2S },
3088         { "right_j",    SND_SOC_DAIFMT_RIGHT_J },
3089         { "left_j", SND_SOC_DAIFMT_LEFT_J },
3090         { "dsp_a",  SND_SOC_DAIFMT_DSP_A },
3091         { "dsp_b",  SND_SOC_DAIFMT_DSP_B },
3092         { "ac97",   SND_SOC_DAIFMT_AC97 },
3093         { "pdm",    SND_SOC_DAIFMT_PDM},
3094         { "msb",    SND_SOC_DAIFMT_MSB },
3095         { "lsb",    SND_SOC_DAIFMT_LSB },
3096     };
3097 
3098     if (!prefix)
3099         prefix = "";
3100 
3101     /*
3102      * check "dai-format = xxx"
3103      * or    "[prefix]format = xxx"
3104      * SND_SOC_DAIFMT_FORMAT_MASK area
3105      */
3106     ret = of_property_read_string(np, "dai-format", &str);
3107     if (ret < 0) {
3108         snprintf(prop, sizeof(prop), "%sformat", prefix);
3109         ret = of_property_read_string(np, prop, &str);
3110     }
3111     if (ret == 0) {
3112         int i;
3113 
3114         for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) {
3115             if (strcmp(str, of_fmt_table[i].name) == 0) {
3116                 format |= of_fmt_table[i].val;
3117                 break;
3118             }
3119         }
3120     }
3121 
3122     /*
3123      * check "[prefix]continuous-clock"
3124      * SND_SOC_DAIFMT_CLOCK_MASK area
3125      */
3126     snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix);
3127     if (of_property_read_bool(np, prop))
3128         format |= SND_SOC_DAIFMT_CONT;
3129     else
3130         format |= SND_SOC_DAIFMT_GATED;
3131 
3132     /*
3133      * check "[prefix]bitclock-inversion"
3134      * check "[prefix]frame-inversion"
3135      * SND_SOC_DAIFMT_INV_MASK area
3136      */
3137     snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix);
3138     bit = !!of_get_property(np, prop, NULL);
3139 
3140     snprintf(prop, sizeof(prop), "%sframe-inversion", prefix);
3141     frame = !!of_get_property(np, prop, NULL);
3142 
3143     switch ((bit << 4) + frame) {
3144     case 0x11:
3145         format |= SND_SOC_DAIFMT_IB_IF;
3146         break;
3147     case 0x10:
3148         format |= SND_SOC_DAIFMT_IB_NF;
3149         break;
3150     case 0x01:
3151         format |= SND_SOC_DAIFMT_NB_IF;
3152         break;
3153     default:
3154         /* SND_SOC_DAIFMT_NB_NF is default */
3155         break;
3156     }
3157 
3158     return format;
3159 }
3160 EXPORT_SYMBOL_GPL(snd_soc_daifmt_parse_format);
3161 
3162 unsigned int snd_soc_daifmt_parse_clock_provider_raw(struct device_node *np,
3163                              const char *prefix,
3164                              struct device_node **bitclkmaster,
3165                              struct device_node **framemaster)
3166 {
3167     char prop[128];
3168     unsigned int bit, frame;
3169 
3170     if (!prefix)
3171         prefix = "";
3172 
3173     /*
3174      * check "[prefix]bitclock-master"
3175      * check "[prefix]frame-master"
3176      */
3177     snprintf(prop, sizeof(prop), "%sbitclock-master", prefix);
3178     bit = !!of_get_property(np, prop, NULL);
3179     if (bit && bitclkmaster)
3180         *bitclkmaster = of_parse_phandle(np, prop, 0);
3181 
3182     snprintf(prop, sizeof(prop), "%sframe-master", prefix);
3183     frame = !!of_get_property(np, prop, NULL);
3184     if (frame && framemaster)
3185         *framemaster = of_parse_phandle(np, prop, 0);
3186 
3187     /*
3188      * return bitmap.
3189      * It will be parameter of
3190      *  snd_soc_daifmt_clock_provider_from_bitmap()
3191      */
3192     return (bit << 4) + frame;
3193 }
3194 EXPORT_SYMBOL_GPL(snd_soc_daifmt_parse_clock_provider_raw);
3195 
3196 int snd_soc_get_dai_id(struct device_node *ep)
3197 {
3198     struct snd_soc_component *component;
3199     struct snd_soc_dai_link_component dlc;
3200     int ret;
3201 
3202     dlc.of_node = of_graph_get_port_parent(ep);
3203     dlc.name    = NULL;
3204     /*
3205      * For example HDMI case, HDMI has video/sound port,
3206      * but ALSA SoC needs sound port number only.
3207      * Thus counting HDMI DT port/endpoint doesn't work.
3208      * Then, it should have .of_xlate_dai_id
3209      */
3210     ret = -ENOTSUPP;
3211     mutex_lock(&client_mutex);
3212     component = soc_find_component(&dlc);
3213     if (component)
3214         ret = snd_soc_component_of_xlate_dai_id(component, ep);
3215     mutex_unlock(&client_mutex);
3216 
3217     of_node_put(dlc.of_node);
3218 
3219     return ret;
3220 }
3221 EXPORT_SYMBOL_GPL(snd_soc_get_dai_id);
3222 
3223 int snd_soc_get_dai_name(const struct of_phandle_args *args,
3224                 const char **dai_name)
3225 {
3226     struct snd_soc_component *pos;
3227     int ret = -EPROBE_DEFER;
3228 
3229     mutex_lock(&client_mutex);
3230     for_each_component(pos) {
3231         struct device_node *component_of_node = soc_component_to_node(pos);
3232 
3233         if (component_of_node != args->np || !pos->num_dai)
3234             continue;
3235 
3236         ret = snd_soc_component_of_xlate_dai_name(pos, args, dai_name);
3237         if (ret == -ENOTSUPP) {
3238             struct snd_soc_dai *dai;
3239             int id = -1;
3240 
3241             switch (args->args_count) {
3242             case 0:
3243                 id = 0; /* same as dai_drv[0] */
3244                 break;
3245             case 1:
3246                 id = args->args[0];
3247                 break;
3248             default:
3249                 /* not supported */
3250                 break;
3251             }
3252 
3253             if (id < 0 || id >= pos->num_dai) {
3254                 ret = -EINVAL;
3255                 continue;
3256             }
3257 
3258             ret = 0;
3259 
3260             /* find target DAI */
3261             for_each_component_dais(pos, dai) {
3262                 if (id == 0)
3263                     break;
3264                 id--;
3265             }
3266 
3267             *dai_name = dai->driver->name;
3268             if (!*dai_name)
3269                 *dai_name = pos->name;
3270         } else if (ret) {
3271             /*
3272              * if another error than ENOTSUPP is returned go on and
3273              * check if another component is provided with the same
3274              * node. This may happen if a device provides several
3275              * components
3276              */
3277             continue;
3278         }
3279 
3280         break;
3281     }
3282     mutex_unlock(&client_mutex);
3283     return ret;
3284 }
3285 EXPORT_SYMBOL_GPL(snd_soc_get_dai_name);
3286 
3287 int snd_soc_of_get_dai_name(struct device_node *of_node,
3288                 const char **dai_name)
3289 {
3290     struct of_phandle_args args;
3291     int ret;
3292 
3293     ret = of_parse_phandle_with_args(of_node, "sound-dai",
3294                      "#sound-dai-cells", 0, &args);
3295     if (ret)
3296         return ret;
3297 
3298     ret = snd_soc_get_dai_name(&args, dai_name);
3299 
3300     of_node_put(args.np);
3301 
3302     return ret;
3303 }
3304 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name);
3305 
3306 static void __snd_soc_of_put_component(struct snd_soc_dai_link_component *component)
3307 {
3308     if (component->of_node) {
3309         of_node_put(component->of_node);
3310         component->of_node = NULL;
3311     }
3312 }
3313 
3314 static int __snd_soc_of_get_dai_link_component_alloc(
3315     struct device *dev, struct device_node *of_node,
3316     struct snd_soc_dai_link_component **ret_component,
3317     int *ret_num)
3318 {
3319     struct snd_soc_dai_link_component *component;
3320     int num;
3321 
3322     /* Count the number of CPUs/CODECs */
3323     num = of_count_phandle_with_args(of_node, "sound-dai", "#sound-dai-cells");
3324     if (num <= 0) {
3325         if (num == -ENOENT)
3326             dev_err(dev, "No 'sound-dai' property\n");
3327         else
3328             dev_err(dev, "Bad phandle in 'sound-dai'\n");
3329         return num;
3330     }
3331     component = devm_kcalloc(dev, num, sizeof(*component), GFP_KERNEL);
3332     if (!component)
3333         return -ENOMEM;
3334 
3335     *ret_component  = component;
3336     *ret_num    = num;
3337 
3338     return 0;
3339 }
3340 
3341 static int __snd_soc_of_get_dai_link_component_parse(
3342     struct device_node *of_node,
3343     struct snd_soc_dai_link_component *component, int index)
3344 {
3345     struct of_phandle_args args;
3346     int ret;
3347 
3348     ret = of_parse_phandle_with_args(of_node, "sound-dai", "#sound-dai-cells",
3349                      index, &args);
3350     if (ret)
3351         return ret;
3352 
3353     ret = snd_soc_get_dai_name(&args, &component->dai_name);
3354     if (ret < 0)
3355         return ret;
3356 
3357     component->of_node = args.np;
3358     return 0;
3359 }
3360 
3361 /*
3362  * snd_soc_of_put_dai_link_codecs - Dereference device nodes in the codecs array
3363  * @dai_link: DAI link
3364  *
3365  * Dereference device nodes acquired by snd_soc_of_get_dai_link_codecs().
3366  */
3367 void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link)
3368 {
3369     struct snd_soc_dai_link_component *component;
3370     int index;
3371 
3372     for_each_link_codecs(dai_link, index, component)
3373         __snd_soc_of_put_component(component);
3374 }
3375 EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_codecs);
3376 
3377 /*
3378  * snd_soc_of_get_dai_link_codecs - Parse a list of CODECs in the devicetree
3379  * @dev: Card device
3380  * @of_node: Device node
3381  * @dai_link: DAI link
3382  *
3383  * Builds an array of CODEC DAI components from the DAI link property
3384  * 'sound-dai'.
3385  * The array is set in the DAI link and the number of DAIs is set accordingly.
3386  * The device nodes in the array (of_node) must be dereferenced by calling
3387  * snd_soc_of_put_dai_link_codecs() on @dai_link.
3388  *
3389  * Returns 0 for success
3390  */
3391 int snd_soc_of_get_dai_link_codecs(struct device *dev,
3392                    struct device_node *of_node,
3393                    struct snd_soc_dai_link *dai_link)
3394 {
3395     struct snd_soc_dai_link_component *component;
3396     int index, ret;
3397 
3398     ret = __snd_soc_of_get_dai_link_component_alloc(dev, of_node,
3399                      &dai_link->codecs, &dai_link->num_codecs);
3400     if (ret < 0)
3401         return ret;
3402 
3403     /* Parse the list */
3404     for_each_link_codecs(dai_link, index, component) {
3405         ret = __snd_soc_of_get_dai_link_component_parse(of_node, component, index);
3406         if (ret)
3407             goto err;
3408     }
3409     return 0;
3410 err:
3411     snd_soc_of_put_dai_link_codecs(dai_link);
3412     dai_link->codecs = NULL;
3413     dai_link->num_codecs = 0;
3414     return ret;
3415 }
3416 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_codecs);
3417 
3418 /*
3419  * snd_soc_of_put_dai_link_cpus - Dereference device nodes in the codecs array
3420  * @dai_link: DAI link
3421  *
3422  * Dereference device nodes acquired by snd_soc_of_get_dai_link_cpus().
3423  */
3424 void snd_soc_of_put_dai_link_cpus(struct snd_soc_dai_link *dai_link)
3425 {
3426     struct snd_soc_dai_link_component *component;
3427     int index;
3428 
3429     for_each_link_cpus(dai_link, index, component)
3430         __snd_soc_of_put_component(component);
3431 }
3432 EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_cpus);
3433 
3434 /*
3435  * snd_soc_of_get_dai_link_cpus - Parse a list of CPU DAIs in the devicetree
3436  * @dev: Card device
3437  * @of_node: Device node
3438  * @dai_link: DAI link
3439  *
3440  * Is analogous to snd_soc_of_get_dai_link_codecs but parses a list of CPU DAIs
3441  * instead.
3442  *
3443  * Returns 0 for success
3444  */
3445 int snd_soc_of_get_dai_link_cpus(struct device *dev,
3446                  struct device_node *of_node,
3447                  struct snd_soc_dai_link *dai_link)
3448 {
3449     struct snd_soc_dai_link_component *component;
3450     int index, ret;
3451 
3452     /* Count the number of CPUs */
3453     ret = __snd_soc_of_get_dai_link_component_alloc(dev, of_node,
3454                      &dai_link->cpus, &dai_link->num_cpus);
3455     if (ret < 0)
3456         return ret;
3457 
3458     /* Parse the list */
3459     for_each_link_cpus(dai_link, index, component) {
3460         ret = __snd_soc_of_get_dai_link_component_parse(of_node, component, index);
3461         if (ret)
3462             goto err;
3463     }
3464     return 0;
3465 err:
3466     snd_soc_of_put_dai_link_cpus(dai_link);
3467     dai_link->cpus = NULL;
3468     dai_link->num_cpus = 0;
3469     return ret;
3470 }
3471 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_cpus);
3472 
3473 static int __init snd_soc_init(void)
3474 {
3475     snd_soc_debugfs_init();
3476     snd_soc_util_init();
3477 
3478     return platform_driver_register(&soc_driver);
3479 }
3480 module_init(snd_soc_init);
3481 
3482 static void __exit snd_soc_exit(void)
3483 {
3484     snd_soc_util_exit();
3485     snd_soc_debugfs_exit();
3486 
3487     platform_driver_unregister(&soc_driver);
3488 }
3489 module_exit(snd_soc_exit);
3490 
3491 /* Module information */
3492 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
3493 MODULE_DESCRIPTION("ALSA SoC Core");
3494 MODULE_LICENSE("GPL");
3495 MODULE_ALIAS("platform:soc-audio");