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