1 /* 2 * soc-core.c -- ALSA SoC Audio Layer 3 * 4 * Copyright 2005 Wolfson Microelectronics PLC. 5 * Copyright 2005 Openedhand Ltd. 6 * Copyright (C) 2010 Slimlogic Ltd. 7 * Copyright (C) 2010 Texas Instruments Inc. 8 * 9 * Author: Liam Girdwood <lrg@slimlogic.co.uk> 10 * with code, comments and ideas from :- 11 * Richard Purdie <richard@openedhand.com> 12 * 13 * This program is free software; you can redistribute it and/or modify it 14 * under the terms of the GNU General Public License as published by the 15 * Free Software Foundation; either version 2 of the License, or (at your 16 * option) any later version. 17 * 18 * TODO: 19 * o Add hw rules to enforce rates, etc. 20 * o More testing with other codecs/machines. 21 * o Add more codecs and platforms to ensure good API coverage. 22 * o Support TDM on PCM and I2S 23 */ 24 25 #include <linux/module.h> 26 #include <linux/moduleparam.h> 27 #include <linux/init.h> 28 #include <linux/delay.h> 29 #include <linux/pm.h> 30 #include <linux/bitops.h> 31 #include <linux/debugfs.h> 32 #include <linux/platform_device.h> 33 #include <linux/pinctrl/consumer.h> 34 #include <linux/ctype.h> 35 #include <linux/slab.h> 36 #include <linux/of.h> 37 #include <linux/gpio.h> 38 #include <linux/of_gpio.h> 39 #include <sound/ac97_codec.h> 40 #include <sound/core.h> 41 #include <sound/jack.h> 42 #include <sound/pcm.h> 43 #include <sound/pcm_params.h> 44 #include <sound/soc.h> 45 #include <sound/soc-dpcm.h> 46 #include <sound/initval.h> 47 48 #define CREATE_TRACE_POINTS 49 #include <trace/events/asoc.h> 50 51 #define NAME_SIZE 32 52 53 #ifdef CONFIG_DEBUG_FS 54 struct dentry *snd_soc_debugfs_root; 55 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root); 56 #endif 57 58 static DEFINE_MUTEX(client_mutex); 59 static LIST_HEAD(platform_list); 60 static LIST_HEAD(codec_list); 61 static LIST_HEAD(component_list); 62 63 /* 64 * This is a timeout to do a DAPM powerdown after a stream is closed(). 65 * It can be used to eliminate pops between different playback streams, e.g. 66 * between two audio tracks. 67 */ 68 static int pmdown_time = 5000; 69 module_param(pmdown_time, int, 0); 70 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 71 72 struct snd_ac97_reset_cfg { 73 struct pinctrl *pctl; 74 struct pinctrl_state *pstate_reset; 75 struct pinctrl_state *pstate_warm_reset; 76 struct pinctrl_state *pstate_run; 77 int gpio_sdata; 78 int gpio_sync; 79 int gpio_reset; 80 }; 81 82 /* returns the minimum number of bytes needed to represent 83 * a particular given value */ 84 static int min_bytes_needed(unsigned long val) 85 { 86 int c = 0; 87 int i; 88 89 for (i = (sizeof val * 8) - 1; i >= 0; --i, ++c) 90 if (val & (1UL << i)) 91 break; 92 c = (sizeof val * 8) - c; 93 if (!c || (c % 8)) 94 c = (c + 8) / 8; 95 else 96 c /= 8; 97 return c; 98 } 99 100 /* fill buf which is 'len' bytes with a formatted 101 * string of the form 'reg: value\n' */ 102 static int format_register_str(struct snd_soc_codec *codec, 103 unsigned int reg, char *buf, size_t len) 104 { 105 int wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2; 106 int regsize = codec->driver->reg_word_size * 2; 107 int ret; 108 char tmpbuf[len + 1]; 109 char regbuf[regsize + 1]; 110 111 /* since tmpbuf is allocated on the stack, warn the callers if they 112 * try to abuse this function */ 113 WARN_ON(len > 63); 114 115 /* +2 for ': ' and + 1 for '\n' */ 116 if (wordsize + regsize + 2 + 1 != len) 117 return -EINVAL; 118 119 ret = snd_soc_read(codec, reg); 120 if (ret < 0) { 121 memset(regbuf, 'X', regsize); 122 regbuf[regsize] = '\0'; 123 } else { 124 snprintf(regbuf, regsize + 1, "%.*x", regsize, ret); 125 } 126 127 /* prepare the buffer */ 128 snprintf(tmpbuf, len + 1, "%.*x: %s\n", wordsize, reg, regbuf); 129 /* copy it back to the caller without the '\0' */ 130 memcpy(buf, tmpbuf, len); 131 132 return 0; 133 } 134 135 /* codec register dump */ 136 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf, 137 size_t count, loff_t pos) 138 { 139 int i, step = 1; 140 int wordsize, regsize; 141 int len; 142 size_t total = 0; 143 loff_t p = 0; 144 145 wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2; 146 regsize = codec->driver->reg_word_size * 2; 147 148 len = wordsize + regsize + 2 + 1; 149 150 if (!codec->driver->reg_cache_size) 151 return 0; 152 153 if (codec->driver->reg_cache_step) 154 step = codec->driver->reg_cache_step; 155 156 for (i = 0; i < codec->driver->reg_cache_size; i += step) { 157 /* only support larger than PAGE_SIZE bytes debugfs 158 * entries for the default case */ 159 if (p >= pos) { 160 if (total + len >= count - 1) 161 break; 162 format_register_str(codec, i, buf + total, len); 163 total += len; 164 } 165 p += len; 166 } 167 168 total = min(total, count - 1); 169 170 return total; 171 } 172 173 static ssize_t codec_reg_show(struct device *dev, 174 struct device_attribute *attr, char *buf) 175 { 176 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 177 178 return soc_codec_reg_show(rtd->codec, buf, PAGE_SIZE, 0); 179 } 180 181 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL); 182 183 static ssize_t pmdown_time_show(struct device *dev, 184 struct device_attribute *attr, char *buf) 185 { 186 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 187 188 return sprintf(buf, "%ld\n", rtd->pmdown_time); 189 } 190 191 static ssize_t pmdown_time_set(struct device *dev, 192 struct device_attribute *attr, 193 const char *buf, size_t count) 194 { 195 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 196 int ret; 197 198 ret = kstrtol(buf, 10, &rtd->pmdown_time); 199 if (ret) 200 return ret; 201 202 return count; 203 } 204 205 static DEVICE_ATTR(pmdown_time, 0644, pmdown_time_show, pmdown_time_set); 206 207 #ifdef CONFIG_DEBUG_FS 208 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf, 209 size_t count, loff_t *ppos) 210 { 211 ssize_t ret; 212 struct snd_soc_codec *codec = file->private_data; 213 char *buf; 214 215 if (*ppos < 0 || !count) 216 return -EINVAL; 217 218 buf = kmalloc(count, GFP_KERNEL); 219 if (!buf) 220 return -ENOMEM; 221 222 ret = soc_codec_reg_show(codec, buf, count, *ppos); 223 if (ret >= 0) { 224 if (copy_to_user(user_buf, buf, ret)) { 225 kfree(buf); 226 return -EFAULT; 227 } 228 *ppos += ret; 229 } 230 231 kfree(buf); 232 return ret; 233 } 234 235 static ssize_t codec_reg_write_file(struct file *file, 236 const char __user *user_buf, size_t count, loff_t *ppos) 237 { 238 char buf[32]; 239 size_t buf_size; 240 char *start = buf; 241 unsigned long reg, value; 242 struct snd_soc_codec *codec = file->private_data; 243 int ret; 244 245 buf_size = min(count, (sizeof(buf)-1)); 246 if (copy_from_user(buf, user_buf, buf_size)) 247 return -EFAULT; 248 buf[buf_size] = 0; 249 250 while (*start == ' ') 251 start++; 252 reg = simple_strtoul(start, &start, 16); 253 while (*start == ' ') 254 start++; 255 ret = kstrtoul(start, 16, &value); 256 if (ret) 257 return ret; 258 259 /* Userspace has been fiddling around behind the kernel's back */ 260 add_taint(TAINT_USER, LOCKDEP_NOW_UNRELIABLE); 261 262 snd_soc_write(codec, reg, value); 263 return buf_size; 264 } 265 266 static const struct file_operations codec_reg_fops = { 267 .open = simple_open, 268 .read = codec_reg_read_file, 269 .write = codec_reg_write_file, 270 .llseek = default_llseek, 271 }; 272 273 static void soc_init_codec_debugfs(struct snd_soc_codec *codec) 274 { 275 struct dentry *debugfs_card_root = codec->card->debugfs_card_root; 276 277 codec->debugfs_codec_root = debugfs_create_dir(codec->name, 278 debugfs_card_root); 279 if (!codec->debugfs_codec_root) { 280 dev_warn(codec->dev, 281 "ASoC: Failed to create codec debugfs directory\n"); 282 return; 283 } 284 285 debugfs_create_bool("cache_sync", 0444, codec->debugfs_codec_root, 286 &codec->cache_sync); 287 debugfs_create_bool("cache_only", 0444, codec->debugfs_codec_root, 288 &codec->cache_only); 289 290 codec->debugfs_reg = debugfs_create_file("codec_reg", 0644, 291 codec->debugfs_codec_root, 292 codec, &codec_reg_fops); 293 if (!codec->debugfs_reg) 294 dev_warn(codec->dev, 295 "ASoC: Failed to create codec register debugfs file\n"); 296 297 snd_soc_dapm_debugfs_init(&codec->dapm, codec->debugfs_codec_root); 298 } 299 300 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 301 { 302 debugfs_remove_recursive(codec->debugfs_codec_root); 303 } 304 305 static void soc_init_platform_debugfs(struct snd_soc_platform *platform) 306 { 307 struct dentry *debugfs_card_root = platform->card->debugfs_card_root; 308 309 platform->debugfs_platform_root = debugfs_create_dir(platform->name, 310 debugfs_card_root); 311 if (!platform->debugfs_platform_root) { 312 dev_warn(platform->dev, 313 "ASoC: Failed to create platform debugfs directory\n"); 314 return; 315 } 316 317 snd_soc_dapm_debugfs_init(&platform->dapm, 318 platform->debugfs_platform_root); 319 } 320 321 static void soc_cleanup_platform_debugfs(struct snd_soc_platform *platform) 322 { 323 debugfs_remove_recursive(platform->debugfs_platform_root); 324 } 325 326 static ssize_t codec_list_read_file(struct file *file, char __user *user_buf, 327 size_t count, loff_t *ppos) 328 { 329 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 330 ssize_t len, ret = 0; 331 struct snd_soc_codec *codec; 332 333 if (!buf) 334 return -ENOMEM; 335 336 list_for_each_entry(codec, &codec_list, list) { 337 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", 338 codec->name); 339 if (len >= 0) 340 ret += len; 341 if (ret > PAGE_SIZE) { 342 ret = PAGE_SIZE; 343 break; 344 } 345 } 346 347 if (ret >= 0) 348 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 349 350 kfree(buf); 351 352 return ret; 353 } 354 355 static const struct file_operations codec_list_fops = { 356 .read = codec_list_read_file, 357 .llseek = default_llseek,/* read accesses f_pos */ 358 }; 359 360 static ssize_t dai_list_read_file(struct file *file, char __user *user_buf, 361 size_t count, loff_t *ppos) 362 { 363 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 364 ssize_t len, ret = 0; 365 struct snd_soc_component *component; 366 struct snd_soc_dai *dai; 367 368 if (!buf) 369 return -ENOMEM; 370 371 list_for_each_entry(component, &component_list, list) { 372 list_for_each_entry(dai, &component->dai_list, list) { 373 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", 374 dai->name); 375 if (len >= 0) 376 ret += len; 377 if (ret > PAGE_SIZE) { 378 ret = PAGE_SIZE; 379 break; 380 } 381 } 382 } 383 384 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 385 386 kfree(buf); 387 388 return ret; 389 } 390 391 static const struct file_operations dai_list_fops = { 392 .read = dai_list_read_file, 393 .llseek = default_llseek,/* read accesses f_pos */ 394 }; 395 396 static ssize_t platform_list_read_file(struct file *file, 397 char __user *user_buf, 398 size_t count, loff_t *ppos) 399 { 400 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 401 ssize_t len, ret = 0; 402 struct snd_soc_platform *platform; 403 404 if (!buf) 405 return -ENOMEM; 406 407 list_for_each_entry(platform, &platform_list, list) { 408 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", 409 platform->name); 410 if (len >= 0) 411 ret += len; 412 if (ret > PAGE_SIZE) { 413 ret = PAGE_SIZE; 414 break; 415 } 416 } 417 418 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 419 420 kfree(buf); 421 422 return ret; 423 } 424 425 static const struct file_operations platform_list_fops = { 426 .read = platform_list_read_file, 427 .llseek = default_llseek,/* read accesses f_pos */ 428 }; 429 430 static void soc_init_card_debugfs(struct snd_soc_card *card) 431 { 432 card->debugfs_card_root = debugfs_create_dir(card->name, 433 snd_soc_debugfs_root); 434 if (!card->debugfs_card_root) { 435 dev_warn(card->dev, 436 "ASoC: Failed to create card debugfs directory\n"); 437 return; 438 } 439 440 card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644, 441 card->debugfs_card_root, 442 &card->pop_time); 443 if (!card->debugfs_pop_time) 444 dev_warn(card->dev, 445 "ASoC: Failed to create pop time debugfs file\n"); 446 } 447 448 static void soc_cleanup_card_debugfs(struct snd_soc_card *card) 449 { 450 debugfs_remove_recursive(card->debugfs_card_root); 451 } 452 453 #else 454 455 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec) 456 { 457 } 458 459 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 460 { 461 } 462 463 static inline void soc_init_platform_debugfs(struct snd_soc_platform *platform) 464 { 465 } 466 467 static inline void soc_cleanup_platform_debugfs(struct snd_soc_platform *platform) 468 { 469 } 470 471 static inline void soc_init_card_debugfs(struct snd_soc_card *card) 472 { 473 } 474 475 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) 476 { 477 } 478 #endif 479 480 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card, 481 const char *dai_link, int stream) 482 { 483 int i; 484 485 for (i = 0; i < card->num_links; i++) { 486 if (card->rtd[i].dai_link->no_pcm && 487 !strcmp(card->rtd[i].dai_link->name, dai_link)) 488 return card->rtd[i].pcm->streams[stream].substream; 489 } 490 dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link); 491 return NULL; 492 } 493 EXPORT_SYMBOL_GPL(snd_soc_get_dai_substream); 494 495 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card, 496 const char *dai_link) 497 { 498 int i; 499 500 for (i = 0; i < card->num_links; i++) { 501 if (!strcmp(card->rtd[i].dai_link->name, dai_link)) 502 return &card->rtd[i]; 503 } 504 dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link); 505 return NULL; 506 } 507 EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime); 508 509 #ifdef CONFIG_SND_SOC_AC97_BUS 510 /* unregister ac97 codec */ 511 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec) 512 { 513 if (codec->ac97->dev.bus) 514 device_unregister(&codec->ac97->dev); 515 return 0; 516 } 517 518 /* stop no dev release warning */ 519 static void soc_ac97_device_release(struct device *dev){} 520 521 /* register ac97 codec to bus */ 522 static int soc_ac97_dev_register(struct snd_soc_codec *codec) 523 { 524 int err; 525 526 codec->ac97->dev.bus = &ac97_bus_type; 527 codec->ac97->dev.parent = codec->card->dev; 528 codec->ac97->dev.release = soc_ac97_device_release; 529 530 dev_set_name(&codec->ac97->dev, "%d-%d:%s", 531 codec->card->snd_card->number, 0, codec->name); 532 err = device_register(&codec->ac97->dev); 533 if (err < 0) { 534 dev_err(codec->dev, "ASoC: Can't register ac97 bus\n"); 535 codec->ac97->dev.bus = NULL; 536 return err; 537 } 538 return 0; 539 } 540 #endif 541 542 static void codec2codec_close_delayed_work(struct work_struct *work) 543 { 544 /* Currently nothing to do for c2c links 545 * Since c2c links are internal nodes in the DAPM graph and 546 * don't interface with the outside world or application layer 547 * we don't have to do any special handling on close. 548 */ 549 } 550 551 #ifdef CONFIG_PM_SLEEP 552 /* powers down audio subsystem for suspend */ 553 int snd_soc_suspend(struct device *dev) 554 { 555 struct snd_soc_card *card = dev_get_drvdata(dev); 556 struct snd_soc_codec *codec; 557 int i; 558 559 /* If the initialization of this soc device failed, there is no codec 560 * associated with it. Just bail out in this case. 561 */ 562 if (list_empty(&card->codec_dev_list)) 563 return 0; 564 565 /* Due to the resume being scheduled into a workqueue we could 566 * suspend before that's finished - wait for it to complete. 567 */ 568 snd_power_lock(card->snd_card); 569 snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); 570 snd_power_unlock(card->snd_card); 571 572 /* we're going to block userspace touching us until resume completes */ 573 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); 574 575 /* mute any active DACs */ 576 for (i = 0; i < card->num_rtd; i++) { 577 struct snd_soc_dai *dai = card->rtd[i].codec_dai; 578 struct snd_soc_dai_driver *drv = dai->driver; 579 580 if (card->rtd[i].dai_link->ignore_suspend) 581 continue; 582 583 if (drv->ops->digital_mute && dai->playback_active) 584 drv->ops->digital_mute(dai, 1); 585 } 586 587 /* suspend all pcms */ 588 for (i = 0; i < card->num_rtd; i++) { 589 if (card->rtd[i].dai_link->ignore_suspend) 590 continue; 591 592 snd_pcm_suspend_all(card->rtd[i].pcm); 593 } 594 595 if (card->suspend_pre) 596 card->suspend_pre(card); 597 598 for (i = 0; i < card->num_rtd; i++) { 599 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 600 struct snd_soc_platform *platform = card->rtd[i].platform; 601 602 if (card->rtd[i].dai_link->ignore_suspend) 603 continue; 604 605 if (cpu_dai->driver->suspend && !cpu_dai->driver->ac97_control) 606 cpu_dai->driver->suspend(cpu_dai); 607 if (platform->driver->suspend && !platform->suspended) { 608 platform->driver->suspend(cpu_dai); 609 platform->suspended = 1; 610 } 611 } 612 613 /* close any waiting streams and save state */ 614 for (i = 0; i < card->num_rtd; i++) { 615 flush_delayed_work(&card->rtd[i].delayed_work); 616 card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level; 617 } 618 619 for (i = 0; i < card->num_rtd; i++) { 620 621 if (card->rtd[i].dai_link->ignore_suspend) 622 continue; 623 624 snd_soc_dapm_stream_event(&card->rtd[i], 625 SNDRV_PCM_STREAM_PLAYBACK, 626 SND_SOC_DAPM_STREAM_SUSPEND); 627 628 snd_soc_dapm_stream_event(&card->rtd[i], 629 SNDRV_PCM_STREAM_CAPTURE, 630 SND_SOC_DAPM_STREAM_SUSPEND); 631 } 632 633 /* Recheck all analogue paths too */ 634 dapm_mark_io_dirty(&card->dapm); 635 snd_soc_dapm_sync(&card->dapm); 636 637 /* suspend all CODECs */ 638 list_for_each_entry(codec, &card->codec_dev_list, card_list) { 639 /* If there are paths active then the CODEC will be held with 640 * bias _ON and should not be suspended. */ 641 if (!codec->suspended && codec->driver->suspend) { 642 switch (codec->dapm.bias_level) { 643 case SND_SOC_BIAS_STANDBY: 644 /* 645 * If the CODEC is capable of idle 646 * bias off then being in STANDBY 647 * means it's doing something, 648 * otherwise fall through. 649 */ 650 if (codec->dapm.idle_bias_off) { 651 dev_dbg(codec->dev, 652 "ASoC: idle_bias_off CODEC on over suspend\n"); 653 break; 654 } 655 case SND_SOC_BIAS_OFF: 656 codec->driver->suspend(codec); 657 codec->suspended = 1; 658 codec->cache_sync = 1; 659 if (codec->component.regmap) 660 regcache_mark_dirty(codec->component.regmap); 661 /* deactivate pins to sleep state */ 662 pinctrl_pm_select_sleep_state(codec->dev); 663 break; 664 default: 665 dev_dbg(codec->dev, 666 "ASoC: CODEC is on over suspend\n"); 667 break; 668 } 669 } 670 } 671 672 for (i = 0; i < card->num_rtd; i++) { 673 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 674 675 if (card->rtd[i].dai_link->ignore_suspend) 676 continue; 677 678 if (cpu_dai->driver->suspend && cpu_dai->driver->ac97_control) 679 cpu_dai->driver->suspend(cpu_dai); 680 681 /* deactivate pins to sleep state */ 682 pinctrl_pm_select_sleep_state(cpu_dai->dev); 683 } 684 685 if (card->suspend_post) 686 card->suspend_post(card); 687 688 return 0; 689 } 690 EXPORT_SYMBOL_GPL(snd_soc_suspend); 691 692 /* deferred resume work, so resume can complete before we finished 693 * setting our codec back up, which can be very slow on I2C 694 */ 695 static void soc_resume_deferred(struct work_struct *work) 696 { 697 struct snd_soc_card *card = 698 container_of(work, struct snd_soc_card, deferred_resume_work); 699 struct snd_soc_codec *codec; 700 int i; 701 702 /* our power state is still SNDRV_CTL_POWER_D3hot from suspend time, 703 * so userspace apps are blocked from touching us 704 */ 705 706 dev_dbg(card->dev, "ASoC: starting resume work\n"); 707 708 /* Bring us up into D2 so that DAPM starts enabling things */ 709 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2); 710 711 if (card->resume_pre) 712 card->resume_pre(card); 713 714 /* resume AC97 DAIs */ 715 for (i = 0; i < card->num_rtd; i++) { 716 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 717 718 if (card->rtd[i].dai_link->ignore_suspend) 719 continue; 720 721 if (cpu_dai->driver->resume && cpu_dai->driver->ac97_control) 722 cpu_dai->driver->resume(cpu_dai); 723 } 724 725 list_for_each_entry(codec, &card->codec_dev_list, card_list) { 726 /* If the CODEC was idle over suspend then it will have been 727 * left with bias OFF or STANDBY and suspended so we must now 728 * resume. Otherwise the suspend was suppressed. 729 */ 730 if (codec->driver->resume && codec->suspended) { 731 switch (codec->dapm.bias_level) { 732 case SND_SOC_BIAS_STANDBY: 733 case SND_SOC_BIAS_OFF: 734 codec->driver->resume(codec); 735 codec->suspended = 0; 736 break; 737 default: 738 dev_dbg(codec->dev, 739 "ASoC: CODEC was on over suspend\n"); 740 break; 741 } 742 } 743 } 744 745 for (i = 0; i < card->num_rtd; i++) { 746 747 if (card->rtd[i].dai_link->ignore_suspend) 748 continue; 749 750 snd_soc_dapm_stream_event(&card->rtd[i], 751 SNDRV_PCM_STREAM_PLAYBACK, 752 SND_SOC_DAPM_STREAM_RESUME); 753 754 snd_soc_dapm_stream_event(&card->rtd[i], 755 SNDRV_PCM_STREAM_CAPTURE, 756 SND_SOC_DAPM_STREAM_RESUME); 757 } 758 759 /* unmute any active DACs */ 760 for (i = 0; i < card->num_rtd; i++) { 761 struct snd_soc_dai *dai = card->rtd[i].codec_dai; 762 struct snd_soc_dai_driver *drv = dai->driver; 763 764 if (card->rtd[i].dai_link->ignore_suspend) 765 continue; 766 767 if (drv->ops->digital_mute && dai->playback_active) 768 drv->ops->digital_mute(dai, 0); 769 } 770 771 for (i = 0; i < card->num_rtd; i++) { 772 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 773 struct snd_soc_platform *platform = card->rtd[i].platform; 774 775 if (card->rtd[i].dai_link->ignore_suspend) 776 continue; 777 778 if (cpu_dai->driver->resume && !cpu_dai->driver->ac97_control) 779 cpu_dai->driver->resume(cpu_dai); 780 if (platform->driver->resume && platform->suspended) { 781 platform->driver->resume(cpu_dai); 782 platform->suspended = 0; 783 } 784 } 785 786 if (card->resume_post) 787 card->resume_post(card); 788 789 dev_dbg(card->dev, "ASoC: resume work completed\n"); 790 791 /* userspace can access us now we are back as we were before */ 792 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0); 793 794 /* Recheck all analogue paths too */ 795 dapm_mark_io_dirty(&card->dapm); 796 snd_soc_dapm_sync(&card->dapm); 797 } 798 799 /* powers up audio subsystem after a suspend */ 800 int snd_soc_resume(struct device *dev) 801 { 802 struct snd_soc_card *card = dev_get_drvdata(dev); 803 int i, ac97_control = 0; 804 805 /* If the initialization of this soc device failed, there is no codec 806 * associated with it. Just bail out in this case. 807 */ 808 if (list_empty(&card->codec_dev_list)) 809 return 0; 810 811 /* activate pins from sleep state */ 812 for (i = 0; i < card->num_rtd; i++) { 813 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 814 struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai; 815 if (cpu_dai->active) 816 pinctrl_pm_select_default_state(cpu_dai->dev); 817 if (codec_dai->active) 818 pinctrl_pm_select_default_state(codec_dai->dev); 819 } 820 821 /* AC97 devices might have other drivers hanging off them so 822 * need to resume immediately. Other drivers don't have that 823 * problem and may take a substantial amount of time to resume 824 * due to I/O costs and anti-pop so handle them out of line. 825 */ 826 for (i = 0; i < card->num_rtd; i++) { 827 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 828 ac97_control |= cpu_dai->driver->ac97_control; 829 } 830 if (ac97_control) { 831 dev_dbg(dev, "ASoC: Resuming AC97 immediately\n"); 832 soc_resume_deferred(&card->deferred_resume_work); 833 } else { 834 dev_dbg(dev, "ASoC: Scheduling resume work\n"); 835 if (!schedule_work(&card->deferred_resume_work)) 836 dev_err(dev, "ASoC: resume work item may be lost\n"); 837 } 838 839 return 0; 840 } 841 EXPORT_SYMBOL_GPL(snd_soc_resume); 842 #else 843 #define snd_soc_suspend NULL 844 #define snd_soc_resume NULL 845 #endif 846 847 static const struct snd_soc_dai_ops null_dai_ops = { 848 }; 849 850 static struct snd_soc_codec *soc_find_codec(const struct device_node *codec_of_node, 851 const char *codec_name) 852 { 853 struct snd_soc_codec *codec; 854 855 list_for_each_entry(codec, &codec_list, list) { 856 if (codec_of_node) { 857 if (codec->dev->of_node != codec_of_node) 858 continue; 859 } else { 860 if (strcmp(codec->name, codec_name)) 861 continue; 862 } 863 864 return codec; 865 } 866 867 return NULL; 868 } 869 870 static struct snd_soc_dai *soc_find_codec_dai(struct snd_soc_codec *codec, 871 const char *codec_dai_name) 872 { 873 struct snd_soc_dai *codec_dai; 874 875 list_for_each_entry(codec_dai, &codec->component.dai_list, list) { 876 if (!strcmp(codec_dai->name, codec_dai_name)) { 877 return codec_dai; 878 } 879 } 880 881 return NULL; 882 } 883 884 static int soc_bind_dai_link(struct snd_soc_card *card, int num) 885 { 886 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; 887 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 888 struct snd_soc_component *component; 889 struct snd_soc_platform *platform; 890 struct snd_soc_dai *cpu_dai; 891 const char *platform_name; 892 893 dev_dbg(card->dev, "ASoC: binding %s at idx %d\n", dai_link->name, num); 894 895 /* Find CPU DAI from registered DAIs*/ 896 list_for_each_entry(component, &component_list, list) { 897 if (dai_link->cpu_of_node && 898 component->dev->of_node != dai_link->cpu_of_node) 899 continue; 900 if (dai_link->cpu_name && 901 strcmp(dev_name(component->dev), dai_link->cpu_name)) 902 continue; 903 list_for_each_entry(cpu_dai, &component->dai_list, list) { 904 if (dai_link->cpu_dai_name && 905 strcmp(cpu_dai->name, dai_link->cpu_dai_name)) 906 continue; 907 908 rtd->cpu_dai = cpu_dai; 909 } 910 } 911 912 if (!rtd->cpu_dai) { 913 dev_err(card->dev, "ASoC: CPU DAI %s not registered\n", 914 dai_link->cpu_dai_name); 915 return -EPROBE_DEFER; 916 } 917 918 /* Find CODEC from registered list */ 919 rtd->codec = soc_find_codec(dai_link->codec_of_node, 920 dai_link->codec_name); 921 if (!rtd->codec) { 922 dev_err(card->dev, "ASoC: CODEC %s not registered\n", 923 dai_link->codec_name); 924 return -EPROBE_DEFER; 925 } 926 927 /* Find CODEC DAI from registered list */ 928 rtd->codec_dai = soc_find_codec_dai(rtd->codec, 929 dai_link->codec_dai_name); 930 if (!rtd->codec_dai) { 931 dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n", 932 dai_link->codec_dai_name); 933 return -EPROBE_DEFER; 934 } 935 936 /* if there's no platform we match on the empty platform */ 937 platform_name = dai_link->platform_name; 938 if (!platform_name && !dai_link->platform_of_node) 939 platform_name = "snd-soc-dummy"; 940 941 /* find one from the set of registered platforms */ 942 list_for_each_entry(platform, &platform_list, list) { 943 if (dai_link->platform_of_node) { 944 if (platform->dev->of_node != 945 dai_link->platform_of_node) 946 continue; 947 } else { 948 if (strcmp(platform->name, platform_name)) 949 continue; 950 } 951 952 rtd->platform = platform; 953 } 954 if (!rtd->platform) { 955 dev_err(card->dev, "ASoC: platform %s not registered\n", 956 dai_link->platform_name); 957 return -EPROBE_DEFER; 958 } 959 960 card->num_rtd++; 961 962 return 0; 963 } 964 965 static int soc_remove_platform(struct snd_soc_platform *platform) 966 { 967 int ret; 968 969 if (platform->driver->remove) { 970 ret = platform->driver->remove(platform); 971 if (ret < 0) 972 dev_err(platform->dev, "ASoC: failed to remove %d\n", 973 ret); 974 } 975 976 /* Make sure all DAPM widgets are freed */ 977 snd_soc_dapm_free(&platform->dapm); 978 979 soc_cleanup_platform_debugfs(platform); 980 platform->probed = 0; 981 list_del(&platform->card_list); 982 module_put(platform->dev->driver->owner); 983 984 return 0; 985 } 986 987 static void soc_remove_codec(struct snd_soc_codec *codec) 988 { 989 int err; 990 991 if (codec->driver->remove) { 992 err = codec->driver->remove(codec); 993 if (err < 0) 994 dev_err(codec->dev, "ASoC: failed to remove %d\n", err); 995 } 996 997 /* Make sure all DAPM widgets are freed */ 998 snd_soc_dapm_free(&codec->dapm); 999 1000 soc_cleanup_codec_debugfs(codec); 1001 codec->probed = 0; 1002 list_del(&codec->card_list); 1003 module_put(codec->dev->driver->owner); 1004 } 1005 1006 static void soc_remove_codec_dai(struct snd_soc_dai *codec_dai, int order) 1007 { 1008 int err; 1009 1010 if (codec_dai && codec_dai->probed && 1011 codec_dai->driver->remove_order == order) { 1012 if (codec_dai->driver->remove) { 1013 err = codec_dai->driver->remove(codec_dai); 1014 if (err < 0) 1015 dev_err(codec_dai->dev, 1016 "ASoC: failed to remove %s: %d\n", 1017 codec_dai->name, err); 1018 } 1019 codec_dai->probed = 0; 1020 } 1021 } 1022 1023 static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) 1024 { 1025 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1026 struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai; 1027 int err; 1028 1029 /* unregister the rtd device */ 1030 if (rtd->dev_registered) { 1031 device_remove_file(rtd->dev, &dev_attr_pmdown_time); 1032 device_remove_file(rtd->dev, &dev_attr_codec_reg); 1033 device_unregister(rtd->dev); 1034 rtd->dev_registered = 0; 1035 } 1036 1037 /* remove the CODEC DAI */ 1038 soc_remove_codec_dai(codec_dai, order); 1039 1040 /* remove the cpu_dai */ 1041 if (cpu_dai && cpu_dai->probed && 1042 cpu_dai->driver->remove_order == order) { 1043 if (cpu_dai->driver->remove) { 1044 err = cpu_dai->driver->remove(cpu_dai); 1045 if (err < 0) 1046 dev_err(cpu_dai->dev, 1047 "ASoC: failed to remove %s: %d\n", 1048 cpu_dai->name, err); 1049 } 1050 cpu_dai->probed = 0; 1051 1052 if (!cpu_dai->codec) { 1053 snd_soc_dapm_free(&cpu_dai->dapm); 1054 module_put(cpu_dai->dev->driver->owner); 1055 } 1056 } 1057 } 1058 1059 static void soc_remove_link_components(struct snd_soc_card *card, int num, 1060 int order) 1061 { 1062 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1063 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 1064 struct snd_soc_dai *codec_dai = rtd->codec_dai; 1065 struct snd_soc_platform *platform = rtd->platform; 1066 struct snd_soc_codec *codec; 1067 1068 /* remove the platform */ 1069 if (platform && platform->probed && 1070 platform->driver->remove_order == order) { 1071 soc_remove_platform(platform); 1072 } 1073 1074 /* remove the CODEC-side CODEC */ 1075 if (codec_dai) { 1076 codec = codec_dai->codec; 1077 if (codec && codec->probed && 1078 codec->driver->remove_order == order) 1079 soc_remove_codec(codec); 1080 } 1081 1082 /* remove any CPU-side CODEC */ 1083 if (cpu_dai) { 1084 codec = cpu_dai->codec; 1085 if (codec && codec->probed && 1086 codec->driver->remove_order == order) 1087 soc_remove_codec(codec); 1088 } 1089 } 1090 1091 static void soc_remove_dai_links(struct snd_soc_card *card) 1092 { 1093 int dai, order; 1094 1095 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1096 order++) { 1097 for (dai = 0; dai < card->num_rtd; dai++) 1098 soc_remove_link_dais(card, dai, order); 1099 } 1100 1101 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1102 order++) { 1103 for (dai = 0; dai < card->num_rtd; dai++) 1104 soc_remove_link_components(card, dai, order); 1105 } 1106 1107 card->num_rtd = 0; 1108 } 1109 1110 static void soc_set_name_prefix(struct snd_soc_card *card, 1111 struct snd_soc_codec *codec) 1112 { 1113 int i; 1114 1115 if (card->codec_conf == NULL) 1116 return; 1117 1118 for (i = 0; i < card->num_configs; i++) { 1119 struct snd_soc_codec_conf *map = &card->codec_conf[i]; 1120 if (map->of_node && codec->dev->of_node != map->of_node) 1121 continue; 1122 if (map->dev_name && strcmp(codec->name, map->dev_name)) 1123 continue; 1124 codec->name_prefix = map->name_prefix; 1125 break; 1126 } 1127 } 1128 1129 static int soc_probe_codec(struct snd_soc_card *card, 1130 struct snd_soc_codec *codec) 1131 { 1132 int ret = 0; 1133 const struct snd_soc_codec_driver *driver = codec->driver; 1134 struct snd_soc_dai *dai; 1135 1136 codec->card = card; 1137 codec->dapm.card = card; 1138 soc_set_name_prefix(card, codec); 1139 1140 if (!try_module_get(codec->dev->driver->owner)) 1141 return -ENODEV; 1142 1143 soc_init_codec_debugfs(codec); 1144 1145 if (driver->dapm_widgets) { 1146 ret = snd_soc_dapm_new_controls(&codec->dapm, 1147 driver->dapm_widgets, 1148 driver->num_dapm_widgets); 1149 1150 if (ret != 0) { 1151 dev_err(codec->dev, 1152 "Failed to create new controls %d\n", ret); 1153 goto err_probe; 1154 } 1155 } 1156 1157 /* Create DAPM widgets for each DAI stream */ 1158 list_for_each_entry(dai, &codec->component.dai_list, list) { 1159 ret = snd_soc_dapm_new_dai_widgets(&codec->dapm, dai); 1160 1161 if (ret != 0) { 1162 dev_err(codec->dev, 1163 "Failed to create DAI widgets %d\n", ret); 1164 goto err_probe; 1165 } 1166 } 1167 1168 codec->dapm.idle_bias_off = driver->idle_bias_off; 1169 1170 if (driver->probe) { 1171 ret = driver->probe(codec); 1172 if (ret < 0) { 1173 dev_err(codec->dev, 1174 "ASoC: failed to probe CODEC %d\n", ret); 1175 goto err_probe; 1176 } 1177 WARN(codec->dapm.idle_bias_off && 1178 codec->dapm.bias_level != SND_SOC_BIAS_OFF, 1179 "codec %s can not start from non-off bias with idle_bias_off==1\n", 1180 codec->name); 1181 } 1182 1183 if (driver->controls) 1184 snd_soc_add_codec_controls(codec, driver->controls, 1185 driver->num_controls); 1186 if (driver->dapm_routes) 1187 snd_soc_dapm_add_routes(&codec->dapm, driver->dapm_routes, 1188 driver->num_dapm_routes); 1189 1190 /* mark codec as probed and add to card codec list */ 1191 codec->probed = 1; 1192 list_add(&codec->card_list, &card->codec_dev_list); 1193 list_add(&codec->dapm.list, &card->dapm_list); 1194 1195 return 0; 1196 1197 err_probe: 1198 soc_cleanup_codec_debugfs(codec); 1199 module_put(codec->dev->driver->owner); 1200 1201 return ret; 1202 } 1203 1204 static int soc_probe_platform(struct snd_soc_card *card, 1205 struct snd_soc_platform *platform) 1206 { 1207 int ret = 0; 1208 const struct snd_soc_platform_driver *driver = platform->driver; 1209 struct snd_soc_component *component; 1210 struct snd_soc_dai *dai; 1211 1212 platform->card = card; 1213 platform->dapm.card = card; 1214 1215 if (!try_module_get(platform->dev->driver->owner)) 1216 return -ENODEV; 1217 1218 soc_init_platform_debugfs(platform); 1219 1220 if (driver->dapm_widgets) 1221 snd_soc_dapm_new_controls(&platform->dapm, 1222 driver->dapm_widgets, driver->num_dapm_widgets); 1223 1224 /* Create DAPM widgets for each DAI stream */ 1225 list_for_each_entry(component, &component_list, list) { 1226 if (component->dev != platform->dev) 1227 continue; 1228 list_for_each_entry(dai, &component->dai_list, list) 1229 snd_soc_dapm_new_dai_widgets(&platform->dapm, dai); 1230 } 1231 1232 platform->dapm.idle_bias_off = 1; 1233 1234 if (driver->probe) { 1235 ret = driver->probe(platform); 1236 if (ret < 0) { 1237 dev_err(platform->dev, 1238 "ASoC: failed to probe platform %d\n", ret); 1239 goto err_probe; 1240 } 1241 } 1242 1243 if (driver->controls) 1244 snd_soc_add_platform_controls(platform, driver->controls, 1245 driver->num_controls); 1246 if (driver->dapm_routes) 1247 snd_soc_dapm_add_routes(&platform->dapm, driver->dapm_routes, 1248 driver->num_dapm_routes); 1249 1250 /* mark platform as probed and add to card platform list */ 1251 platform->probed = 1; 1252 list_add(&platform->card_list, &card->platform_dev_list); 1253 list_add(&platform->dapm.list, &card->dapm_list); 1254 1255 return 0; 1256 1257 err_probe: 1258 soc_cleanup_platform_debugfs(platform); 1259 module_put(platform->dev->driver->owner); 1260 1261 return ret; 1262 } 1263 1264 static void rtd_release(struct device *dev) 1265 { 1266 kfree(dev); 1267 } 1268 1269 static int soc_aux_dev_init(struct snd_soc_card *card, 1270 struct snd_soc_codec *codec, 1271 int num) 1272 { 1273 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1274 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1275 int ret; 1276 1277 rtd->card = card; 1278 1279 /* do machine specific initialization */ 1280 if (aux_dev->init) { 1281 ret = aux_dev->init(&codec->dapm); 1282 if (ret < 0) 1283 return ret; 1284 } 1285 1286 rtd->codec = codec; 1287 1288 return 0; 1289 } 1290 1291 static int soc_dai_link_init(struct snd_soc_card *card, 1292 struct snd_soc_codec *codec, 1293 int num) 1294 { 1295 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; 1296 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1297 int ret; 1298 1299 rtd->card = card; 1300 1301 /* do machine specific initialization */ 1302 if (dai_link->init) { 1303 ret = dai_link->init(rtd); 1304 if (ret < 0) 1305 return ret; 1306 } 1307 1308 rtd->codec = codec; 1309 1310 return 0; 1311 } 1312 1313 static int soc_post_component_init(struct snd_soc_card *card, 1314 struct snd_soc_codec *codec, 1315 int num, int dailess) 1316 { 1317 struct snd_soc_dai_link *dai_link = NULL; 1318 struct snd_soc_aux_dev *aux_dev = NULL; 1319 struct snd_soc_pcm_runtime *rtd; 1320 const char *name; 1321 int ret = 0; 1322 1323 if (!dailess) { 1324 dai_link = &card->dai_link[num]; 1325 rtd = &card->rtd[num]; 1326 name = dai_link->name; 1327 ret = soc_dai_link_init(card, codec, num); 1328 } else { 1329 aux_dev = &card->aux_dev[num]; 1330 rtd = &card->rtd_aux[num]; 1331 name = aux_dev->name; 1332 ret = soc_aux_dev_init(card, codec, num); 1333 } 1334 1335 if (ret < 0) { 1336 dev_err(card->dev, "ASoC: failed to init %s: %d\n", name, ret); 1337 return ret; 1338 } 1339 1340 /* register the rtd device */ 1341 rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL); 1342 if (!rtd->dev) 1343 return -ENOMEM; 1344 device_initialize(rtd->dev); 1345 rtd->dev->parent = card->dev; 1346 rtd->dev->release = rtd_release; 1347 rtd->dev->init_name = name; 1348 dev_set_drvdata(rtd->dev, rtd); 1349 mutex_init(&rtd->pcm_mutex); 1350 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients); 1351 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].be_clients); 1352 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].fe_clients); 1353 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].fe_clients); 1354 ret = device_add(rtd->dev); 1355 if (ret < 0) { 1356 /* calling put_device() here to free the rtd->dev */ 1357 put_device(rtd->dev); 1358 dev_err(card->dev, 1359 "ASoC: failed to register runtime device: %d\n", ret); 1360 return ret; 1361 } 1362 rtd->dev_registered = 1; 1363 1364 /* add DAPM sysfs entries for this codec */ 1365 ret = snd_soc_dapm_sys_add(rtd->dev); 1366 if (ret < 0) 1367 dev_err(codec->dev, 1368 "ASoC: failed to add codec dapm sysfs entries: %d\n", ret); 1369 1370 /* add codec sysfs entries */ 1371 ret = device_create_file(rtd->dev, &dev_attr_codec_reg); 1372 if (ret < 0) 1373 dev_err(codec->dev, 1374 "ASoC: failed to add codec sysfs files: %d\n", ret); 1375 1376 #ifdef CONFIG_DEBUG_FS 1377 /* add DPCM sysfs entries */ 1378 if (!dailess && !dai_link->dynamic) 1379 goto out; 1380 1381 ret = soc_dpcm_debugfs_add(rtd); 1382 if (ret < 0) 1383 dev_err(rtd->dev, "ASoC: failed to add dpcm sysfs entries: %d\n", ret); 1384 1385 out: 1386 #endif 1387 return 0; 1388 } 1389 1390 static int soc_probe_link_components(struct snd_soc_card *card, int num, 1391 int order) 1392 { 1393 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1394 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 1395 struct snd_soc_dai *codec_dai = rtd->codec_dai; 1396 struct snd_soc_platform *platform = rtd->platform; 1397 int ret; 1398 1399 /* probe the CPU-side component, if it is a CODEC */ 1400 if (cpu_dai->codec && 1401 !cpu_dai->codec->probed && 1402 cpu_dai->codec->driver->probe_order == order) { 1403 ret = soc_probe_codec(card, cpu_dai->codec); 1404 if (ret < 0) 1405 return ret; 1406 } 1407 1408 /* probe the CODEC-side component */ 1409 if (!codec_dai->codec->probed && 1410 codec_dai->codec->driver->probe_order == order) { 1411 ret = soc_probe_codec(card, codec_dai->codec); 1412 if (ret < 0) 1413 return ret; 1414 } 1415 1416 /* probe the platform */ 1417 if (!platform->probed && 1418 platform->driver->probe_order == order) { 1419 ret = soc_probe_platform(card, platform); 1420 if (ret < 0) 1421 return ret; 1422 } 1423 1424 return 0; 1425 } 1426 1427 static int soc_probe_codec_dai(struct snd_soc_card *card, 1428 struct snd_soc_dai *codec_dai, 1429 int order) 1430 { 1431 int ret; 1432 1433 if (!codec_dai->probed && codec_dai->driver->probe_order == order) { 1434 if (codec_dai->driver->probe) { 1435 ret = codec_dai->driver->probe(codec_dai); 1436 if (ret < 0) { 1437 dev_err(codec_dai->dev, 1438 "ASoC: failed to probe CODEC DAI %s: %d\n", 1439 codec_dai->name, ret); 1440 return ret; 1441 } 1442 } 1443 1444 /* mark codec_dai as probed and add to card dai list */ 1445 codec_dai->probed = 1; 1446 } 1447 1448 return 0; 1449 } 1450 1451 static int soc_link_dai_widgets(struct snd_soc_card *card, 1452 struct snd_soc_dai_link *dai_link, 1453 struct snd_soc_dai *cpu_dai, 1454 struct snd_soc_dai *codec_dai) 1455 { 1456 struct snd_soc_dapm_widget *play_w, *capture_w; 1457 int ret; 1458 1459 /* link the DAI widgets */ 1460 play_w = codec_dai->playback_widget; 1461 capture_w = cpu_dai->capture_widget; 1462 if (play_w && capture_w) { 1463 ret = snd_soc_dapm_new_pcm(card, dai_link->params, 1464 capture_w, play_w); 1465 if (ret != 0) { 1466 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", 1467 play_w->name, capture_w->name, ret); 1468 return ret; 1469 } 1470 } 1471 1472 play_w = cpu_dai->playback_widget; 1473 capture_w = codec_dai->capture_widget; 1474 if (play_w && capture_w) { 1475 ret = snd_soc_dapm_new_pcm(card, dai_link->params, 1476 capture_w, play_w); 1477 if (ret != 0) { 1478 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", 1479 play_w->name, capture_w->name, ret); 1480 return ret; 1481 } 1482 } 1483 1484 return 0; 1485 } 1486 1487 static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) 1488 { 1489 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; 1490 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1491 struct snd_soc_codec *codec = rtd->codec; 1492 struct snd_soc_platform *platform = rtd->platform; 1493 struct snd_soc_dai *codec_dai = rtd->codec_dai; 1494 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 1495 int ret; 1496 1497 dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n", 1498 card->name, num, order); 1499 1500 /* config components */ 1501 cpu_dai->platform = platform; 1502 codec_dai->card = card; 1503 cpu_dai->card = card; 1504 1505 /* set default power off timeout */ 1506 rtd->pmdown_time = pmdown_time; 1507 1508 /* probe the cpu_dai */ 1509 if (!cpu_dai->probed && 1510 cpu_dai->driver->probe_order == order) { 1511 if (!cpu_dai->codec) { 1512 cpu_dai->dapm.card = card; 1513 if (!try_module_get(cpu_dai->dev->driver->owner)) 1514 return -ENODEV; 1515 1516 list_add(&cpu_dai->dapm.list, &card->dapm_list); 1517 } 1518 1519 if (cpu_dai->driver->probe) { 1520 ret = cpu_dai->driver->probe(cpu_dai); 1521 if (ret < 0) { 1522 dev_err(cpu_dai->dev, 1523 "ASoC: failed to probe CPU DAI %s: %d\n", 1524 cpu_dai->name, ret); 1525 module_put(cpu_dai->dev->driver->owner); 1526 return ret; 1527 } 1528 } 1529 cpu_dai->probed = 1; 1530 } 1531 1532 /* probe the CODEC DAI */ 1533 ret = soc_probe_codec_dai(card, codec_dai, order); 1534 if (ret) 1535 return ret; 1536 1537 /* complete DAI probe during last probe */ 1538 if (order != SND_SOC_COMP_ORDER_LAST) 1539 return 0; 1540 1541 ret = soc_post_component_init(card, codec, num, 0); 1542 if (ret) 1543 return ret; 1544 1545 ret = device_create_file(rtd->dev, &dev_attr_pmdown_time); 1546 if (ret < 0) 1547 dev_warn(rtd->dev, "ASoC: failed to add pmdown_time sysfs: %d\n", 1548 ret); 1549 1550 if (cpu_dai->driver->compress_dai) { 1551 /*create compress_device"*/ 1552 ret = soc_new_compress(rtd, num); 1553 if (ret < 0) { 1554 dev_err(card->dev, "ASoC: can't create compress %s\n", 1555 dai_link->stream_name); 1556 return ret; 1557 } 1558 } else { 1559 1560 if (!dai_link->params) { 1561 /* create the pcm */ 1562 ret = soc_new_pcm(rtd, num); 1563 if (ret < 0) { 1564 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", 1565 dai_link->stream_name, ret); 1566 return ret; 1567 } 1568 } else { 1569 INIT_DELAYED_WORK(&rtd->delayed_work, 1570 codec2codec_close_delayed_work); 1571 1572 /* link the DAI widgets */ 1573 ret = soc_link_dai_widgets(card, dai_link, 1574 cpu_dai, codec_dai); 1575 if (ret) 1576 return ret; 1577 } 1578 } 1579 1580 /* add platform data for AC97 devices */ 1581 if (rtd->codec_dai->driver->ac97_control) 1582 snd_ac97_dev_add_pdata(codec->ac97, rtd->cpu_dai->ac97_pdata); 1583 1584 return 0; 1585 } 1586 1587 #ifdef CONFIG_SND_SOC_AC97_BUS 1588 static int soc_register_ac97_codec(struct snd_soc_codec *codec, 1589 struct snd_soc_dai *codec_dai) 1590 { 1591 int ret; 1592 1593 /* Only instantiate AC97 if not already done by the adaptor 1594 * for the generic AC97 subsystem. 1595 */ 1596 if (codec_dai->driver->ac97_control && !codec->ac97_registered) { 1597 /* 1598 * It is possible that the AC97 device is already registered to 1599 * the device subsystem. This happens when the device is created 1600 * via snd_ac97_mixer(). Currently only SoC codec that does so 1601 * is the generic AC97 glue but others migh emerge. 1602 * 1603 * In those cases we don't try to register the device again. 1604 */ 1605 if (!codec->ac97_created) 1606 return 0; 1607 1608 ret = soc_ac97_dev_register(codec); 1609 if (ret < 0) { 1610 dev_err(codec->dev, 1611 "ASoC: AC97 device register failed: %d\n", ret); 1612 return ret; 1613 } 1614 1615 codec->ac97_registered = 1; 1616 } 1617 return 0; 1618 } 1619 1620 static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd) 1621 { 1622 return soc_register_ac97_codec(rtd->codec, rtd->codec_dai); 1623 } 1624 1625 static void soc_unregister_ac97_codec(struct snd_soc_codec *codec) 1626 { 1627 if (codec->ac97_registered) { 1628 soc_ac97_dev_unregister(codec); 1629 codec->ac97_registered = 0; 1630 } 1631 } 1632 1633 static void soc_unregister_ac97_dai_link(struct snd_soc_pcm_runtime *rtd) 1634 { 1635 soc_unregister_ac97_codec(rtd->codec); 1636 } 1637 #endif 1638 1639 static struct snd_soc_codec *soc_find_matching_codec(struct snd_soc_card *card, 1640 int num) 1641 { 1642 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1643 struct snd_soc_codec *codec; 1644 1645 /* find CODEC from registered CODECs */ 1646 list_for_each_entry(codec, &codec_list, list) { 1647 if (aux_dev->codec_of_node && 1648 (codec->dev->of_node != aux_dev->codec_of_node)) 1649 continue; 1650 if (aux_dev->codec_name && strcmp(codec->name, aux_dev->codec_name)) 1651 continue; 1652 return codec; 1653 } 1654 1655 return NULL; 1656 } 1657 1658 static int soc_check_aux_dev(struct snd_soc_card *card, int num) 1659 { 1660 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1661 const char *codecname = aux_dev->codec_name; 1662 struct snd_soc_codec *codec = soc_find_matching_codec(card, num); 1663 1664 if (codec) 1665 return 0; 1666 if (aux_dev->codec_of_node) 1667 codecname = of_node_full_name(aux_dev->codec_of_node); 1668 1669 dev_err(card->dev, "ASoC: %s not registered\n", codecname); 1670 return -EPROBE_DEFER; 1671 } 1672 1673 static int soc_probe_aux_dev(struct snd_soc_card *card, int num) 1674 { 1675 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1676 const char *codecname = aux_dev->codec_name; 1677 int ret = -ENODEV; 1678 struct snd_soc_codec *codec = soc_find_matching_codec(card, num); 1679 1680 if (!codec) { 1681 if (aux_dev->codec_of_node) 1682 codecname = of_node_full_name(aux_dev->codec_of_node); 1683 1684 /* codec not found */ 1685 dev_err(card->dev, "ASoC: codec %s not found", codecname); 1686 return -EPROBE_DEFER; 1687 } 1688 1689 if (codec->probed) { 1690 dev_err(codec->dev, "ASoC: codec already probed"); 1691 return -EBUSY; 1692 } 1693 1694 ret = soc_probe_codec(card, codec); 1695 if (ret < 0) 1696 return ret; 1697 1698 ret = soc_post_component_init(card, codec, num, 1); 1699 1700 return ret; 1701 } 1702 1703 static void soc_remove_aux_dev(struct snd_soc_card *card, int num) 1704 { 1705 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1706 struct snd_soc_codec *codec = rtd->codec; 1707 1708 /* unregister the rtd device */ 1709 if (rtd->dev_registered) { 1710 device_remove_file(rtd->dev, &dev_attr_codec_reg); 1711 device_unregister(rtd->dev); 1712 rtd->dev_registered = 0; 1713 } 1714 1715 if (codec && codec->probed) 1716 soc_remove_codec(codec); 1717 } 1718 1719 static int snd_soc_init_codec_cache(struct snd_soc_codec *codec) 1720 { 1721 int ret; 1722 1723 if (codec->cache_init) 1724 return 0; 1725 1726 ret = snd_soc_cache_init(codec); 1727 if (ret < 0) { 1728 dev_err(codec->dev, 1729 "ASoC: Failed to set cache compression type: %d\n", 1730 ret); 1731 return ret; 1732 } 1733 codec->cache_init = 1; 1734 return 0; 1735 } 1736 1737 static int snd_soc_instantiate_card(struct snd_soc_card *card) 1738 { 1739 struct snd_soc_codec *codec; 1740 struct snd_soc_dai_link *dai_link; 1741 int ret, i, order, dai_fmt; 1742 1743 mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); 1744 1745 /* bind DAIs */ 1746 for (i = 0; i < card->num_links; i++) { 1747 ret = soc_bind_dai_link(card, i); 1748 if (ret != 0) 1749 goto base_error; 1750 } 1751 1752 /* check aux_devs too */ 1753 for (i = 0; i < card->num_aux_devs; i++) { 1754 ret = soc_check_aux_dev(card, i); 1755 if (ret != 0) 1756 goto base_error; 1757 } 1758 1759 /* initialize the register cache for each available codec */ 1760 list_for_each_entry(codec, &codec_list, list) { 1761 if (codec->cache_init) 1762 continue; 1763 ret = snd_soc_init_codec_cache(codec); 1764 if (ret < 0) 1765 goto base_error; 1766 } 1767 1768 /* card bind complete so register a sound card */ 1769 ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, 1770 card->owner, 0, &card->snd_card); 1771 if (ret < 0) { 1772 dev_err(card->dev, 1773 "ASoC: can't create sound card for card %s: %d\n", 1774 card->name, ret); 1775 goto base_error; 1776 } 1777 1778 card->dapm.bias_level = SND_SOC_BIAS_OFF; 1779 card->dapm.dev = card->dev; 1780 card->dapm.card = card; 1781 list_add(&card->dapm.list, &card->dapm_list); 1782 1783 #ifdef CONFIG_DEBUG_FS 1784 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); 1785 #endif 1786 1787 #ifdef CONFIG_PM_SLEEP 1788 /* deferred resume work */ 1789 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 1790 #endif 1791 1792 if (card->dapm_widgets) 1793 snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, 1794 card->num_dapm_widgets); 1795 1796 /* initialise the sound card only once */ 1797 if (card->probe) { 1798 ret = card->probe(card); 1799 if (ret < 0) 1800 goto card_probe_error; 1801 } 1802 1803 /* probe all components used by DAI links on this card */ 1804 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1805 order++) { 1806 for (i = 0; i < card->num_links; i++) { 1807 ret = soc_probe_link_components(card, i, order); 1808 if (ret < 0) { 1809 dev_err(card->dev, 1810 "ASoC: failed to instantiate card %d\n", 1811 ret); 1812 goto probe_dai_err; 1813 } 1814 } 1815 } 1816 1817 /* probe all DAI links on this card */ 1818 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1819 order++) { 1820 for (i = 0; i < card->num_links; i++) { 1821 ret = soc_probe_link_dais(card, i, order); 1822 if (ret < 0) { 1823 dev_err(card->dev, 1824 "ASoC: failed to instantiate card %d\n", 1825 ret); 1826 goto probe_dai_err; 1827 } 1828 } 1829 } 1830 1831 for (i = 0; i < card->num_aux_devs; i++) { 1832 ret = soc_probe_aux_dev(card, i); 1833 if (ret < 0) { 1834 dev_err(card->dev, 1835 "ASoC: failed to add auxiliary devices %d\n", 1836 ret); 1837 goto probe_aux_dev_err; 1838 } 1839 } 1840 1841 snd_soc_dapm_link_dai_widgets(card); 1842 snd_soc_dapm_connect_dai_link_widgets(card); 1843 1844 if (card->controls) 1845 snd_soc_add_card_controls(card, card->controls, card->num_controls); 1846 1847 if (card->dapm_routes) 1848 snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, 1849 card->num_dapm_routes); 1850 1851 for (i = 0; i < card->num_links; i++) { 1852 dai_link = &card->dai_link[i]; 1853 dai_fmt = dai_link->dai_fmt; 1854 1855 if (dai_fmt) { 1856 ret = snd_soc_dai_set_fmt(card->rtd[i].codec_dai, 1857 dai_fmt); 1858 if (ret != 0 && ret != -ENOTSUPP) 1859 dev_warn(card->rtd[i].codec_dai->dev, 1860 "ASoC: Failed to set DAI format: %d\n", 1861 ret); 1862 } 1863 1864 /* If this is a regular CPU link there will be a platform */ 1865 if (dai_fmt && 1866 (dai_link->platform_name || dai_link->platform_of_node)) { 1867 ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai, 1868 dai_fmt); 1869 if (ret != 0 && ret != -ENOTSUPP) 1870 dev_warn(card->rtd[i].cpu_dai->dev, 1871 "ASoC: Failed to set DAI format: %d\n", 1872 ret); 1873 } else if (dai_fmt) { 1874 /* Flip the polarity for the "CPU" end */ 1875 dai_fmt &= ~SND_SOC_DAIFMT_MASTER_MASK; 1876 switch (dai_link->dai_fmt & 1877 SND_SOC_DAIFMT_MASTER_MASK) { 1878 case SND_SOC_DAIFMT_CBM_CFM: 1879 dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; 1880 break; 1881 case SND_SOC_DAIFMT_CBM_CFS: 1882 dai_fmt |= SND_SOC_DAIFMT_CBS_CFM; 1883 break; 1884 case SND_SOC_DAIFMT_CBS_CFM: 1885 dai_fmt |= SND_SOC_DAIFMT_CBM_CFS; 1886 break; 1887 case SND_SOC_DAIFMT_CBS_CFS: 1888 dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; 1889 break; 1890 } 1891 1892 ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai, 1893 dai_fmt); 1894 if (ret != 0 && ret != -ENOTSUPP) 1895 dev_warn(card->rtd[i].cpu_dai->dev, 1896 "ASoC: Failed to set DAI format: %d\n", 1897 ret); 1898 } 1899 } 1900 1901 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), 1902 "%s", card->name); 1903 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), 1904 "%s", card->long_name ? card->long_name : card->name); 1905 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), 1906 "%s", card->driver_name ? card->driver_name : card->name); 1907 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { 1908 switch (card->snd_card->driver[i]) { 1909 case '_': 1910 case '-': 1911 case '\0': 1912 break; 1913 default: 1914 if (!isalnum(card->snd_card->driver[i])) 1915 card->snd_card->driver[i] = '_'; 1916 break; 1917 } 1918 } 1919 1920 if (card->late_probe) { 1921 ret = card->late_probe(card); 1922 if (ret < 0) { 1923 dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n", 1924 card->name, ret); 1925 goto probe_aux_dev_err; 1926 } 1927 } 1928 1929 if (card->fully_routed) 1930 list_for_each_entry(codec, &card->codec_dev_list, card_list) 1931 snd_soc_dapm_auto_nc_codec_pins(codec); 1932 1933 snd_soc_dapm_new_widgets(card); 1934 1935 ret = snd_card_register(card->snd_card); 1936 if (ret < 0) { 1937 dev_err(card->dev, "ASoC: failed to register soundcard %d\n", 1938 ret); 1939 goto probe_aux_dev_err; 1940 } 1941 1942 #ifdef CONFIG_SND_SOC_AC97_BUS 1943 /* register any AC97 codecs */ 1944 for (i = 0; i < card->num_rtd; i++) { 1945 ret = soc_register_ac97_dai_link(&card->rtd[i]); 1946 if (ret < 0) { 1947 dev_err(card->dev, 1948 "ASoC: failed to register AC97: %d\n", ret); 1949 while (--i >= 0) 1950 soc_unregister_ac97_dai_link(&card->rtd[i]); 1951 goto probe_aux_dev_err; 1952 } 1953 } 1954 #endif 1955 1956 card->instantiated = 1; 1957 snd_soc_dapm_sync(&card->dapm); 1958 mutex_unlock(&card->mutex); 1959 1960 return 0; 1961 1962 probe_aux_dev_err: 1963 for (i = 0; i < card->num_aux_devs; i++) 1964 soc_remove_aux_dev(card, i); 1965 1966 probe_dai_err: 1967 soc_remove_dai_links(card); 1968 1969 card_probe_error: 1970 if (card->remove) 1971 card->remove(card); 1972 1973 snd_card_free(card->snd_card); 1974 1975 base_error: 1976 mutex_unlock(&card->mutex); 1977 1978 return ret; 1979 } 1980 1981 /* probes a new socdev */ 1982 static int soc_probe(struct platform_device *pdev) 1983 { 1984 struct snd_soc_card *card = platform_get_drvdata(pdev); 1985 1986 /* 1987 * no card, so machine driver should be registering card 1988 * we should not be here in that case so ret error 1989 */ 1990 if (!card) 1991 return -EINVAL; 1992 1993 dev_warn(&pdev->dev, 1994 "ASoC: machine %s should use snd_soc_register_card()\n", 1995 card->name); 1996 1997 /* Bodge while we unpick instantiation */ 1998 card->dev = &pdev->dev; 1999 2000 return snd_soc_register_card(card); 2001 } 2002 2003 static int soc_cleanup_card_resources(struct snd_soc_card *card) 2004 { 2005 int i; 2006 2007 /* make sure any delayed work runs */ 2008 for (i = 0; i < card->num_rtd; i++) { 2009 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 2010 flush_delayed_work(&rtd->delayed_work); 2011 } 2012 2013 /* remove auxiliary devices */ 2014 for (i = 0; i < card->num_aux_devs; i++) 2015 soc_remove_aux_dev(card, i); 2016 2017 /* remove and free each DAI */ 2018 soc_remove_dai_links(card); 2019 2020 soc_cleanup_card_debugfs(card); 2021 2022 /* remove the card */ 2023 if (card->remove) 2024 card->remove(card); 2025 2026 snd_soc_dapm_free(&card->dapm); 2027 2028 snd_card_free(card->snd_card); 2029 return 0; 2030 2031 } 2032 2033 /* removes a socdev */ 2034 static int soc_remove(struct platform_device *pdev) 2035 { 2036 struct snd_soc_card *card = platform_get_drvdata(pdev); 2037 2038 snd_soc_unregister_card(card); 2039 return 0; 2040 } 2041 2042 int snd_soc_poweroff(struct device *dev) 2043 { 2044 struct snd_soc_card *card = dev_get_drvdata(dev); 2045 int i; 2046 2047 if (!card->instantiated) 2048 return 0; 2049 2050 /* Flush out pmdown_time work - we actually do want to run it 2051 * now, we're shutting down so no imminent restart. */ 2052 for (i = 0; i < card->num_rtd; i++) { 2053 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 2054 flush_delayed_work(&rtd->delayed_work); 2055 } 2056 2057 snd_soc_dapm_shutdown(card); 2058 2059 /* deactivate pins to sleep state */ 2060 for (i = 0; i < card->num_rtd; i++) { 2061 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 2062 struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai; 2063 pinctrl_pm_select_sleep_state(codec_dai->dev); 2064 pinctrl_pm_select_sleep_state(cpu_dai->dev); 2065 } 2066 2067 return 0; 2068 } 2069 EXPORT_SYMBOL_GPL(snd_soc_poweroff); 2070 2071 const struct dev_pm_ops snd_soc_pm_ops = { 2072 .suspend = snd_soc_suspend, 2073 .resume = snd_soc_resume, 2074 .freeze = snd_soc_suspend, 2075 .thaw = snd_soc_resume, 2076 .poweroff = snd_soc_poweroff, 2077 .restore = snd_soc_resume, 2078 }; 2079 EXPORT_SYMBOL_GPL(snd_soc_pm_ops); 2080 2081 /* ASoC platform driver */ 2082 static struct platform_driver soc_driver = { 2083 .driver = { 2084 .name = "soc-audio", 2085 .owner = THIS_MODULE, 2086 .pm = &snd_soc_pm_ops, 2087 }, 2088 .probe = soc_probe, 2089 .remove = soc_remove, 2090 }; 2091 2092 /** 2093 * snd_soc_new_ac97_codec - initailise AC97 device 2094 * @codec: audio codec 2095 * @ops: AC97 bus operations 2096 * @num: AC97 codec number 2097 * 2098 * Initialises AC97 codec resources for use by ad-hoc devices only. 2099 */ 2100 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, 2101 struct snd_ac97_bus_ops *ops, int num) 2102 { 2103 mutex_lock(&codec->mutex); 2104 2105 codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); 2106 if (codec->ac97 == NULL) { 2107 mutex_unlock(&codec->mutex); 2108 return -ENOMEM; 2109 } 2110 2111 codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL); 2112 if (codec->ac97->bus == NULL) { 2113 kfree(codec->ac97); 2114 codec->ac97 = NULL; 2115 mutex_unlock(&codec->mutex); 2116 return -ENOMEM; 2117 } 2118 2119 codec->ac97->bus->ops = ops; 2120 codec->ac97->num = num; 2121 2122 /* 2123 * Mark the AC97 device to be created by us. This way we ensure that the 2124 * device will be registered with the device subsystem later on. 2125 */ 2126 codec->ac97_created = 1; 2127 2128 mutex_unlock(&codec->mutex); 2129 return 0; 2130 } 2131 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec); 2132 2133 static struct snd_ac97_reset_cfg snd_ac97_rst_cfg; 2134 2135 static void snd_soc_ac97_warm_reset(struct snd_ac97 *ac97) 2136 { 2137 struct pinctrl *pctl = snd_ac97_rst_cfg.pctl; 2138 2139 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_warm_reset); 2140 2141 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 1); 2142 2143 udelay(10); 2144 2145 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0); 2146 2147 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run); 2148 msleep(2); 2149 } 2150 2151 static void snd_soc_ac97_reset(struct snd_ac97 *ac97) 2152 { 2153 struct pinctrl *pctl = snd_ac97_rst_cfg.pctl; 2154 2155 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_reset); 2156 2157 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0); 2158 gpio_direction_output(snd_ac97_rst_cfg.gpio_sdata, 0); 2159 gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 0); 2160 2161 udelay(10); 2162 2163 gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 1); 2164 2165 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run); 2166 msleep(2); 2167 } 2168 2169 static int snd_soc_ac97_parse_pinctl(struct device *dev, 2170 struct snd_ac97_reset_cfg *cfg) 2171 { 2172 struct pinctrl *p; 2173 struct pinctrl_state *state; 2174 int gpio; 2175 int ret; 2176 2177 p = devm_pinctrl_get(dev); 2178 if (IS_ERR(p)) { 2179 dev_err(dev, "Failed to get pinctrl\n"); 2180 return PTR_ERR(p); 2181 } 2182 cfg->pctl = p; 2183 2184 state = pinctrl_lookup_state(p, "ac97-reset"); 2185 if (IS_ERR(state)) { 2186 dev_err(dev, "Can't find pinctrl state ac97-reset\n"); 2187 return PTR_ERR(state); 2188 } 2189 cfg->pstate_reset = state; 2190 2191 state = pinctrl_lookup_state(p, "ac97-warm-reset"); 2192 if (IS_ERR(state)) { 2193 dev_err(dev, "Can't find pinctrl state ac97-warm-reset\n"); 2194 return PTR_ERR(state); 2195 } 2196 cfg->pstate_warm_reset = state; 2197 2198 state = pinctrl_lookup_state(p, "ac97-running"); 2199 if (IS_ERR(state)) { 2200 dev_err(dev, "Can't find pinctrl state ac97-running\n"); 2201 return PTR_ERR(state); 2202 } 2203 cfg->pstate_run = state; 2204 2205 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 0); 2206 if (gpio < 0) { 2207 dev_err(dev, "Can't find ac97-sync gpio\n"); 2208 return gpio; 2209 } 2210 ret = devm_gpio_request(dev, gpio, "AC97 link sync"); 2211 if (ret) { 2212 dev_err(dev, "Failed requesting ac97-sync gpio\n"); 2213 return ret; 2214 } 2215 cfg->gpio_sync = gpio; 2216 2217 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 1); 2218 if (gpio < 0) { 2219 dev_err(dev, "Can't find ac97-sdata gpio %d\n", gpio); 2220 return gpio; 2221 } 2222 ret = devm_gpio_request(dev, gpio, "AC97 link sdata"); 2223 if (ret) { 2224 dev_err(dev, "Failed requesting ac97-sdata gpio\n"); 2225 return ret; 2226 } 2227 cfg->gpio_sdata = gpio; 2228 2229 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 2); 2230 if (gpio < 0) { 2231 dev_err(dev, "Can't find ac97-reset gpio\n"); 2232 return gpio; 2233 } 2234 ret = devm_gpio_request(dev, gpio, "AC97 link reset"); 2235 if (ret) { 2236 dev_err(dev, "Failed requesting ac97-reset gpio\n"); 2237 return ret; 2238 } 2239 cfg->gpio_reset = gpio; 2240 2241 return 0; 2242 } 2243 2244 struct snd_ac97_bus_ops *soc_ac97_ops; 2245 EXPORT_SYMBOL_GPL(soc_ac97_ops); 2246 2247 int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops) 2248 { 2249 if (ops == soc_ac97_ops) 2250 return 0; 2251 2252 if (soc_ac97_ops && ops) 2253 return -EBUSY; 2254 2255 soc_ac97_ops = ops; 2256 2257 return 0; 2258 } 2259 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops); 2260 2261 /** 2262 * snd_soc_set_ac97_ops_of_reset - Set ac97 ops with generic ac97 reset functions 2263 * 2264 * This function sets the reset and warm_reset properties of ops and parses 2265 * the device node of pdev to get pinctrl states and gpio numbers to use. 2266 */ 2267 int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, 2268 struct platform_device *pdev) 2269 { 2270 struct device *dev = &pdev->dev; 2271 struct snd_ac97_reset_cfg cfg; 2272 int ret; 2273 2274 ret = snd_soc_ac97_parse_pinctl(dev, &cfg); 2275 if (ret) 2276 return ret; 2277 2278 ret = snd_soc_set_ac97_ops(ops); 2279 if (ret) 2280 return ret; 2281 2282 ops->warm_reset = snd_soc_ac97_warm_reset; 2283 ops->reset = snd_soc_ac97_reset; 2284 2285 snd_ac97_rst_cfg = cfg; 2286 return 0; 2287 } 2288 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops_of_reset); 2289 2290 /** 2291 * snd_soc_free_ac97_codec - free AC97 codec device 2292 * @codec: audio codec 2293 * 2294 * Frees AC97 codec device resources. 2295 */ 2296 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec) 2297 { 2298 mutex_lock(&codec->mutex); 2299 #ifdef CONFIG_SND_SOC_AC97_BUS 2300 soc_unregister_ac97_codec(codec); 2301 #endif 2302 kfree(codec->ac97->bus); 2303 kfree(codec->ac97); 2304 codec->ac97 = NULL; 2305 codec->ac97_created = 0; 2306 mutex_unlock(&codec->mutex); 2307 } 2308 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec); 2309 2310 /** 2311 * snd_soc_cnew - create new control 2312 * @_template: control template 2313 * @data: control private data 2314 * @long_name: control long name 2315 * @prefix: control name prefix 2316 * 2317 * Create a new mixer control from a template control. 2318 * 2319 * Returns 0 for success, else error. 2320 */ 2321 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 2322 void *data, const char *long_name, 2323 const char *prefix) 2324 { 2325 struct snd_kcontrol_new template; 2326 struct snd_kcontrol *kcontrol; 2327 char *name = NULL; 2328 2329 memcpy(&template, _template, sizeof(template)); 2330 template.index = 0; 2331 2332 if (!long_name) 2333 long_name = template.name; 2334 2335 if (prefix) { 2336 name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name); 2337 if (!name) 2338 return NULL; 2339 2340 template.name = name; 2341 } else { 2342 template.name = long_name; 2343 } 2344 2345 kcontrol = snd_ctl_new1(&template, data); 2346 2347 kfree(name); 2348 2349 return kcontrol; 2350 } 2351 EXPORT_SYMBOL_GPL(snd_soc_cnew); 2352 2353 static int snd_soc_add_controls(struct snd_card *card, struct device *dev, 2354 const struct snd_kcontrol_new *controls, int num_controls, 2355 const char *prefix, void *data) 2356 { 2357 int err, i; 2358 2359 for (i = 0; i < num_controls; i++) { 2360 const struct snd_kcontrol_new *control = &controls[i]; 2361 err = snd_ctl_add(card, snd_soc_cnew(control, data, 2362 control->name, prefix)); 2363 if (err < 0) { 2364 dev_err(dev, "ASoC: Failed to add %s: %d\n", 2365 control->name, err); 2366 return err; 2367 } 2368 } 2369 2370 return 0; 2371 } 2372 2373 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card, 2374 const char *name) 2375 { 2376 struct snd_card *card = soc_card->snd_card; 2377 struct snd_kcontrol *kctl; 2378 2379 if (unlikely(!name)) 2380 return NULL; 2381 2382 list_for_each_entry(kctl, &card->controls, list) 2383 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) 2384 return kctl; 2385 return NULL; 2386 } 2387 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol); 2388 2389 /** 2390 * snd_soc_add_codec_controls - add an array of controls to a codec. 2391 * Convenience function to add a list of controls. Many codecs were 2392 * duplicating this code. 2393 * 2394 * @codec: codec to add controls to 2395 * @controls: array of controls to add 2396 * @num_controls: number of elements in the array 2397 * 2398 * Return 0 for success, else error. 2399 */ 2400 int snd_soc_add_codec_controls(struct snd_soc_codec *codec, 2401 const struct snd_kcontrol_new *controls, int num_controls) 2402 { 2403 struct snd_card *card = codec->card->snd_card; 2404 2405 return snd_soc_add_controls(card, codec->dev, controls, num_controls, 2406 codec->name_prefix, &codec->component); 2407 } 2408 EXPORT_SYMBOL_GPL(snd_soc_add_codec_controls); 2409 2410 /** 2411 * snd_soc_add_platform_controls - add an array of controls to a platform. 2412 * Convenience function to add a list of controls. 2413 * 2414 * @platform: platform to add controls to 2415 * @controls: array of controls to add 2416 * @num_controls: number of elements in the array 2417 * 2418 * Return 0 for success, else error. 2419 */ 2420 int snd_soc_add_platform_controls(struct snd_soc_platform *platform, 2421 const struct snd_kcontrol_new *controls, int num_controls) 2422 { 2423 struct snd_card *card = platform->card->snd_card; 2424 2425 return snd_soc_add_controls(card, platform->dev, controls, num_controls, 2426 NULL, &platform->component); 2427 } 2428 EXPORT_SYMBOL_GPL(snd_soc_add_platform_controls); 2429 2430 /** 2431 * snd_soc_add_card_controls - add an array of controls to a SoC card. 2432 * Convenience function to add a list of controls. 2433 * 2434 * @soc_card: SoC card to add controls to 2435 * @controls: array of controls to add 2436 * @num_controls: number of elements in the array 2437 * 2438 * Return 0 for success, else error. 2439 */ 2440 int snd_soc_add_card_controls(struct snd_soc_card *soc_card, 2441 const struct snd_kcontrol_new *controls, int num_controls) 2442 { 2443 struct snd_card *card = soc_card->snd_card; 2444 2445 return snd_soc_add_controls(card, soc_card->dev, controls, num_controls, 2446 NULL, soc_card); 2447 } 2448 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls); 2449 2450 /** 2451 * snd_soc_add_dai_controls - add an array of controls to a DAI. 2452 * Convienience function to add a list of controls. 2453 * 2454 * @dai: DAI to add controls to 2455 * @controls: array of controls to add 2456 * @num_controls: number of elements in the array 2457 * 2458 * Return 0 for success, else error. 2459 */ 2460 int snd_soc_add_dai_controls(struct snd_soc_dai *dai, 2461 const struct snd_kcontrol_new *controls, int num_controls) 2462 { 2463 struct snd_card *card = dai->card->snd_card; 2464 2465 return snd_soc_add_controls(card, dai->dev, controls, num_controls, 2466 NULL, dai); 2467 } 2468 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls); 2469 2470 /** 2471 * snd_soc_info_enum_double - enumerated double mixer info callback 2472 * @kcontrol: mixer control 2473 * @uinfo: control element information 2474 * 2475 * Callback to provide information about a double enumerated 2476 * mixer control. 2477 * 2478 * Returns 0 for success. 2479 */ 2480 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 2481 struct snd_ctl_elem_info *uinfo) 2482 { 2483 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2484 2485 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2486 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 2487 uinfo->value.enumerated.items = e->items; 2488 2489 if (uinfo->value.enumerated.item >= e->items) 2490 uinfo->value.enumerated.item = e->items - 1; 2491 strlcpy(uinfo->value.enumerated.name, 2492 e->texts[uinfo->value.enumerated.item], 2493 sizeof(uinfo->value.enumerated.name)); 2494 return 0; 2495 } 2496 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double); 2497 2498 /** 2499 * snd_soc_get_enum_double - enumerated double mixer get callback 2500 * @kcontrol: mixer control 2501 * @ucontrol: control element information 2502 * 2503 * Callback to get the value of a double enumerated mixer. 2504 * 2505 * Returns 0 for success. 2506 */ 2507 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, 2508 struct snd_ctl_elem_value *ucontrol) 2509 { 2510 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2511 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2512 unsigned int val, item; 2513 unsigned int reg_val; 2514 int ret; 2515 2516 ret = snd_soc_component_read(component, e->reg, ®_val); 2517 if (ret) 2518 return ret; 2519 val = (reg_val >> e->shift_l) & e->mask; 2520 item = snd_soc_enum_val_to_item(e, val); 2521 ucontrol->value.enumerated.item[0] = item; 2522 if (e->shift_l != e->shift_r) { 2523 val = (reg_val >> e->shift_l) & e->mask; 2524 item = snd_soc_enum_val_to_item(e, val); 2525 ucontrol->value.enumerated.item[1] = item; 2526 } 2527 2528 return 0; 2529 } 2530 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double); 2531 2532 /** 2533 * snd_soc_put_enum_double - enumerated double mixer put callback 2534 * @kcontrol: mixer control 2535 * @ucontrol: control element information 2536 * 2537 * Callback to set the value of a double enumerated mixer. 2538 * 2539 * Returns 0 for success. 2540 */ 2541 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, 2542 struct snd_ctl_elem_value *ucontrol) 2543 { 2544 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2545 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2546 unsigned int *item = ucontrol->value.enumerated.item; 2547 unsigned int val; 2548 unsigned int mask; 2549 2550 if (item[0] >= e->items) 2551 return -EINVAL; 2552 val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l; 2553 mask = e->mask << e->shift_l; 2554 if (e->shift_l != e->shift_r) { 2555 if (item[1] >= e->items) 2556 return -EINVAL; 2557 val |= snd_soc_enum_item_to_val(e, item[1]) << e->shift_r; 2558 mask |= e->mask << e->shift_r; 2559 } 2560 2561 return snd_soc_component_update_bits(component, e->reg, mask, val); 2562 } 2563 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double); 2564 2565 /** 2566 * snd_soc_read_signed - Read a codec register and interprete as signed value 2567 * @component: component 2568 * @reg: Register to read 2569 * @mask: Mask to use after shifting the register value 2570 * @shift: Right shift of register value 2571 * @sign_bit: Bit that describes if a number is negative or not. 2572 * @signed_val: Pointer to where the read value should be stored 2573 * 2574 * This functions reads a codec register. The register value is shifted right 2575 * by 'shift' bits and masked with the given 'mask'. Afterwards it translates 2576 * the given registervalue into a signed integer if sign_bit is non-zero. 2577 * 2578 * Returns 0 on sucess, otherwise an error value 2579 */ 2580 static int snd_soc_read_signed(struct snd_soc_component *component, 2581 unsigned int reg, unsigned int mask, unsigned int shift, 2582 unsigned int sign_bit, int *signed_val) 2583 { 2584 int ret; 2585 unsigned int val; 2586 2587 ret = snd_soc_component_read(component, reg, &val); 2588 if (ret < 0) 2589 return ret; 2590 2591 val = (val >> shift) & mask; 2592 2593 if (!sign_bit) { 2594 *signed_val = val; 2595 return 0; 2596 } 2597 2598 /* non-negative number */ 2599 if (!(val & BIT(sign_bit))) { 2600 *signed_val = val; 2601 return 0; 2602 } 2603 2604 ret = val; 2605 2606 /* 2607 * The register most probably does not contain a full-sized int. 2608 * Instead we have an arbitrary number of bits in a signed 2609 * representation which has to be translated into a full-sized int. 2610 * This is done by filling up all bits above the sign-bit. 2611 */ 2612 ret |= ~((int)(BIT(sign_bit) - 1)); 2613 2614 *signed_val = ret; 2615 2616 return 0; 2617 } 2618 2619 /** 2620 * snd_soc_info_volsw - single mixer info callback 2621 * @kcontrol: mixer control 2622 * @uinfo: control element information 2623 * 2624 * Callback to provide information about a single mixer control, or a double 2625 * mixer control that spans 2 registers. 2626 * 2627 * Returns 0 for success. 2628 */ 2629 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, 2630 struct snd_ctl_elem_info *uinfo) 2631 { 2632 struct soc_mixer_control *mc = 2633 (struct soc_mixer_control *)kcontrol->private_value; 2634 int platform_max; 2635 2636 if (!mc->platform_max) 2637 mc->platform_max = mc->max; 2638 platform_max = mc->platform_max; 2639 2640 if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume")) 2641 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2642 else 2643 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2644 2645 uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; 2646 uinfo->value.integer.min = 0; 2647 uinfo->value.integer.max = platform_max - mc->min; 2648 return 0; 2649 } 2650 EXPORT_SYMBOL_GPL(snd_soc_info_volsw); 2651 2652 /** 2653 * snd_soc_get_volsw - single mixer get callback 2654 * @kcontrol: mixer control 2655 * @ucontrol: control element information 2656 * 2657 * Callback to get the value of a single mixer control, or a double mixer 2658 * control that spans 2 registers. 2659 * 2660 * Returns 0 for success. 2661 */ 2662 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, 2663 struct snd_ctl_elem_value *ucontrol) 2664 { 2665 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2666 struct soc_mixer_control *mc = 2667 (struct soc_mixer_control *)kcontrol->private_value; 2668 unsigned int reg = mc->reg; 2669 unsigned int reg2 = mc->rreg; 2670 unsigned int shift = mc->shift; 2671 unsigned int rshift = mc->rshift; 2672 int max = mc->max; 2673 int min = mc->min; 2674 int sign_bit = mc->sign_bit; 2675 unsigned int mask = (1 << fls(max)) - 1; 2676 unsigned int invert = mc->invert; 2677 int val; 2678 int ret; 2679 2680 if (sign_bit) 2681 mask = BIT(sign_bit + 1) - 1; 2682 2683 ret = snd_soc_read_signed(component, reg, mask, shift, sign_bit, &val); 2684 if (ret) 2685 return ret; 2686 2687 ucontrol->value.integer.value[0] = val - min; 2688 if (invert) 2689 ucontrol->value.integer.value[0] = 2690 max - ucontrol->value.integer.value[0]; 2691 2692 if (snd_soc_volsw_is_stereo(mc)) { 2693 if (reg == reg2) 2694 ret = snd_soc_read_signed(component, reg, mask, rshift, 2695 sign_bit, &val); 2696 else 2697 ret = snd_soc_read_signed(component, reg2, mask, shift, 2698 sign_bit, &val); 2699 if (ret) 2700 return ret; 2701 2702 ucontrol->value.integer.value[1] = val - min; 2703 if (invert) 2704 ucontrol->value.integer.value[1] = 2705 max - ucontrol->value.integer.value[1]; 2706 } 2707 2708 return 0; 2709 } 2710 EXPORT_SYMBOL_GPL(snd_soc_get_volsw); 2711 2712 /** 2713 * snd_soc_put_volsw - single mixer put callback 2714 * @kcontrol: mixer control 2715 * @ucontrol: control element information 2716 * 2717 * Callback to set the value of a single mixer control, or a double mixer 2718 * control that spans 2 registers. 2719 * 2720 * Returns 0 for success. 2721 */ 2722 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, 2723 struct snd_ctl_elem_value *ucontrol) 2724 { 2725 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2726 struct soc_mixer_control *mc = 2727 (struct soc_mixer_control *)kcontrol->private_value; 2728 unsigned int reg = mc->reg; 2729 unsigned int reg2 = mc->rreg; 2730 unsigned int shift = mc->shift; 2731 unsigned int rshift = mc->rshift; 2732 int max = mc->max; 2733 int min = mc->min; 2734 unsigned int sign_bit = mc->sign_bit; 2735 unsigned int mask = (1 << fls(max)) - 1; 2736 unsigned int invert = mc->invert; 2737 int err; 2738 bool type_2r = false; 2739 unsigned int val2 = 0; 2740 unsigned int val, val_mask; 2741 2742 if (sign_bit) 2743 mask = BIT(sign_bit + 1) - 1; 2744 2745 val = ((ucontrol->value.integer.value[0] + min) & mask); 2746 if (invert) 2747 val = max - val; 2748 val_mask = mask << shift; 2749 val = val << shift; 2750 if (snd_soc_volsw_is_stereo(mc)) { 2751 val2 = ((ucontrol->value.integer.value[1] + min) & mask); 2752 if (invert) 2753 val2 = max - val2; 2754 if (reg == reg2) { 2755 val_mask |= mask << rshift; 2756 val |= val2 << rshift; 2757 } else { 2758 val2 = val2 << shift; 2759 type_2r = true; 2760 } 2761 } 2762 err = snd_soc_component_update_bits(component, reg, val_mask, val); 2763 if (err < 0) 2764 return err; 2765 2766 if (type_2r) 2767 err = snd_soc_component_update_bits(component, reg2, val_mask, 2768 val2); 2769 2770 return err; 2771 } 2772 EXPORT_SYMBOL_GPL(snd_soc_put_volsw); 2773 2774 /** 2775 * snd_soc_get_volsw_sx - single mixer get callback 2776 * @kcontrol: mixer control 2777 * @ucontrol: control element information 2778 * 2779 * Callback to get the value of a single mixer control, or a double mixer 2780 * control that spans 2 registers. 2781 * 2782 * Returns 0 for success. 2783 */ 2784 int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol, 2785 struct snd_ctl_elem_value *ucontrol) 2786 { 2787 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2788 struct soc_mixer_control *mc = 2789 (struct soc_mixer_control *)kcontrol->private_value; 2790 unsigned int reg = mc->reg; 2791 unsigned int reg2 = mc->rreg; 2792 unsigned int shift = mc->shift; 2793 unsigned int rshift = mc->rshift; 2794 int max = mc->max; 2795 int min = mc->min; 2796 int mask = (1 << (fls(min + max) - 1)) - 1; 2797 unsigned int val; 2798 int ret; 2799 2800 ret = snd_soc_component_read(component, reg, &val); 2801 if (ret < 0) 2802 return ret; 2803 2804 ucontrol->value.integer.value[0] = ((val >> shift) - min) & mask; 2805 2806 if (snd_soc_volsw_is_stereo(mc)) { 2807 ret = snd_soc_component_read(component, reg2, &val); 2808 if (ret < 0) 2809 return ret; 2810 2811 val = ((val >> rshift) - min) & mask; 2812 ucontrol->value.integer.value[1] = val; 2813 } 2814 2815 return 0; 2816 } 2817 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_sx); 2818 2819 /** 2820 * snd_soc_put_volsw_sx - double mixer set callback 2821 * @kcontrol: mixer control 2822 * @uinfo: control element information 2823 * 2824 * Callback to set the value of a double mixer control that spans 2 registers. 2825 * 2826 * Returns 0 for success. 2827 */ 2828 int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, 2829 struct snd_ctl_elem_value *ucontrol) 2830 { 2831 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2832 struct soc_mixer_control *mc = 2833 (struct soc_mixer_control *)kcontrol->private_value; 2834 2835 unsigned int reg = mc->reg; 2836 unsigned int reg2 = mc->rreg; 2837 unsigned int shift = mc->shift; 2838 unsigned int rshift = mc->rshift; 2839 int max = mc->max; 2840 int min = mc->min; 2841 int mask = (1 << (fls(min + max) - 1)) - 1; 2842 int err = 0; 2843 unsigned int val, val_mask, val2 = 0; 2844 2845 val_mask = mask << shift; 2846 val = (ucontrol->value.integer.value[0] + min) & mask; 2847 val = val << shift; 2848 2849 err = snd_soc_component_update_bits(component, reg, val_mask, val); 2850 if (err < 0) 2851 return err; 2852 2853 if (snd_soc_volsw_is_stereo(mc)) { 2854 val_mask = mask << rshift; 2855 val2 = (ucontrol->value.integer.value[1] + min) & mask; 2856 val2 = val2 << rshift; 2857 2858 err = snd_soc_component_update_bits(component, reg2, val_mask, 2859 val2); 2860 } 2861 return err; 2862 } 2863 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx); 2864 2865 /** 2866 * snd_soc_info_volsw_s8 - signed mixer info callback 2867 * @kcontrol: mixer control 2868 * @uinfo: control element information 2869 * 2870 * Callback to provide information about a signed mixer control. 2871 * 2872 * Returns 0 for success. 2873 */ 2874 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, 2875 struct snd_ctl_elem_info *uinfo) 2876 { 2877 struct soc_mixer_control *mc = 2878 (struct soc_mixer_control *)kcontrol->private_value; 2879 int platform_max; 2880 int min = mc->min; 2881 2882 if (!mc->platform_max) 2883 mc->platform_max = mc->max; 2884 platform_max = mc->platform_max; 2885 2886 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2887 uinfo->count = 2; 2888 uinfo->value.integer.min = 0; 2889 uinfo->value.integer.max = platform_max - min; 2890 return 0; 2891 } 2892 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8); 2893 2894 /** 2895 * snd_soc_get_volsw_s8 - signed mixer get callback 2896 * @kcontrol: mixer control 2897 * @ucontrol: control element information 2898 * 2899 * Callback to get the value of a signed mixer control. 2900 * 2901 * Returns 0 for success. 2902 */ 2903 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, 2904 struct snd_ctl_elem_value *ucontrol) 2905 { 2906 struct soc_mixer_control *mc = 2907 (struct soc_mixer_control *)kcontrol->private_value; 2908 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2909 unsigned int reg = mc->reg; 2910 unsigned int val; 2911 int min = mc->min; 2912 int ret; 2913 2914 ret = snd_soc_component_read(component, reg, &val); 2915 if (ret) 2916 return ret; 2917 2918 ucontrol->value.integer.value[0] = 2919 ((signed char)(val & 0xff))-min; 2920 ucontrol->value.integer.value[1] = 2921 ((signed char)((val >> 8) & 0xff))-min; 2922 return 0; 2923 } 2924 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8); 2925 2926 /** 2927 * snd_soc_put_volsw_sgn - signed mixer put callback 2928 * @kcontrol: mixer control 2929 * @ucontrol: control element information 2930 * 2931 * Callback to set the value of a signed mixer control. 2932 * 2933 * Returns 0 for success. 2934 */ 2935 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 2936 struct snd_ctl_elem_value *ucontrol) 2937 { 2938 struct soc_mixer_control *mc = 2939 (struct soc_mixer_control *)kcontrol->private_value; 2940 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2941 unsigned int reg = mc->reg; 2942 int min = mc->min; 2943 unsigned int val; 2944 2945 val = (ucontrol->value.integer.value[0]+min) & 0xff; 2946 val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; 2947 2948 return snd_soc_component_update_bits(component, reg, 0xffff, val); 2949 } 2950 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8); 2951 2952 /** 2953 * snd_soc_info_volsw_range - single mixer info callback with range. 2954 * @kcontrol: mixer control 2955 * @uinfo: control element information 2956 * 2957 * Callback to provide information, within a range, about a single 2958 * mixer control. 2959 * 2960 * returns 0 for success. 2961 */ 2962 int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol, 2963 struct snd_ctl_elem_info *uinfo) 2964 { 2965 struct soc_mixer_control *mc = 2966 (struct soc_mixer_control *)kcontrol->private_value; 2967 int platform_max; 2968 int min = mc->min; 2969 2970 if (!mc->platform_max) 2971 mc->platform_max = mc->max; 2972 platform_max = mc->platform_max; 2973 2974 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2975 uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; 2976 uinfo->value.integer.min = 0; 2977 uinfo->value.integer.max = platform_max - min; 2978 2979 return 0; 2980 } 2981 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range); 2982 2983 /** 2984 * snd_soc_put_volsw_range - single mixer put value callback with range. 2985 * @kcontrol: mixer control 2986 * @ucontrol: control element information 2987 * 2988 * Callback to set the value, within a range, for a single mixer control. 2989 * 2990 * Returns 0 for success. 2991 */ 2992 int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol, 2993 struct snd_ctl_elem_value *ucontrol) 2994 { 2995 struct soc_mixer_control *mc = 2996 (struct soc_mixer_control *)kcontrol->private_value; 2997 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 2998 unsigned int reg = mc->reg; 2999 unsigned int rreg = mc->rreg; 3000 unsigned int shift = mc->shift; 3001 int min = mc->min; 3002 int max = mc->max; 3003 unsigned int mask = (1 << fls(max)) - 1; 3004 unsigned int invert = mc->invert; 3005 unsigned int val, val_mask; 3006 int ret; 3007 3008 val = ((ucontrol->value.integer.value[0] + min) & mask); 3009 if (invert) 3010 val = max - val; 3011 val_mask = mask << shift; 3012 val = val << shift; 3013 3014 ret = snd_soc_component_update_bits(component, reg, val_mask, val); 3015 if (ret < 0) 3016 return ret; 3017 3018 if (snd_soc_volsw_is_stereo(mc)) { 3019 val = ((ucontrol->value.integer.value[1] + min) & mask); 3020 if (invert) 3021 val = max - val; 3022 val_mask = mask << shift; 3023 val = val << shift; 3024 3025 ret = snd_soc_component_update_bits(component, rreg, val_mask, 3026 val); 3027 } 3028 3029 return ret; 3030 } 3031 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range); 3032 3033 /** 3034 * snd_soc_get_volsw_range - single mixer get callback with range 3035 * @kcontrol: mixer control 3036 * @ucontrol: control element information 3037 * 3038 * Callback to get the value, within a range, of a single mixer control. 3039 * 3040 * Returns 0 for success. 3041 */ 3042 int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol, 3043 struct snd_ctl_elem_value *ucontrol) 3044 { 3045 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3046 struct soc_mixer_control *mc = 3047 (struct soc_mixer_control *)kcontrol->private_value; 3048 unsigned int reg = mc->reg; 3049 unsigned int rreg = mc->rreg; 3050 unsigned int shift = mc->shift; 3051 int min = mc->min; 3052 int max = mc->max; 3053 unsigned int mask = (1 << fls(max)) - 1; 3054 unsigned int invert = mc->invert; 3055 unsigned int val; 3056 int ret; 3057 3058 ret = snd_soc_component_read(component, reg, &val); 3059 if (ret) 3060 return ret; 3061 3062 ucontrol->value.integer.value[0] = (val >> shift) & mask; 3063 if (invert) 3064 ucontrol->value.integer.value[0] = 3065 max - ucontrol->value.integer.value[0]; 3066 ucontrol->value.integer.value[0] = 3067 ucontrol->value.integer.value[0] - min; 3068 3069 if (snd_soc_volsw_is_stereo(mc)) { 3070 ret = snd_soc_component_read(component, rreg, &val); 3071 if (ret) 3072 return ret; 3073 3074 ucontrol->value.integer.value[1] = (val >> shift) & mask; 3075 if (invert) 3076 ucontrol->value.integer.value[1] = 3077 max - ucontrol->value.integer.value[1]; 3078 ucontrol->value.integer.value[1] = 3079 ucontrol->value.integer.value[1] - min; 3080 } 3081 3082 return 0; 3083 } 3084 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range); 3085 3086 /** 3087 * snd_soc_limit_volume - Set new limit to an existing volume control. 3088 * 3089 * @codec: where to look for the control 3090 * @name: Name of the control 3091 * @max: new maximum limit 3092 * 3093 * Return 0 for success, else error. 3094 */ 3095 int snd_soc_limit_volume(struct snd_soc_codec *codec, 3096 const char *name, int max) 3097 { 3098 struct snd_card *card = codec->card->snd_card; 3099 struct snd_kcontrol *kctl; 3100 struct soc_mixer_control *mc; 3101 int found = 0; 3102 int ret = -EINVAL; 3103 3104 /* Sanity check for name and max */ 3105 if (unlikely(!name || max <= 0)) 3106 return -EINVAL; 3107 3108 list_for_each_entry(kctl, &card->controls, list) { 3109 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) { 3110 found = 1; 3111 break; 3112 } 3113 } 3114 if (found) { 3115 mc = (struct soc_mixer_control *)kctl->private_value; 3116 if (max <= mc->max) { 3117 mc->platform_max = max; 3118 ret = 0; 3119 } 3120 } 3121 return ret; 3122 } 3123 EXPORT_SYMBOL_GPL(snd_soc_limit_volume); 3124 3125 int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, 3126 struct snd_ctl_elem_info *uinfo) 3127 { 3128 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3129 struct soc_bytes *params = (void *)kcontrol->private_value; 3130 3131 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES; 3132 uinfo->count = params->num_regs * component->val_bytes; 3133 3134 return 0; 3135 } 3136 EXPORT_SYMBOL_GPL(snd_soc_bytes_info); 3137 3138 int snd_soc_bytes_get(struct snd_kcontrol *kcontrol, 3139 struct snd_ctl_elem_value *ucontrol) 3140 { 3141 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3142 struct soc_bytes *params = (void *)kcontrol->private_value; 3143 int ret; 3144 3145 if (component->regmap) 3146 ret = regmap_raw_read(component->regmap, params->base, 3147 ucontrol->value.bytes.data, 3148 params->num_regs * component->val_bytes); 3149 else 3150 ret = -EINVAL; 3151 3152 /* Hide any masked bytes to ensure consistent data reporting */ 3153 if (ret == 0 && params->mask) { 3154 switch (component->val_bytes) { 3155 case 1: 3156 ucontrol->value.bytes.data[0] &= ~params->mask; 3157 break; 3158 case 2: 3159 ((u16 *)(&ucontrol->value.bytes.data))[0] 3160 &= cpu_to_be16(~params->mask); 3161 break; 3162 case 4: 3163 ((u32 *)(&ucontrol->value.bytes.data))[0] 3164 &= cpu_to_be32(~params->mask); 3165 break; 3166 default: 3167 return -EINVAL; 3168 } 3169 } 3170 3171 return ret; 3172 } 3173 EXPORT_SYMBOL_GPL(snd_soc_bytes_get); 3174 3175 int snd_soc_bytes_put(struct snd_kcontrol *kcontrol, 3176 struct snd_ctl_elem_value *ucontrol) 3177 { 3178 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3179 struct soc_bytes *params = (void *)kcontrol->private_value; 3180 int ret, len; 3181 unsigned int val, mask; 3182 void *data; 3183 3184 if (!component->regmap) 3185 return -EINVAL; 3186 3187 len = params->num_regs * component->val_bytes; 3188 3189 data = kmemdup(ucontrol->value.bytes.data, len, GFP_KERNEL | GFP_DMA); 3190 if (!data) 3191 return -ENOMEM; 3192 3193 /* 3194 * If we've got a mask then we need to preserve the register 3195 * bits. We shouldn't modify the incoming data so take a 3196 * copy. 3197 */ 3198 if (params->mask) { 3199 ret = regmap_read(component->regmap, params->base, &val); 3200 if (ret != 0) 3201 goto out; 3202 3203 val &= params->mask; 3204 3205 switch (component->val_bytes) { 3206 case 1: 3207 ((u8 *)data)[0] &= ~params->mask; 3208 ((u8 *)data)[0] |= val; 3209 break; 3210 case 2: 3211 mask = ~params->mask; 3212 ret = regmap_parse_val(component->regmap, 3213 &mask, &mask); 3214 if (ret != 0) 3215 goto out; 3216 3217 ((u16 *)data)[0] &= mask; 3218 3219 ret = regmap_parse_val(component->regmap, 3220 &val, &val); 3221 if (ret != 0) 3222 goto out; 3223 3224 ((u16 *)data)[0] |= val; 3225 break; 3226 case 4: 3227 mask = ~params->mask; 3228 ret = regmap_parse_val(component->regmap, 3229 &mask, &mask); 3230 if (ret != 0) 3231 goto out; 3232 3233 ((u32 *)data)[0] &= mask; 3234 3235 ret = regmap_parse_val(component->regmap, 3236 &val, &val); 3237 if (ret != 0) 3238 goto out; 3239 3240 ((u32 *)data)[0] |= val; 3241 break; 3242 default: 3243 ret = -EINVAL; 3244 goto out; 3245 } 3246 } 3247 3248 ret = regmap_raw_write(component->regmap, params->base, 3249 data, len); 3250 3251 out: 3252 kfree(data); 3253 3254 return ret; 3255 } 3256 EXPORT_SYMBOL_GPL(snd_soc_bytes_put); 3257 3258 int snd_soc_bytes_info_ext(struct snd_kcontrol *kcontrol, 3259 struct snd_ctl_elem_info *ucontrol) 3260 { 3261 struct soc_bytes_ext *params = (void *)kcontrol->private_value; 3262 3263 ucontrol->type = SNDRV_CTL_ELEM_TYPE_BYTES; 3264 ucontrol->count = params->max; 3265 3266 return 0; 3267 } 3268 EXPORT_SYMBOL_GPL(snd_soc_bytes_info_ext); 3269 3270 /** 3271 * snd_soc_info_xr_sx - signed multi register info callback 3272 * @kcontrol: mreg control 3273 * @uinfo: control element information 3274 * 3275 * Callback to provide information of a control that can 3276 * span multiple codec registers which together 3277 * forms a single signed value in a MSB/LSB manner. 3278 * 3279 * Returns 0 for success. 3280 */ 3281 int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol, 3282 struct snd_ctl_elem_info *uinfo) 3283 { 3284 struct soc_mreg_control *mc = 3285 (struct soc_mreg_control *)kcontrol->private_value; 3286 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 3287 uinfo->count = 1; 3288 uinfo->value.integer.min = mc->min; 3289 uinfo->value.integer.max = mc->max; 3290 3291 return 0; 3292 } 3293 EXPORT_SYMBOL_GPL(snd_soc_info_xr_sx); 3294 3295 /** 3296 * snd_soc_get_xr_sx - signed multi register get callback 3297 * @kcontrol: mreg control 3298 * @ucontrol: control element information 3299 * 3300 * Callback to get the value of a control that can span 3301 * multiple codec registers which together forms a single 3302 * signed value in a MSB/LSB manner. The control supports 3303 * specifying total no of bits used to allow for bitfields 3304 * across the multiple codec registers. 3305 * 3306 * Returns 0 for success. 3307 */ 3308 int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol, 3309 struct snd_ctl_elem_value *ucontrol) 3310 { 3311 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3312 struct soc_mreg_control *mc = 3313 (struct soc_mreg_control *)kcontrol->private_value; 3314 unsigned int regbase = mc->regbase; 3315 unsigned int regcount = mc->regcount; 3316 unsigned int regwshift = component->val_bytes * BITS_PER_BYTE; 3317 unsigned int regwmask = (1<<regwshift)-1; 3318 unsigned int invert = mc->invert; 3319 unsigned long mask = (1UL<<mc->nbits)-1; 3320 long min = mc->min; 3321 long max = mc->max; 3322 long val = 0; 3323 unsigned int regval; 3324 unsigned int i; 3325 int ret; 3326 3327 for (i = 0; i < regcount; i++) { 3328 ret = snd_soc_component_read(component, regbase+i, ®val); 3329 if (ret) 3330 return ret; 3331 val |= (regval & regwmask) << (regwshift*(regcount-i-1)); 3332 } 3333 val &= mask; 3334 if (min < 0 && val > max) 3335 val |= ~mask; 3336 if (invert) 3337 val = max - val; 3338 ucontrol->value.integer.value[0] = val; 3339 3340 return 0; 3341 } 3342 EXPORT_SYMBOL_GPL(snd_soc_get_xr_sx); 3343 3344 /** 3345 * snd_soc_put_xr_sx - signed multi register get callback 3346 * @kcontrol: mreg control 3347 * @ucontrol: control element information 3348 * 3349 * Callback to set the value of a control that can span 3350 * multiple codec registers which together forms a single 3351 * signed value in a MSB/LSB manner. The control supports 3352 * specifying total no of bits used to allow for bitfields 3353 * across the multiple codec registers. 3354 * 3355 * Returns 0 for success. 3356 */ 3357 int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol, 3358 struct snd_ctl_elem_value *ucontrol) 3359 { 3360 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3361 struct soc_mreg_control *mc = 3362 (struct soc_mreg_control *)kcontrol->private_value; 3363 unsigned int regbase = mc->regbase; 3364 unsigned int regcount = mc->regcount; 3365 unsigned int regwshift = component->val_bytes * BITS_PER_BYTE; 3366 unsigned int regwmask = (1<<regwshift)-1; 3367 unsigned int invert = mc->invert; 3368 unsigned long mask = (1UL<<mc->nbits)-1; 3369 long max = mc->max; 3370 long val = ucontrol->value.integer.value[0]; 3371 unsigned int i, regval, regmask; 3372 int err; 3373 3374 if (invert) 3375 val = max - val; 3376 val &= mask; 3377 for (i = 0; i < regcount; i++) { 3378 regval = (val >> (regwshift*(regcount-i-1))) & regwmask; 3379 regmask = (mask >> (regwshift*(regcount-i-1))) & regwmask; 3380 err = snd_soc_component_update_bits(component, regbase+i, 3381 regmask, regval); 3382 if (err < 0) 3383 return err; 3384 } 3385 3386 return 0; 3387 } 3388 EXPORT_SYMBOL_GPL(snd_soc_put_xr_sx); 3389 3390 /** 3391 * snd_soc_get_strobe - strobe get callback 3392 * @kcontrol: mixer control 3393 * @ucontrol: control element information 3394 * 3395 * Callback get the value of a strobe mixer control. 3396 * 3397 * Returns 0 for success. 3398 */ 3399 int snd_soc_get_strobe(struct snd_kcontrol *kcontrol, 3400 struct snd_ctl_elem_value *ucontrol) 3401 { 3402 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3403 struct soc_mixer_control *mc = 3404 (struct soc_mixer_control *)kcontrol->private_value; 3405 unsigned int reg = mc->reg; 3406 unsigned int shift = mc->shift; 3407 unsigned int mask = 1 << shift; 3408 unsigned int invert = mc->invert != 0; 3409 unsigned int val; 3410 int ret; 3411 3412 ret = snd_soc_component_read(component, reg, &val); 3413 if (ret) 3414 return ret; 3415 3416 val &= mask; 3417 3418 if (shift != 0 && val != 0) 3419 val = val >> shift; 3420 ucontrol->value.enumerated.item[0] = val ^ invert; 3421 3422 return 0; 3423 } 3424 EXPORT_SYMBOL_GPL(snd_soc_get_strobe); 3425 3426 /** 3427 * snd_soc_put_strobe - strobe put callback 3428 * @kcontrol: mixer control 3429 * @ucontrol: control element information 3430 * 3431 * Callback strobe a register bit to high then low (or the inverse) 3432 * in one pass of a single mixer enum control. 3433 * 3434 * Returns 1 for success. 3435 */ 3436 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol, 3437 struct snd_ctl_elem_value *ucontrol) 3438 { 3439 struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); 3440 struct soc_mixer_control *mc = 3441 (struct soc_mixer_control *)kcontrol->private_value; 3442 unsigned int reg = mc->reg; 3443 unsigned int shift = mc->shift; 3444 unsigned int mask = 1 << shift; 3445 unsigned int invert = mc->invert != 0; 3446 unsigned int strobe = ucontrol->value.enumerated.item[0] != 0; 3447 unsigned int val1 = (strobe ^ invert) ? mask : 0; 3448 unsigned int val2 = (strobe ^ invert) ? 0 : mask; 3449 int err; 3450 3451 err = snd_soc_component_update_bits(component, reg, mask, val1); 3452 if (err < 0) 3453 return err; 3454 3455 return snd_soc_component_update_bits(component, reg, mask, val2); 3456 } 3457 EXPORT_SYMBOL_GPL(snd_soc_put_strobe); 3458 3459 /** 3460 * snd_soc_dai_set_sysclk - configure DAI system or master clock. 3461 * @dai: DAI 3462 * @clk_id: DAI specific clock ID 3463 * @freq: new clock frequency in Hz 3464 * @dir: new clock direction - input/output. 3465 * 3466 * Configures the DAI master (MCLK) or system (SYSCLK) clocking. 3467 */ 3468 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, 3469 unsigned int freq, int dir) 3470 { 3471 if (dai->driver && dai->driver->ops->set_sysclk) 3472 return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir); 3473 else if (dai->codec && dai->codec->driver->set_sysclk) 3474 return dai->codec->driver->set_sysclk(dai->codec, clk_id, 0, 3475 freq, dir); 3476 else 3477 return -ENOTSUPP; 3478 } 3479 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk); 3480 3481 /** 3482 * snd_soc_codec_set_sysclk - configure CODEC system or master clock. 3483 * @codec: CODEC 3484 * @clk_id: DAI specific clock ID 3485 * @source: Source for the clock 3486 * @freq: new clock frequency in Hz 3487 * @dir: new clock direction - input/output. 3488 * 3489 * Configures the CODEC master (MCLK) or system (SYSCLK) clocking. 3490 */ 3491 int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id, 3492 int source, unsigned int freq, int dir) 3493 { 3494 if (codec->driver->set_sysclk) 3495 return codec->driver->set_sysclk(codec, clk_id, source, 3496 freq, dir); 3497 else 3498 return -ENOTSUPP; 3499 } 3500 EXPORT_SYMBOL_GPL(snd_soc_codec_set_sysclk); 3501 3502 /** 3503 * snd_soc_dai_set_clkdiv - configure DAI clock dividers. 3504 * @dai: DAI 3505 * @div_id: DAI specific clock divider ID 3506 * @div: new clock divisor. 3507 * 3508 * Configures the clock dividers. This is used to derive the best DAI bit and 3509 * frame clocks from the system or master clock. It's best to set the DAI bit 3510 * and frame clocks as low as possible to save system power. 3511 */ 3512 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, 3513 int div_id, int div) 3514 { 3515 if (dai->driver && dai->driver->ops->set_clkdiv) 3516 return dai->driver->ops->set_clkdiv(dai, div_id, div); 3517 else 3518 return -EINVAL; 3519 } 3520 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv); 3521 3522 /** 3523 * snd_soc_dai_set_pll - configure DAI PLL. 3524 * @dai: DAI 3525 * @pll_id: DAI specific PLL ID 3526 * @source: DAI specific source for the PLL 3527 * @freq_in: PLL input clock frequency in Hz 3528 * @freq_out: requested PLL output clock frequency in Hz 3529 * 3530 * Configures and enables PLL to generate output clock based on input clock. 3531 */ 3532 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source, 3533 unsigned int freq_in, unsigned int freq_out) 3534 { 3535 if (dai->driver && dai->driver->ops->set_pll) 3536 return dai->driver->ops->set_pll(dai, pll_id, source, 3537 freq_in, freq_out); 3538 else if (dai->codec && dai->codec->driver->set_pll) 3539 return dai->codec->driver->set_pll(dai->codec, pll_id, source, 3540 freq_in, freq_out); 3541 else 3542 return -EINVAL; 3543 } 3544 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll); 3545 3546 /* 3547 * snd_soc_codec_set_pll - configure codec PLL. 3548 * @codec: CODEC 3549 * @pll_id: DAI specific PLL ID 3550 * @source: DAI specific source for the PLL 3551 * @freq_in: PLL input clock frequency in Hz 3552 * @freq_out: requested PLL output clock frequency in Hz 3553 * 3554 * Configures and enables PLL to generate output clock based on input clock. 3555 */ 3556 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source, 3557 unsigned int freq_in, unsigned int freq_out) 3558 { 3559 if (codec->driver->set_pll) 3560 return codec->driver->set_pll(codec, pll_id, source, 3561 freq_in, freq_out); 3562 else 3563 return -EINVAL; 3564 } 3565 EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll); 3566 3567 /** 3568 * snd_soc_dai_set_bclk_ratio - configure BCLK to sample rate ratio. 3569 * @dai: DAI 3570 * @ratio Ratio of BCLK to Sample rate. 3571 * 3572 * Configures the DAI for a preset BCLK to sample rate ratio. 3573 */ 3574 int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio) 3575 { 3576 if (dai->driver && dai->driver->ops->set_bclk_ratio) 3577 return dai->driver->ops->set_bclk_ratio(dai, ratio); 3578 else 3579 return -EINVAL; 3580 } 3581 EXPORT_SYMBOL_GPL(snd_soc_dai_set_bclk_ratio); 3582 3583 /** 3584 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 3585 * @dai: DAI 3586 * @fmt: SND_SOC_DAIFMT_ format value. 3587 * 3588 * Configures the DAI hardware format and clocking. 3589 */ 3590 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 3591 { 3592 if (dai->driver == NULL) 3593 return -EINVAL; 3594 if (dai->driver->ops->set_fmt == NULL) 3595 return -ENOTSUPP; 3596 return dai->driver->ops->set_fmt(dai, fmt); 3597 } 3598 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt); 3599 3600 /** 3601 * snd_soc_xlate_tdm_slot - generate tx/rx slot mask. 3602 * @slots: Number of slots in use. 3603 * @tx_mask: bitmask representing active TX slots. 3604 * @rx_mask: bitmask representing active RX slots. 3605 * 3606 * Generates the TDM tx and rx slot default masks for DAI. 3607 */ 3608 static int snd_soc_xlate_tdm_slot_mask(unsigned int slots, 3609 unsigned int *tx_mask, 3610 unsigned int *rx_mask) 3611 { 3612 if (*tx_mask || *rx_mask) 3613 return 0; 3614 3615 if (!slots) 3616 return -EINVAL; 3617 3618 *tx_mask = (1 << slots) - 1; 3619 *rx_mask = (1 << slots) - 1; 3620 3621 return 0; 3622 } 3623 3624 /** 3625 * snd_soc_dai_set_tdm_slot - configure DAI TDM. 3626 * @dai: DAI 3627 * @tx_mask: bitmask representing active TX slots. 3628 * @rx_mask: bitmask representing active RX slots. 3629 * @slots: Number of slots in use. 3630 * @slot_width: Width in bits for each slot. 3631 * 3632 * Configures a DAI for TDM operation. Both mask and slots are codec and DAI 3633 * specific. 3634 */ 3635 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, 3636 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 3637 { 3638 if (dai->driver && dai->driver->ops->xlate_tdm_slot_mask) 3639 dai->driver->ops->xlate_tdm_slot_mask(slots, 3640 &tx_mask, &rx_mask); 3641 else 3642 snd_soc_xlate_tdm_slot_mask(slots, &tx_mask, &rx_mask); 3643 3644 if (dai->driver && dai->driver->ops->set_tdm_slot) 3645 return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask, 3646 slots, slot_width); 3647 else 3648 return -ENOTSUPP; 3649 } 3650 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot); 3651 3652 /** 3653 * snd_soc_dai_set_channel_map - configure DAI audio channel map 3654 * @dai: DAI 3655 * @tx_num: how many TX channels 3656 * @tx_slot: pointer to an array which imply the TX slot number channel 3657 * 0~num-1 uses 3658 * @rx_num: how many RX channels 3659 * @rx_slot: pointer to an array which imply the RX slot number channel 3660 * 0~num-1 uses 3661 * 3662 * configure the relationship between channel number and TDM slot number. 3663 */ 3664 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai, 3665 unsigned int tx_num, unsigned int *tx_slot, 3666 unsigned int rx_num, unsigned int *rx_slot) 3667 { 3668 if (dai->driver && dai->driver->ops->set_channel_map) 3669 return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot, 3670 rx_num, rx_slot); 3671 else 3672 return -EINVAL; 3673 } 3674 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map); 3675 3676 /** 3677 * snd_soc_dai_set_tristate - configure DAI system or master clock. 3678 * @dai: DAI 3679 * @tristate: tristate enable 3680 * 3681 * Tristates the DAI so that others can use it. 3682 */ 3683 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) 3684 { 3685 if (dai->driver && dai->driver->ops->set_tristate) 3686 return dai->driver->ops->set_tristate(dai, tristate); 3687 else 3688 return -EINVAL; 3689 } 3690 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate); 3691 3692 /** 3693 * snd_soc_dai_digital_mute - configure DAI system or master clock. 3694 * @dai: DAI 3695 * @mute: mute enable 3696 * @direction: stream to mute 3697 * 3698 * Mutes the DAI DAC. 3699 */ 3700 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute, 3701 int direction) 3702 { 3703 if (!dai->driver) 3704 return -ENOTSUPP; 3705 3706 if (dai->driver->ops->mute_stream) 3707 return dai->driver->ops->mute_stream(dai, mute, direction); 3708 else if (direction == SNDRV_PCM_STREAM_PLAYBACK && 3709 dai->driver->ops->digital_mute) 3710 return dai->driver->ops->digital_mute(dai, mute); 3711 else 3712 return -ENOTSUPP; 3713 } 3714 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute); 3715 3716 /** 3717 * snd_soc_register_card - Register a card with the ASoC core 3718 * 3719 * @card: Card to register 3720 * 3721 */ 3722 int snd_soc_register_card(struct snd_soc_card *card) 3723 { 3724 int i, ret; 3725 3726 if (!card->name || !card->dev) 3727 return -EINVAL; 3728 3729 for (i = 0; i < card->num_links; i++) { 3730 struct snd_soc_dai_link *link = &card->dai_link[i]; 3731 3732 /* 3733 * Codec must be specified by 1 of name or OF node, 3734 * not both or neither. 3735 */ 3736 if (!!link->codec_name == !!link->codec_of_node) { 3737 dev_err(card->dev, 3738 "ASoC: Neither/both codec name/of_node are set for %s\n", 3739 link->name); 3740 return -EINVAL; 3741 } 3742 /* Codec DAI name must be specified */ 3743 if (!link->codec_dai_name) { 3744 dev_err(card->dev, 3745 "ASoC: codec_dai_name not set for %s\n", 3746 link->name); 3747 return -EINVAL; 3748 } 3749 3750 /* 3751 * Platform may be specified by either name or OF node, but 3752 * can be left unspecified, and a dummy platform will be used. 3753 */ 3754 if (link->platform_name && link->platform_of_node) { 3755 dev_err(card->dev, 3756 "ASoC: Both platform name/of_node are set for %s\n", 3757 link->name); 3758 return -EINVAL; 3759 } 3760 3761 /* 3762 * CPU device may be specified by either name or OF node, but 3763 * can be left unspecified, and will be matched based on DAI 3764 * name alone.. 3765 */ 3766 if (link->cpu_name && link->cpu_of_node) { 3767 dev_err(card->dev, 3768 "ASoC: Neither/both cpu name/of_node are set for %s\n", 3769 link->name); 3770 return -EINVAL; 3771 } 3772 /* 3773 * At least one of CPU DAI name or CPU device name/node must be 3774 * specified 3775 */ 3776 if (!link->cpu_dai_name && 3777 !(link->cpu_name || link->cpu_of_node)) { 3778 dev_err(card->dev, 3779 "ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n", 3780 link->name); 3781 return -EINVAL; 3782 } 3783 } 3784 3785 dev_set_drvdata(card->dev, card); 3786 3787 snd_soc_initialize_card_lists(card); 3788 3789 soc_init_card_debugfs(card); 3790 3791 card->rtd = devm_kzalloc(card->dev, 3792 sizeof(struct snd_soc_pcm_runtime) * 3793 (card->num_links + card->num_aux_devs), 3794 GFP_KERNEL); 3795 if (card->rtd == NULL) 3796 return -ENOMEM; 3797 card->num_rtd = 0; 3798 card->rtd_aux = &card->rtd[card->num_links]; 3799 3800 for (i = 0; i < card->num_links; i++) 3801 card->rtd[i].dai_link = &card->dai_link[i]; 3802 3803 INIT_LIST_HEAD(&card->dapm_dirty); 3804 card->instantiated = 0; 3805 mutex_init(&card->mutex); 3806 mutex_init(&card->dapm_mutex); 3807 3808 ret = snd_soc_instantiate_card(card); 3809 if (ret != 0) 3810 soc_cleanup_card_debugfs(card); 3811 3812 /* deactivate pins to sleep state */ 3813 for (i = 0; i < card->num_rtd; i++) { 3814 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 3815 struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai; 3816 if (!codec_dai->active) 3817 pinctrl_pm_select_sleep_state(codec_dai->dev); 3818 if (!cpu_dai->active) 3819 pinctrl_pm_select_sleep_state(cpu_dai->dev); 3820 } 3821 3822 return ret; 3823 } 3824 EXPORT_SYMBOL_GPL(snd_soc_register_card); 3825 3826 /** 3827 * snd_soc_unregister_card - Unregister a card with the ASoC core 3828 * 3829 * @card: Card to unregister 3830 * 3831 */ 3832 int snd_soc_unregister_card(struct snd_soc_card *card) 3833 { 3834 if (card->instantiated) 3835 soc_cleanup_card_resources(card); 3836 dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); 3837 3838 return 0; 3839 } 3840 EXPORT_SYMBOL_GPL(snd_soc_unregister_card); 3841 3842 /* 3843 * Simplify DAI link configuration by removing ".-1" from device names 3844 * and sanitizing names. 3845 */ 3846 static char *fmt_single_name(struct device *dev, int *id) 3847 { 3848 char *found, name[NAME_SIZE]; 3849 int id1, id2; 3850 3851 if (dev_name(dev) == NULL) 3852 return NULL; 3853 3854 strlcpy(name, dev_name(dev), NAME_SIZE); 3855 3856 /* are we a "%s.%d" name (platform and SPI components) */ 3857 found = strstr(name, dev->driver->name); 3858 if (found) { 3859 /* get ID */ 3860 if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) { 3861 3862 /* discard ID from name if ID == -1 */ 3863 if (*id == -1) 3864 found[strlen(dev->driver->name)] = '\0'; 3865 } 3866 3867 } else { 3868 /* I2C component devices are named "bus-addr" */ 3869 if (sscanf(name, "%x-%x", &id1, &id2) == 2) { 3870 char tmp[NAME_SIZE]; 3871 3872 /* create unique ID number from I2C addr and bus */ 3873 *id = ((id1 & 0xffff) << 16) + id2; 3874 3875 /* sanitize component name for DAI link creation */ 3876 snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name); 3877 strlcpy(name, tmp, NAME_SIZE); 3878 } else 3879 *id = 0; 3880 } 3881 3882 return kstrdup(name, GFP_KERNEL); 3883 } 3884 3885 /* 3886 * Simplify DAI link naming for single devices with multiple DAIs by removing 3887 * any ".-1" and using the DAI name (instead of device name). 3888 */ 3889 static inline char *fmt_multiple_name(struct device *dev, 3890 struct snd_soc_dai_driver *dai_drv) 3891 { 3892 if (dai_drv->name == NULL) { 3893 dev_err(dev, 3894 "ASoC: error - multiple DAI %s registered with no name\n", 3895 dev_name(dev)); 3896 return NULL; 3897 } 3898 3899 return kstrdup(dai_drv->name, GFP_KERNEL); 3900 } 3901 3902 /** 3903 * snd_soc_unregister_dai - Unregister DAIs from the ASoC core 3904 * 3905 * @component: The component for which the DAIs should be unregistered 3906 */ 3907 static void snd_soc_unregister_dais(struct snd_soc_component *component) 3908 { 3909 struct snd_soc_dai *dai, *_dai; 3910 3911 list_for_each_entry_safe(dai, _dai, &component->dai_list, list) { 3912 dev_dbg(component->dev, "ASoC: Unregistered DAI '%s'\n", 3913 dai->name); 3914 list_del(&dai->list); 3915 kfree(dai->name); 3916 kfree(dai); 3917 } 3918 } 3919 3920 /** 3921 * snd_soc_register_dais - Register a DAI with the ASoC core 3922 * 3923 * @component: The component the DAIs are registered for 3924 * @codec: The CODEC that the DAIs are registered for, NULL if the component is 3925 * not a CODEC. 3926 * @dai_drv: DAI driver to use for the DAIs 3927 * @count: Number of DAIs 3928 * @legacy_dai_naming: Use the legacy naming scheme and let the DAI inherit the 3929 * parent's name. 3930 */ 3931 static int snd_soc_register_dais(struct snd_soc_component *component, 3932 struct snd_soc_codec *codec, struct snd_soc_dai_driver *dai_drv, 3933 size_t count, bool legacy_dai_naming) 3934 { 3935 struct device *dev = component->dev; 3936 struct snd_soc_dai *dai; 3937 unsigned int i; 3938 int ret; 3939 3940 dev_dbg(dev, "ASoC: dai register %s #%Zu\n", dev_name(dev), count); 3941 3942 for (i = 0; i < count; i++) { 3943 3944 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 3945 if (dai == NULL) { 3946 ret = -ENOMEM; 3947 goto err; 3948 } 3949 3950 /* 3951 * Back in the old days when we still had component-less DAIs, 3952 * instead of having a static name, component-less DAIs would 3953 * inherit the name of the parent device so it is possible to 3954 * register multiple instances of the DAI. We still need to keep 3955 * the same naming style even though those DAIs are not 3956 * component-less anymore. 3957 */ 3958 if (count == 1 && legacy_dai_naming) { 3959 dai->name = fmt_single_name(dev, &dai->id); 3960 } else { 3961 dai->name = fmt_multiple_name(dev, &dai_drv[i]); 3962 if (dai_drv[i].id) 3963 dai->id = dai_drv[i].id; 3964 else 3965 dai->id = i; 3966 } 3967 if (dai->name == NULL) { 3968 kfree(dai); 3969 ret = -ENOMEM; 3970 goto err; 3971 } 3972 3973 dai->component = component; 3974 dai->codec = codec; 3975 dai->dev = dev; 3976 dai->driver = &dai_drv[i]; 3977 dai->dapm.dev = dev; 3978 if (!dai->driver->ops) 3979 dai->driver->ops = &null_dai_ops; 3980 3981 if (!dai->codec) 3982 dai->dapm.idle_bias_off = 1; 3983 3984 list_add(&dai->list, &component->dai_list); 3985 3986 dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name); 3987 } 3988 3989 return 0; 3990 3991 err: 3992 snd_soc_unregister_dais(component); 3993 3994 return ret; 3995 } 3996 3997 /** 3998 * snd_soc_register_component - Register a component with the ASoC core 3999 * 4000 */ 4001 static int 4002 __snd_soc_register_component(struct device *dev, 4003 struct snd_soc_component *cmpnt, 4004 const struct snd_soc_component_driver *cmpnt_drv, 4005 struct snd_soc_codec *codec, 4006 struct snd_soc_dai_driver *dai_drv, 4007 int num_dai, bool allow_single_dai) 4008 { 4009 int ret; 4010 4011 dev_dbg(dev, "component register %s\n", dev_name(dev)); 4012 4013 if (!cmpnt) { 4014 dev_err(dev, "ASoC: Failed to connecting component\n"); 4015 return -ENOMEM; 4016 } 4017 4018 mutex_init(&cmpnt->io_mutex); 4019 4020 cmpnt->name = fmt_single_name(dev, &cmpnt->id); 4021 if (!cmpnt->name) { 4022 dev_err(dev, "ASoC: Failed to simplifying name\n"); 4023 return -ENOMEM; 4024 } 4025 4026 cmpnt->dev = dev; 4027 cmpnt->driver = cmpnt_drv; 4028 cmpnt->dai_drv = dai_drv; 4029 cmpnt->num_dai = num_dai; 4030 INIT_LIST_HEAD(&cmpnt->dai_list); 4031 4032 ret = snd_soc_register_dais(cmpnt, codec, dai_drv, num_dai, 4033 allow_single_dai); 4034 if (ret < 0) { 4035 dev_err(dev, "ASoC: Failed to regster DAIs: %d\n", ret); 4036 goto error_component_name; 4037 } 4038 4039 mutex_lock(&client_mutex); 4040 list_add(&cmpnt->list, &component_list); 4041 mutex_unlock(&client_mutex); 4042 4043 dev_dbg(cmpnt->dev, "ASoC: Registered component '%s'\n", cmpnt->name); 4044 4045 return ret; 4046 4047 error_component_name: 4048 kfree(cmpnt->name); 4049 4050 return ret; 4051 } 4052 4053 int snd_soc_register_component(struct device *dev, 4054 const struct snd_soc_component_driver *cmpnt_drv, 4055 struct snd_soc_dai_driver *dai_drv, 4056 int num_dai) 4057 { 4058 struct snd_soc_component *cmpnt; 4059 4060 cmpnt = devm_kzalloc(dev, sizeof(*cmpnt), GFP_KERNEL); 4061 if (!cmpnt) { 4062 dev_err(dev, "ASoC: Failed to allocate memory\n"); 4063 return -ENOMEM; 4064 } 4065 4066 cmpnt->ignore_pmdown_time = true; 4067 cmpnt->registered_as_component = true; 4068 4069 return __snd_soc_register_component(dev, cmpnt, cmpnt_drv, NULL, 4070 dai_drv, num_dai, true); 4071 } 4072 EXPORT_SYMBOL_GPL(snd_soc_register_component); 4073 4074 static void __snd_soc_unregister_component(struct snd_soc_component *cmpnt) 4075 { 4076 snd_soc_unregister_dais(cmpnt); 4077 4078 mutex_lock(&client_mutex); 4079 list_del(&cmpnt->list); 4080 mutex_unlock(&client_mutex); 4081 4082 dev_dbg(cmpnt->dev, "ASoC: Unregistered component '%s'\n", cmpnt->name); 4083 kfree(cmpnt->name); 4084 } 4085 4086 /** 4087 * snd_soc_unregister_component - Unregister a component from the ASoC core 4088 * 4089 */ 4090 void snd_soc_unregister_component(struct device *dev) 4091 { 4092 struct snd_soc_component *cmpnt; 4093 4094 list_for_each_entry(cmpnt, &component_list, list) { 4095 if (dev == cmpnt->dev && cmpnt->registered_as_component) 4096 goto found; 4097 } 4098 return; 4099 4100 found: 4101 __snd_soc_unregister_component(cmpnt); 4102 } 4103 EXPORT_SYMBOL_GPL(snd_soc_unregister_component); 4104 4105 static int snd_soc_platform_drv_write(struct snd_soc_component *component, 4106 unsigned int reg, unsigned int val) 4107 { 4108 struct snd_soc_platform *platform = snd_soc_component_to_platform(component); 4109 4110 return platform->driver->write(platform, reg, val); 4111 } 4112 4113 static int snd_soc_platform_drv_read(struct snd_soc_component *component, 4114 unsigned int reg, unsigned int *val) 4115 { 4116 struct snd_soc_platform *platform = snd_soc_component_to_platform(component); 4117 4118 *val = platform->driver->read(platform, reg); 4119 4120 return 0; 4121 } 4122 4123 /** 4124 * snd_soc_add_platform - Add a platform to the ASoC core 4125 * @dev: The parent device for the platform 4126 * @platform: The platform to add 4127 * @platform_driver: The driver for the platform 4128 */ 4129 int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform, 4130 const struct snd_soc_platform_driver *platform_drv) 4131 { 4132 int ret; 4133 4134 /* create platform component name */ 4135 platform->name = fmt_single_name(dev, &platform->id); 4136 if (platform->name == NULL) 4137 return -ENOMEM; 4138 4139 platform->dev = dev; 4140 platform->driver = platform_drv; 4141 platform->dapm.dev = dev; 4142 platform->dapm.platform = platform; 4143 platform->dapm.component = &platform->component; 4144 platform->dapm.stream_event = platform_drv->stream_event; 4145 if (platform_drv->write) 4146 platform->component.write = snd_soc_platform_drv_write; 4147 if (platform_drv->read) 4148 platform->component.read = snd_soc_platform_drv_read; 4149 4150 /* register component */ 4151 ret = __snd_soc_register_component(dev, &platform->component, 4152 &platform_drv->component_driver, 4153 NULL, NULL, 0, false); 4154 if (ret < 0) { 4155 dev_err(platform->component.dev, 4156 "ASoC: Failed to register component: %d\n", ret); 4157 return ret; 4158 } 4159 4160 mutex_lock(&client_mutex); 4161 list_add(&platform->list, &platform_list); 4162 mutex_unlock(&client_mutex); 4163 4164 dev_dbg(dev, "ASoC: Registered platform '%s'\n", platform->name); 4165 4166 return 0; 4167 } 4168 EXPORT_SYMBOL_GPL(snd_soc_add_platform); 4169 4170 /** 4171 * snd_soc_register_platform - Register a platform with the ASoC core 4172 * 4173 * @platform: platform to register 4174 */ 4175 int snd_soc_register_platform(struct device *dev, 4176 const struct snd_soc_platform_driver *platform_drv) 4177 { 4178 struct snd_soc_platform *platform; 4179 int ret; 4180 4181 dev_dbg(dev, "ASoC: platform register %s\n", dev_name(dev)); 4182 4183 platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL); 4184 if (platform == NULL) 4185 return -ENOMEM; 4186 4187 ret = snd_soc_add_platform(dev, platform, platform_drv); 4188 if (ret) 4189 kfree(platform); 4190 4191 return ret; 4192 } 4193 EXPORT_SYMBOL_GPL(snd_soc_register_platform); 4194 4195 /** 4196 * snd_soc_remove_platform - Remove a platform from the ASoC core 4197 * @platform: the platform to remove 4198 */ 4199 void snd_soc_remove_platform(struct snd_soc_platform *platform) 4200 { 4201 __snd_soc_unregister_component(&platform->component); 4202 4203 mutex_lock(&client_mutex); 4204 list_del(&platform->list); 4205 mutex_unlock(&client_mutex); 4206 4207 dev_dbg(platform->dev, "ASoC: Unregistered platform '%s'\n", 4208 platform->name); 4209 kfree(platform->name); 4210 } 4211 EXPORT_SYMBOL_GPL(snd_soc_remove_platform); 4212 4213 struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev) 4214 { 4215 struct snd_soc_platform *platform; 4216 4217 list_for_each_entry(platform, &platform_list, list) { 4218 if (dev == platform->dev) 4219 return platform; 4220 } 4221 4222 return NULL; 4223 } 4224 EXPORT_SYMBOL_GPL(snd_soc_lookup_platform); 4225 4226 /** 4227 * snd_soc_unregister_platform - Unregister a platform from the ASoC core 4228 * 4229 * @platform: platform to unregister 4230 */ 4231 void snd_soc_unregister_platform(struct device *dev) 4232 { 4233 struct snd_soc_platform *platform; 4234 4235 platform = snd_soc_lookup_platform(dev); 4236 if (!platform) 4237 return; 4238 4239 snd_soc_remove_platform(platform); 4240 kfree(platform); 4241 } 4242 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); 4243 4244 static u64 codec_format_map[] = { 4245 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE, 4246 SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE, 4247 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE, 4248 SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE, 4249 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE, 4250 SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE, 4251 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 4252 SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 4253 SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE, 4254 SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE, 4255 SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE, 4256 SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE, 4257 SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE, 4258 SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE, 4259 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE 4260 | SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE, 4261 }; 4262 4263 /* Fix up the DAI formats for endianness: codecs don't actually see 4264 * the endianness of the data but we're using the CPU format 4265 * definitions which do need to include endianness so we ensure that 4266 * codec DAIs always have both big and little endian variants set. 4267 */ 4268 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream) 4269 { 4270 int i; 4271 4272 for (i = 0; i < ARRAY_SIZE(codec_format_map); i++) 4273 if (stream->formats & codec_format_map[i]) 4274 stream->formats |= codec_format_map[i]; 4275 } 4276 4277 static int snd_soc_codec_drv_write(struct snd_soc_component *component, 4278 unsigned int reg, unsigned int val) 4279 { 4280 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); 4281 4282 return codec->driver->write(codec, reg, val); 4283 } 4284 4285 static int snd_soc_codec_drv_read(struct snd_soc_component *component, 4286 unsigned int reg, unsigned int *val) 4287 { 4288 struct snd_soc_codec *codec = snd_soc_component_to_codec(component); 4289 4290 *val = codec->driver->read(codec, reg); 4291 4292 return 0; 4293 } 4294 4295 /** 4296 * snd_soc_register_codec - Register a codec with the ASoC core 4297 * 4298 * @codec: codec to register 4299 */ 4300 int snd_soc_register_codec(struct device *dev, 4301 const struct snd_soc_codec_driver *codec_drv, 4302 struct snd_soc_dai_driver *dai_drv, 4303 int num_dai) 4304 { 4305 struct snd_soc_codec *codec; 4306 struct regmap *regmap; 4307 int ret, i; 4308 4309 dev_dbg(dev, "codec register %s\n", dev_name(dev)); 4310 4311 codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); 4312 if (codec == NULL) 4313 return -ENOMEM; 4314 4315 /* create CODEC component name */ 4316 codec->name = fmt_single_name(dev, &codec->id); 4317 if (codec->name == NULL) { 4318 ret = -ENOMEM; 4319 goto fail_codec; 4320 } 4321 4322 if (codec_drv->write) 4323 codec->component.write = snd_soc_codec_drv_write; 4324 if (codec_drv->read) 4325 codec->component.read = snd_soc_codec_drv_read; 4326 codec->component.ignore_pmdown_time = codec_drv->ignore_pmdown_time; 4327 codec->dapm.bias_level = SND_SOC_BIAS_OFF; 4328 codec->dapm.dev = dev; 4329 codec->dapm.codec = codec; 4330 codec->dapm.component = &codec->component; 4331 codec->dapm.seq_notifier = codec_drv->seq_notifier; 4332 codec->dapm.stream_event = codec_drv->stream_event; 4333 codec->dev = dev; 4334 codec->driver = codec_drv; 4335 codec->component.val_bytes = codec_drv->reg_word_size; 4336 mutex_init(&codec->mutex); 4337 4338 if (!codec->component.write) { 4339 if (codec_drv->get_regmap) 4340 regmap = codec_drv->get_regmap(dev); 4341 else 4342 regmap = dev_get_regmap(dev, NULL); 4343 4344 if (regmap) { 4345 ret = snd_soc_component_init_io(&codec->component, 4346 regmap); 4347 if (ret) { 4348 dev_err(codec->dev, 4349 "Failed to set cache I/O:%d\n", 4350 ret); 4351 return ret; 4352 } 4353 } 4354 } 4355 4356 for (i = 0; i < num_dai; i++) { 4357 fixup_codec_formats(&dai_drv[i].playback); 4358 fixup_codec_formats(&dai_drv[i].capture); 4359 } 4360 4361 mutex_lock(&client_mutex); 4362 list_add(&codec->list, &codec_list); 4363 mutex_unlock(&client_mutex); 4364 4365 /* register component */ 4366 ret = __snd_soc_register_component(dev, &codec->component, 4367 &codec_drv->component_driver, 4368 codec, dai_drv, num_dai, false); 4369 if (ret < 0) { 4370 dev_err(codec->dev, "ASoC: Failed to regster component: %d\n", ret); 4371 goto fail_codec_name; 4372 } 4373 4374 dev_dbg(codec->dev, "ASoC: Registered codec '%s'\n", codec->name); 4375 return 0; 4376 4377 fail_codec_name: 4378 mutex_lock(&client_mutex); 4379 list_del(&codec->list); 4380 mutex_unlock(&client_mutex); 4381 4382 kfree(codec->name); 4383 fail_codec: 4384 kfree(codec); 4385 return ret; 4386 } 4387 EXPORT_SYMBOL_GPL(snd_soc_register_codec); 4388 4389 /** 4390 * snd_soc_unregister_codec - Unregister a codec from the ASoC core 4391 * 4392 * @codec: codec to unregister 4393 */ 4394 void snd_soc_unregister_codec(struct device *dev) 4395 { 4396 struct snd_soc_codec *codec; 4397 4398 list_for_each_entry(codec, &codec_list, list) { 4399 if (dev == codec->dev) 4400 goto found; 4401 } 4402 return; 4403 4404 found: 4405 __snd_soc_unregister_component(&codec->component); 4406 4407 mutex_lock(&client_mutex); 4408 list_del(&codec->list); 4409 mutex_unlock(&client_mutex); 4410 4411 dev_dbg(codec->dev, "ASoC: Unregistered codec '%s'\n", codec->name); 4412 4413 snd_soc_cache_exit(codec); 4414 kfree(codec->name); 4415 kfree(codec); 4416 } 4417 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec); 4418 4419 /* Retrieve a card's name from device tree */ 4420 int snd_soc_of_parse_card_name(struct snd_soc_card *card, 4421 const char *propname) 4422 { 4423 struct device_node *np = card->dev->of_node; 4424 int ret; 4425 4426 ret = of_property_read_string_index(np, propname, 0, &card->name); 4427 /* 4428 * EINVAL means the property does not exist. This is fine providing 4429 * card->name was previously set, which is checked later in 4430 * snd_soc_register_card. 4431 */ 4432 if (ret < 0 && ret != -EINVAL) { 4433 dev_err(card->dev, 4434 "ASoC: Property '%s' could not be read: %d\n", 4435 propname, ret); 4436 return ret; 4437 } 4438 4439 return 0; 4440 } 4441 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name); 4442 4443 static const struct snd_soc_dapm_widget simple_widgets[] = { 4444 SND_SOC_DAPM_MIC("Microphone", NULL), 4445 SND_SOC_DAPM_LINE("Line", NULL), 4446 SND_SOC_DAPM_HP("Headphone", NULL), 4447 SND_SOC_DAPM_SPK("Speaker", NULL), 4448 }; 4449 4450 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card, 4451 const char *propname) 4452 { 4453 struct device_node *np = card->dev->of_node; 4454 struct snd_soc_dapm_widget *widgets; 4455 const char *template, *wname; 4456 int i, j, num_widgets, ret; 4457 4458 num_widgets = of_property_count_strings(np, propname); 4459 if (num_widgets < 0) { 4460 dev_err(card->dev, 4461 "ASoC: Property '%s' does not exist\n", propname); 4462 return -EINVAL; 4463 } 4464 if (num_widgets & 1) { 4465 dev_err(card->dev, 4466 "ASoC: Property '%s' length is not even\n", propname); 4467 return -EINVAL; 4468 } 4469 4470 num_widgets /= 2; 4471 if (!num_widgets) { 4472 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", 4473 propname); 4474 return -EINVAL; 4475 } 4476 4477 widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets), 4478 GFP_KERNEL); 4479 if (!widgets) { 4480 dev_err(card->dev, 4481 "ASoC: Could not allocate memory for widgets\n"); 4482 return -ENOMEM; 4483 } 4484 4485 for (i = 0; i < num_widgets; i++) { 4486 ret = of_property_read_string_index(np, propname, 4487 2 * i, &template); 4488 if (ret) { 4489 dev_err(card->dev, 4490 "ASoC: Property '%s' index %d read error:%d\n", 4491 propname, 2 * i, ret); 4492 return -EINVAL; 4493 } 4494 4495 for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) { 4496 if (!strncmp(template, simple_widgets[j].name, 4497 strlen(simple_widgets[j].name))) { 4498 widgets[i] = simple_widgets[j]; 4499 break; 4500 } 4501 } 4502 4503 if (j >= ARRAY_SIZE(simple_widgets)) { 4504 dev_err(card->dev, 4505 "ASoC: DAPM widget '%s' is not supported\n", 4506 template); 4507 return -EINVAL; 4508 } 4509 4510 ret = of_property_read_string_index(np, propname, 4511 (2 * i) + 1, 4512 &wname); 4513 if (ret) { 4514 dev_err(card->dev, 4515 "ASoC: Property '%s' index %d read error:%d\n", 4516 propname, (2 * i) + 1, ret); 4517 return -EINVAL; 4518 } 4519 4520 widgets[i].name = wname; 4521 } 4522 4523 card->dapm_widgets = widgets; 4524 card->num_dapm_widgets = num_widgets; 4525 4526 return 0; 4527 } 4528 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets); 4529 4530 int snd_soc_of_parse_tdm_slot(struct device_node *np, 4531 unsigned int *slots, 4532 unsigned int *slot_width) 4533 { 4534 u32 val; 4535 int ret; 4536 4537 if (of_property_read_bool(np, "dai-tdm-slot-num")) { 4538 ret = of_property_read_u32(np, "dai-tdm-slot-num", &val); 4539 if (ret) 4540 return ret; 4541 4542 if (slots) 4543 *slots = val; 4544 } 4545 4546 if (of_property_read_bool(np, "dai-tdm-slot-width")) { 4547 ret = of_property_read_u32(np, "dai-tdm-slot-width", &val); 4548 if (ret) 4549 return ret; 4550 4551 if (slot_width) 4552 *slot_width = val; 4553 } 4554 4555 return 0; 4556 } 4557 EXPORT_SYMBOL_GPL(snd_soc_of_parse_tdm_slot); 4558 4559 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, 4560 const char *propname) 4561 { 4562 struct device_node *np = card->dev->of_node; 4563 int num_routes; 4564 struct snd_soc_dapm_route *routes; 4565 int i, ret; 4566 4567 num_routes = of_property_count_strings(np, propname); 4568 if (num_routes < 0 || num_routes & 1) { 4569 dev_err(card->dev, 4570 "ASoC: Property '%s' does not exist or its length is not even\n", 4571 propname); 4572 return -EINVAL; 4573 } 4574 num_routes /= 2; 4575 if (!num_routes) { 4576 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", 4577 propname); 4578 return -EINVAL; 4579 } 4580 4581 routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes), 4582 GFP_KERNEL); 4583 if (!routes) { 4584 dev_err(card->dev, 4585 "ASoC: Could not allocate DAPM route table\n"); 4586 return -EINVAL; 4587 } 4588 4589 for (i = 0; i < num_routes; i++) { 4590 ret = of_property_read_string_index(np, propname, 4591 2 * i, &routes[i].sink); 4592 if (ret) { 4593 dev_err(card->dev, 4594 "ASoC: Property '%s' index %d could not be read: %d\n", 4595 propname, 2 * i, ret); 4596 return -EINVAL; 4597 } 4598 ret = of_property_read_string_index(np, propname, 4599 (2 * i) + 1, &routes[i].source); 4600 if (ret) { 4601 dev_err(card->dev, 4602 "ASoC: Property '%s' index %d could not be read: %d\n", 4603 propname, (2 * i) + 1, ret); 4604 return -EINVAL; 4605 } 4606 } 4607 4608 card->num_dapm_routes = num_routes; 4609 card->dapm_routes = routes; 4610 4611 return 0; 4612 } 4613 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing); 4614 4615 unsigned int snd_soc_of_parse_daifmt(struct device_node *np, 4616 const char *prefix, 4617 struct device_node **bitclkmaster, 4618 struct device_node **framemaster) 4619 { 4620 int ret, i; 4621 char prop[128]; 4622 unsigned int format = 0; 4623 int bit, frame; 4624 const char *str; 4625 struct { 4626 char *name; 4627 unsigned int val; 4628 } of_fmt_table[] = { 4629 { "i2s", SND_SOC_DAIFMT_I2S }, 4630 { "right_j", SND_SOC_DAIFMT_RIGHT_J }, 4631 { "left_j", SND_SOC_DAIFMT_LEFT_J }, 4632 { "dsp_a", SND_SOC_DAIFMT_DSP_A }, 4633 { "dsp_b", SND_SOC_DAIFMT_DSP_B }, 4634 { "ac97", SND_SOC_DAIFMT_AC97 }, 4635 { "pdm", SND_SOC_DAIFMT_PDM}, 4636 { "msb", SND_SOC_DAIFMT_MSB }, 4637 { "lsb", SND_SOC_DAIFMT_LSB }, 4638 }; 4639 4640 if (!prefix) 4641 prefix = ""; 4642 4643 /* 4644 * check "[prefix]format = xxx" 4645 * SND_SOC_DAIFMT_FORMAT_MASK area 4646 */ 4647 snprintf(prop, sizeof(prop), "%sformat", prefix); 4648 ret = of_property_read_string(np, prop, &str); 4649 if (ret == 0) { 4650 for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) { 4651 if (strcmp(str, of_fmt_table[i].name) == 0) { 4652 format |= of_fmt_table[i].val; 4653 break; 4654 } 4655 } 4656 } 4657 4658 /* 4659 * check "[prefix]continuous-clock" 4660 * SND_SOC_DAIFMT_CLOCK_MASK area 4661 */ 4662 snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix); 4663 if (of_get_property(np, prop, NULL)) 4664 format |= SND_SOC_DAIFMT_CONT; 4665 else 4666 format |= SND_SOC_DAIFMT_GATED; 4667 4668 /* 4669 * check "[prefix]bitclock-inversion" 4670 * check "[prefix]frame-inversion" 4671 * SND_SOC_DAIFMT_INV_MASK area 4672 */ 4673 snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix); 4674 bit = !!of_get_property(np, prop, NULL); 4675 4676 snprintf(prop, sizeof(prop), "%sframe-inversion", prefix); 4677 frame = !!of_get_property(np, prop, NULL); 4678 4679 switch ((bit << 4) + frame) { 4680 case 0x11: 4681 format |= SND_SOC_DAIFMT_IB_IF; 4682 break; 4683 case 0x10: 4684 format |= SND_SOC_DAIFMT_IB_NF; 4685 break; 4686 case 0x01: 4687 format |= SND_SOC_DAIFMT_NB_IF; 4688 break; 4689 default: 4690 /* SND_SOC_DAIFMT_NB_NF is default */ 4691 break; 4692 } 4693 4694 /* 4695 * check "[prefix]bitclock-master" 4696 * check "[prefix]frame-master" 4697 * SND_SOC_DAIFMT_MASTER_MASK area 4698 */ 4699 snprintf(prop, sizeof(prop), "%sbitclock-master", prefix); 4700 bit = !!of_get_property(np, prop, NULL); 4701 if (bit && bitclkmaster) 4702 *bitclkmaster = of_parse_phandle(np, prop, 0); 4703 4704 snprintf(prop, sizeof(prop), "%sframe-master", prefix); 4705 frame = !!of_get_property(np, prop, NULL); 4706 if (frame && framemaster) 4707 *framemaster = of_parse_phandle(np, prop, 0); 4708 4709 switch ((bit << 4) + frame) { 4710 case 0x11: 4711 format |= SND_SOC_DAIFMT_CBM_CFM; 4712 break; 4713 case 0x10: 4714 format |= SND_SOC_DAIFMT_CBM_CFS; 4715 break; 4716 case 0x01: 4717 format |= SND_SOC_DAIFMT_CBS_CFM; 4718 break; 4719 default: 4720 format |= SND_SOC_DAIFMT_CBS_CFS; 4721 break; 4722 } 4723 4724 return format; 4725 } 4726 EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt); 4727 4728 int snd_soc_of_get_dai_name(struct device_node *of_node, 4729 const char **dai_name) 4730 { 4731 struct snd_soc_component *pos; 4732 struct of_phandle_args args; 4733 int ret; 4734 4735 ret = of_parse_phandle_with_args(of_node, "sound-dai", 4736 "#sound-dai-cells", 0, &args); 4737 if (ret) 4738 return ret; 4739 4740 ret = -EPROBE_DEFER; 4741 4742 mutex_lock(&client_mutex); 4743 list_for_each_entry(pos, &component_list, list) { 4744 if (pos->dev->of_node != args.np) 4745 continue; 4746 4747 if (pos->driver->of_xlate_dai_name) { 4748 ret = pos->driver->of_xlate_dai_name(pos, &args, dai_name); 4749 } else { 4750 int id = -1; 4751 4752 switch (args.args_count) { 4753 case 0: 4754 id = 0; /* same as dai_drv[0] */ 4755 break; 4756 case 1: 4757 id = args.args[0]; 4758 break; 4759 default: 4760 /* not supported */ 4761 break; 4762 } 4763 4764 if (id < 0 || id >= pos->num_dai) { 4765 ret = -EINVAL; 4766 continue; 4767 } 4768 4769 ret = 0; 4770 4771 *dai_name = pos->dai_drv[id].name; 4772 if (!*dai_name) 4773 *dai_name = pos->name; 4774 } 4775 4776 break; 4777 } 4778 mutex_unlock(&client_mutex); 4779 4780 of_node_put(args.np); 4781 4782 return ret; 4783 } 4784 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name); 4785 4786 static int __init snd_soc_init(void) 4787 { 4788 #ifdef CONFIG_DEBUG_FS 4789 snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL); 4790 if (IS_ERR(snd_soc_debugfs_root) || !snd_soc_debugfs_root) { 4791 pr_warn("ASoC: Failed to create debugfs directory\n"); 4792 snd_soc_debugfs_root = NULL; 4793 } 4794 4795 if (!debugfs_create_file("codecs", 0444, snd_soc_debugfs_root, NULL, 4796 &codec_list_fops)) 4797 pr_warn("ASoC: Failed to create CODEC list debugfs file\n"); 4798 4799 if (!debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL, 4800 &dai_list_fops)) 4801 pr_warn("ASoC: Failed to create DAI list debugfs file\n"); 4802 4803 if (!debugfs_create_file("platforms", 0444, snd_soc_debugfs_root, NULL, 4804 &platform_list_fops)) 4805 pr_warn("ASoC: Failed to create platform list debugfs file\n"); 4806 #endif 4807 4808 snd_soc_util_init(); 4809 4810 return platform_driver_register(&soc_driver); 4811 } 4812 module_init(snd_soc_init); 4813 4814 static void __exit snd_soc_exit(void) 4815 { 4816 snd_soc_util_exit(); 4817 4818 #ifdef CONFIG_DEBUG_FS 4819 debugfs_remove_recursive(snd_soc_debugfs_root); 4820 #endif 4821 platform_driver_unregister(&soc_driver); 4822 } 4823 module_exit(snd_soc_exit); 4824 4825 /* Module information */ 4826 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 4827 MODULE_DESCRIPTION("ALSA SoC Core"); 4828 MODULE_LICENSE("GPL"); 4829 MODULE_ALIAS("platform:soc-audio"); 4830