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