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