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