1 // SPDX-License-Identifier: GPL-2.0+ 2 // 3 // soc-core.c -- ALSA SoC Audio Layer 4 // 5 // Copyright 2005 Wolfson Microelectronics PLC. 6 // Copyright 2005 Openedhand Ltd. 7 // Copyright (C) 2010 Slimlogic Ltd. 8 // Copyright (C) 2010 Texas Instruments Inc. 9 // 10 // Author: Liam Girdwood <lrg@slimlogic.co.uk> 11 // with code, comments and ideas from :- 12 // Richard Purdie <richard@openedhand.com> 13 // 14 // TODO: 15 // o Add hw rules to enforce rates, etc. 16 // o More testing with other codecs/machines. 17 // o Add more codecs and platforms to ensure good API coverage. 18 // o Support TDM on PCM and I2S 19 20 #include <linux/module.h> 21 #include <linux/moduleparam.h> 22 #include <linux/init.h> 23 #include <linux/delay.h> 24 #include <linux/pm.h> 25 #include <linux/bitops.h> 26 #include <linux/debugfs.h> 27 #include <linux/platform_device.h> 28 #include <linux/pinctrl/consumer.h> 29 #include <linux/ctype.h> 30 #include <linux/slab.h> 31 #include <linux/of.h> 32 #include <linux/of_graph.h> 33 #include <linux/dmi.h> 34 #include <sound/core.h> 35 #include <sound/jack.h> 36 #include <sound/pcm.h> 37 #include <sound/pcm_params.h> 38 #include <sound/soc.h> 39 #include <sound/soc-dpcm.h> 40 #include <sound/soc-topology.h> 41 #include <sound/initval.h> 42 43 #define CREATE_TRACE_POINTS 44 #include <trace/events/asoc.h> 45 46 #define NAME_SIZE 32 47 48 #ifdef CONFIG_DEBUG_FS 49 struct dentry *snd_soc_debugfs_root; 50 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root); 51 #endif 52 53 static DEFINE_MUTEX(client_mutex); 54 static LIST_HEAD(component_list); 55 static LIST_HEAD(unbind_card_list); 56 57 #define for_each_component(component) \ 58 list_for_each_entry(component, &component_list, list) 59 60 /* 61 * This is used if driver don't need to have CPU/Codec/Platform 62 * dai_link. see soc.h 63 */ 64 struct snd_soc_dai_link_component null_dailink_component[0]; 65 EXPORT_SYMBOL_GPL(null_dailink_component); 66 67 /* 68 * This is a timeout to do a DAPM powerdown after a stream is closed(). 69 * It can be used to eliminate pops between different playback streams, e.g. 70 * between two audio tracks. 71 */ 72 static int pmdown_time = 5000; 73 module_param(pmdown_time, int, 0); 74 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 75 76 #ifdef CONFIG_DMI 77 /* 78 * If a DMI filed contain strings in this blacklist (e.g. 79 * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken 80 * as invalid and dropped when setting the card long name from DMI info. 81 */ 82 static const char * const dmi_blacklist[] = { 83 "To be filled by OEM", 84 "TBD by OEM", 85 "Default String", 86 "Board Manufacturer", 87 "Board Vendor Name", 88 "Board Product Name", 89 NULL, /* terminator */ 90 }; 91 #endif 92 93 static ssize_t pmdown_time_show(struct device *dev, 94 struct device_attribute *attr, char *buf) 95 { 96 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 97 98 return sprintf(buf, "%ld\n", rtd->pmdown_time); 99 } 100 101 static ssize_t pmdown_time_set(struct device *dev, 102 struct device_attribute *attr, 103 const char *buf, size_t count) 104 { 105 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 106 int ret; 107 108 ret = kstrtol(buf, 10, &rtd->pmdown_time); 109 if (ret) 110 return ret; 111 112 return count; 113 } 114 115 static DEVICE_ATTR(pmdown_time, 0644, pmdown_time_show, pmdown_time_set); 116 117 static struct attribute *soc_dev_attrs[] = { 118 &dev_attr_pmdown_time.attr, 119 NULL 120 }; 121 122 static umode_t soc_dev_attr_is_visible(struct kobject *kobj, 123 struct attribute *attr, int idx) 124 { 125 struct device *dev = kobj_to_dev(kobj); 126 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 127 128 if (attr == &dev_attr_pmdown_time.attr) 129 return attr->mode; /* always visible */ 130 return rtd->num_codecs ? attr->mode : 0; /* enabled only with codec */ 131 } 132 133 static const struct attribute_group soc_dapm_dev_group = { 134 .attrs = soc_dapm_dev_attrs, 135 .is_visible = soc_dev_attr_is_visible, 136 }; 137 138 static const struct attribute_group soc_dev_group = { 139 .attrs = soc_dev_attrs, 140 .is_visible = soc_dev_attr_is_visible, 141 }; 142 143 static const struct attribute_group *soc_dev_attr_groups[] = { 144 &soc_dapm_dev_group, 145 &soc_dev_group, 146 NULL 147 }; 148 149 #ifdef CONFIG_DEBUG_FS 150 static void soc_init_component_debugfs(struct snd_soc_component *component) 151 { 152 if (!component->card->debugfs_card_root) 153 return; 154 155 if (component->debugfs_prefix) { 156 char *name; 157 158 name = kasprintf(GFP_KERNEL, "%s:%s", 159 component->debugfs_prefix, component->name); 160 if (name) { 161 component->debugfs_root = debugfs_create_dir(name, 162 component->card->debugfs_card_root); 163 kfree(name); 164 } 165 } else { 166 component->debugfs_root = debugfs_create_dir(component->name, 167 component->card->debugfs_card_root); 168 } 169 170 snd_soc_dapm_debugfs_init(snd_soc_component_get_dapm(component), 171 component->debugfs_root); 172 } 173 174 static void soc_cleanup_component_debugfs(struct snd_soc_component *component) 175 { 176 if (!component->debugfs_root) 177 return; 178 debugfs_remove_recursive(component->debugfs_root); 179 component->debugfs_root = NULL; 180 } 181 182 static int dai_list_show(struct seq_file *m, void *v) 183 { 184 struct snd_soc_component *component; 185 struct snd_soc_dai *dai; 186 187 mutex_lock(&client_mutex); 188 189 for_each_component(component) 190 for_each_component_dais(component, dai) 191 seq_printf(m, "%s\n", dai->name); 192 193 mutex_unlock(&client_mutex); 194 195 return 0; 196 } 197 DEFINE_SHOW_ATTRIBUTE(dai_list); 198 199 static int component_list_show(struct seq_file *m, void *v) 200 { 201 struct snd_soc_component *component; 202 203 mutex_lock(&client_mutex); 204 205 for_each_component(component) 206 seq_printf(m, "%s\n", component->name); 207 208 mutex_unlock(&client_mutex); 209 210 return 0; 211 } 212 DEFINE_SHOW_ATTRIBUTE(component_list); 213 214 static void soc_init_card_debugfs(struct snd_soc_card *card) 215 { 216 card->debugfs_card_root = debugfs_create_dir(card->name, 217 snd_soc_debugfs_root); 218 219 debugfs_create_u32("dapm_pop_time", 0644, card->debugfs_card_root, 220 &card->pop_time); 221 222 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); 223 } 224 225 static void soc_cleanup_card_debugfs(struct snd_soc_card *card) 226 { 227 debugfs_remove_recursive(card->debugfs_card_root); 228 card->debugfs_card_root = NULL; 229 } 230 231 static void snd_soc_debugfs_init(void) 232 { 233 snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL); 234 235 debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL, 236 &dai_list_fops); 237 238 debugfs_create_file("components", 0444, snd_soc_debugfs_root, NULL, 239 &component_list_fops); 240 } 241 242 static void snd_soc_debugfs_exit(void) 243 { 244 debugfs_remove_recursive(snd_soc_debugfs_root); 245 } 246 247 #else 248 249 static inline void soc_init_component_debugfs( 250 struct snd_soc_component *component) 251 { 252 } 253 254 static inline void soc_cleanup_component_debugfs( 255 struct snd_soc_component *component) 256 { 257 } 258 259 static inline void soc_init_card_debugfs(struct snd_soc_card *card) 260 { 261 } 262 263 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) 264 { 265 } 266 267 static inline void snd_soc_debugfs_init(void) 268 { 269 } 270 271 static inline void snd_soc_debugfs_exit(void) 272 { 273 } 274 275 #endif 276 277 static int snd_soc_rtdcom_add(struct snd_soc_pcm_runtime *rtd, 278 struct snd_soc_component *component) 279 { 280 struct snd_soc_rtdcom_list *rtdcom; 281 282 for_each_rtdcom(rtd, rtdcom) { 283 /* already connected */ 284 if (rtdcom->component == component) 285 return 0; 286 } 287 288 rtdcom = kmalloc(sizeof(*rtdcom), GFP_KERNEL); 289 if (!rtdcom) 290 return -ENOMEM; 291 292 rtdcom->component = component; 293 INIT_LIST_HEAD(&rtdcom->list); 294 295 list_add_tail(&rtdcom->list, &rtd->component_list); 296 297 return 0; 298 } 299 300 static void snd_soc_rtdcom_del_all(struct snd_soc_pcm_runtime *rtd) 301 { 302 struct snd_soc_rtdcom_list *rtdcom1, *rtdcom2; 303 304 for_each_rtdcom_safe(rtd, rtdcom1, rtdcom2) 305 kfree(rtdcom1); 306 307 INIT_LIST_HEAD(&rtd->component_list); 308 } 309 310 struct snd_soc_component *snd_soc_rtdcom_lookup(struct snd_soc_pcm_runtime *rtd, 311 const char *driver_name) 312 { 313 struct snd_soc_rtdcom_list *rtdcom; 314 315 if (!driver_name) 316 return NULL; 317 318 /* 319 * NOTE 320 * 321 * snd_soc_rtdcom_lookup() will find component from rtd by using 322 * specified driver name. 323 * But, if many components which have same driver name are connected 324 * to 1 rtd, this function will return 1st found component. 325 */ 326 for_each_rtdcom(rtd, rtdcom) { 327 const char *component_name = rtdcom->component->driver->name; 328 329 if (!component_name) 330 continue; 331 332 if ((component_name == driver_name) || 333 strcmp(component_name, driver_name) == 0) 334 return rtdcom->component; 335 } 336 337 return NULL; 338 } 339 EXPORT_SYMBOL_GPL(snd_soc_rtdcom_lookup); 340 341 struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card, 342 const char *dai_link, int stream) 343 { 344 struct snd_soc_pcm_runtime *rtd; 345 346 for_each_card_rtds(card, rtd) { 347 if (rtd->dai_link->no_pcm && 348 !strcmp(rtd->dai_link->name, dai_link)) 349 return rtd->pcm->streams[stream].substream; 350 } 351 dev_dbg(card->dev, "ASoC: failed to find dai link %s\n", dai_link); 352 return NULL; 353 } 354 EXPORT_SYMBOL_GPL(snd_soc_get_dai_substream); 355 356 static const struct snd_soc_ops null_snd_soc_ops; 357 358 static struct snd_soc_pcm_runtime *soc_new_pcm_runtime( 359 struct snd_soc_card *card, struct snd_soc_dai_link *dai_link) 360 { 361 struct snd_soc_pcm_runtime *rtd; 362 363 rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL); 364 if (!rtd) 365 return NULL; 366 367 INIT_LIST_HEAD(&rtd->component_list); 368 rtd->card = card; 369 rtd->dai_link = dai_link; 370 if (!rtd->dai_link->ops) 371 rtd->dai_link->ops = &null_snd_soc_ops; 372 373 rtd->codec_dais = kcalloc(dai_link->num_codecs, 374 sizeof(struct snd_soc_dai *), 375 GFP_KERNEL); 376 if (!rtd->codec_dais) { 377 kfree(rtd); 378 return NULL; 379 } 380 381 return rtd; 382 } 383 384 static void soc_free_pcm_runtime(struct snd_soc_pcm_runtime *rtd) 385 { 386 kfree(rtd->codec_dais); 387 snd_soc_rtdcom_del_all(rtd); 388 kfree(rtd); 389 } 390 391 static void soc_add_pcm_runtime(struct snd_soc_card *card, 392 struct snd_soc_pcm_runtime *rtd) 393 { 394 /* see for_each_card_rtds */ 395 list_add_tail(&rtd->list, &card->rtd_list); 396 rtd->num = card->num_rtd; 397 card->num_rtd++; 398 } 399 400 static void soc_remove_pcm_runtimes(struct snd_soc_card *card) 401 { 402 struct snd_soc_pcm_runtime *rtd, *_rtd; 403 404 for_each_card_rtds_safe(card, rtd, _rtd) { 405 list_del(&rtd->list); 406 soc_free_pcm_runtime(rtd); 407 } 408 409 card->num_rtd = 0; 410 } 411 412 struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card, 413 const char *dai_link) 414 { 415 struct snd_soc_pcm_runtime *rtd; 416 417 for_each_card_rtds(card, rtd) { 418 if (!strcmp(rtd->dai_link->name, dai_link)) 419 return rtd; 420 } 421 dev_dbg(card->dev, "ASoC: failed to find rtd %s\n", dai_link); 422 return NULL; 423 } 424 EXPORT_SYMBOL_GPL(snd_soc_get_pcm_runtime); 425 426 static void snd_soc_flush_all_delayed_work(struct snd_soc_card *card) 427 { 428 struct snd_soc_pcm_runtime *rtd; 429 430 for_each_card_rtds(card, rtd) 431 flush_delayed_work(&rtd->delayed_work); 432 } 433 434 #ifdef CONFIG_PM_SLEEP 435 /* powers down audio subsystem for suspend */ 436 int snd_soc_suspend(struct device *dev) 437 { 438 struct snd_soc_card *card = dev_get_drvdata(dev); 439 struct snd_soc_component *component; 440 struct snd_soc_pcm_runtime *rtd; 441 int i; 442 443 /* If the card is not initialized yet there is nothing to do */ 444 if (!card->instantiated) 445 return 0; 446 447 /* 448 * Due to the resume being scheduled into a workqueue we could 449 * suspend before that's finished - wait for it to complete. 450 */ 451 snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); 452 453 /* we're going to block userspace touching us until resume completes */ 454 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); 455 456 /* mute any active DACs */ 457 for_each_card_rtds(card, rtd) { 458 struct snd_soc_dai *dai; 459 460 if (rtd->dai_link->ignore_suspend) 461 continue; 462 463 for_each_rtd_codec_dai(rtd, i, dai) { 464 if (dai->playback_active) 465 snd_soc_dai_digital_mute(dai, 1, 466 SNDRV_PCM_STREAM_PLAYBACK); 467 } 468 } 469 470 /* suspend all pcms */ 471 for_each_card_rtds(card, rtd) { 472 if (rtd->dai_link->ignore_suspend) 473 continue; 474 475 snd_pcm_suspend_all(rtd->pcm); 476 } 477 478 if (card->suspend_pre) 479 card->suspend_pre(card); 480 481 for_each_card_rtds(card, rtd) { 482 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 483 484 if (rtd->dai_link->ignore_suspend) 485 continue; 486 487 if (!cpu_dai->driver->bus_control) 488 snd_soc_dai_suspend(cpu_dai); 489 } 490 491 /* close any waiting streams */ 492 snd_soc_flush_all_delayed_work(card); 493 494 for_each_card_rtds(card, rtd) { 495 496 if (rtd->dai_link->ignore_suspend) 497 continue; 498 499 snd_soc_dapm_stream_event(rtd, 500 SNDRV_PCM_STREAM_PLAYBACK, 501 SND_SOC_DAPM_STREAM_SUSPEND); 502 503 snd_soc_dapm_stream_event(rtd, 504 SNDRV_PCM_STREAM_CAPTURE, 505 SND_SOC_DAPM_STREAM_SUSPEND); 506 } 507 508 /* Recheck all endpoints too, their state is affected by suspend */ 509 dapm_mark_endpoints_dirty(card); 510 snd_soc_dapm_sync(&card->dapm); 511 512 /* suspend all COMPONENTs */ 513 for_each_card_components(card, component) { 514 struct snd_soc_dapm_context *dapm = 515 snd_soc_component_get_dapm(component); 516 517 /* 518 * If there are paths active then the COMPONENT will be held 519 * with bias _ON and should not be suspended. 520 */ 521 if (!snd_soc_component_is_suspended(component)) { 522 switch (snd_soc_dapm_get_bias_level(dapm)) { 523 case SND_SOC_BIAS_STANDBY: 524 /* 525 * If the COMPONENT is capable of idle 526 * bias off then being in STANDBY 527 * means it's doing something, 528 * otherwise fall through. 529 */ 530 if (dapm->idle_bias_off) { 531 dev_dbg(component->dev, 532 "ASoC: idle_bias_off CODEC on over suspend\n"); 533 break; 534 } 535 /* fall through */ 536 537 case SND_SOC_BIAS_OFF: 538 snd_soc_component_suspend(component); 539 if (component->regmap) 540 regcache_mark_dirty(component->regmap); 541 /* deactivate pins to sleep state */ 542 pinctrl_pm_select_sleep_state(component->dev); 543 break; 544 default: 545 dev_dbg(component->dev, 546 "ASoC: COMPONENT is on over suspend\n"); 547 break; 548 } 549 } 550 } 551 552 for_each_card_rtds(card, rtd) { 553 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 554 555 if (rtd->dai_link->ignore_suspend) 556 continue; 557 558 if (cpu_dai->driver->bus_control) 559 snd_soc_dai_suspend(cpu_dai); 560 561 /* deactivate pins to sleep state */ 562 pinctrl_pm_select_sleep_state(cpu_dai->dev); 563 } 564 565 if (card->suspend_post) 566 card->suspend_post(card); 567 568 return 0; 569 } 570 EXPORT_SYMBOL_GPL(snd_soc_suspend); 571 572 /* 573 * deferred resume work, so resume can complete before we finished 574 * setting our codec back up, which can be very slow on I2C 575 */ 576 static void soc_resume_deferred(struct work_struct *work) 577 { 578 struct snd_soc_card *card = 579 container_of(work, struct snd_soc_card, 580 deferred_resume_work); 581 struct snd_soc_pcm_runtime *rtd; 582 struct snd_soc_component *component; 583 int i; 584 585 /* 586 * our power state is still SNDRV_CTL_POWER_D3hot from suspend time, 587 * so userspace apps are blocked from touching us 588 */ 589 590 dev_dbg(card->dev, "ASoC: starting resume work\n"); 591 592 /* Bring us up into D2 so that DAPM starts enabling things */ 593 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2); 594 595 if (card->resume_pre) 596 card->resume_pre(card); 597 598 /* resume control bus DAIs */ 599 for_each_card_rtds(card, rtd) { 600 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 601 602 if (rtd->dai_link->ignore_suspend) 603 continue; 604 605 if (cpu_dai->driver->bus_control) 606 snd_soc_dai_resume(cpu_dai); 607 } 608 609 for_each_card_components(card, component) { 610 if (snd_soc_component_is_suspended(component)) 611 snd_soc_component_resume(component); 612 } 613 614 for_each_card_rtds(card, rtd) { 615 616 if (rtd->dai_link->ignore_suspend) 617 continue; 618 619 snd_soc_dapm_stream_event(rtd, 620 SNDRV_PCM_STREAM_PLAYBACK, 621 SND_SOC_DAPM_STREAM_RESUME); 622 623 snd_soc_dapm_stream_event(rtd, 624 SNDRV_PCM_STREAM_CAPTURE, 625 SND_SOC_DAPM_STREAM_RESUME); 626 } 627 628 /* unmute any active DACs */ 629 for_each_card_rtds(card, rtd) { 630 struct snd_soc_dai *dai; 631 632 if (rtd->dai_link->ignore_suspend) 633 continue; 634 635 for_each_rtd_codec_dai(rtd, i, dai) { 636 if (dai->playback_active) 637 snd_soc_dai_digital_mute(dai, 0, 638 SNDRV_PCM_STREAM_PLAYBACK); 639 } 640 } 641 642 for_each_card_rtds(card, rtd) { 643 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 644 645 if (rtd->dai_link->ignore_suspend) 646 continue; 647 648 if (!cpu_dai->driver->bus_control) 649 snd_soc_dai_resume(cpu_dai); 650 } 651 652 if (card->resume_post) 653 card->resume_post(card); 654 655 dev_dbg(card->dev, "ASoC: resume work completed\n"); 656 657 /* Recheck all endpoints too, their state is affected by suspend */ 658 dapm_mark_endpoints_dirty(card); 659 snd_soc_dapm_sync(&card->dapm); 660 661 /* userspace can access us now we are back as we were before */ 662 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0); 663 } 664 665 /* powers up audio subsystem after a suspend */ 666 int snd_soc_resume(struct device *dev) 667 { 668 struct snd_soc_card *card = dev_get_drvdata(dev); 669 bool bus_control = false; 670 struct snd_soc_pcm_runtime *rtd; 671 struct snd_soc_dai *codec_dai; 672 int i; 673 674 /* If the card is not initialized yet there is nothing to do */ 675 if (!card->instantiated) 676 return 0; 677 678 /* activate pins from sleep state */ 679 for_each_card_rtds(card, rtd) { 680 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 681 682 if (cpu_dai->active) 683 pinctrl_pm_select_default_state(cpu_dai->dev); 684 685 for_each_rtd_codec_dai(rtd, i, codec_dai) { 686 if (codec_dai->active) 687 pinctrl_pm_select_default_state(codec_dai->dev); 688 } 689 } 690 691 /* 692 * DAIs that also act as the control bus master might have other drivers 693 * hanging off them so need to resume immediately. Other drivers don't 694 * have that problem and may take a substantial amount of time to resume 695 * due to I/O costs and anti-pop so handle them out of line. 696 */ 697 for_each_card_rtds(card, rtd) { 698 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 699 700 bus_control |= cpu_dai->driver->bus_control; 701 } 702 if (bus_control) { 703 dev_dbg(dev, "ASoC: Resuming control bus master immediately\n"); 704 soc_resume_deferred(&card->deferred_resume_work); 705 } else { 706 dev_dbg(dev, "ASoC: Scheduling resume work\n"); 707 if (!schedule_work(&card->deferred_resume_work)) 708 dev_err(dev, "ASoC: resume work item may be lost\n"); 709 } 710 711 return 0; 712 } 713 EXPORT_SYMBOL_GPL(snd_soc_resume); 714 715 static void soc_resume_init(struct snd_soc_card *card) 716 { 717 /* deferred resume work */ 718 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 719 } 720 #else 721 #define snd_soc_suspend NULL 722 #define snd_soc_resume NULL 723 static inline void soc_resume_init(struct snd_soc_card *card) 724 { 725 } 726 #endif 727 728 static const struct snd_soc_dai_ops null_dai_ops = { 729 }; 730 731 static struct device_node 732 *soc_component_to_node(struct snd_soc_component *component) 733 { 734 struct device_node *of_node; 735 736 of_node = component->dev->of_node; 737 if (!of_node && component->dev->parent) 738 of_node = component->dev->parent->of_node; 739 740 return of_node; 741 } 742 743 static int snd_soc_is_matching_component( 744 const struct snd_soc_dai_link_component *dlc, 745 struct snd_soc_component *component) 746 { 747 struct device_node *component_of_node; 748 749 if (!dlc) 750 return 0; 751 752 component_of_node = soc_component_to_node(component); 753 754 if (dlc->of_node && component_of_node != dlc->of_node) 755 return 0; 756 if (dlc->name && strcmp(component->name, dlc->name)) 757 return 0; 758 759 return 1; 760 } 761 762 static struct snd_soc_component *soc_find_component( 763 const struct snd_soc_dai_link_component *dlc) 764 { 765 struct snd_soc_component *component; 766 767 lockdep_assert_held(&client_mutex); 768 769 /* 770 * NOTE 771 * 772 * It returns *1st* found component, but some driver 773 * has few components by same of_node/name 774 * ex) 775 * CPU component and generic DMAEngine component 776 */ 777 for_each_component(component) 778 if (snd_soc_is_matching_component(dlc, component)) 779 return component; 780 781 return NULL; 782 } 783 784 /** 785 * snd_soc_find_dai - Find a registered DAI 786 * 787 * @dlc: name of the DAI or the DAI driver and optional component info to match 788 * 789 * This function will search all registered components and their DAIs to 790 * find the DAI of the same name. The component's of_node and name 791 * should also match if being specified. 792 * 793 * Return: pointer of DAI, or NULL if not found. 794 */ 795 struct snd_soc_dai *snd_soc_find_dai( 796 const struct snd_soc_dai_link_component *dlc) 797 { 798 struct snd_soc_component *component; 799 struct snd_soc_dai *dai; 800 801 lockdep_assert_held(&client_mutex); 802 803 /* Find CPU DAI from registered DAIs */ 804 for_each_component(component) { 805 if (!snd_soc_is_matching_component(dlc, component)) 806 continue; 807 for_each_component_dais(component, dai) { 808 if (dlc->dai_name && strcmp(dai->name, dlc->dai_name) 809 && (!dai->driver->name 810 || strcmp(dai->driver->name, dlc->dai_name))) 811 continue; 812 813 return dai; 814 } 815 } 816 817 return NULL; 818 } 819 EXPORT_SYMBOL_GPL(snd_soc_find_dai); 820 821 /** 822 * snd_soc_find_dai_link - Find a DAI link 823 * 824 * @card: soc card 825 * @id: DAI link ID to match 826 * @name: DAI link name to match, optional 827 * @stream_name: DAI link stream name to match, optional 828 * 829 * This function will search all existing DAI links of the soc card to 830 * find the link of the same ID. Since DAI links may not have their 831 * unique ID, so name and stream name should also match if being 832 * specified. 833 * 834 * Return: pointer of DAI link, or NULL if not found. 835 */ 836 struct snd_soc_dai_link *snd_soc_find_dai_link(struct snd_soc_card *card, 837 int id, const char *name, 838 const char *stream_name) 839 { 840 struct snd_soc_dai_link *link; 841 842 lockdep_assert_held(&client_mutex); 843 844 for_each_card_links(card, link) { 845 if (link->id != id) 846 continue; 847 848 if (name && (!link->name || strcmp(name, link->name))) 849 continue; 850 851 if (stream_name && (!link->stream_name 852 || strcmp(stream_name, link->stream_name))) 853 continue; 854 855 return link; 856 } 857 858 return NULL; 859 } 860 EXPORT_SYMBOL_GPL(snd_soc_find_dai_link); 861 862 static bool soc_is_dai_link_bound(struct snd_soc_card *card, 863 struct snd_soc_dai_link *dai_link) 864 { 865 struct snd_soc_pcm_runtime *rtd; 866 867 for_each_card_rtds(card, rtd) { 868 if (rtd->dai_link == dai_link) 869 return true; 870 } 871 872 return false; 873 } 874 875 static int soc_bind_dai_link(struct snd_soc_card *card, 876 struct snd_soc_dai_link *dai_link) 877 { 878 struct snd_soc_pcm_runtime *rtd; 879 struct snd_soc_dai_link_component *codec, *platform; 880 struct snd_soc_component *component; 881 int i; 882 883 if (dai_link->ignore) 884 return 0; 885 886 dev_dbg(card->dev, "ASoC: binding %s\n", dai_link->name); 887 888 if (soc_is_dai_link_bound(card, dai_link)) { 889 dev_dbg(card->dev, "ASoC: dai link %s already bound\n", 890 dai_link->name); 891 return 0; 892 } 893 894 rtd = soc_new_pcm_runtime(card, dai_link); 895 if (!rtd) 896 return -ENOMEM; 897 898 /* FIXME: we need multi CPU support in the future */ 899 rtd->cpu_dai = snd_soc_find_dai(dai_link->cpus); 900 if (!rtd->cpu_dai) { 901 dev_info(card->dev, "ASoC: CPU DAI %s not registered\n", 902 dai_link->cpus->dai_name); 903 goto _err_defer; 904 } 905 snd_soc_rtdcom_add(rtd, rtd->cpu_dai->component); 906 907 /* Find CODEC from registered CODECs */ 908 rtd->num_codecs = dai_link->num_codecs; 909 for_each_link_codecs(dai_link, i, codec) { 910 rtd->codec_dais[i] = snd_soc_find_dai(codec); 911 if (!rtd->codec_dais[i]) { 912 dev_info(card->dev, "ASoC: CODEC DAI %s not registered\n", 913 codec->dai_name); 914 goto _err_defer; 915 } 916 917 snd_soc_rtdcom_add(rtd, rtd->codec_dais[i]->component); 918 } 919 920 /* Single codec links expect codec and codec_dai in runtime data */ 921 rtd->codec_dai = rtd->codec_dais[0]; 922 923 /* Find PLATFORM from registered PLATFORMs */ 924 for_each_link_platforms(dai_link, i, platform) { 925 for_each_component(component) { 926 if (!snd_soc_is_matching_component(platform, component)) 927 continue; 928 929 snd_soc_rtdcom_add(rtd, component); 930 } 931 } 932 933 soc_add_pcm_runtime(card, rtd); 934 return 0; 935 936 _err_defer: 937 soc_free_pcm_runtime(rtd); 938 return -EPROBE_DEFER; 939 } 940 941 static void soc_set_of_name_prefix(struct snd_soc_component *component) 942 { 943 struct device_node *of_node = soc_component_to_node(component); 944 const char *str; 945 int ret; 946 947 ret = of_property_read_string(of_node, "sound-name-prefix", &str); 948 if (!ret) 949 component->name_prefix = str; 950 } 951 952 static void soc_set_name_prefix(struct snd_soc_card *card, 953 struct snd_soc_component *component) 954 { 955 int i; 956 957 for (i = 0; i < card->num_configs && card->codec_conf; i++) { 958 struct snd_soc_codec_conf *map = &card->codec_conf[i]; 959 struct device_node *of_node = soc_component_to_node(component); 960 961 if (map->of_node && of_node != map->of_node) 962 continue; 963 if (map->dev_name && strcmp(component->name, map->dev_name)) 964 continue; 965 component->name_prefix = map->name_prefix; 966 return; 967 } 968 969 /* 970 * If there is no configuration table or no match in the table, 971 * check if a prefix is provided in the node 972 */ 973 soc_set_of_name_prefix(component); 974 } 975 976 static void soc_cleanup_component(struct snd_soc_component *component) 977 { 978 /* For framework level robustness */ 979 snd_soc_component_set_jack(component, NULL, NULL); 980 981 list_del(&component->card_list); 982 snd_soc_dapm_free(snd_soc_component_get_dapm(component)); 983 soc_cleanup_component_debugfs(component); 984 component->card = NULL; 985 snd_soc_component_module_put_when_remove(component); 986 } 987 988 static void soc_remove_component(struct snd_soc_component *component) 989 { 990 if (!component->card) 991 return; 992 993 snd_soc_component_remove(component); 994 995 soc_cleanup_component(component); 996 } 997 998 static int soc_probe_component(struct snd_soc_card *card, 999 struct snd_soc_component *component) 1000 { 1001 struct snd_soc_dapm_context *dapm = 1002 snd_soc_component_get_dapm(component); 1003 struct snd_soc_dai *dai; 1004 int ret; 1005 1006 if (!strcmp(component->name, "snd-soc-dummy")) 1007 return 0; 1008 1009 if (component->card) { 1010 if (component->card != card) { 1011 dev_err(component->dev, 1012 "Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n", 1013 card->name, component->card->name); 1014 return -ENODEV; 1015 } 1016 return 0; 1017 } 1018 1019 ret = snd_soc_component_module_get_when_probe(component); 1020 if (ret < 0) 1021 return ret; 1022 1023 component->card = card; 1024 soc_set_name_prefix(card, component); 1025 1026 soc_init_component_debugfs(component); 1027 1028 snd_soc_dapm_init(dapm, card, component); 1029 1030 ret = snd_soc_dapm_new_controls(dapm, 1031 component->driver->dapm_widgets, 1032 component->driver->num_dapm_widgets); 1033 1034 if (ret != 0) { 1035 dev_err(component->dev, 1036 "Failed to create new controls %d\n", ret); 1037 goto err_probe; 1038 } 1039 1040 for_each_component_dais(component, dai) { 1041 ret = snd_soc_dapm_new_dai_widgets(dapm, dai); 1042 if (ret != 0) { 1043 dev_err(component->dev, 1044 "Failed to create DAI widgets %d\n", ret); 1045 goto err_probe; 1046 } 1047 } 1048 1049 ret = snd_soc_component_probe(component); 1050 if (ret < 0) { 1051 dev_err(component->dev, 1052 "ASoC: failed to probe component %d\n", ret); 1053 goto err_probe; 1054 } 1055 WARN(dapm->idle_bias_off && 1056 dapm->bias_level != SND_SOC_BIAS_OFF, 1057 "codec %s can not start from non-off bias with idle_bias_off==1\n", 1058 component->name); 1059 1060 /* machine specific init */ 1061 if (component->init) { 1062 ret = component->init(component); 1063 if (ret < 0) { 1064 dev_err(component->dev, 1065 "Failed to do machine specific init %d\n", ret); 1066 goto err_probe; 1067 } 1068 } 1069 1070 ret = snd_soc_add_component_controls(component, 1071 component->driver->controls, 1072 component->driver->num_controls); 1073 if (ret < 0) 1074 goto err_probe; 1075 1076 ret = snd_soc_dapm_add_routes(dapm, 1077 component->driver->dapm_routes, 1078 component->driver->num_dapm_routes); 1079 if (ret < 0) 1080 goto err_probe; 1081 1082 /* see for_each_card_components */ 1083 list_add(&component->card_list, &card->component_dev_list); 1084 1085 err_probe: 1086 if (ret < 0) 1087 soc_cleanup_component(component); 1088 1089 return ret; 1090 } 1091 1092 static void soc_remove_dai(struct snd_soc_dai *dai, int order) 1093 { 1094 int err; 1095 1096 if (!dai || !dai->probed || !dai->driver || 1097 dai->driver->remove_order != order) 1098 return; 1099 1100 err = snd_soc_dai_remove(dai); 1101 if (err < 0) 1102 dev_err(dai->dev, 1103 "ASoC: failed to remove %s: %d\n", 1104 dai->name, err); 1105 1106 dai->probed = 0; 1107 } 1108 1109 static int soc_probe_dai(struct snd_soc_dai *dai, int order) 1110 { 1111 int ret; 1112 1113 if (dai->probed || 1114 dai->driver->probe_order != order) 1115 return 0; 1116 1117 ret = snd_soc_dai_probe(dai); 1118 if (ret < 0) { 1119 dev_err(dai->dev, "ASoC: failed to probe DAI %s: %d\n", 1120 dai->name, ret); 1121 return ret; 1122 } 1123 1124 dai->probed = 1; 1125 1126 return 0; 1127 } 1128 1129 static void soc_rtd_free(struct snd_soc_pcm_runtime *rtd); /* remove me */ 1130 static void soc_remove_link_dais(struct snd_soc_card *card) 1131 { 1132 int i; 1133 struct snd_soc_dai *codec_dai; 1134 struct snd_soc_pcm_runtime *rtd; 1135 int order; 1136 1137 for_each_comp_order(order) { 1138 for_each_card_rtds(card, rtd) { 1139 1140 /* finalize rtd device */ 1141 soc_rtd_free(rtd); 1142 1143 /* remove the CODEC DAI */ 1144 for_each_rtd_codec_dai(rtd, i, codec_dai) 1145 soc_remove_dai(codec_dai, order); 1146 1147 soc_remove_dai(rtd->cpu_dai, order); 1148 } 1149 } 1150 } 1151 1152 static int soc_probe_link_dais(struct snd_soc_card *card) 1153 { 1154 struct snd_soc_dai *codec_dai; 1155 struct snd_soc_pcm_runtime *rtd; 1156 int i, order, ret; 1157 1158 for_each_comp_order(order) { 1159 for_each_card_rtds(card, rtd) { 1160 1161 dev_dbg(card->dev, 1162 "ASoC: probe %s dai link %d late %d\n", 1163 card->name, rtd->num, order); 1164 1165 ret = soc_probe_dai(rtd->cpu_dai, order); 1166 if (ret) 1167 return ret; 1168 1169 /* probe the CODEC DAI */ 1170 for_each_rtd_codec_dai(rtd, i, codec_dai) { 1171 ret = soc_probe_dai(codec_dai, order); 1172 if (ret) 1173 return ret; 1174 } 1175 } 1176 } 1177 1178 return 0; 1179 } 1180 1181 static void soc_remove_link_components(struct snd_soc_card *card) 1182 { 1183 struct snd_soc_component *component; 1184 struct snd_soc_pcm_runtime *rtd; 1185 struct snd_soc_rtdcom_list *rtdcom; 1186 int order; 1187 1188 for_each_comp_order(order) { 1189 for_each_card_rtds(card, rtd) { 1190 for_each_rtdcom(rtd, rtdcom) { 1191 component = rtdcom->component; 1192 1193 if (component->driver->remove_order != order) 1194 continue; 1195 1196 soc_remove_component(component); 1197 } 1198 } 1199 } 1200 } 1201 1202 static int soc_probe_link_components(struct snd_soc_card *card) 1203 { 1204 struct snd_soc_component *component; 1205 struct snd_soc_pcm_runtime *rtd; 1206 struct snd_soc_rtdcom_list *rtdcom; 1207 int ret, order; 1208 1209 for_each_comp_order(order) { 1210 for_each_card_rtds(card, rtd) { 1211 for_each_rtdcom(rtd, rtdcom) { 1212 component = rtdcom->component; 1213 1214 if (component->driver->probe_order != order) 1215 continue; 1216 1217 ret = soc_probe_component(card, component); 1218 if (ret < 0) 1219 return ret; 1220 } 1221 } 1222 } 1223 1224 return 0; 1225 } 1226 1227 static void soc_remove_dai_links(struct snd_soc_card *card) 1228 { 1229 struct snd_soc_dai_link *link, *_link; 1230 1231 soc_remove_link_dais(card); 1232 1233 soc_remove_link_components(card); 1234 1235 for_each_card_links_safe(card, link, _link) { 1236 if (link->dobj.type == SND_SOC_DOBJ_DAI_LINK) 1237 dev_warn(card->dev, "Topology forgot to remove link %s?\n", 1238 link->name); 1239 1240 list_del(&link->list); 1241 } 1242 } 1243 1244 static int soc_init_dai_link(struct snd_soc_card *card, 1245 struct snd_soc_dai_link *link) 1246 { 1247 int i; 1248 struct snd_soc_dai_link_component *codec, *platform; 1249 1250 for_each_link_codecs(link, i, codec) { 1251 /* 1252 * Codec must be specified by 1 of name or OF node, 1253 * not both or neither. 1254 */ 1255 if (!!codec->name == !!codec->of_node) { 1256 dev_err(card->dev, "ASoC: Neither/both codec name/of_node are set for %s\n", 1257 link->name); 1258 return -EINVAL; 1259 } 1260 1261 /* Codec DAI name must be specified */ 1262 if (!codec->dai_name) { 1263 dev_err(card->dev, "ASoC: codec_dai_name not set for %s\n", 1264 link->name); 1265 return -EINVAL; 1266 } 1267 1268 /* 1269 * Defer card registration if codec component is not added to 1270 * component list. 1271 */ 1272 if (!soc_find_component(codec)) 1273 return -EPROBE_DEFER; 1274 } 1275 1276 for_each_link_platforms(link, i, platform) { 1277 /* 1278 * Platform may be specified by either name or OF node, but it 1279 * can be left unspecified, then no components will be inserted 1280 * in the rtdcom list 1281 */ 1282 if (!!platform->name == !!platform->of_node) { 1283 dev_err(card->dev, 1284 "ASoC: Neither/both platform name/of_node are set for %s\n", 1285 link->name); 1286 return -EINVAL; 1287 } 1288 1289 /* 1290 * Defer card registration if platform component is not added to 1291 * component list. 1292 */ 1293 if (!soc_find_component(platform)) 1294 return -EPROBE_DEFER; 1295 } 1296 1297 /* FIXME */ 1298 if (link->num_cpus > 1) { 1299 dev_err(card->dev, 1300 "ASoC: multi cpu is not yet supported %s\n", 1301 link->name); 1302 return -EINVAL; 1303 } 1304 1305 /* 1306 * CPU device may be specified by either name or OF node, but 1307 * can be left unspecified, and will be matched based on DAI 1308 * name alone.. 1309 */ 1310 if (link->cpus->name && link->cpus->of_node) { 1311 dev_err(card->dev, 1312 "ASoC: Neither/both cpu name/of_node are set for %s\n", 1313 link->name); 1314 return -EINVAL; 1315 } 1316 1317 /* 1318 * Defer card registartion if cpu dai component is not added to 1319 * component list. 1320 */ 1321 if ((link->cpus->of_node || link->cpus->name) && 1322 !soc_find_component(link->cpus)) 1323 return -EPROBE_DEFER; 1324 1325 /* 1326 * At least one of CPU DAI name or CPU device name/node must be 1327 * specified 1328 */ 1329 if (!link->cpus->dai_name && 1330 !(link->cpus->name || link->cpus->of_node)) { 1331 dev_err(card->dev, 1332 "ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n", 1333 link->name); 1334 return -EINVAL; 1335 } 1336 1337 return 0; 1338 } 1339 1340 void snd_soc_disconnect_sync(struct device *dev) 1341 { 1342 struct snd_soc_component *component = 1343 snd_soc_lookup_component(dev, NULL); 1344 1345 if (!component || !component->card) 1346 return; 1347 1348 snd_card_disconnect_sync(component->card->snd_card); 1349 } 1350 EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync); 1351 1352 /** 1353 * snd_soc_add_dai_link - Add a DAI link dynamically 1354 * @card: The ASoC card to which the DAI link is added 1355 * @dai_link: The new DAI link to add 1356 * 1357 * This function adds a DAI link to the ASoC card's link list. 1358 * 1359 * Note: Topology can use this API to add DAI links when probing the 1360 * topology component. And machine drivers can still define static 1361 * DAI links in dai_link array. 1362 */ 1363 int snd_soc_add_dai_link(struct snd_soc_card *card, 1364 struct snd_soc_dai_link *dai_link) 1365 { 1366 if (dai_link->dobj.type 1367 && dai_link->dobj.type != SND_SOC_DOBJ_DAI_LINK) { 1368 dev_err(card->dev, "Invalid dai link type %d\n", 1369 dai_link->dobj.type); 1370 return -EINVAL; 1371 } 1372 1373 lockdep_assert_held(&client_mutex); 1374 /* 1375 * Notify the machine driver for extra initialization 1376 * on the link created by topology. 1377 */ 1378 if (dai_link->dobj.type && card->add_dai_link) 1379 card->add_dai_link(card, dai_link); 1380 1381 /* see for_each_card_links */ 1382 list_add_tail(&dai_link->list, &card->dai_link_list); 1383 1384 return 0; 1385 } 1386 EXPORT_SYMBOL_GPL(snd_soc_add_dai_link); 1387 1388 /** 1389 * snd_soc_remove_dai_link - Remove a DAI link from the list 1390 * @card: The ASoC card that owns the link 1391 * @dai_link: The DAI link to remove 1392 * 1393 * This function removes a DAI link from the ASoC card's link list. 1394 * 1395 * For DAI links previously added by topology, topology should 1396 * remove them by using the dobj embedded in the link. 1397 */ 1398 void snd_soc_remove_dai_link(struct snd_soc_card *card, 1399 struct snd_soc_dai_link *dai_link) 1400 { 1401 if (dai_link->dobj.type 1402 && dai_link->dobj.type != SND_SOC_DOBJ_DAI_LINK) { 1403 dev_err(card->dev, "Invalid dai link type %d\n", 1404 dai_link->dobj.type); 1405 return; 1406 } 1407 1408 lockdep_assert_held(&client_mutex); 1409 /* 1410 * Notify the machine driver for extra destruction 1411 * on the link created by topology. 1412 */ 1413 if (dai_link->dobj.type && card->remove_dai_link) 1414 card->remove_dai_link(card, dai_link); 1415 1416 list_del(&dai_link->list); 1417 } 1418 EXPORT_SYMBOL_GPL(snd_soc_remove_dai_link); 1419 1420 static void soc_rtd_free(struct snd_soc_pcm_runtime *rtd) 1421 { 1422 if (rtd->dev_registered) { 1423 /* we don't need to call kfree() for rtd->dev */ 1424 device_unregister(rtd->dev); 1425 rtd->dev_registered = 0; 1426 } 1427 } 1428 1429 static void soc_rtd_release(struct device *dev) 1430 { 1431 kfree(dev); 1432 } 1433 1434 static int soc_rtd_init(struct snd_soc_pcm_runtime *rtd, const char *name) 1435 { 1436 int ret = 0; 1437 1438 /* register the rtd device */ 1439 rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL); 1440 if (!rtd->dev) 1441 return -ENOMEM; 1442 rtd->dev->parent = rtd->card->dev; 1443 rtd->dev->release = soc_rtd_release; 1444 rtd->dev->groups = soc_dev_attr_groups; 1445 dev_set_name(rtd->dev, "%s", name); 1446 dev_set_drvdata(rtd->dev, rtd); 1447 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].be_clients); 1448 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].be_clients); 1449 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_PLAYBACK].fe_clients); 1450 INIT_LIST_HEAD(&rtd->dpcm[SNDRV_PCM_STREAM_CAPTURE].fe_clients); 1451 ret = device_register(rtd->dev); 1452 if (ret < 0) { 1453 /* calling put_device() here to free the rtd->dev */ 1454 put_device(rtd->dev); 1455 dev_err(rtd->card->dev, 1456 "ASoC: failed to register runtime device: %d\n", ret); 1457 return ret; 1458 } 1459 rtd->dev_registered = 1; 1460 return 0; 1461 } 1462 1463 static int soc_link_dai_pcm_new(struct snd_soc_dai **dais, int num_dais, 1464 struct snd_soc_pcm_runtime *rtd) 1465 { 1466 int i, ret = 0; 1467 1468 for (i = 0; i < num_dais; ++i) { 1469 struct snd_soc_dai_driver *drv = dais[i]->driver; 1470 1471 if (drv->pcm_new) 1472 ret = drv->pcm_new(rtd, dais[i]); 1473 if (ret < 0) { 1474 dev_err(dais[i]->dev, 1475 "ASoC: Failed to bind %s with pcm device\n", 1476 dais[i]->name); 1477 return ret; 1478 } 1479 } 1480 1481 return 0; 1482 } 1483 1484 static int soc_link_init(struct snd_soc_card *card, 1485 struct snd_soc_pcm_runtime *rtd) 1486 { 1487 struct snd_soc_dai_link *dai_link = rtd->dai_link; 1488 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 1489 struct snd_soc_rtdcom_list *rtdcom; 1490 struct snd_soc_component *component; 1491 int ret, num; 1492 1493 /* set default power off timeout */ 1494 rtd->pmdown_time = pmdown_time; 1495 1496 /* do machine specific initialization */ 1497 if (dai_link->init) { 1498 ret = dai_link->init(rtd); 1499 if (ret < 0) { 1500 dev_err(card->dev, "ASoC: failed to init %s: %d\n", 1501 dai_link->name, ret); 1502 return ret; 1503 } 1504 } 1505 1506 if (dai_link->dai_fmt) { 1507 ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt); 1508 if (ret) 1509 return ret; 1510 } 1511 1512 ret = soc_rtd_init(rtd, dai_link->name); 1513 if (ret) 1514 return ret; 1515 1516 /* add DPCM sysfs entries */ 1517 soc_dpcm_debugfs_add(rtd); 1518 1519 num = rtd->num; 1520 1521 /* 1522 * most drivers will register their PCMs using DAI link ordering but 1523 * topology based drivers can use the DAI link id field to set PCM 1524 * device number and then use rtd + a base offset of the BEs. 1525 */ 1526 for_each_rtdcom(rtd, rtdcom) { 1527 component = rtdcom->component; 1528 1529 if (!component->driver->use_dai_pcm_id) 1530 continue; 1531 1532 if (rtd->dai_link->no_pcm) 1533 num += component->driver->be_pcm_base; 1534 else 1535 num = rtd->dai_link->id; 1536 } 1537 1538 /* create compress_device if possible */ 1539 ret = snd_soc_dai_compress_new(cpu_dai, rtd, num); 1540 if (ret != -ENOTSUPP) { 1541 if (ret < 0) 1542 dev_err(card->dev, "ASoC: can't create compress %s\n", 1543 dai_link->stream_name); 1544 return ret; 1545 } 1546 1547 /* create the pcm */ 1548 ret = soc_new_pcm(rtd, num); 1549 if (ret < 0) { 1550 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", 1551 dai_link->stream_name, ret); 1552 return ret; 1553 } 1554 ret = soc_link_dai_pcm_new(&cpu_dai, 1, rtd); 1555 if (ret < 0) 1556 return ret; 1557 ret = soc_link_dai_pcm_new(rtd->codec_dais, 1558 rtd->num_codecs, rtd); 1559 return ret; 1560 } 1561 1562 static void soc_unbind_aux_dev(struct snd_soc_card *card) 1563 { 1564 struct snd_soc_component *component, *_component; 1565 1566 for_each_card_auxs_safe(card, component, _component) { 1567 component->init = NULL; 1568 list_del(&component->card_aux_list); 1569 } 1570 } 1571 1572 static int soc_bind_aux_dev(struct snd_soc_card *card) 1573 { 1574 struct snd_soc_component *component; 1575 struct snd_soc_aux_dev *aux; 1576 int i; 1577 1578 for_each_card_pre_auxs(card, i, aux) { 1579 /* codecs, usually analog devices */ 1580 component = soc_find_component(&aux->dlc); 1581 if (!component) 1582 return -EPROBE_DEFER; 1583 1584 component->init = aux->init; 1585 /* see for_each_card_auxs */ 1586 list_add(&component->card_aux_list, &card->aux_comp_list); 1587 } 1588 return 0; 1589 } 1590 1591 static int soc_probe_aux_devices(struct snd_soc_card *card) 1592 { 1593 struct snd_soc_component *comp; 1594 int order; 1595 int ret; 1596 1597 for_each_comp_order(order) { 1598 for_each_card_auxs(card, comp) { 1599 if (comp->driver->probe_order == order) { 1600 ret = soc_probe_component(card, comp); 1601 if (ret < 0) { 1602 dev_err(card->dev, 1603 "ASoC: failed to probe aux component %s %d\n", 1604 comp->name, ret); 1605 return ret; 1606 } 1607 } 1608 } 1609 } 1610 1611 return 0; 1612 } 1613 1614 static void soc_remove_aux_devices(struct snd_soc_card *card) 1615 { 1616 struct snd_soc_component *comp, *_comp; 1617 int order; 1618 1619 for_each_comp_order(order) { 1620 for_each_card_auxs_safe(card, comp, _comp) { 1621 if (comp->driver->remove_order == order) 1622 soc_remove_component(comp); 1623 } 1624 } 1625 } 1626 1627 /** 1628 * snd_soc_runtime_set_dai_fmt() - Change DAI link format for a ASoC runtime 1629 * @rtd: The runtime for which the DAI link format should be changed 1630 * @dai_fmt: The new DAI link format 1631 * 1632 * This function updates the DAI link format for all DAIs connected to the DAI 1633 * link for the specified runtime. 1634 * 1635 * Note: For setups with a static format set the dai_fmt field in the 1636 * corresponding snd_dai_link struct instead of using this function. 1637 * 1638 * Returns 0 on success, otherwise a negative error code. 1639 */ 1640 int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, 1641 unsigned int dai_fmt) 1642 { 1643 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 1644 struct snd_soc_dai *codec_dai; 1645 unsigned int i; 1646 int ret; 1647 1648 for_each_rtd_codec_dai(rtd, i, codec_dai) { 1649 ret = snd_soc_dai_set_fmt(codec_dai, dai_fmt); 1650 if (ret != 0 && ret != -ENOTSUPP) { 1651 dev_warn(codec_dai->dev, 1652 "ASoC: Failed to set DAI format: %d\n", ret); 1653 return ret; 1654 } 1655 } 1656 1657 /* 1658 * Flip the polarity for the "CPU" end of a CODEC<->CODEC link 1659 * the component which has non_legacy_dai_naming is Codec 1660 */ 1661 if (cpu_dai->component->driver->non_legacy_dai_naming) { 1662 unsigned int inv_dai_fmt; 1663 1664 inv_dai_fmt = dai_fmt & ~SND_SOC_DAIFMT_MASTER_MASK; 1665 switch (dai_fmt & SND_SOC_DAIFMT_MASTER_MASK) { 1666 case SND_SOC_DAIFMT_CBM_CFM: 1667 inv_dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; 1668 break; 1669 case SND_SOC_DAIFMT_CBM_CFS: 1670 inv_dai_fmt |= SND_SOC_DAIFMT_CBS_CFM; 1671 break; 1672 case SND_SOC_DAIFMT_CBS_CFM: 1673 inv_dai_fmt |= SND_SOC_DAIFMT_CBM_CFS; 1674 break; 1675 case SND_SOC_DAIFMT_CBS_CFS: 1676 inv_dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; 1677 break; 1678 } 1679 1680 dai_fmt = inv_dai_fmt; 1681 } 1682 1683 ret = snd_soc_dai_set_fmt(cpu_dai, dai_fmt); 1684 if (ret != 0 && ret != -ENOTSUPP) { 1685 dev_warn(cpu_dai->dev, 1686 "ASoC: Failed to set DAI format: %d\n", ret); 1687 return ret; 1688 } 1689 1690 return 0; 1691 } 1692 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt); 1693 1694 #ifdef CONFIG_DMI 1695 /* 1696 * Trim special characters, and replace '-' with '_' since '-' is used to 1697 * separate different DMI fields in the card long name. Only number and 1698 * alphabet characters and a few separator characters are kept. 1699 */ 1700 static void cleanup_dmi_name(char *name) 1701 { 1702 int i, j = 0; 1703 1704 for (i = 0; name[i]; i++) { 1705 if (isalnum(name[i]) || (name[i] == '.') 1706 || (name[i] == '_')) 1707 name[j++] = name[i]; 1708 else if (name[i] == '-') 1709 name[j++] = '_'; 1710 } 1711 1712 name[j] = '\0'; 1713 } 1714 1715 /* 1716 * Check if a DMI field is valid, i.e. not containing any string 1717 * in the black list. 1718 */ 1719 static int is_dmi_valid(const char *field) 1720 { 1721 int i = 0; 1722 1723 while (dmi_blacklist[i]) { 1724 if (strstr(field, dmi_blacklist[i])) 1725 return 0; 1726 i++; 1727 } 1728 1729 return 1; 1730 } 1731 1732 /** 1733 * snd_soc_set_dmi_name() - Register DMI names to card 1734 * @card: The card to register DMI names 1735 * @flavour: The flavour "differentiator" for the card amongst its peers. 1736 * 1737 * An Intel machine driver may be used by many different devices but are 1738 * difficult for userspace to differentiate, since machine drivers ususally 1739 * use their own name as the card short name and leave the card long name 1740 * blank. To differentiate such devices and fix bugs due to lack of 1741 * device-specific configurations, this function allows DMI info to be used 1742 * as the sound card long name, in the format of 1743 * "vendor-product-version-board" 1744 * (Character '-' is used to separate different DMI fields here). 1745 * This will help the user space to load the device-specific Use Case Manager 1746 * (UCM) configurations for the card. 1747 * 1748 * Possible card long names may be: 1749 * DellInc.-XPS139343-01-0310JH 1750 * ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA 1751 * Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX 1752 * 1753 * This function also supports flavoring the card longname to provide 1754 * the extra differentiation, like "vendor-product-version-board-flavor". 1755 * 1756 * We only keep number and alphabet characters and a few separator characters 1757 * in the card long name since UCM in the user space uses the card long names 1758 * as card configuration directory names and AudoConf cannot support special 1759 * charactors like SPACE. 1760 * 1761 * Returns 0 on success, otherwise a negative error code. 1762 */ 1763 int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) 1764 { 1765 const char *vendor, *product, *product_version, *board; 1766 size_t longname_buf_size = sizeof(card->snd_card->longname); 1767 size_t len; 1768 1769 if (card->long_name) 1770 return 0; /* long name already set by driver or from DMI */ 1771 1772 /* make up dmi long name as: vendor.product.version.board */ 1773 vendor = dmi_get_system_info(DMI_BOARD_VENDOR); 1774 if (!vendor || !is_dmi_valid(vendor)) { 1775 dev_warn(card->dev, "ASoC: no DMI vendor name!\n"); 1776 return 0; 1777 } 1778 1779 snprintf(card->dmi_longname, sizeof(card->snd_card->longname), 1780 "%s", vendor); 1781 cleanup_dmi_name(card->dmi_longname); 1782 1783 product = dmi_get_system_info(DMI_PRODUCT_NAME); 1784 if (product && is_dmi_valid(product)) { 1785 len = strlen(card->dmi_longname); 1786 snprintf(card->dmi_longname + len, 1787 longname_buf_size - len, 1788 "-%s", product); 1789 1790 len++; /* skip the separator "-" */ 1791 if (len < longname_buf_size) 1792 cleanup_dmi_name(card->dmi_longname + len); 1793 1794 /* 1795 * some vendors like Lenovo may only put a self-explanatory 1796 * name in the product version field 1797 */ 1798 product_version = dmi_get_system_info(DMI_PRODUCT_VERSION); 1799 if (product_version && is_dmi_valid(product_version)) { 1800 len = strlen(card->dmi_longname); 1801 snprintf(card->dmi_longname + len, 1802 longname_buf_size - len, 1803 "-%s", product_version); 1804 1805 len++; 1806 if (len < longname_buf_size) 1807 cleanup_dmi_name(card->dmi_longname + len); 1808 } 1809 } 1810 1811 board = dmi_get_system_info(DMI_BOARD_NAME); 1812 if (board && is_dmi_valid(board)) { 1813 len = strlen(card->dmi_longname); 1814 snprintf(card->dmi_longname + len, 1815 longname_buf_size - len, 1816 "-%s", board); 1817 1818 len++; 1819 if (len < longname_buf_size) 1820 cleanup_dmi_name(card->dmi_longname + len); 1821 } else if (!product) { 1822 /* fall back to using legacy name */ 1823 dev_warn(card->dev, "ASoC: no DMI board/product name!\n"); 1824 return 0; 1825 } 1826 1827 /* Add flavour to dmi long name */ 1828 if (flavour) { 1829 len = strlen(card->dmi_longname); 1830 snprintf(card->dmi_longname + len, 1831 longname_buf_size - len, 1832 "-%s", flavour); 1833 1834 len++; 1835 if (len < longname_buf_size) 1836 cleanup_dmi_name(card->dmi_longname + len); 1837 } 1838 1839 /* set the card long name */ 1840 card->long_name = card->dmi_longname; 1841 1842 return 0; 1843 } 1844 EXPORT_SYMBOL_GPL(snd_soc_set_dmi_name); 1845 #endif /* CONFIG_DMI */ 1846 1847 static void soc_check_tplg_fes(struct snd_soc_card *card) 1848 { 1849 struct snd_soc_component *component; 1850 const struct snd_soc_component_driver *comp_drv; 1851 struct snd_soc_dai_link *dai_link; 1852 int i; 1853 1854 for_each_component(component) { 1855 1856 /* does this component override FEs ? */ 1857 if (!component->driver->ignore_machine) 1858 continue; 1859 1860 /* for this machine ? */ 1861 if (!strcmp(component->driver->ignore_machine, 1862 card->dev->driver->name)) 1863 goto match; 1864 if (strcmp(component->driver->ignore_machine, 1865 dev_name(card->dev))) 1866 continue; 1867 match: 1868 /* machine matches, so override the rtd data */ 1869 for_each_card_prelinks(card, i, dai_link) { 1870 1871 /* ignore this FE */ 1872 if (dai_link->dynamic) { 1873 dai_link->ignore = true; 1874 continue; 1875 } 1876 1877 dev_info(card->dev, "info: override FE DAI link %s\n", 1878 card->dai_link[i].name); 1879 1880 /* override platform component */ 1881 if (!dai_link->platforms) { 1882 dev_err(card->dev, "init platform error"); 1883 continue; 1884 } 1885 dai_link->platforms->name = component->name; 1886 1887 /* convert non BE into BE */ 1888 dai_link->no_pcm = 1; 1889 1890 /* override any BE fixups */ 1891 dai_link->be_hw_params_fixup = 1892 component->driver->be_hw_params_fixup; 1893 1894 /* 1895 * most BE links don't set stream name, so set it to 1896 * dai link name if it's NULL to help bind widgets. 1897 */ 1898 if (!dai_link->stream_name) 1899 dai_link->stream_name = dai_link->name; 1900 } 1901 1902 /* Inform userspace we are using alternate topology */ 1903 if (component->driver->topology_name_prefix) { 1904 1905 /* topology shortname created? */ 1906 if (!card->topology_shortname_created) { 1907 comp_drv = component->driver; 1908 1909 snprintf(card->topology_shortname, 32, "%s-%s", 1910 comp_drv->topology_name_prefix, 1911 card->name); 1912 card->topology_shortname_created = true; 1913 } 1914 1915 /* use topology shortname */ 1916 card->name = card->topology_shortname; 1917 } 1918 } 1919 } 1920 1921 static void soc_cleanup_card_resources(struct snd_soc_card *card) 1922 { 1923 /* free the ALSA card at first; this syncs with pending operations */ 1924 if (card->snd_card) { 1925 snd_card_free(card->snd_card); 1926 card->snd_card = NULL; 1927 } 1928 1929 /* remove and free each DAI */ 1930 soc_remove_dai_links(card); 1931 soc_remove_pcm_runtimes(card); 1932 1933 /* remove auxiliary devices */ 1934 soc_remove_aux_devices(card); 1935 soc_unbind_aux_dev(card); 1936 1937 snd_soc_dapm_free(&card->dapm); 1938 soc_cleanup_card_debugfs(card); 1939 1940 /* remove the card */ 1941 if (card->remove) 1942 card->remove(card); 1943 } 1944 1945 static int snd_soc_instantiate_card(struct snd_soc_card *card) 1946 { 1947 struct snd_soc_pcm_runtime *rtd; 1948 struct snd_soc_dai_link *dai_link; 1949 int ret, i; 1950 1951 mutex_lock(&client_mutex); 1952 for_each_card_prelinks(card, i, dai_link) { 1953 ret = soc_init_dai_link(card, dai_link); 1954 if (ret) { 1955 dev_err(card->dev, "ASoC: failed to init link %s: %d\n", 1956 dai_link->name, ret); 1957 mutex_unlock(&client_mutex); 1958 return ret; 1959 } 1960 } 1961 mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); 1962 1963 snd_soc_dapm_init(&card->dapm, card, NULL); 1964 1965 /* check whether any platform is ignore machine FE and using topology */ 1966 soc_check_tplg_fes(card); 1967 1968 /* bind DAIs */ 1969 for_each_card_prelinks(card, i, dai_link) { 1970 ret = soc_bind_dai_link(card, dai_link); 1971 if (ret != 0) 1972 goto probe_end; 1973 } 1974 1975 /* bind aux_devs too */ 1976 ret = soc_bind_aux_dev(card); 1977 if (ret < 0) 1978 goto probe_end; 1979 1980 /* add predefined DAI links to the list */ 1981 for_each_card_prelinks(card, i, dai_link) { 1982 ret = snd_soc_add_dai_link(card, dai_link); 1983 if (ret < 0) 1984 goto probe_end; 1985 } 1986 1987 /* card bind complete so register a sound card */ 1988 ret = snd_card_new(card->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, 1989 card->owner, 0, &card->snd_card); 1990 if (ret < 0) { 1991 dev_err(card->dev, 1992 "ASoC: can't create sound card for card %s: %d\n", 1993 card->name, ret); 1994 goto probe_end; 1995 } 1996 1997 soc_init_card_debugfs(card); 1998 1999 soc_resume_init(card); 2000 2001 ret = snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, 2002 card->num_dapm_widgets); 2003 if (ret < 0) 2004 goto probe_end; 2005 2006 ret = snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets, 2007 card->num_of_dapm_widgets); 2008 if (ret < 0) 2009 goto probe_end; 2010 2011 /* initialise the sound card only once */ 2012 if (card->probe) { 2013 ret = card->probe(card); 2014 if (ret < 0) 2015 goto probe_end; 2016 } 2017 2018 /* probe all components used by DAI links on this card */ 2019 ret = soc_probe_link_components(card); 2020 if (ret < 0) { 2021 dev_err(card->dev, 2022 "ASoC: failed to instantiate card %d\n", ret); 2023 goto probe_end; 2024 } 2025 2026 /* probe auxiliary components */ 2027 ret = soc_probe_aux_devices(card); 2028 if (ret < 0) 2029 goto probe_end; 2030 2031 /* 2032 * Find new DAI links added during probing components and bind them. 2033 * Components with topology may bring new DAIs and DAI links. 2034 */ 2035 for_each_card_links(card, dai_link) { 2036 if (soc_is_dai_link_bound(card, dai_link)) 2037 continue; 2038 2039 ret = soc_init_dai_link(card, dai_link); 2040 if (ret) 2041 goto probe_end; 2042 ret = soc_bind_dai_link(card, dai_link); 2043 if (ret) 2044 goto probe_end; 2045 } 2046 2047 /* probe all DAI links on this card */ 2048 ret = soc_probe_link_dais(card); 2049 if (ret < 0) { 2050 dev_err(card->dev, 2051 "ASoC: failed to instantiate card %d\n", ret); 2052 goto probe_end; 2053 } 2054 2055 for_each_card_rtds(card, rtd) 2056 soc_link_init(card, rtd); 2057 2058 snd_soc_dapm_link_dai_widgets(card); 2059 snd_soc_dapm_connect_dai_link_widgets(card); 2060 2061 ret = snd_soc_add_card_controls(card, card->controls, 2062 card->num_controls); 2063 if (ret < 0) 2064 goto probe_end; 2065 2066 ret = snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, 2067 card->num_dapm_routes); 2068 if (ret < 0) 2069 goto probe_end; 2070 2071 ret = snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes, 2072 card->num_of_dapm_routes); 2073 if (ret < 0) 2074 goto probe_end; 2075 2076 /* try to set some sane longname if DMI is available */ 2077 snd_soc_set_dmi_name(card, NULL); 2078 2079 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), 2080 "%s", card->name); 2081 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), 2082 "%s", card->long_name ? card->long_name : card->name); 2083 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), 2084 "%s", card->driver_name ? card->driver_name : card->name); 2085 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { 2086 switch (card->snd_card->driver[i]) { 2087 case '_': 2088 case '-': 2089 case '\0': 2090 break; 2091 default: 2092 if (!isalnum(card->snd_card->driver[i])) 2093 card->snd_card->driver[i] = '_'; 2094 break; 2095 } 2096 } 2097 2098 if (card->late_probe) { 2099 ret = card->late_probe(card); 2100 if (ret < 0) { 2101 dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n", 2102 card->name, ret); 2103 goto probe_end; 2104 } 2105 } 2106 2107 snd_soc_dapm_new_widgets(card); 2108 2109 ret = snd_card_register(card->snd_card); 2110 if (ret < 0) { 2111 dev_err(card->dev, "ASoC: failed to register soundcard %d\n", 2112 ret); 2113 goto probe_end; 2114 } 2115 2116 card->instantiated = 1; 2117 dapm_mark_endpoints_dirty(card); 2118 snd_soc_dapm_sync(&card->dapm); 2119 2120 probe_end: 2121 if (ret < 0) 2122 soc_cleanup_card_resources(card); 2123 2124 mutex_unlock(&card->mutex); 2125 mutex_unlock(&client_mutex); 2126 2127 return ret; 2128 } 2129 2130 /* probes a new socdev */ 2131 static int soc_probe(struct platform_device *pdev) 2132 { 2133 struct snd_soc_card *card = platform_get_drvdata(pdev); 2134 2135 /* 2136 * no card, so machine driver should be registering card 2137 * we should not be here in that case so ret error 2138 */ 2139 if (!card) 2140 return -EINVAL; 2141 2142 dev_warn(&pdev->dev, 2143 "ASoC: machine %s should use snd_soc_register_card()\n", 2144 card->name); 2145 2146 /* Bodge while we unpick instantiation */ 2147 card->dev = &pdev->dev; 2148 2149 return snd_soc_register_card(card); 2150 } 2151 2152 /* removes a socdev */ 2153 static int soc_remove(struct platform_device *pdev) 2154 { 2155 struct snd_soc_card *card = platform_get_drvdata(pdev); 2156 2157 snd_soc_unregister_card(card); 2158 return 0; 2159 } 2160 2161 int snd_soc_poweroff(struct device *dev) 2162 { 2163 struct snd_soc_card *card = dev_get_drvdata(dev); 2164 struct snd_soc_pcm_runtime *rtd; 2165 2166 if (!card->instantiated) 2167 return 0; 2168 2169 /* 2170 * Flush out pmdown_time work - we actually do want to run it 2171 * now, we're shutting down so no imminent restart. 2172 */ 2173 snd_soc_flush_all_delayed_work(card); 2174 2175 snd_soc_dapm_shutdown(card); 2176 2177 /* deactivate pins to sleep state */ 2178 for_each_card_rtds(card, rtd) { 2179 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 2180 struct snd_soc_dai *codec_dai; 2181 int i; 2182 2183 pinctrl_pm_select_sleep_state(cpu_dai->dev); 2184 for_each_rtd_codec_dai(rtd, i, codec_dai) { 2185 pinctrl_pm_select_sleep_state(codec_dai->dev); 2186 } 2187 } 2188 2189 return 0; 2190 } 2191 EXPORT_SYMBOL_GPL(snd_soc_poweroff); 2192 2193 const struct dev_pm_ops snd_soc_pm_ops = { 2194 .suspend = snd_soc_suspend, 2195 .resume = snd_soc_resume, 2196 .freeze = snd_soc_suspend, 2197 .thaw = snd_soc_resume, 2198 .poweroff = snd_soc_poweroff, 2199 .restore = snd_soc_resume, 2200 }; 2201 EXPORT_SYMBOL_GPL(snd_soc_pm_ops); 2202 2203 /* ASoC platform driver */ 2204 static struct platform_driver soc_driver = { 2205 .driver = { 2206 .name = "soc-audio", 2207 .pm = &snd_soc_pm_ops, 2208 }, 2209 .probe = soc_probe, 2210 .remove = soc_remove, 2211 }; 2212 2213 /** 2214 * snd_soc_cnew - create new control 2215 * @_template: control template 2216 * @data: control private data 2217 * @long_name: control long name 2218 * @prefix: control name prefix 2219 * 2220 * Create a new mixer control from a template control. 2221 * 2222 * Returns 0 for success, else error. 2223 */ 2224 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 2225 void *data, const char *long_name, 2226 const char *prefix) 2227 { 2228 struct snd_kcontrol_new template; 2229 struct snd_kcontrol *kcontrol; 2230 char *name = NULL; 2231 2232 memcpy(&template, _template, sizeof(template)); 2233 template.index = 0; 2234 2235 if (!long_name) 2236 long_name = template.name; 2237 2238 if (prefix) { 2239 name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name); 2240 if (!name) 2241 return NULL; 2242 2243 template.name = name; 2244 } else { 2245 template.name = long_name; 2246 } 2247 2248 kcontrol = snd_ctl_new1(&template, data); 2249 2250 kfree(name); 2251 2252 return kcontrol; 2253 } 2254 EXPORT_SYMBOL_GPL(snd_soc_cnew); 2255 2256 static int snd_soc_add_controls(struct snd_card *card, struct device *dev, 2257 const struct snd_kcontrol_new *controls, int num_controls, 2258 const char *prefix, void *data) 2259 { 2260 int err, i; 2261 2262 for (i = 0; i < num_controls; i++) { 2263 const struct snd_kcontrol_new *control = &controls[i]; 2264 2265 err = snd_ctl_add(card, snd_soc_cnew(control, data, 2266 control->name, prefix)); 2267 if (err < 0) { 2268 dev_err(dev, "ASoC: Failed to add %s: %d\n", 2269 control->name, err); 2270 return err; 2271 } 2272 } 2273 2274 return 0; 2275 } 2276 2277 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card, 2278 const char *name) 2279 { 2280 struct snd_card *card = soc_card->snd_card; 2281 struct snd_kcontrol *kctl; 2282 2283 if (unlikely(!name)) 2284 return NULL; 2285 2286 list_for_each_entry(kctl, &card->controls, list) 2287 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) 2288 return kctl; 2289 return NULL; 2290 } 2291 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol); 2292 2293 /** 2294 * snd_soc_add_component_controls - Add an array of controls to a component. 2295 * 2296 * @component: Component to add controls to 2297 * @controls: Array of controls to add 2298 * @num_controls: Number of elements in the array 2299 * 2300 * Return: 0 for success, else error. 2301 */ 2302 int snd_soc_add_component_controls(struct snd_soc_component *component, 2303 const struct snd_kcontrol_new *controls, unsigned int num_controls) 2304 { 2305 struct snd_card *card = component->card->snd_card; 2306 2307 return snd_soc_add_controls(card, component->dev, controls, 2308 num_controls, component->name_prefix, component); 2309 } 2310 EXPORT_SYMBOL_GPL(snd_soc_add_component_controls); 2311 2312 /** 2313 * snd_soc_add_card_controls - add an array of controls to a SoC card. 2314 * Convenience function to add a list of controls. 2315 * 2316 * @soc_card: SoC card to add controls to 2317 * @controls: array of controls to add 2318 * @num_controls: number of elements in the array 2319 * 2320 * Return 0 for success, else error. 2321 */ 2322 int snd_soc_add_card_controls(struct snd_soc_card *soc_card, 2323 const struct snd_kcontrol_new *controls, int num_controls) 2324 { 2325 struct snd_card *card = soc_card->snd_card; 2326 2327 return snd_soc_add_controls(card, soc_card->dev, controls, num_controls, 2328 NULL, soc_card); 2329 } 2330 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls); 2331 2332 /** 2333 * snd_soc_add_dai_controls - add an array of controls to a DAI. 2334 * Convienience function to add a list of controls. 2335 * 2336 * @dai: DAI to add controls to 2337 * @controls: array of controls to add 2338 * @num_controls: number of elements in the array 2339 * 2340 * Return 0 for success, else error. 2341 */ 2342 int snd_soc_add_dai_controls(struct snd_soc_dai *dai, 2343 const struct snd_kcontrol_new *controls, int num_controls) 2344 { 2345 struct snd_card *card = dai->component->card->snd_card; 2346 2347 return snd_soc_add_controls(card, dai->dev, controls, num_controls, 2348 NULL, dai); 2349 } 2350 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls); 2351 2352 static int snd_soc_bind_card(struct snd_soc_card *card) 2353 { 2354 struct snd_soc_pcm_runtime *rtd; 2355 int ret; 2356 2357 ret = snd_soc_instantiate_card(card); 2358 if (ret != 0) 2359 return ret; 2360 2361 /* deactivate pins to sleep state */ 2362 for_each_card_rtds(card, rtd) { 2363 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 2364 struct snd_soc_dai *codec_dai; 2365 int j; 2366 2367 for_each_rtd_codec_dai(rtd, j, codec_dai) { 2368 if (!codec_dai->active) 2369 pinctrl_pm_select_sleep_state(codec_dai->dev); 2370 } 2371 2372 if (!cpu_dai->active) 2373 pinctrl_pm_select_sleep_state(cpu_dai->dev); 2374 } 2375 2376 return ret; 2377 } 2378 2379 /** 2380 * snd_soc_register_card - Register a card with the ASoC core 2381 * 2382 * @card: Card to register 2383 * 2384 */ 2385 int snd_soc_register_card(struct snd_soc_card *card) 2386 { 2387 if (!card->name || !card->dev) 2388 return -EINVAL; 2389 2390 dev_set_drvdata(card->dev, card); 2391 2392 INIT_LIST_HEAD(&card->widgets); 2393 INIT_LIST_HEAD(&card->paths); 2394 INIT_LIST_HEAD(&card->dapm_list); 2395 INIT_LIST_HEAD(&card->aux_comp_list); 2396 INIT_LIST_HEAD(&card->component_dev_list); 2397 INIT_LIST_HEAD(&card->list); 2398 INIT_LIST_HEAD(&card->dai_link_list); 2399 INIT_LIST_HEAD(&card->rtd_list); 2400 INIT_LIST_HEAD(&card->dapm_dirty); 2401 INIT_LIST_HEAD(&card->dobj_list); 2402 2403 card->num_rtd = 0; 2404 card->instantiated = 0; 2405 mutex_init(&card->mutex); 2406 mutex_init(&card->dapm_mutex); 2407 mutex_init(&card->pcm_mutex); 2408 spin_lock_init(&card->dpcm_lock); 2409 2410 return snd_soc_bind_card(card); 2411 } 2412 EXPORT_SYMBOL_GPL(snd_soc_register_card); 2413 2414 static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister) 2415 { 2416 if (card->instantiated) { 2417 card->instantiated = false; 2418 snd_soc_dapm_shutdown(card); 2419 snd_soc_flush_all_delayed_work(card); 2420 2421 /* remove all components used by DAI links on this card */ 2422 soc_remove_link_components(card); 2423 2424 soc_cleanup_card_resources(card); 2425 if (!unregister) 2426 list_add(&card->list, &unbind_card_list); 2427 } else { 2428 if (unregister) 2429 list_del(&card->list); 2430 } 2431 } 2432 2433 /** 2434 * snd_soc_unregister_card - Unregister a card with the ASoC core 2435 * 2436 * @card: Card to unregister 2437 * 2438 */ 2439 int snd_soc_unregister_card(struct snd_soc_card *card) 2440 { 2441 mutex_lock(&client_mutex); 2442 snd_soc_unbind_card(card, true); 2443 mutex_unlock(&client_mutex); 2444 dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); 2445 2446 return 0; 2447 } 2448 EXPORT_SYMBOL_GPL(snd_soc_unregister_card); 2449 2450 /* 2451 * Simplify DAI link configuration by removing ".-1" from device names 2452 * and sanitizing names. 2453 */ 2454 static char *fmt_single_name(struct device *dev, int *id) 2455 { 2456 char *found, name[NAME_SIZE]; 2457 int id1, id2; 2458 2459 if (dev_name(dev) == NULL) 2460 return NULL; 2461 2462 strlcpy(name, dev_name(dev), NAME_SIZE); 2463 2464 /* are we a "%s.%d" name (platform and SPI components) */ 2465 found = strstr(name, dev->driver->name); 2466 if (found) { 2467 /* get ID */ 2468 if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) { 2469 2470 /* discard ID from name if ID == -1 */ 2471 if (*id == -1) 2472 found[strlen(dev->driver->name)] = '\0'; 2473 } 2474 2475 } else { 2476 /* I2C component devices are named "bus-addr" */ 2477 if (sscanf(name, "%x-%x", &id1, &id2) == 2) { 2478 char tmp[NAME_SIZE]; 2479 2480 /* create unique ID number from I2C addr and bus */ 2481 *id = ((id1 & 0xffff) << 16) + id2; 2482 2483 /* sanitize component name for DAI link creation */ 2484 snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, 2485 name); 2486 strlcpy(name, tmp, NAME_SIZE); 2487 } else 2488 *id = 0; 2489 } 2490 2491 return kstrdup(name, GFP_KERNEL); 2492 } 2493 2494 /* 2495 * Simplify DAI link naming for single devices with multiple DAIs by removing 2496 * any ".-1" and using the DAI name (instead of device name). 2497 */ 2498 static inline char *fmt_multiple_name(struct device *dev, 2499 struct snd_soc_dai_driver *dai_drv) 2500 { 2501 if (dai_drv->name == NULL) { 2502 dev_err(dev, 2503 "ASoC: error - multiple DAI %s registered with no name\n", 2504 dev_name(dev)); 2505 return NULL; 2506 } 2507 2508 return kstrdup(dai_drv->name, GFP_KERNEL); 2509 } 2510 2511 /** 2512 * snd_soc_unregister_dai - Unregister DAIs from the ASoC core 2513 * 2514 * @component: The component for which the DAIs should be unregistered 2515 */ 2516 static void snd_soc_unregister_dais(struct snd_soc_component *component) 2517 { 2518 struct snd_soc_dai *dai, *_dai; 2519 2520 for_each_component_dais_safe(component, dai, _dai) { 2521 dev_dbg(component->dev, "ASoC: Unregistered DAI '%s'\n", 2522 dai->name); 2523 list_del(&dai->list); 2524 kfree(dai->name); 2525 kfree(dai); 2526 } 2527 } 2528 2529 /* Create a DAI and add it to the component's DAI list */ 2530 static struct snd_soc_dai *soc_add_dai(struct snd_soc_component *component, 2531 struct snd_soc_dai_driver *dai_drv, 2532 bool legacy_dai_naming) 2533 { 2534 struct device *dev = component->dev; 2535 struct snd_soc_dai *dai; 2536 2537 dev_dbg(dev, "ASoC: dynamically register DAI %s\n", dev_name(dev)); 2538 2539 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 2540 if (dai == NULL) 2541 return NULL; 2542 2543 /* 2544 * Back in the old days when we still had component-less DAIs, 2545 * instead of having a static name, component-less DAIs would 2546 * inherit the name of the parent device so it is possible to 2547 * register multiple instances of the DAI. We still need to keep 2548 * the same naming style even though those DAIs are not 2549 * component-less anymore. 2550 */ 2551 if (legacy_dai_naming && 2552 (dai_drv->id == 0 || dai_drv->name == NULL)) { 2553 dai->name = fmt_single_name(dev, &dai->id); 2554 } else { 2555 dai->name = fmt_multiple_name(dev, dai_drv); 2556 if (dai_drv->id) 2557 dai->id = dai_drv->id; 2558 else 2559 dai->id = component->num_dai; 2560 } 2561 if (dai->name == NULL) { 2562 kfree(dai); 2563 return NULL; 2564 } 2565 2566 dai->component = component; 2567 dai->dev = dev; 2568 dai->driver = dai_drv; 2569 if (!dai->driver->ops) 2570 dai->driver->ops = &null_dai_ops; 2571 2572 /* see for_each_component_dais */ 2573 list_add_tail(&dai->list, &component->dai_list); 2574 component->num_dai++; 2575 2576 dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name); 2577 return dai; 2578 } 2579 2580 /** 2581 * snd_soc_register_dais - Register a DAI with the ASoC core 2582 * 2583 * @component: The component the DAIs are registered for 2584 * @dai_drv: DAI driver to use for the DAIs 2585 * @count: Number of DAIs 2586 */ 2587 static int snd_soc_register_dais(struct snd_soc_component *component, 2588 struct snd_soc_dai_driver *dai_drv, 2589 size_t count) 2590 { 2591 struct device *dev = component->dev; 2592 struct snd_soc_dai *dai; 2593 unsigned int i; 2594 int ret; 2595 2596 dev_dbg(dev, "ASoC: dai register %s #%zu\n", dev_name(dev), count); 2597 2598 for (i = 0; i < count; i++) { 2599 2600 dai = soc_add_dai(component, dai_drv + i, count == 1 && 2601 !component->driver->non_legacy_dai_naming); 2602 if (dai == NULL) { 2603 ret = -ENOMEM; 2604 goto err; 2605 } 2606 } 2607 2608 return 0; 2609 2610 err: 2611 snd_soc_unregister_dais(component); 2612 2613 return ret; 2614 } 2615 2616 /** 2617 * snd_soc_register_dai - Register a DAI dynamically & create its widgets 2618 * 2619 * @component: The component the DAIs are registered for 2620 * @dai_drv: DAI driver to use for the DAI 2621 * 2622 * Topology can use this API to register DAIs when probing a component. 2623 * These DAIs's widgets will be freed in the card cleanup and the DAIs 2624 * will be freed in the component cleanup. 2625 */ 2626 int snd_soc_register_dai(struct snd_soc_component *component, 2627 struct snd_soc_dai_driver *dai_drv) 2628 { 2629 struct snd_soc_dapm_context *dapm = 2630 snd_soc_component_get_dapm(component); 2631 struct snd_soc_dai *dai; 2632 int ret; 2633 2634 if (dai_drv->dobj.type != SND_SOC_DOBJ_PCM) { 2635 dev_err(component->dev, "Invalid dai type %d\n", 2636 dai_drv->dobj.type); 2637 return -EINVAL; 2638 } 2639 2640 lockdep_assert_held(&client_mutex); 2641 dai = soc_add_dai(component, dai_drv, false); 2642 if (!dai) 2643 return -ENOMEM; 2644 2645 /* 2646 * Create the DAI widgets here. After adding DAIs, topology may 2647 * also add routes that need these widgets as source or sink. 2648 */ 2649 ret = snd_soc_dapm_new_dai_widgets(dapm, dai); 2650 if (ret != 0) { 2651 dev_err(component->dev, 2652 "Failed to create DAI widgets %d\n", ret); 2653 } 2654 2655 return ret; 2656 } 2657 EXPORT_SYMBOL_GPL(snd_soc_register_dai); 2658 2659 static int snd_soc_component_initialize(struct snd_soc_component *component, 2660 const struct snd_soc_component_driver *driver, struct device *dev) 2661 { 2662 INIT_LIST_HEAD(&component->dai_list); 2663 INIT_LIST_HEAD(&component->dobj_list); 2664 INIT_LIST_HEAD(&component->card_list); 2665 mutex_init(&component->io_mutex); 2666 2667 component->name = fmt_single_name(dev, &component->id); 2668 if (!component->name) { 2669 dev_err(dev, "ASoC: Failed to allocate name\n"); 2670 return -ENOMEM; 2671 } 2672 2673 component->dev = dev; 2674 component->driver = driver; 2675 2676 return 0; 2677 } 2678 2679 static void snd_soc_component_setup_regmap(struct snd_soc_component *component) 2680 { 2681 int val_bytes = regmap_get_val_bytes(component->regmap); 2682 2683 /* Errors are legitimate for non-integer byte multiples */ 2684 if (val_bytes > 0) 2685 component->val_bytes = val_bytes; 2686 } 2687 2688 #ifdef CONFIG_REGMAP 2689 2690 /** 2691 * snd_soc_component_init_regmap() - Initialize regmap instance for the 2692 * component 2693 * @component: The component for which to initialize the regmap instance 2694 * @regmap: The regmap instance that should be used by the component 2695 * 2696 * This function allows deferred assignment of the regmap instance that is 2697 * associated with the component. Only use this if the regmap instance is not 2698 * yet ready when the component is registered. The function must also be called 2699 * before the first IO attempt of the component. 2700 */ 2701 void snd_soc_component_init_regmap(struct snd_soc_component *component, 2702 struct regmap *regmap) 2703 { 2704 component->regmap = regmap; 2705 snd_soc_component_setup_regmap(component); 2706 } 2707 EXPORT_SYMBOL_GPL(snd_soc_component_init_regmap); 2708 2709 /** 2710 * snd_soc_component_exit_regmap() - De-initialize regmap instance for the 2711 * component 2712 * @component: The component for which to de-initialize the regmap instance 2713 * 2714 * Calls regmap_exit() on the regmap instance associated to the component and 2715 * removes the regmap instance from the component. 2716 * 2717 * This function should only be used if snd_soc_component_init_regmap() was used 2718 * to initialize the regmap instance. 2719 */ 2720 void snd_soc_component_exit_regmap(struct snd_soc_component *component) 2721 { 2722 regmap_exit(component->regmap); 2723 component->regmap = NULL; 2724 } 2725 EXPORT_SYMBOL_GPL(snd_soc_component_exit_regmap); 2726 2727 #endif 2728 2729 static void snd_soc_component_add(struct snd_soc_component *component) 2730 { 2731 mutex_lock(&client_mutex); 2732 2733 if (!component->driver->write && !component->driver->read) { 2734 if (!component->regmap) 2735 component->regmap = dev_get_regmap(component->dev, 2736 NULL); 2737 if (component->regmap) 2738 snd_soc_component_setup_regmap(component); 2739 } 2740 2741 /* see for_each_component */ 2742 list_add(&component->list, &component_list); 2743 2744 mutex_unlock(&client_mutex); 2745 } 2746 2747 static void snd_soc_component_cleanup(struct snd_soc_component *component) 2748 { 2749 snd_soc_unregister_dais(component); 2750 kfree(component->name); 2751 } 2752 2753 static void snd_soc_component_del_unlocked(struct snd_soc_component *component) 2754 { 2755 struct snd_soc_card *card = component->card; 2756 2757 if (card) 2758 snd_soc_unbind_card(card, false); 2759 2760 list_del(&component->list); 2761 } 2762 2763 #define ENDIANNESS_MAP(name) \ 2764 (SNDRV_PCM_FMTBIT_##name##LE | SNDRV_PCM_FMTBIT_##name##BE) 2765 static u64 endianness_format_map[] = { 2766 ENDIANNESS_MAP(S16_), 2767 ENDIANNESS_MAP(U16_), 2768 ENDIANNESS_MAP(S24_), 2769 ENDIANNESS_MAP(U24_), 2770 ENDIANNESS_MAP(S32_), 2771 ENDIANNESS_MAP(U32_), 2772 ENDIANNESS_MAP(S24_3), 2773 ENDIANNESS_MAP(U24_3), 2774 ENDIANNESS_MAP(S20_3), 2775 ENDIANNESS_MAP(U20_3), 2776 ENDIANNESS_MAP(S18_3), 2777 ENDIANNESS_MAP(U18_3), 2778 ENDIANNESS_MAP(FLOAT_), 2779 ENDIANNESS_MAP(FLOAT64_), 2780 ENDIANNESS_MAP(IEC958_SUBFRAME_), 2781 }; 2782 2783 /* 2784 * Fix up the DAI formats for endianness: codecs don't actually see 2785 * the endianness of the data but we're using the CPU format 2786 * definitions which do need to include endianness so we ensure that 2787 * codec DAIs always have both big and little endian variants set. 2788 */ 2789 static void convert_endianness_formats(struct snd_soc_pcm_stream *stream) 2790 { 2791 int i; 2792 2793 for (i = 0; i < ARRAY_SIZE(endianness_format_map); i++) 2794 if (stream->formats & endianness_format_map[i]) 2795 stream->formats |= endianness_format_map[i]; 2796 } 2797 2798 static void snd_soc_try_rebind_card(void) 2799 { 2800 struct snd_soc_card *card, *c; 2801 2802 list_for_each_entry_safe(card, c, &unbind_card_list, list) 2803 if (!snd_soc_bind_card(card)) 2804 list_del(&card->list); 2805 } 2806 2807 int snd_soc_add_component(struct device *dev, 2808 struct snd_soc_component *component, 2809 const struct snd_soc_component_driver *component_driver, 2810 struct snd_soc_dai_driver *dai_drv, 2811 int num_dai) 2812 { 2813 int ret; 2814 int i; 2815 2816 ret = snd_soc_component_initialize(component, component_driver, dev); 2817 if (ret) 2818 goto err_free; 2819 2820 if (component_driver->endianness) { 2821 for (i = 0; i < num_dai; i++) { 2822 convert_endianness_formats(&dai_drv[i].playback); 2823 convert_endianness_formats(&dai_drv[i].capture); 2824 } 2825 } 2826 2827 ret = snd_soc_register_dais(component, dai_drv, num_dai); 2828 if (ret < 0) { 2829 dev_err(dev, "ASoC: Failed to register DAIs: %d\n", ret); 2830 goto err_cleanup; 2831 } 2832 2833 snd_soc_component_add(component); 2834 snd_soc_try_rebind_card(); 2835 2836 return 0; 2837 2838 err_cleanup: 2839 snd_soc_component_cleanup(component); 2840 err_free: 2841 return ret; 2842 } 2843 EXPORT_SYMBOL_GPL(snd_soc_add_component); 2844 2845 int snd_soc_register_component(struct device *dev, 2846 const struct snd_soc_component_driver *component_driver, 2847 struct snd_soc_dai_driver *dai_drv, 2848 int num_dai) 2849 { 2850 struct snd_soc_component *component; 2851 2852 component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL); 2853 if (!component) 2854 return -ENOMEM; 2855 2856 return snd_soc_add_component(dev, component, component_driver, 2857 dai_drv, num_dai); 2858 } 2859 EXPORT_SYMBOL_GPL(snd_soc_register_component); 2860 2861 /** 2862 * snd_soc_unregister_component - Unregister all related component 2863 * from the ASoC core 2864 * 2865 * @dev: The device to unregister 2866 */ 2867 static int __snd_soc_unregister_component(struct device *dev) 2868 { 2869 struct snd_soc_component *component; 2870 int found = 0; 2871 2872 mutex_lock(&client_mutex); 2873 for_each_component(component) { 2874 if (dev != component->dev) 2875 continue; 2876 2877 snd_soc_tplg_component_remove(component, 2878 SND_SOC_TPLG_INDEX_ALL); 2879 snd_soc_component_del_unlocked(component); 2880 found = 1; 2881 break; 2882 } 2883 mutex_unlock(&client_mutex); 2884 2885 if (found) 2886 snd_soc_component_cleanup(component); 2887 2888 return found; 2889 } 2890 2891 void snd_soc_unregister_component(struct device *dev) 2892 { 2893 while (__snd_soc_unregister_component(dev)) 2894 ; 2895 } 2896 EXPORT_SYMBOL_GPL(snd_soc_unregister_component); 2897 2898 struct snd_soc_component *snd_soc_lookup_component(struct device *dev, 2899 const char *driver_name) 2900 { 2901 struct snd_soc_component *component; 2902 struct snd_soc_component *ret; 2903 2904 ret = NULL; 2905 mutex_lock(&client_mutex); 2906 for_each_component(component) { 2907 if (dev != component->dev) 2908 continue; 2909 2910 if (driver_name && 2911 (driver_name != component->driver->name) && 2912 (strcmp(component->driver->name, driver_name) != 0)) 2913 continue; 2914 2915 ret = component; 2916 break; 2917 } 2918 mutex_unlock(&client_mutex); 2919 2920 return ret; 2921 } 2922 EXPORT_SYMBOL_GPL(snd_soc_lookup_component); 2923 2924 /* Retrieve a card's name from device tree */ 2925 int snd_soc_of_parse_card_name(struct snd_soc_card *card, 2926 const char *propname) 2927 { 2928 struct device_node *np; 2929 int ret; 2930 2931 if (!card->dev) { 2932 pr_err("card->dev is not set before calling %s\n", __func__); 2933 return -EINVAL; 2934 } 2935 2936 np = card->dev->of_node; 2937 2938 ret = of_property_read_string_index(np, propname, 0, &card->name); 2939 /* 2940 * EINVAL means the property does not exist. This is fine providing 2941 * card->name was previously set, which is checked later in 2942 * snd_soc_register_card. 2943 */ 2944 if (ret < 0 && ret != -EINVAL) { 2945 dev_err(card->dev, 2946 "ASoC: Property '%s' could not be read: %d\n", 2947 propname, ret); 2948 return ret; 2949 } 2950 2951 return 0; 2952 } 2953 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name); 2954 2955 static const struct snd_soc_dapm_widget simple_widgets[] = { 2956 SND_SOC_DAPM_MIC("Microphone", NULL), 2957 SND_SOC_DAPM_LINE("Line", NULL), 2958 SND_SOC_DAPM_HP("Headphone", NULL), 2959 SND_SOC_DAPM_SPK("Speaker", NULL), 2960 }; 2961 2962 int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card, 2963 const char *propname) 2964 { 2965 struct device_node *np = card->dev->of_node; 2966 struct snd_soc_dapm_widget *widgets; 2967 const char *template, *wname; 2968 int i, j, num_widgets, ret; 2969 2970 num_widgets = of_property_count_strings(np, propname); 2971 if (num_widgets < 0) { 2972 dev_err(card->dev, 2973 "ASoC: Property '%s' does not exist\n", propname); 2974 return -EINVAL; 2975 } 2976 if (num_widgets & 1) { 2977 dev_err(card->dev, 2978 "ASoC: Property '%s' length is not even\n", propname); 2979 return -EINVAL; 2980 } 2981 2982 num_widgets /= 2; 2983 if (!num_widgets) { 2984 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", 2985 propname); 2986 return -EINVAL; 2987 } 2988 2989 widgets = devm_kcalloc(card->dev, num_widgets, sizeof(*widgets), 2990 GFP_KERNEL); 2991 if (!widgets) { 2992 dev_err(card->dev, 2993 "ASoC: Could not allocate memory for widgets\n"); 2994 return -ENOMEM; 2995 } 2996 2997 for (i = 0; i < num_widgets; i++) { 2998 ret = of_property_read_string_index(np, propname, 2999 2 * i, &template); 3000 if (ret) { 3001 dev_err(card->dev, 3002 "ASoC: Property '%s' index %d read error:%d\n", 3003 propname, 2 * i, ret); 3004 return -EINVAL; 3005 } 3006 3007 for (j = 0; j < ARRAY_SIZE(simple_widgets); j++) { 3008 if (!strncmp(template, simple_widgets[j].name, 3009 strlen(simple_widgets[j].name))) { 3010 widgets[i] = simple_widgets[j]; 3011 break; 3012 } 3013 } 3014 3015 if (j >= ARRAY_SIZE(simple_widgets)) { 3016 dev_err(card->dev, 3017 "ASoC: DAPM widget '%s' is not supported\n", 3018 template); 3019 return -EINVAL; 3020 } 3021 3022 ret = of_property_read_string_index(np, propname, 3023 (2 * i) + 1, 3024 &wname); 3025 if (ret) { 3026 dev_err(card->dev, 3027 "ASoC: Property '%s' index %d read error:%d\n", 3028 propname, (2 * i) + 1, ret); 3029 return -EINVAL; 3030 } 3031 3032 widgets[i].name = wname; 3033 } 3034 3035 card->of_dapm_widgets = widgets; 3036 card->num_of_dapm_widgets = num_widgets; 3037 3038 return 0; 3039 } 3040 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets); 3041 3042 int snd_soc_of_get_slot_mask(struct device_node *np, 3043 const char *prop_name, 3044 unsigned int *mask) 3045 { 3046 u32 val; 3047 const __be32 *of_slot_mask = of_get_property(np, prop_name, &val); 3048 int i; 3049 3050 if (!of_slot_mask) 3051 return 0; 3052 val /= sizeof(u32); 3053 for (i = 0; i < val; i++) 3054 if (be32_to_cpup(&of_slot_mask[i])) 3055 *mask |= (1 << i); 3056 3057 return val; 3058 } 3059 EXPORT_SYMBOL_GPL(snd_soc_of_get_slot_mask); 3060 3061 int snd_soc_of_parse_tdm_slot(struct device_node *np, 3062 unsigned int *tx_mask, 3063 unsigned int *rx_mask, 3064 unsigned int *slots, 3065 unsigned int *slot_width) 3066 { 3067 u32 val; 3068 int ret; 3069 3070 if (tx_mask) 3071 snd_soc_of_get_slot_mask(np, "dai-tdm-slot-tx-mask", tx_mask); 3072 if (rx_mask) 3073 snd_soc_of_get_slot_mask(np, "dai-tdm-slot-rx-mask", rx_mask); 3074 3075 if (of_property_read_bool(np, "dai-tdm-slot-num")) { 3076 ret = of_property_read_u32(np, "dai-tdm-slot-num", &val); 3077 if (ret) 3078 return ret; 3079 3080 if (slots) 3081 *slots = val; 3082 } 3083 3084 if (of_property_read_bool(np, "dai-tdm-slot-width")) { 3085 ret = of_property_read_u32(np, "dai-tdm-slot-width", &val); 3086 if (ret) 3087 return ret; 3088 3089 if (slot_width) 3090 *slot_width = val; 3091 } 3092 3093 return 0; 3094 } 3095 EXPORT_SYMBOL_GPL(snd_soc_of_parse_tdm_slot); 3096 3097 void snd_soc_of_parse_node_prefix(struct device_node *np, 3098 struct snd_soc_codec_conf *codec_conf, 3099 struct device_node *of_node, 3100 const char *propname) 3101 { 3102 const char *str; 3103 int ret; 3104 3105 ret = of_property_read_string(np, propname, &str); 3106 if (ret < 0) { 3107 /* no prefix is not error */ 3108 return; 3109 } 3110 3111 codec_conf->of_node = of_node; 3112 codec_conf->name_prefix = str; 3113 } 3114 EXPORT_SYMBOL_GPL(snd_soc_of_parse_node_prefix); 3115 3116 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, 3117 const char *propname) 3118 { 3119 struct device_node *np = card->dev->of_node; 3120 int num_routes; 3121 struct snd_soc_dapm_route *routes; 3122 int i, ret; 3123 3124 num_routes = of_property_count_strings(np, propname); 3125 if (num_routes < 0 || num_routes & 1) { 3126 dev_err(card->dev, 3127 "ASoC: Property '%s' does not exist or its length is not even\n", 3128 propname); 3129 return -EINVAL; 3130 } 3131 num_routes /= 2; 3132 if (!num_routes) { 3133 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", 3134 propname); 3135 return -EINVAL; 3136 } 3137 3138 routes = devm_kcalloc(card->dev, num_routes, sizeof(*routes), 3139 GFP_KERNEL); 3140 if (!routes) { 3141 dev_err(card->dev, 3142 "ASoC: Could not allocate DAPM route table\n"); 3143 return -EINVAL; 3144 } 3145 3146 for (i = 0; i < num_routes; i++) { 3147 ret = of_property_read_string_index(np, propname, 3148 2 * i, &routes[i].sink); 3149 if (ret) { 3150 dev_err(card->dev, 3151 "ASoC: Property '%s' index %d could not be read: %d\n", 3152 propname, 2 * i, ret); 3153 return -EINVAL; 3154 } 3155 ret = of_property_read_string_index(np, propname, 3156 (2 * i) + 1, &routes[i].source); 3157 if (ret) { 3158 dev_err(card->dev, 3159 "ASoC: Property '%s' index %d could not be read: %d\n", 3160 propname, (2 * i) + 1, ret); 3161 return -EINVAL; 3162 } 3163 } 3164 3165 card->num_of_dapm_routes = num_routes; 3166 card->of_dapm_routes = routes; 3167 3168 return 0; 3169 } 3170 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing); 3171 3172 unsigned int snd_soc_of_parse_daifmt(struct device_node *np, 3173 const char *prefix, 3174 struct device_node **bitclkmaster, 3175 struct device_node **framemaster) 3176 { 3177 int ret, i; 3178 char prop[128]; 3179 unsigned int format = 0; 3180 int bit, frame; 3181 const char *str; 3182 struct { 3183 char *name; 3184 unsigned int val; 3185 } of_fmt_table[] = { 3186 { "i2s", SND_SOC_DAIFMT_I2S }, 3187 { "right_j", SND_SOC_DAIFMT_RIGHT_J }, 3188 { "left_j", SND_SOC_DAIFMT_LEFT_J }, 3189 { "dsp_a", SND_SOC_DAIFMT_DSP_A }, 3190 { "dsp_b", SND_SOC_DAIFMT_DSP_B }, 3191 { "ac97", SND_SOC_DAIFMT_AC97 }, 3192 { "pdm", SND_SOC_DAIFMT_PDM}, 3193 { "msb", SND_SOC_DAIFMT_MSB }, 3194 { "lsb", SND_SOC_DAIFMT_LSB }, 3195 }; 3196 3197 if (!prefix) 3198 prefix = ""; 3199 3200 /* 3201 * check "dai-format = xxx" 3202 * or "[prefix]format = xxx" 3203 * SND_SOC_DAIFMT_FORMAT_MASK area 3204 */ 3205 ret = of_property_read_string(np, "dai-format", &str); 3206 if (ret < 0) { 3207 snprintf(prop, sizeof(prop), "%sformat", prefix); 3208 ret = of_property_read_string(np, prop, &str); 3209 } 3210 if (ret == 0) { 3211 for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) { 3212 if (strcmp(str, of_fmt_table[i].name) == 0) { 3213 format |= of_fmt_table[i].val; 3214 break; 3215 } 3216 } 3217 } 3218 3219 /* 3220 * check "[prefix]continuous-clock" 3221 * SND_SOC_DAIFMT_CLOCK_MASK area 3222 */ 3223 snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix); 3224 if (of_property_read_bool(np, prop)) 3225 format |= SND_SOC_DAIFMT_CONT; 3226 else 3227 format |= SND_SOC_DAIFMT_GATED; 3228 3229 /* 3230 * check "[prefix]bitclock-inversion" 3231 * check "[prefix]frame-inversion" 3232 * SND_SOC_DAIFMT_INV_MASK area 3233 */ 3234 snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix); 3235 bit = !!of_get_property(np, prop, NULL); 3236 3237 snprintf(prop, sizeof(prop), "%sframe-inversion", prefix); 3238 frame = !!of_get_property(np, prop, NULL); 3239 3240 switch ((bit << 4) + frame) { 3241 case 0x11: 3242 format |= SND_SOC_DAIFMT_IB_IF; 3243 break; 3244 case 0x10: 3245 format |= SND_SOC_DAIFMT_IB_NF; 3246 break; 3247 case 0x01: 3248 format |= SND_SOC_DAIFMT_NB_IF; 3249 break; 3250 default: 3251 /* SND_SOC_DAIFMT_NB_NF is default */ 3252 break; 3253 } 3254 3255 /* 3256 * check "[prefix]bitclock-master" 3257 * check "[prefix]frame-master" 3258 * SND_SOC_DAIFMT_MASTER_MASK area 3259 */ 3260 snprintf(prop, sizeof(prop), "%sbitclock-master", prefix); 3261 bit = !!of_get_property(np, prop, NULL); 3262 if (bit && bitclkmaster) 3263 *bitclkmaster = of_parse_phandle(np, prop, 0); 3264 3265 snprintf(prop, sizeof(prop), "%sframe-master", prefix); 3266 frame = !!of_get_property(np, prop, NULL); 3267 if (frame && framemaster) 3268 *framemaster = of_parse_phandle(np, prop, 0); 3269 3270 switch ((bit << 4) + frame) { 3271 case 0x11: 3272 format |= SND_SOC_DAIFMT_CBM_CFM; 3273 break; 3274 case 0x10: 3275 format |= SND_SOC_DAIFMT_CBM_CFS; 3276 break; 3277 case 0x01: 3278 format |= SND_SOC_DAIFMT_CBS_CFM; 3279 break; 3280 default: 3281 format |= SND_SOC_DAIFMT_CBS_CFS; 3282 break; 3283 } 3284 3285 return format; 3286 } 3287 EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt); 3288 3289 int snd_soc_get_dai_id(struct device_node *ep) 3290 { 3291 struct snd_soc_component *component; 3292 struct snd_soc_dai_link_component dlc; 3293 int ret; 3294 3295 dlc.of_node = of_graph_get_port_parent(ep); 3296 dlc.name = NULL; 3297 /* 3298 * For example HDMI case, HDMI has video/sound port, 3299 * but ALSA SoC needs sound port number only. 3300 * Thus counting HDMI DT port/endpoint doesn't work. 3301 * Then, it should have .of_xlate_dai_id 3302 */ 3303 ret = -ENOTSUPP; 3304 mutex_lock(&client_mutex); 3305 component = soc_find_component(&dlc); 3306 if (component) 3307 ret = snd_soc_component_of_xlate_dai_id(component, ep); 3308 mutex_unlock(&client_mutex); 3309 3310 of_node_put(dlc.of_node); 3311 3312 return ret; 3313 } 3314 EXPORT_SYMBOL_GPL(snd_soc_get_dai_id); 3315 3316 int snd_soc_get_dai_name(struct of_phandle_args *args, 3317 const char **dai_name) 3318 { 3319 struct snd_soc_component *pos; 3320 struct device_node *component_of_node; 3321 int ret = -EPROBE_DEFER; 3322 3323 mutex_lock(&client_mutex); 3324 for_each_component(pos) { 3325 component_of_node = soc_component_to_node(pos); 3326 3327 if (component_of_node != args->np) 3328 continue; 3329 3330 ret = snd_soc_component_of_xlate_dai_name(pos, args, dai_name); 3331 if (ret == -ENOTSUPP) { 3332 struct snd_soc_dai *dai; 3333 int id = -1; 3334 3335 switch (args->args_count) { 3336 case 0: 3337 id = 0; /* same as dai_drv[0] */ 3338 break; 3339 case 1: 3340 id = args->args[0]; 3341 break; 3342 default: 3343 /* not supported */ 3344 break; 3345 } 3346 3347 if (id < 0 || id >= pos->num_dai) { 3348 ret = -EINVAL; 3349 continue; 3350 } 3351 3352 ret = 0; 3353 3354 /* find target DAI */ 3355 for_each_component_dais(pos, dai) { 3356 if (id == 0) 3357 break; 3358 id--; 3359 } 3360 3361 *dai_name = dai->driver->name; 3362 if (!*dai_name) 3363 *dai_name = pos->name; 3364 } 3365 3366 break; 3367 } 3368 mutex_unlock(&client_mutex); 3369 return ret; 3370 } 3371 EXPORT_SYMBOL_GPL(snd_soc_get_dai_name); 3372 3373 int snd_soc_of_get_dai_name(struct device_node *of_node, 3374 const char **dai_name) 3375 { 3376 struct of_phandle_args args; 3377 int ret; 3378 3379 ret = of_parse_phandle_with_args(of_node, "sound-dai", 3380 "#sound-dai-cells", 0, &args); 3381 if (ret) 3382 return ret; 3383 3384 ret = snd_soc_get_dai_name(&args, dai_name); 3385 3386 of_node_put(args.np); 3387 3388 return ret; 3389 } 3390 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_name); 3391 3392 /* 3393 * snd_soc_of_put_dai_link_codecs - Dereference device nodes in the codecs array 3394 * @dai_link: DAI link 3395 * 3396 * Dereference device nodes acquired by snd_soc_of_get_dai_link_codecs(). 3397 */ 3398 void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link) 3399 { 3400 struct snd_soc_dai_link_component *component; 3401 int index; 3402 3403 for_each_link_codecs(dai_link, index, component) { 3404 if (!component->of_node) 3405 break; 3406 of_node_put(component->of_node); 3407 component->of_node = NULL; 3408 } 3409 } 3410 EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_codecs); 3411 3412 /* 3413 * snd_soc_of_get_dai_link_codecs - Parse a list of CODECs in the devicetree 3414 * @dev: Card device 3415 * @of_node: Device node 3416 * @dai_link: DAI link 3417 * 3418 * Builds an array of CODEC DAI components from the DAI link property 3419 * 'sound-dai'. 3420 * The array is set in the DAI link and the number of DAIs is set accordingly. 3421 * The device nodes in the array (of_node) must be dereferenced by calling 3422 * snd_soc_of_put_dai_link_codecs() on @dai_link. 3423 * 3424 * Returns 0 for success 3425 */ 3426 int snd_soc_of_get_dai_link_codecs(struct device *dev, 3427 struct device_node *of_node, 3428 struct snd_soc_dai_link *dai_link) 3429 { 3430 struct of_phandle_args args; 3431 struct snd_soc_dai_link_component *component; 3432 char *name; 3433 int index, num_codecs, ret; 3434 3435 /* Count the number of CODECs */ 3436 name = "sound-dai"; 3437 num_codecs = of_count_phandle_with_args(of_node, name, 3438 "#sound-dai-cells"); 3439 if (num_codecs <= 0) { 3440 if (num_codecs == -ENOENT) 3441 dev_err(dev, "No 'sound-dai' property\n"); 3442 else 3443 dev_err(dev, "Bad phandle in 'sound-dai'\n"); 3444 return num_codecs; 3445 } 3446 component = devm_kcalloc(dev, 3447 num_codecs, sizeof(*component), 3448 GFP_KERNEL); 3449 if (!component) 3450 return -ENOMEM; 3451 dai_link->codecs = component; 3452 dai_link->num_codecs = num_codecs; 3453 3454 /* Parse the list */ 3455 for_each_link_codecs(dai_link, index, component) { 3456 ret = of_parse_phandle_with_args(of_node, name, 3457 "#sound-dai-cells", 3458 index, &args); 3459 if (ret) 3460 goto err; 3461 component->of_node = args.np; 3462 ret = snd_soc_get_dai_name(&args, &component->dai_name); 3463 if (ret < 0) 3464 goto err; 3465 } 3466 return 0; 3467 err: 3468 snd_soc_of_put_dai_link_codecs(dai_link); 3469 dai_link->codecs = NULL; 3470 dai_link->num_codecs = 0; 3471 return ret; 3472 } 3473 EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_codecs); 3474 3475 static int __init snd_soc_init(void) 3476 { 3477 snd_soc_debugfs_init(); 3478 snd_soc_util_init(); 3479 3480 return platform_driver_register(&soc_driver); 3481 } 3482 module_init(snd_soc_init); 3483 3484 static void __exit snd_soc_exit(void) 3485 { 3486 snd_soc_util_exit(); 3487 snd_soc_debugfs_exit(); 3488 3489 platform_driver_unregister(&soc_driver); 3490 } 3491 module_exit(snd_soc_exit); 3492 3493 /* Module information */ 3494 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 3495 MODULE_DESCRIPTION("ALSA SoC Core"); 3496 MODULE_LICENSE("GPL"); 3497 MODULE_ALIAS("platform:soc-audio"); 3498