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