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