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