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/ctype.h> 34 #include <linux/slab.h> 35 #include <linux/of.h> 36 #include <sound/ac97_codec.h> 37 #include <sound/core.h> 38 #include <sound/jack.h> 39 #include <sound/pcm.h> 40 #include <sound/pcm_params.h> 41 #include <sound/soc.h> 42 #include <sound/initval.h> 43 44 #define CREATE_TRACE_POINTS 45 #include <trace/events/asoc.h> 46 47 #define NAME_SIZE 32 48 49 static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq); 50 51 #ifdef CONFIG_DEBUG_FS 52 struct dentry *snd_soc_debugfs_root; 53 EXPORT_SYMBOL_GPL(snd_soc_debugfs_root); 54 #endif 55 56 static DEFINE_MUTEX(client_mutex); 57 static LIST_HEAD(card_list); 58 static LIST_HEAD(dai_list); 59 static LIST_HEAD(platform_list); 60 static LIST_HEAD(codec_list); 61 62 /* 63 * This is a timeout to do a DAPM powerdown after a stream is closed(). 64 * It can be used to eliminate pops between different playback streams, e.g. 65 * between two audio tracks. 66 */ 67 static int pmdown_time = 5000; 68 module_param(pmdown_time, int, 0); 69 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 70 71 /* returns the minimum number of bytes needed to represent 72 * a particular given value */ 73 static int min_bytes_needed(unsigned long val) 74 { 75 int c = 0; 76 int i; 77 78 for (i = (sizeof val * 8) - 1; i >= 0; --i, ++c) 79 if (val & (1UL << i)) 80 break; 81 c = (sizeof val * 8) - c; 82 if (!c || (c % 8)) 83 c = (c + 8) / 8; 84 else 85 c /= 8; 86 return c; 87 } 88 89 /* fill buf which is 'len' bytes with a formatted 90 * string of the form 'reg: value\n' */ 91 static int format_register_str(struct snd_soc_codec *codec, 92 unsigned int reg, char *buf, size_t len) 93 { 94 int wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2; 95 int regsize = codec->driver->reg_word_size * 2; 96 int ret; 97 char tmpbuf[len + 1]; 98 char regbuf[regsize + 1]; 99 100 /* since tmpbuf is allocated on the stack, warn the callers if they 101 * try to abuse this function */ 102 WARN_ON(len > 63); 103 104 /* +2 for ': ' and + 1 for '\n' */ 105 if (wordsize + regsize + 2 + 1 != len) 106 return -EINVAL; 107 108 ret = snd_soc_read(codec, reg); 109 if (ret < 0) { 110 memset(regbuf, 'X', regsize); 111 regbuf[regsize] = '\0'; 112 } else { 113 snprintf(regbuf, regsize + 1, "%.*x", regsize, ret); 114 } 115 116 /* prepare the buffer */ 117 snprintf(tmpbuf, len + 1, "%.*x: %s\n", wordsize, reg, regbuf); 118 /* copy it back to the caller without the '\0' */ 119 memcpy(buf, tmpbuf, len); 120 121 return 0; 122 } 123 124 /* codec register dump */ 125 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf, 126 size_t count, loff_t pos) 127 { 128 int i, step = 1; 129 int wordsize, regsize; 130 int len; 131 size_t total = 0; 132 loff_t p = 0; 133 134 wordsize = min_bytes_needed(codec->driver->reg_cache_size) * 2; 135 regsize = codec->driver->reg_word_size * 2; 136 137 len = wordsize + regsize + 2 + 1; 138 139 if (!codec->driver->reg_cache_size) 140 return 0; 141 142 if (codec->driver->reg_cache_step) 143 step = codec->driver->reg_cache_step; 144 145 for (i = 0; i < codec->driver->reg_cache_size; i += step) { 146 if (!snd_soc_codec_readable_register(codec, i)) 147 continue; 148 if (codec->driver->display_register) { 149 count += codec->driver->display_register(codec, buf + count, 150 PAGE_SIZE - count, i); 151 } else { 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 164 total = min(total, count - 1); 165 166 return total; 167 } 168 169 static ssize_t codec_reg_show(struct device *dev, 170 struct device_attribute *attr, char *buf) 171 { 172 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 173 174 return soc_codec_reg_show(rtd->codec, buf, PAGE_SIZE, 0); 175 } 176 177 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL); 178 179 static ssize_t pmdown_time_show(struct device *dev, 180 struct device_attribute *attr, char *buf) 181 { 182 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 183 184 return sprintf(buf, "%ld\n", rtd->pmdown_time); 185 } 186 187 static ssize_t pmdown_time_set(struct device *dev, 188 struct device_attribute *attr, 189 const char *buf, size_t count) 190 { 191 struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); 192 int ret; 193 194 ret = strict_strtol(buf, 10, &rtd->pmdown_time); 195 if (ret) 196 return ret; 197 198 return count; 199 } 200 201 static DEVICE_ATTR(pmdown_time, 0644, pmdown_time_show, pmdown_time_set); 202 203 #ifdef CONFIG_DEBUG_FS 204 static int codec_reg_open_file(struct inode *inode, struct file *file) 205 { 206 file->private_data = inode->i_private; 207 return 0; 208 } 209 210 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf, 211 size_t count, loff_t *ppos) 212 { 213 ssize_t ret; 214 struct snd_soc_codec *codec = file->private_data; 215 char *buf; 216 217 if (*ppos < 0 || !count) 218 return -EINVAL; 219 220 buf = kmalloc(count, GFP_KERNEL); 221 if (!buf) 222 return -ENOMEM; 223 224 ret = soc_codec_reg_show(codec, buf, count, *ppos); 225 if (ret >= 0) { 226 if (copy_to_user(user_buf, buf, ret)) { 227 kfree(buf); 228 return -EFAULT; 229 } 230 *ppos += ret; 231 } 232 233 kfree(buf); 234 return ret; 235 } 236 237 static ssize_t codec_reg_write_file(struct file *file, 238 const char __user *user_buf, size_t count, loff_t *ppos) 239 { 240 char buf[32]; 241 size_t buf_size; 242 char *start = buf; 243 unsigned long reg, value; 244 struct snd_soc_codec *codec = file->private_data; 245 246 buf_size = min(count, (sizeof(buf)-1)); 247 if (copy_from_user(buf, user_buf, buf_size)) 248 return -EFAULT; 249 buf[buf_size] = 0; 250 251 while (*start == ' ') 252 start++; 253 reg = simple_strtoul(start, &start, 16); 254 while (*start == ' ') 255 start++; 256 if (strict_strtoul(start, 16, &value)) 257 return -EINVAL; 258 259 /* Userspace has been fiddling around behind the kernel's back */ 260 add_taint(TAINT_USER); 261 262 snd_soc_write(codec, reg, value); 263 return buf_size; 264 } 265 266 static const struct file_operations codec_reg_fops = { 267 .open = codec_reg_open_file, 268 .read = codec_reg_read_file, 269 .write = codec_reg_write_file, 270 .llseek = default_llseek, 271 }; 272 273 static void soc_init_codec_debugfs(struct snd_soc_codec *codec) 274 { 275 struct dentry *debugfs_card_root = codec->card->debugfs_card_root; 276 277 codec->debugfs_codec_root = debugfs_create_dir(codec->name, 278 debugfs_card_root); 279 if (!codec->debugfs_codec_root) { 280 printk(KERN_WARNING 281 "ASoC: Failed to create codec debugfs directory\n"); 282 return; 283 } 284 285 debugfs_create_bool("cache_sync", 0444, codec->debugfs_codec_root, 286 &codec->cache_sync); 287 debugfs_create_bool("cache_only", 0444, codec->debugfs_codec_root, 288 &codec->cache_only); 289 290 codec->debugfs_reg = debugfs_create_file("codec_reg", 0644, 291 codec->debugfs_codec_root, 292 codec, &codec_reg_fops); 293 if (!codec->debugfs_reg) 294 printk(KERN_WARNING 295 "ASoC: Failed to create codec register debugfs file\n"); 296 297 snd_soc_dapm_debugfs_init(&codec->dapm, codec->debugfs_codec_root); 298 } 299 300 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 301 { 302 debugfs_remove_recursive(codec->debugfs_codec_root); 303 } 304 305 static ssize_t codec_list_read_file(struct file *file, char __user *user_buf, 306 size_t count, loff_t *ppos) 307 { 308 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 309 ssize_t len, ret = 0; 310 struct snd_soc_codec *codec; 311 312 if (!buf) 313 return -ENOMEM; 314 315 list_for_each_entry(codec, &codec_list, list) { 316 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", 317 codec->name); 318 if (len >= 0) 319 ret += len; 320 if (ret > PAGE_SIZE) { 321 ret = PAGE_SIZE; 322 break; 323 } 324 } 325 326 if (ret >= 0) 327 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 328 329 kfree(buf); 330 331 return ret; 332 } 333 334 static const struct file_operations codec_list_fops = { 335 .read = codec_list_read_file, 336 .llseek = default_llseek,/* read accesses f_pos */ 337 }; 338 339 static ssize_t dai_list_read_file(struct file *file, char __user *user_buf, 340 size_t count, loff_t *ppos) 341 { 342 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 343 ssize_t len, ret = 0; 344 struct snd_soc_dai *dai; 345 346 if (!buf) 347 return -ENOMEM; 348 349 list_for_each_entry(dai, &dai_list, list) { 350 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", dai->name); 351 if (len >= 0) 352 ret += len; 353 if (ret > PAGE_SIZE) { 354 ret = PAGE_SIZE; 355 break; 356 } 357 } 358 359 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 360 361 kfree(buf); 362 363 return ret; 364 } 365 366 static const struct file_operations dai_list_fops = { 367 .read = dai_list_read_file, 368 .llseek = default_llseek,/* read accesses f_pos */ 369 }; 370 371 static ssize_t platform_list_read_file(struct file *file, 372 char __user *user_buf, 373 size_t count, loff_t *ppos) 374 { 375 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 376 ssize_t len, ret = 0; 377 struct snd_soc_platform *platform; 378 379 if (!buf) 380 return -ENOMEM; 381 382 list_for_each_entry(platform, &platform_list, list) { 383 len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", 384 platform->name); 385 if (len >= 0) 386 ret += len; 387 if (ret > PAGE_SIZE) { 388 ret = PAGE_SIZE; 389 break; 390 } 391 } 392 393 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 394 395 kfree(buf); 396 397 return ret; 398 } 399 400 static const struct file_operations platform_list_fops = { 401 .read = platform_list_read_file, 402 .llseek = default_llseek,/* read accesses f_pos */ 403 }; 404 405 static void soc_init_card_debugfs(struct snd_soc_card *card) 406 { 407 card->debugfs_card_root = debugfs_create_dir(card->name, 408 snd_soc_debugfs_root); 409 if (!card->debugfs_card_root) { 410 dev_warn(card->dev, 411 "ASoC: Failed to create card debugfs directory\n"); 412 return; 413 } 414 415 card->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0644, 416 card->debugfs_card_root, 417 &card->pop_time); 418 if (!card->debugfs_pop_time) 419 dev_warn(card->dev, 420 "Failed to create pop time debugfs file\n"); 421 } 422 423 static void soc_cleanup_card_debugfs(struct snd_soc_card *card) 424 { 425 debugfs_remove_recursive(card->debugfs_card_root); 426 } 427 428 #else 429 430 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec) 431 { 432 } 433 434 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 435 { 436 } 437 438 static inline void soc_init_card_debugfs(struct snd_soc_card *card) 439 { 440 } 441 442 static inline void soc_cleanup_card_debugfs(struct snd_soc_card *card) 443 { 444 } 445 #endif 446 447 #ifdef CONFIG_SND_SOC_AC97_BUS 448 /* unregister ac97 codec */ 449 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec) 450 { 451 if (codec->ac97->dev.bus) 452 device_unregister(&codec->ac97->dev); 453 return 0; 454 } 455 456 /* stop no dev release warning */ 457 static void soc_ac97_device_release(struct device *dev){} 458 459 /* register ac97 codec to bus */ 460 static int soc_ac97_dev_register(struct snd_soc_codec *codec) 461 { 462 int err; 463 464 codec->ac97->dev.bus = &ac97_bus_type; 465 codec->ac97->dev.parent = codec->card->dev; 466 codec->ac97->dev.release = soc_ac97_device_release; 467 468 dev_set_name(&codec->ac97->dev, "%d-%d:%s", 469 codec->card->snd_card->number, 0, codec->name); 470 err = device_register(&codec->ac97->dev); 471 if (err < 0) { 472 snd_printk(KERN_ERR "Can't register ac97 bus\n"); 473 codec->ac97->dev.bus = NULL; 474 return err; 475 } 476 return 0; 477 } 478 #endif 479 480 #ifdef CONFIG_PM_SLEEP 481 /* powers down audio subsystem for suspend */ 482 int snd_soc_suspend(struct device *dev) 483 { 484 struct snd_soc_card *card = dev_get_drvdata(dev); 485 struct snd_soc_codec *codec; 486 int i; 487 488 /* If the initialization of this soc device failed, there is no codec 489 * associated with it. Just bail out in this case. 490 */ 491 if (list_empty(&card->codec_dev_list)) 492 return 0; 493 494 /* Due to the resume being scheduled into a workqueue we could 495 * suspend before that's finished - wait for it to complete. 496 */ 497 snd_power_lock(card->snd_card); 498 snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); 499 snd_power_unlock(card->snd_card); 500 501 /* we're going to block userspace touching us until resume completes */ 502 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); 503 504 /* mute any active DACs */ 505 for (i = 0; i < card->num_rtd; i++) { 506 struct snd_soc_dai *dai = card->rtd[i].codec_dai; 507 struct snd_soc_dai_driver *drv = dai->driver; 508 509 if (card->rtd[i].dai_link->ignore_suspend) 510 continue; 511 512 if (drv->ops->digital_mute && dai->playback_active) 513 drv->ops->digital_mute(dai, 1); 514 } 515 516 /* suspend all pcms */ 517 for (i = 0; i < card->num_rtd; i++) { 518 if (card->rtd[i].dai_link->ignore_suspend) 519 continue; 520 521 snd_pcm_suspend_all(card->rtd[i].pcm); 522 } 523 524 if (card->suspend_pre) 525 card->suspend_pre(card); 526 527 for (i = 0; i < card->num_rtd; i++) { 528 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 529 struct snd_soc_platform *platform = card->rtd[i].platform; 530 531 if (card->rtd[i].dai_link->ignore_suspend) 532 continue; 533 534 if (cpu_dai->driver->suspend && !cpu_dai->driver->ac97_control) 535 cpu_dai->driver->suspend(cpu_dai); 536 if (platform->driver->suspend && !platform->suspended) { 537 platform->driver->suspend(cpu_dai); 538 platform->suspended = 1; 539 } 540 } 541 542 /* close any waiting streams and save state */ 543 for (i = 0; i < card->num_rtd; i++) { 544 flush_delayed_work_sync(&card->rtd[i].delayed_work); 545 card->rtd[i].codec->dapm.suspend_bias_level = card->rtd[i].codec->dapm.bias_level; 546 } 547 548 for (i = 0; i < card->num_rtd; i++) { 549 struct snd_soc_dai_driver *driver = card->rtd[i].codec_dai->driver; 550 551 if (card->rtd[i].dai_link->ignore_suspend) 552 continue; 553 554 if (driver->playback.stream_name != NULL) 555 snd_soc_dapm_stream_event(&card->rtd[i], driver->playback.stream_name, 556 SND_SOC_DAPM_STREAM_SUSPEND); 557 558 if (driver->capture.stream_name != NULL) 559 snd_soc_dapm_stream_event(&card->rtd[i], driver->capture.stream_name, 560 SND_SOC_DAPM_STREAM_SUSPEND); 561 } 562 563 /* suspend all CODECs */ 564 list_for_each_entry(codec, &card->codec_dev_list, card_list) { 565 /* If there are paths active then the CODEC will be held with 566 * bias _ON and should not be suspended. */ 567 if (!codec->suspended && codec->driver->suspend) { 568 switch (codec->dapm.bias_level) { 569 case SND_SOC_BIAS_STANDBY: 570 case SND_SOC_BIAS_OFF: 571 codec->driver->suspend(codec); 572 codec->suspended = 1; 573 codec->cache_sync = 1; 574 break; 575 default: 576 dev_dbg(codec->dev, "CODEC is on over suspend\n"); 577 break; 578 } 579 } 580 } 581 582 for (i = 0; i < card->num_rtd; i++) { 583 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 584 585 if (card->rtd[i].dai_link->ignore_suspend) 586 continue; 587 588 if (cpu_dai->driver->suspend && cpu_dai->driver->ac97_control) 589 cpu_dai->driver->suspend(cpu_dai); 590 } 591 592 if (card->suspend_post) 593 card->suspend_post(card); 594 595 return 0; 596 } 597 EXPORT_SYMBOL_GPL(snd_soc_suspend); 598 599 /* deferred resume work, so resume can complete before we finished 600 * setting our codec back up, which can be very slow on I2C 601 */ 602 static void soc_resume_deferred(struct work_struct *work) 603 { 604 struct snd_soc_card *card = 605 container_of(work, struct snd_soc_card, deferred_resume_work); 606 struct snd_soc_codec *codec; 607 int i; 608 609 /* our power state is still SNDRV_CTL_POWER_D3hot from suspend time, 610 * so userspace apps are blocked from touching us 611 */ 612 613 dev_dbg(card->dev, "starting resume work\n"); 614 615 /* Bring us up into D2 so that DAPM starts enabling things */ 616 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2); 617 618 if (card->resume_pre) 619 card->resume_pre(card); 620 621 /* resume AC97 DAIs */ 622 for (i = 0; i < card->num_rtd; i++) { 623 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 624 625 if (card->rtd[i].dai_link->ignore_suspend) 626 continue; 627 628 if (cpu_dai->driver->resume && cpu_dai->driver->ac97_control) 629 cpu_dai->driver->resume(cpu_dai); 630 } 631 632 list_for_each_entry(codec, &card->codec_dev_list, card_list) { 633 /* If the CODEC was idle over suspend then it will have been 634 * left with bias OFF or STANDBY and suspended so we must now 635 * resume. Otherwise the suspend was suppressed. 636 */ 637 if (codec->driver->resume && codec->suspended) { 638 switch (codec->dapm.bias_level) { 639 case SND_SOC_BIAS_STANDBY: 640 case SND_SOC_BIAS_OFF: 641 codec->driver->resume(codec); 642 codec->suspended = 0; 643 break; 644 default: 645 dev_dbg(codec->dev, "CODEC was on over suspend\n"); 646 break; 647 } 648 } 649 } 650 651 for (i = 0; i < card->num_rtd; i++) { 652 struct snd_soc_dai_driver *driver = card->rtd[i].codec_dai->driver; 653 654 if (card->rtd[i].dai_link->ignore_suspend) 655 continue; 656 657 if (driver->playback.stream_name != NULL) 658 snd_soc_dapm_stream_event(&card->rtd[i], driver->playback.stream_name, 659 SND_SOC_DAPM_STREAM_RESUME); 660 661 if (driver->capture.stream_name != NULL) 662 snd_soc_dapm_stream_event(&card->rtd[i], driver->capture.stream_name, 663 SND_SOC_DAPM_STREAM_RESUME); 664 } 665 666 /* unmute any active DACs */ 667 for (i = 0; i < card->num_rtd; i++) { 668 struct snd_soc_dai *dai = card->rtd[i].codec_dai; 669 struct snd_soc_dai_driver *drv = dai->driver; 670 671 if (card->rtd[i].dai_link->ignore_suspend) 672 continue; 673 674 if (drv->ops->digital_mute && dai->playback_active) 675 drv->ops->digital_mute(dai, 0); 676 } 677 678 for (i = 0; i < card->num_rtd; i++) { 679 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 680 struct snd_soc_platform *platform = card->rtd[i].platform; 681 682 if (card->rtd[i].dai_link->ignore_suspend) 683 continue; 684 685 if (cpu_dai->driver->resume && !cpu_dai->driver->ac97_control) 686 cpu_dai->driver->resume(cpu_dai); 687 if (platform->driver->resume && platform->suspended) { 688 platform->driver->resume(cpu_dai); 689 platform->suspended = 0; 690 } 691 } 692 693 if (card->resume_post) 694 card->resume_post(card); 695 696 dev_dbg(card->dev, "resume work completed\n"); 697 698 /* userspace can access us now we are back as we were before */ 699 snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0); 700 } 701 702 /* powers up audio subsystem after a suspend */ 703 int snd_soc_resume(struct device *dev) 704 { 705 struct snd_soc_card *card = dev_get_drvdata(dev); 706 int i, ac97_control = 0; 707 708 /* If the initialization of this soc device failed, there is no codec 709 * associated with it. Just bail out in this case. 710 */ 711 if (list_empty(&card->codec_dev_list)) 712 return 0; 713 714 /* AC97 devices might have other drivers hanging off them so 715 * need to resume immediately. Other drivers don't have that 716 * problem and may take a substantial amount of time to resume 717 * due to I/O costs and anti-pop so handle them out of line. 718 */ 719 for (i = 0; i < card->num_rtd; i++) { 720 struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai; 721 ac97_control |= cpu_dai->driver->ac97_control; 722 } 723 if (ac97_control) { 724 dev_dbg(dev, "Resuming AC97 immediately\n"); 725 soc_resume_deferred(&card->deferred_resume_work); 726 } else { 727 dev_dbg(dev, "Scheduling resume work\n"); 728 if (!schedule_work(&card->deferred_resume_work)) 729 dev_err(dev, "resume work item may be lost\n"); 730 } 731 732 return 0; 733 } 734 EXPORT_SYMBOL_GPL(snd_soc_resume); 735 #else 736 #define snd_soc_suspend NULL 737 #define snd_soc_resume NULL 738 #endif 739 740 static const struct snd_soc_dai_ops null_dai_ops = { 741 }; 742 743 static int soc_bind_dai_link(struct snd_soc_card *card, int num) 744 { 745 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; 746 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 747 struct snd_soc_codec *codec; 748 struct snd_soc_platform *platform; 749 struct snd_soc_dai *codec_dai, *cpu_dai; 750 const char *platform_name; 751 752 if (rtd->complete) 753 return 1; 754 dev_dbg(card->dev, "binding %s at idx %d\n", dai_link->name, num); 755 756 /* do we already have the CPU DAI for this link ? */ 757 if (rtd->cpu_dai) { 758 goto find_codec; 759 } 760 /* no, then find CPU DAI from registered DAIs*/ 761 list_for_each_entry(cpu_dai, &dai_list, list) { 762 if (dai_link->cpu_dai_of_node) { 763 if (cpu_dai->dev->of_node != dai_link->cpu_dai_of_node) 764 continue; 765 } else { 766 if (strcmp(cpu_dai->name, dai_link->cpu_dai_name)) 767 continue; 768 } 769 770 rtd->cpu_dai = cpu_dai; 771 goto find_codec; 772 } 773 dev_dbg(card->dev, "CPU DAI %s not registered\n", 774 dai_link->cpu_dai_name); 775 776 find_codec: 777 /* do we already have the CODEC for this link ? */ 778 if (rtd->codec) { 779 goto find_platform; 780 } 781 782 /* no, then find CODEC from registered CODECs*/ 783 list_for_each_entry(codec, &codec_list, list) { 784 if (dai_link->codec_of_node) { 785 if (codec->dev->of_node != dai_link->codec_of_node) 786 continue; 787 } else { 788 if (strcmp(codec->name, dai_link->codec_name)) 789 continue; 790 } 791 792 rtd->codec = codec; 793 794 /* 795 * CODEC found, so find CODEC DAI from registered DAIs from 796 * this CODEC 797 */ 798 list_for_each_entry(codec_dai, &dai_list, list) { 799 if (codec->dev == codec_dai->dev && 800 !strcmp(codec_dai->name, 801 dai_link->codec_dai_name)) { 802 803 rtd->codec_dai = codec_dai; 804 goto find_platform; 805 } 806 } 807 dev_dbg(card->dev, "CODEC DAI %s not registered\n", 808 dai_link->codec_dai_name); 809 810 goto find_platform; 811 } 812 dev_dbg(card->dev, "CODEC %s not registered\n", 813 dai_link->codec_name); 814 815 find_platform: 816 /* do we need a platform? */ 817 if (rtd->platform) 818 goto out; 819 820 /* if there's no platform we match on the empty platform */ 821 platform_name = dai_link->platform_name; 822 if (!platform_name && !dai_link->platform_of_node) 823 platform_name = "snd-soc-dummy"; 824 825 /* no, then find one from the set of registered platforms */ 826 list_for_each_entry(platform, &platform_list, list) { 827 if (dai_link->platform_of_node) { 828 if (platform->dev->of_node != 829 dai_link->platform_of_node) 830 continue; 831 } else { 832 if (strcmp(platform->name, platform_name)) 833 continue; 834 } 835 836 rtd->platform = platform; 837 goto out; 838 } 839 840 dev_dbg(card->dev, "platform %s not registered\n", 841 dai_link->platform_name); 842 return 0; 843 844 out: 845 /* mark rtd as complete if we found all 4 of our client devices */ 846 if (rtd->codec && rtd->codec_dai && rtd->platform && rtd->cpu_dai) { 847 rtd->complete = 1; 848 card->num_rtd++; 849 } 850 return 1; 851 } 852 853 static void soc_remove_codec(struct snd_soc_codec *codec) 854 { 855 int err; 856 857 if (codec->driver->remove) { 858 err = codec->driver->remove(codec); 859 if (err < 0) 860 dev_err(codec->dev, 861 "asoc: failed to remove %s: %d\n", 862 codec->name, err); 863 } 864 865 /* Make sure all DAPM widgets are freed */ 866 snd_soc_dapm_free(&codec->dapm); 867 868 soc_cleanup_codec_debugfs(codec); 869 codec->probed = 0; 870 list_del(&codec->card_list); 871 module_put(codec->dev->driver->owner); 872 } 873 874 static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order) 875 { 876 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 877 struct snd_soc_codec *codec = rtd->codec; 878 struct snd_soc_platform *platform = rtd->platform; 879 struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai; 880 int err; 881 882 /* unregister the rtd device */ 883 if (rtd->dev_registered) { 884 device_remove_file(rtd->dev, &dev_attr_pmdown_time); 885 device_remove_file(rtd->dev, &dev_attr_codec_reg); 886 device_unregister(rtd->dev); 887 rtd->dev_registered = 0; 888 } 889 890 /* remove the CODEC DAI */ 891 if (codec_dai && codec_dai->probed && 892 codec_dai->driver->remove_order == order) { 893 if (codec_dai->driver->remove) { 894 err = codec_dai->driver->remove(codec_dai); 895 if (err < 0) 896 printk(KERN_ERR "asoc: failed to remove %s\n", codec_dai->name); 897 } 898 codec_dai->probed = 0; 899 list_del(&codec_dai->card_list); 900 } 901 902 /* remove the platform */ 903 if (platform && platform->probed && 904 platform->driver->remove_order == order) { 905 if (platform->driver->remove) { 906 err = platform->driver->remove(platform); 907 if (err < 0) 908 printk(KERN_ERR "asoc: failed to remove %s\n", platform->name); 909 } 910 911 /* Make sure all DAPM widgets are freed */ 912 snd_soc_dapm_free(&platform->dapm); 913 914 platform->probed = 0; 915 list_del(&platform->card_list); 916 module_put(platform->dev->driver->owner); 917 } 918 919 /* remove the CODEC */ 920 if (codec && codec->probed && 921 codec->driver->remove_order == order) 922 soc_remove_codec(codec); 923 924 /* remove the cpu_dai */ 925 if (cpu_dai && cpu_dai->probed && 926 cpu_dai->driver->remove_order == order) { 927 if (cpu_dai->driver->remove) { 928 err = cpu_dai->driver->remove(cpu_dai); 929 if (err < 0) 930 printk(KERN_ERR "asoc: failed to remove %s\n", cpu_dai->name); 931 } 932 cpu_dai->probed = 0; 933 list_del(&cpu_dai->card_list); 934 module_put(cpu_dai->dev->driver->owner); 935 } 936 } 937 938 static void soc_remove_dai_links(struct snd_soc_card *card) 939 { 940 int dai, order; 941 942 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 943 order++) { 944 for (dai = 0; dai < card->num_rtd; dai++) 945 soc_remove_dai_link(card, dai, order); 946 } 947 card->num_rtd = 0; 948 } 949 950 static void soc_set_name_prefix(struct snd_soc_card *card, 951 struct snd_soc_codec *codec) 952 { 953 int i; 954 955 if (card->codec_conf == NULL) 956 return; 957 958 for (i = 0; i < card->num_configs; i++) { 959 struct snd_soc_codec_conf *map = &card->codec_conf[i]; 960 if (map->dev_name && !strcmp(codec->name, map->dev_name)) { 961 codec->name_prefix = map->name_prefix; 962 break; 963 } 964 } 965 } 966 967 static int soc_probe_codec(struct snd_soc_card *card, 968 struct snd_soc_codec *codec) 969 { 970 int ret = 0; 971 const struct snd_soc_codec_driver *driver = codec->driver; 972 973 codec->card = card; 974 codec->dapm.card = card; 975 soc_set_name_prefix(card, codec); 976 977 if (!try_module_get(codec->dev->driver->owner)) 978 return -ENODEV; 979 980 soc_init_codec_debugfs(codec); 981 982 if (driver->dapm_widgets) 983 snd_soc_dapm_new_controls(&codec->dapm, driver->dapm_widgets, 984 driver->num_dapm_widgets); 985 986 codec->dapm.idle_bias_off = driver->idle_bias_off; 987 988 if (driver->probe) { 989 ret = driver->probe(codec); 990 if (ret < 0) { 991 dev_err(codec->dev, 992 "asoc: failed to probe CODEC %s: %d\n", 993 codec->name, ret); 994 goto err_probe; 995 } 996 } 997 998 if (driver->controls) 999 snd_soc_add_controls(codec, driver->controls, 1000 driver->num_controls); 1001 if (driver->dapm_routes) 1002 snd_soc_dapm_add_routes(&codec->dapm, driver->dapm_routes, 1003 driver->num_dapm_routes); 1004 1005 /* mark codec as probed and add to card codec list */ 1006 codec->probed = 1; 1007 list_add(&codec->card_list, &card->codec_dev_list); 1008 list_add(&codec->dapm.list, &card->dapm_list); 1009 1010 return 0; 1011 1012 err_probe: 1013 soc_cleanup_codec_debugfs(codec); 1014 module_put(codec->dev->driver->owner); 1015 1016 return ret; 1017 } 1018 1019 static int soc_probe_platform(struct snd_soc_card *card, 1020 struct snd_soc_platform *platform) 1021 { 1022 int ret = 0; 1023 const struct snd_soc_platform_driver *driver = platform->driver; 1024 1025 platform->card = card; 1026 platform->dapm.card = card; 1027 1028 if (!try_module_get(platform->dev->driver->owner)) 1029 return -ENODEV; 1030 1031 if (driver->dapm_widgets) 1032 snd_soc_dapm_new_controls(&platform->dapm, 1033 driver->dapm_widgets, driver->num_dapm_widgets); 1034 1035 if (driver->probe) { 1036 ret = driver->probe(platform); 1037 if (ret < 0) { 1038 dev_err(platform->dev, 1039 "asoc: failed to probe platform %s: %d\n", 1040 platform->name, ret); 1041 goto err_probe; 1042 } 1043 } 1044 1045 if (driver->controls) 1046 snd_soc_add_platform_controls(platform, driver->controls, 1047 driver->num_controls); 1048 if (driver->dapm_routes) 1049 snd_soc_dapm_add_routes(&platform->dapm, driver->dapm_routes, 1050 driver->num_dapm_routes); 1051 1052 /* mark platform as probed and add to card platform list */ 1053 platform->probed = 1; 1054 list_add(&platform->card_list, &card->platform_dev_list); 1055 list_add(&platform->dapm.list, &card->dapm_list); 1056 1057 return 0; 1058 1059 err_probe: 1060 module_put(platform->dev->driver->owner); 1061 1062 return ret; 1063 } 1064 1065 static void rtd_release(struct device *dev) 1066 { 1067 kfree(dev); 1068 } 1069 1070 static int soc_post_component_init(struct snd_soc_card *card, 1071 struct snd_soc_codec *codec, 1072 int num, int dailess) 1073 { 1074 struct snd_soc_dai_link *dai_link = NULL; 1075 struct snd_soc_aux_dev *aux_dev = NULL; 1076 struct snd_soc_pcm_runtime *rtd; 1077 const char *temp, *name; 1078 int ret = 0; 1079 1080 if (!dailess) { 1081 dai_link = &card->dai_link[num]; 1082 rtd = &card->rtd[num]; 1083 name = dai_link->name; 1084 } else { 1085 aux_dev = &card->aux_dev[num]; 1086 rtd = &card->rtd_aux[num]; 1087 name = aux_dev->name; 1088 } 1089 rtd->card = card; 1090 1091 /* Make sure all DAPM widgets are instantiated */ 1092 snd_soc_dapm_new_widgets(&codec->dapm); 1093 1094 /* machine controls, routes and widgets are not prefixed */ 1095 temp = codec->name_prefix; 1096 codec->name_prefix = NULL; 1097 1098 /* do machine specific initialization */ 1099 if (!dailess && dai_link->init) 1100 ret = dai_link->init(rtd); 1101 else if (dailess && aux_dev->init) 1102 ret = aux_dev->init(&codec->dapm); 1103 if (ret < 0) { 1104 dev_err(card->dev, "asoc: failed to init %s: %d\n", name, ret); 1105 return ret; 1106 } 1107 codec->name_prefix = temp; 1108 1109 /* register the rtd device */ 1110 rtd->codec = codec; 1111 1112 rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL); 1113 if (!rtd->dev) 1114 return -ENOMEM; 1115 device_initialize(rtd->dev); 1116 rtd->dev->parent = card->dev; 1117 rtd->dev->release = rtd_release; 1118 rtd->dev->init_name = name; 1119 dev_set_drvdata(rtd->dev, rtd); 1120 mutex_init(&rtd->pcm_mutex); 1121 ret = device_add(rtd->dev); 1122 if (ret < 0) { 1123 dev_err(card->dev, 1124 "asoc: failed to register runtime device: %d\n", ret); 1125 return ret; 1126 } 1127 rtd->dev_registered = 1; 1128 1129 /* add DAPM sysfs entries for this codec */ 1130 ret = snd_soc_dapm_sys_add(rtd->dev); 1131 if (ret < 0) 1132 dev_err(codec->dev, 1133 "asoc: failed to add codec dapm sysfs entries: %d\n", 1134 ret); 1135 1136 /* add codec sysfs entries */ 1137 ret = device_create_file(rtd->dev, &dev_attr_codec_reg); 1138 if (ret < 0) 1139 dev_err(codec->dev, 1140 "asoc: failed to add codec sysfs files: %d\n", ret); 1141 1142 return 0; 1143 } 1144 1145 static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order) 1146 { 1147 struct snd_soc_dai_link *dai_link = &card->dai_link[num]; 1148 struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; 1149 struct snd_soc_codec *codec = rtd->codec; 1150 struct snd_soc_platform *platform = rtd->platform; 1151 struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai; 1152 int ret; 1153 1154 dev_dbg(card->dev, "probe %s dai link %d late %d\n", 1155 card->name, num, order); 1156 1157 /* config components */ 1158 codec_dai->codec = codec; 1159 cpu_dai->platform = platform; 1160 codec_dai->card = card; 1161 cpu_dai->card = card; 1162 1163 /* set default power off timeout */ 1164 rtd->pmdown_time = pmdown_time; 1165 1166 /* probe the cpu_dai */ 1167 if (!cpu_dai->probed && 1168 cpu_dai->driver->probe_order == order) { 1169 if (!try_module_get(cpu_dai->dev->driver->owner)) 1170 return -ENODEV; 1171 1172 if (cpu_dai->driver->probe) { 1173 ret = cpu_dai->driver->probe(cpu_dai); 1174 if (ret < 0) { 1175 printk(KERN_ERR "asoc: failed to probe CPU DAI %s\n", 1176 cpu_dai->name); 1177 module_put(cpu_dai->dev->driver->owner); 1178 return ret; 1179 } 1180 } 1181 cpu_dai->probed = 1; 1182 /* mark cpu_dai as probed and add to card dai list */ 1183 list_add(&cpu_dai->card_list, &card->dai_dev_list); 1184 } 1185 1186 /* probe the CODEC */ 1187 if (!codec->probed && 1188 codec->driver->probe_order == order) { 1189 ret = soc_probe_codec(card, codec); 1190 if (ret < 0) 1191 return ret; 1192 } 1193 1194 /* probe the platform */ 1195 if (!platform->probed && 1196 platform->driver->probe_order == order) { 1197 ret = soc_probe_platform(card, platform); 1198 if (ret < 0) 1199 return ret; 1200 } 1201 1202 /* probe the CODEC DAI */ 1203 if (!codec_dai->probed && codec_dai->driver->probe_order == order) { 1204 if (codec_dai->driver->probe) { 1205 ret = codec_dai->driver->probe(codec_dai); 1206 if (ret < 0) { 1207 printk(KERN_ERR "asoc: failed to probe CODEC DAI %s\n", 1208 codec_dai->name); 1209 return ret; 1210 } 1211 } 1212 1213 /* mark codec_dai as probed and add to card dai list */ 1214 codec_dai->probed = 1; 1215 list_add(&codec_dai->card_list, &card->dai_dev_list); 1216 } 1217 1218 /* complete DAI probe during last probe */ 1219 if (order != SND_SOC_COMP_ORDER_LAST) 1220 return 0; 1221 1222 ret = soc_post_component_init(card, codec, num, 0); 1223 if (ret) 1224 return ret; 1225 1226 ret = device_create_file(rtd->dev, &dev_attr_pmdown_time); 1227 if (ret < 0) 1228 printk(KERN_WARNING "asoc: failed to add pmdown_time sysfs\n"); 1229 1230 /* create the pcm */ 1231 ret = soc_new_pcm(rtd, num); 1232 if (ret < 0) { 1233 printk(KERN_ERR "asoc: can't create pcm %s\n", dai_link->stream_name); 1234 return ret; 1235 } 1236 1237 /* add platform data for AC97 devices */ 1238 if (rtd->codec_dai->driver->ac97_control) 1239 snd_ac97_dev_add_pdata(codec->ac97, rtd->cpu_dai->ac97_pdata); 1240 1241 return 0; 1242 } 1243 1244 #ifdef CONFIG_SND_SOC_AC97_BUS 1245 static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd) 1246 { 1247 int ret; 1248 1249 /* Only instantiate AC97 if not already done by the adaptor 1250 * for the generic AC97 subsystem. 1251 */ 1252 if (rtd->codec_dai->driver->ac97_control && !rtd->codec->ac97_registered) { 1253 /* 1254 * It is possible that the AC97 device is already registered to 1255 * the device subsystem. This happens when the device is created 1256 * via snd_ac97_mixer(). Currently only SoC codec that does so 1257 * is the generic AC97 glue but others migh emerge. 1258 * 1259 * In those cases we don't try to register the device again. 1260 */ 1261 if (!rtd->codec->ac97_created) 1262 return 0; 1263 1264 ret = soc_ac97_dev_register(rtd->codec); 1265 if (ret < 0) { 1266 printk(KERN_ERR "asoc: AC97 device register failed\n"); 1267 return ret; 1268 } 1269 1270 rtd->codec->ac97_registered = 1; 1271 } 1272 return 0; 1273 } 1274 1275 static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec) 1276 { 1277 if (codec->ac97_registered) { 1278 soc_ac97_dev_unregister(codec); 1279 codec->ac97_registered = 0; 1280 } 1281 } 1282 #endif 1283 1284 static int soc_probe_aux_dev(struct snd_soc_card *card, int num) 1285 { 1286 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1287 struct snd_soc_codec *codec; 1288 int ret = -ENODEV; 1289 1290 /* find CODEC from registered CODECs*/ 1291 list_for_each_entry(codec, &codec_list, list) { 1292 if (!strcmp(codec->name, aux_dev->codec_name)) { 1293 if (codec->probed) { 1294 dev_err(codec->dev, 1295 "asoc: codec already probed"); 1296 ret = -EBUSY; 1297 goto out; 1298 } 1299 goto found; 1300 } 1301 } 1302 /* codec not found */ 1303 dev_err(card->dev, "asoc: codec %s not found", aux_dev->codec_name); 1304 goto out; 1305 1306 found: 1307 ret = soc_probe_codec(card, codec); 1308 if (ret < 0) 1309 return ret; 1310 1311 ret = soc_post_component_init(card, codec, num, 1); 1312 1313 out: 1314 return ret; 1315 } 1316 1317 static void soc_remove_aux_dev(struct snd_soc_card *card, int num) 1318 { 1319 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1320 struct snd_soc_codec *codec = rtd->codec; 1321 1322 /* unregister the rtd device */ 1323 if (rtd->dev_registered) { 1324 device_remove_file(rtd->dev, &dev_attr_codec_reg); 1325 device_del(rtd->dev); 1326 rtd->dev_registered = 0; 1327 } 1328 1329 if (codec && codec->probed) 1330 soc_remove_codec(codec); 1331 } 1332 1333 static int snd_soc_init_codec_cache(struct snd_soc_codec *codec, 1334 enum snd_soc_compress_type compress_type) 1335 { 1336 int ret; 1337 1338 if (codec->cache_init) 1339 return 0; 1340 1341 /* override the compress_type if necessary */ 1342 if (compress_type && codec->compress_type != compress_type) 1343 codec->compress_type = compress_type; 1344 ret = snd_soc_cache_init(codec); 1345 if (ret < 0) { 1346 dev_err(codec->dev, "Failed to set cache compression type: %d\n", 1347 ret); 1348 return ret; 1349 } 1350 codec->cache_init = 1; 1351 return 0; 1352 } 1353 1354 static void snd_soc_instantiate_card(struct snd_soc_card *card) 1355 { 1356 struct snd_soc_codec *codec; 1357 struct snd_soc_codec_conf *codec_conf; 1358 enum snd_soc_compress_type compress_type; 1359 struct snd_soc_dai_link *dai_link; 1360 int ret, i, order; 1361 1362 mutex_lock(&card->mutex); 1363 1364 if (card->instantiated) { 1365 mutex_unlock(&card->mutex); 1366 return; 1367 } 1368 1369 /* bind DAIs */ 1370 for (i = 0; i < card->num_links; i++) 1371 soc_bind_dai_link(card, i); 1372 1373 /* bind completed ? */ 1374 if (card->num_rtd != card->num_links) { 1375 mutex_unlock(&card->mutex); 1376 return; 1377 } 1378 1379 /* initialize the register cache for each available codec */ 1380 list_for_each_entry(codec, &codec_list, list) { 1381 if (codec->cache_init) 1382 continue; 1383 /* by default we don't override the compress_type */ 1384 compress_type = 0; 1385 /* check to see if we need to override the compress_type */ 1386 for (i = 0; i < card->num_configs; ++i) { 1387 codec_conf = &card->codec_conf[i]; 1388 if (!strcmp(codec->name, codec_conf->dev_name)) { 1389 compress_type = codec_conf->compress_type; 1390 if (compress_type && compress_type 1391 != codec->compress_type) 1392 break; 1393 } 1394 } 1395 ret = snd_soc_init_codec_cache(codec, compress_type); 1396 if (ret < 0) { 1397 mutex_unlock(&card->mutex); 1398 return; 1399 } 1400 } 1401 1402 /* card bind complete so register a sound card */ 1403 ret = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, 1404 card->owner, 0, &card->snd_card); 1405 if (ret < 0) { 1406 printk(KERN_ERR "asoc: can't create sound card for card %s\n", 1407 card->name); 1408 mutex_unlock(&card->mutex); 1409 return; 1410 } 1411 card->snd_card->dev = card->dev; 1412 1413 card->dapm.bias_level = SND_SOC_BIAS_OFF; 1414 card->dapm.dev = card->dev; 1415 card->dapm.card = card; 1416 list_add(&card->dapm.list, &card->dapm_list); 1417 1418 #ifdef CONFIG_DEBUG_FS 1419 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); 1420 #endif 1421 1422 #ifdef CONFIG_PM_SLEEP 1423 /* deferred resume work */ 1424 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 1425 #endif 1426 1427 if (card->dapm_widgets) 1428 snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, 1429 card->num_dapm_widgets); 1430 1431 /* initialise the sound card only once */ 1432 if (card->probe) { 1433 ret = card->probe(card); 1434 if (ret < 0) 1435 goto card_probe_error; 1436 } 1437 1438 /* early DAI link probe */ 1439 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1440 order++) { 1441 for (i = 0; i < card->num_links; i++) { 1442 ret = soc_probe_dai_link(card, i, order); 1443 if (ret < 0) { 1444 pr_err("asoc: failed to instantiate card %s: %d\n", 1445 card->name, ret); 1446 goto probe_dai_err; 1447 } 1448 } 1449 } 1450 1451 for (i = 0; i < card->num_aux_devs; i++) { 1452 ret = soc_probe_aux_dev(card, i); 1453 if (ret < 0) { 1454 pr_err("asoc: failed to add auxiliary devices %s: %d\n", 1455 card->name, ret); 1456 goto probe_aux_dev_err; 1457 } 1458 } 1459 1460 /* We should have a non-codec control add function but we don't */ 1461 if (card->controls) 1462 snd_soc_add_controls(list_first_entry(&card->codec_dev_list, 1463 struct snd_soc_codec, 1464 card_list), 1465 card->controls, 1466 card->num_controls); 1467 1468 if (card->dapm_routes) 1469 snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, 1470 card->num_dapm_routes); 1471 1472 snd_soc_dapm_new_widgets(&card->dapm); 1473 1474 for (i = 0; i < card->num_links; i++) { 1475 dai_link = &card->dai_link[i]; 1476 1477 if (dai_link->dai_fmt) { 1478 ret = snd_soc_dai_set_fmt(card->rtd[i].codec_dai, 1479 dai_link->dai_fmt); 1480 if (ret != 0) 1481 dev_warn(card->rtd[i].codec_dai->dev, 1482 "Failed to set DAI format: %d\n", 1483 ret); 1484 1485 ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai, 1486 dai_link->dai_fmt); 1487 if (ret != 0) 1488 dev_warn(card->rtd[i].cpu_dai->dev, 1489 "Failed to set DAI format: %d\n", 1490 ret); 1491 } 1492 } 1493 1494 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), 1495 "%s", card->name); 1496 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), 1497 "%s", card->long_name ? card->long_name : card->name); 1498 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), 1499 "%s", card->driver_name ? card->driver_name : card->name); 1500 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { 1501 switch (card->snd_card->driver[i]) { 1502 case '_': 1503 case '-': 1504 case '\0': 1505 break; 1506 default: 1507 if (!isalnum(card->snd_card->driver[i])) 1508 card->snd_card->driver[i] = '_'; 1509 break; 1510 } 1511 } 1512 1513 if (card->late_probe) { 1514 ret = card->late_probe(card); 1515 if (ret < 0) { 1516 dev_err(card->dev, "%s late_probe() failed: %d\n", 1517 card->name, ret); 1518 goto probe_aux_dev_err; 1519 } 1520 } 1521 1522 snd_soc_dapm_new_widgets(&card->dapm); 1523 1524 if (card->fully_routed) 1525 list_for_each_entry(codec, &card->codec_dev_list, card_list) 1526 snd_soc_dapm_auto_nc_codec_pins(codec); 1527 1528 ret = snd_card_register(card->snd_card); 1529 if (ret < 0) { 1530 printk(KERN_ERR "asoc: failed to register soundcard for %s\n", card->name); 1531 goto probe_aux_dev_err; 1532 } 1533 1534 #ifdef CONFIG_SND_SOC_AC97_BUS 1535 /* register any AC97 codecs */ 1536 for (i = 0; i < card->num_rtd; i++) { 1537 ret = soc_register_ac97_dai_link(&card->rtd[i]); 1538 if (ret < 0) { 1539 printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name); 1540 while (--i >= 0) 1541 soc_unregister_ac97_dai_link(card->rtd[i].codec); 1542 goto probe_aux_dev_err; 1543 } 1544 } 1545 #endif 1546 1547 card->instantiated = 1; 1548 snd_soc_dapm_sync(&card->dapm); 1549 mutex_unlock(&card->mutex); 1550 return; 1551 1552 probe_aux_dev_err: 1553 for (i = 0; i < card->num_aux_devs; i++) 1554 soc_remove_aux_dev(card, i); 1555 1556 probe_dai_err: 1557 soc_remove_dai_links(card); 1558 1559 card_probe_error: 1560 if (card->remove) 1561 card->remove(card); 1562 1563 snd_card_free(card->snd_card); 1564 1565 mutex_unlock(&card->mutex); 1566 } 1567 1568 /* 1569 * Attempt to initialise any uninitialised cards. Must be called with 1570 * client_mutex. 1571 */ 1572 static void snd_soc_instantiate_cards(void) 1573 { 1574 struct snd_soc_card *card; 1575 list_for_each_entry(card, &card_list, list) 1576 snd_soc_instantiate_card(card); 1577 } 1578 1579 /* probes a new socdev */ 1580 static int soc_probe(struct platform_device *pdev) 1581 { 1582 struct snd_soc_card *card = platform_get_drvdata(pdev); 1583 int ret = 0; 1584 1585 /* 1586 * no card, so machine driver should be registering card 1587 * we should not be here in that case so ret error 1588 */ 1589 if (!card) 1590 return -EINVAL; 1591 1592 /* Bodge while we unpick instantiation */ 1593 card->dev = &pdev->dev; 1594 1595 ret = snd_soc_register_card(card); 1596 if (ret != 0) { 1597 dev_err(&pdev->dev, "Failed to register card\n"); 1598 return ret; 1599 } 1600 1601 return 0; 1602 } 1603 1604 static int soc_cleanup_card_resources(struct snd_soc_card *card) 1605 { 1606 int i; 1607 1608 /* make sure any delayed work runs */ 1609 for (i = 0; i < card->num_rtd; i++) { 1610 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1611 flush_delayed_work_sync(&rtd->delayed_work); 1612 } 1613 1614 /* remove auxiliary devices */ 1615 for (i = 0; i < card->num_aux_devs; i++) 1616 soc_remove_aux_dev(card, i); 1617 1618 /* remove and free each DAI */ 1619 soc_remove_dai_links(card); 1620 1621 soc_cleanup_card_debugfs(card); 1622 1623 /* remove the card */ 1624 if (card->remove) 1625 card->remove(card); 1626 1627 snd_soc_dapm_free(&card->dapm); 1628 1629 kfree(card->rtd); 1630 snd_card_free(card->snd_card); 1631 return 0; 1632 1633 } 1634 1635 /* removes a socdev */ 1636 static int soc_remove(struct platform_device *pdev) 1637 { 1638 struct snd_soc_card *card = platform_get_drvdata(pdev); 1639 1640 snd_soc_unregister_card(card); 1641 return 0; 1642 } 1643 1644 int snd_soc_poweroff(struct device *dev) 1645 { 1646 struct snd_soc_card *card = dev_get_drvdata(dev); 1647 int i; 1648 1649 if (!card->instantiated) 1650 return 0; 1651 1652 /* Flush out pmdown_time work - we actually do want to run it 1653 * now, we're shutting down so no imminent restart. */ 1654 for (i = 0; i < card->num_rtd; i++) { 1655 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1656 flush_delayed_work_sync(&rtd->delayed_work); 1657 } 1658 1659 snd_soc_dapm_shutdown(card); 1660 1661 return 0; 1662 } 1663 EXPORT_SYMBOL_GPL(snd_soc_poweroff); 1664 1665 const struct dev_pm_ops snd_soc_pm_ops = { 1666 .suspend = snd_soc_suspend, 1667 .resume = snd_soc_resume, 1668 .poweroff = snd_soc_poweroff, 1669 }; 1670 EXPORT_SYMBOL_GPL(snd_soc_pm_ops); 1671 1672 /* ASoC platform driver */ 1673 static struct platform_driver soc_driver = { 1674 .driver = { 1675 .name = "soc-audio", 1676 .owner = THIS_MODULE, 1677 .pm = &snd_soc_pm_ops, 1678 }, 1679 .probe = soc_probe, 1680 .remove = soc_remove, 1681 }; 1682 1683 /** 1684 * snd_soc_codec_volatile_register: Report if a register is volatile. 1685 * 1686 * @codec: CODEC to query. 1687 * @reg: Register to query. 1688 * 1689 * Boolean function indiciating if a CODEC register is volatile. 1690 */ 1691 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, 1692 unsigned int reg) 1693 { 1694 if (codec->volatile_register) 1695 return codec->volatile_register(codec, reg); 1696 else 1697 return 0; 1698 } 1699 EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register); 1700 1701 /** 1702 * snd_soc_codec_readable_register: Report if a register is readable. 1703 * 1704 * @codec: CODEC to query. 1705 * @reg: Register to query. 1706 * 1707 * Boolean function indicating if a CODEC register is readable. 1708 */ 1709 int snd_soc_codec_readable_register(struct snd_soc_codec *codec, 1710 unsigned int reg) 1711 { 1712 if (codec->readable_register) 1713 return codec->readable_register(codec, reg); 1714 else 1715 return 1; 1716 } 1717 EXPORT_SYMBOL_GPL(snd_soc_codec_readable_register); 1718 1719 /** 1720 * snd_soc_codec_writable_register: Report if a register is writable. 1721 * 1722 * @codec: CODEC to query. 1723 * @reg: Register to query. 1724 * 1725 * Boolean function indicating if a CODEC register is writable. 1726 */ 1727 int snd_soc_codec_writable_register(struct snd_soc_codec *codec, 1728 unsigned int reg) 1729 { 1730 if (codec->writable_register) 1731 return codec->writable_register(codec, reg); 1732 else 1733 return 1; 1734 } 1735 EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register); 1736 1737 int snd_soc_platform_read(struct snd_soc_platform *platform, 1738 unsigned int reg) 1739 { 1740 unsigned int ret; 1741 1742 if (!platform->driver->read) { 1743 dev_err(platform->dev, "platform has no read back\n"); 1744 return -1; 1745 } 1746 1747 ret = platform->driver->read(platform, reg); 1748 dev_dbg(platform->dev, "read %x => %x\n", reg, ret); 1749 trace_snd_soc_preg_read(platform, reg, ret); 1750 1751 return ret; 1752 } 1753 EXPORT_SYMBOL_GPL(snd_soc_platform_read); 1754 1755 int snd_soc_platform_write(struct snd_soc_platform *platform, 1756 unsigned int reg, unsigned int val) 1757 { 1758 if (!platform->driver->write) { 1759 dev_err(platform->dev, "platform has no write back\n"); 1760 return -1; 1761 } 1762 1763 dev_dbg(platform->dev, "write %x = %x\n", reg, val); 1764 trace_snd_soc_preg_write(platform, reg, val); 1765 return platform->driver->write(platform, reg, val); 1766 } 1767 EXPORT_SYMBOL_GPL(snd_soc_platform_write); 1768 1769 /** 1770 * snd_soc_new_ac97_codec - initailise AC97 device 1771 * @codec: audio codec 1772 * @ops: AC97 bus operations 1773 * @num: AC97 codec number 1774 * 1775 * Initialises AC97 codec resources for use by ad-hoc devices only. 1776 */ 1777 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, 1778 struct snd_ac97_bus_ops *ops, int num) 1779 { 1780 mutex_lock(&codec->mutex); 1781 1782 codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); 1783 if (codec->ac97 == NULL) { 1784 mutex_unlock(&codec->mutex); 1785 return -ENOMEM; 1786 } 1787 1788 codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL); 1789 if (codec->ac97->bus == NULL) { 1790 kfree(codec->ac97); 1791 codec->ac97 = NULL; 1792 mutex_unlock(&codec->mutex); 1793 return -ENOMEM; 1794 } 1795 1796 codec->ac97->bus->ops = ops; 1797 codec->ac97->num = num; 1798 1799 /* 1800 * Mark the AC97 device to be created by us. This way we ensure that the 1801 * device will be registered with the device subsystem later on. 1802 */ 1803 codec->ac97_created = 1; 1804 1805 mutex_unlock(&codec->mutex); 1806 return 0; 1807 } 1808 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec); 1809 1810 /** 1811 * snd_soc_free_ac97_codec - free AC97 codec device 1812 * @codec: audio codec 1813 * 1814 * Frees AC97 codec device resources. 1815 */ 1816 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec) 1817 { 1818 mutex_lock(&codec->mutex); 1819 #ifdef CONFIG_SND_SOC_AC97_BUS 1820 soc_unregister_ac97_dai_link(codec); 1821 #endif 1822 kfree(codec->ac97->bus); 1823 kfree(codec->ac97); 1824 codec->ac97 = NULL; 1825 codec->ac97_created = 0; 1826 mutex_unlock(&codec->mutex); 1827 } 1828 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec); 1829 1830 unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg) 1831 { 1832 unsigned int ret; 1833 1834 ret = codec->read(codec, reg); 1835 dev_dbg(codec->dev, "read %x => %x\n", reg, ret); 1836 trace_snd_soc_reg_read(codec, reg, ret); 1837 1838 return ret; 1839 } 1840 EXPORT_SYMBOL_GPL(snd_soc_read); 1841 1842 unsigned int snd_soc_write(struct snd_soc_codec *codec, 1843 unsigned int reg, unsigned int val) 1844 { 1845 dev_dbg(codec->dev, "write %x = %x\n", reg, val); 1846 trace_snd_soc_reg_write(codec, reg, val); 1847 return codec->write(codec, reg, val); 1848 } 1849 EXPORT_SYMBOL_GPL(snd_soc_write); 1850 1851 unsigned int snd_soc_bulk_write_raw(struct snd_soc_codec *codec, 1852 unsigned int reg, const void *data, size_t len) 1853 { 1854 return codec->bulk_write_raw(codec, reg, data, len); 1855 } 1856 EXPORT_SYMBOL_GPL(snd_soc_bulk_write_raw); 1857 1858 /** 1859 * snd_soc_update_bits - update codec register bits 1860 * @codec: audio codec 1861 * @reg: codec register 1862 * @mask: register mask 1863 * @value: new value 1864 * 1865 * Writes new register value. 1866 * 1867 * Returns 1 for change, 0 for no change, or negative error code. 1868 */ 1869 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, 1870 unsigned int mask, unsigned int value) 1871 { 1872 int change; 1873 unsigned int old, new; 1874 int ret; 1875 1876 ret = snd_soc_read(codec, reg); 1877 if (ret < 0) 1878 return ret; 1879 1880 old = ret; 1881 new = (old & ~mask) | (value & mask); 1882 change = old != new; 1883 if (change) { 1884 ret = snd_soc_write(codec, reg, new); 1885 if (ret < 0) 1886 return ret; 1887 } 1888 1889 return change; 1890 } 1891 EXPORT_SYMBOL_GPL(snd_soc_update_bits); 1892 1893 /** 1894 * snd_soc_update_bits_locked - update codec register bits 1895 * @codec: audio codec 1896 * @reg: codec register 1897 * @mask: register mask 1898 * @value: new value 1899 * 1900 * Writes new register value, and takes the codec mutex. 1901 * 1902 * Returns 1 for change else 0. 1903 */ 1904 int snd_soc_update_bits_locked(struct snd_soc_codec *codec, 1905 unsigned short reg, unsigned int mask, 1906 unsigned int value) 1907 { 1908 int change; 1909 1910 mutex_lock(&codec->mutex); 1911 change = snd_soc_update_bits(codec, reg, mask, value); 1912 mutex_unlock(&codec->mutex); 1913 1914 return change; 1915 } 1916 EXPORT_SYMBOL_GPL(snd_soc_update_bits_locked); 1917 1918 /** 1919 * snd_soc_test_bits - test register for change 1920 * @codec: audio codec 1921 * @reg: codec register 1922 * @mask: register mask 1923 * @value: new value 1924 * 1925 * Tests a register with a new value and checks if the new value is 1926 * different from the old value. 1927 * 1928 * Returns 1 for change else 0. 1929 */ 1930 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, 1931 unsigned int mask, unsigned int value) 1932 { 1933 int change; 1934 unsigned int old, new; 1935 1936 old = snd_soc_read(codec, reg); 1937 new = (old & ~mask) | value; 1938 change = old != new; 1939 1940 return change; 1941 } 1942 EXPORT_SYMBOL_GPL(snd_soc_test_bits); 1943 1944 /** 1945 * snd_soc_set_runtime_hwparams - set the runtime hardware parameters 1946 * @substream: the pcm substream 1947 * @hw: the hardware parameters 1948 * 1949 * Sets the substream runtime hardware parameters. 1950 */ 1951 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, 1952 const struct snd_pcm_hardware *hw) 1953 { 1954 struct snd_pcm_runtime *runtime = substream->runtime; 1955 runtime->hw.info = hw->info; 1956 runtime->hw.formats = hw->formats; 1957 runtime->hw.period_bytes_min = hw->period_bytes_min; 1958 runtime->hw.period_bytes_max = hw->period_bytes_max; 1959 runtime->hw.periods_min = hw->periods_min; 1960 runtime->hw.periods_max = hw->periods_max; 1961 runtime->hw.buffer_bytes_max = hw->buffer_bytes_max; 1962 runtime->hw.fifo_size = hw->fifo_size; 1963 return 0; 1964 } 1965 EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams); 1966 1967 /** 1968 * snd_soc_cnew - create new control 1969 * @_template: control template 1970 * @data: control private data 1971 * @long_name: control long name 1972 * @prefix: control name prefix 1973 * 1974 * Create a new mixer control from a template control. 1975 * 1976 * Returns 0 for success, else error. 1977 */ 1978 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 1979 void *data, char *long_name, 1980 const char *prefix) 1981 { 1982 struct snd_kcontrol_new template; 1983 struct snd_kcontrol *kcontrol; 1984 char *name = NULL; 1985 int name_len; 1986 1987 memcpy(&template, _template, sizeof(template)); 1988 template.index = 0; 1989 1990 if (!long_name) 1991 long_name = template.name; 1992 1993 if (prefix) { 1994 name_len = strlen(long_name) + strlen(prefix) + 2; 1995 name = kmalloc(name_len, GFP_KERNEL); 1996 if (!name) 1997 return NULL; 1998 1999 snprintf(name, name_len, "%s %s", prefix, long_name); 2000 2001 template.name = name; 2002 } else { 2003 template.name = long_name; 2004 } 2005 2006 kcontrol = snd_ctl_new1(&template, data); 2007 2008 kfree(name); 2009 2010 return kcontrol; 2011 } 2012 EXPORT_SYMBOL_GPL(snd_soc_cnew); 2013 2014 /** 2015 * snd_soc_add_controls - add an array of controls to a codec. 2016 * Convienience function to add a list of controls. Many codecs were 2017 * duplicating this code. 2018 * 2019 * @codec: codec to add controls to 2020 * @controls: array of controls to add 2021 * @num_controls: number of elements in the array 2022 * 2023 * Return 0 for success, else error. 2024 */ 2025 int snd_soc_add_controls(struct snd_soc_codec *codec, 2026 const struct snd_kcontrol_new *controls, int num_controls) 2027 { 2028 struct snd_card *card = codec->card->snd_card; 2029 int err, i; 2030 2031 for (i = 0; i < num_controls; i++) { 2032 const struct snd_kcontrol_new *control = &controls[i]; 2033 err = snd_ctl_add(card, snd_soc_cnew(control, codec, 2034 control->name, 2035 codec->name_prefix)); 2036 if (err < 0) { 2037 dev_err(codec->dev, "%s: Failed to add %s: %d\n", 2038 codec->name, control->name, err); 2039 return err; 2040 } 2041 } 2042 2043 return 0; 2044 } 2045 EXPORT_SYMBOL_GPL(snd_soc_add_controls); 2046 2047 /** 2048 * snd_soc_add_platform_controls - add an array of controls to a platform. 2049 * Convienience function to add a list of controls. 2050 * 2051 * @platform: platform to add controls to 2052 * @controls: array of controls to add 2053 * @num_controls: number of elements in the array 2054 * 2055 * Return 0 for success, else error. 2056 */ 2057 int snd_soc_add_platform_controls(struct snd_soc_platform *platform, 2058 const struct snd_kcontrol_new *controls, int num_controls) 2059 { 2060 struct snd_card *card = platform->card->snd_card; 2061 int err, i; 2062 2063 for (i = 0; i < num_controls; i++) { 2064 const struct snd_kcontrol_new *control = &controls[i]; 2065 err = snd_ctl_add(card, snd_soc_cnew(control, platform, 2066 control->name, NULL)); 2067 if (err < 0) { 2068 dev_err(platform->dev, "Failed to add %s %d\n",control->name, err); 2069 return err; 2070 } 2071 } 2072 2073 return 0; 2074 } 2075 EXPORT_SYMBOL_GPL(snd_soc_add_platform_controls); 2076 2077 /** 2078 * snd_soc_info_enum_double - enumerated double mixer info callback 2079 * @kcontrol: mixer control 2080 * @uinfo: control element information 2081 * 2082 * Callback to provide information about a double enumerated 2083 * mixer control. 2084 * 2085 * Returns 0 for success. 2086 */ 2087 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 2088 struct snd_ctl_elem_info *uinfo) 2089 { 2090 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2091 2092 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2093 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 2094 uinfo->value.enumerated.items = e->max; 2095 2096 if (uinfo->value.enumerated.item > e->max - 1) 2097 uinfo->value.enumerated.item = e->max - 1; 2098 strcpy(uinfo->value.enumerated.name, 2099 e->texts[uinfo->value.enumerated.item]); 2100 return 0; 2101 } 2102 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double); 2103 2104 /** 2105 * snd_soc_get_enum_double - enumerated double mixer get callback 2106 * @kcontrol: mixer control 2107 * @ucontrol: control element information 2108 * 2109 * Callback to get the value of a double enumerated mixer. 2110 * 2111 * Returns 0 for success. 2112 */ 2113 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, 2114 struct snd_ctl_elem_value *ucontrol) 2115 { 2116 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2117 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2118 unsigned int val, bitmask; 2119 2120 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 2121 ; 2122 val = snd_soc_read(codec, e->reg); 2123 ucontrol->value.enumerated.item[0] 2124 = (val >> e->shift_l) & (bitmask - 1); 2125 if (e->shift_l != e->shift_r) 2126 ucontrol->value.enumerated.item[1] = 2127 (val >> e->shift_r) & (bitmask - 1); 2128 2129 return 0; 2130 } 2131 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double); 2132 2133 /** 2134 * snd_soc_put_enum_double - enumerated double mixer put callback 2135 * @kcontrol: mixer control 2136 * @ucontrol: control element information 2137 * 2138 * Callback to set the value of a double enumerated mixer. 2139 * 2140 * Returns 0 for success. 2141 */ 2142 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, 2143 struct snd_ctl_elem_value *ucontrol) 2144 { 2145 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2146 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2147 unsigned int val; 2148 unsigned int mask, bitmask; 2149 2150 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 2151 ; 2152 if (ucontrol->value.enumerated.item[0] > e->max - 1) 2153 return -EINVAL; 2154 val = ucontrol->value.enumerated.item[0] << e->shift_l; 2155 mask = (bitmask - 1) << e->shift_l; 2156 if (e->shift_l != e->shift_r) { 2157 if (ucontrol->value.enumerated.item[1] > e->max - 1) 2158 return -EINVAL; 2159 val |= ucontrol->value.enumerated.item[1] << e->shift_r; 2160 mask |= (bitmask - 1) << e->shift_r; 2161 } 2162 2163 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 2164 } 2165 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double); 2166 2167 /** 2168 * snd_soc_get_value_enum_double - semi enumerated double mixer get callback 2169 * @kcontrol: mixer control 2170 * @ucontrol: control element information 2171 * 2172 * Callback to get the value of a double semi enumerated mixer. 2173 * 2174 * Semi enumerated mixer: the enumerated items are referred as values. Can be 2175 * used for handling bitfield coded enumeration for example. 2176 * 2177 * Returns 0 for success. 2178 */ 2179 int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, 2180 struct snd_ctl_elem_value *ucontrol) 2181 { 2182 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2183 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2184 unsigned int reg_val, val, mux; 2185 2186 reg_val = snd_soc_read(codec, e->reg); 2187 val = (reg_val >> e->shift_l) & e->mask; 2188 for (mux = 0; mux < e->max; mux++) { 2189 if (val == e->values[mux]) 2190 break; 2191 } 2192 ucontrol->value.enumerated.item[0] = mux; 2193 if (e->shift_l != e->shift_r) { 2194 val = (reg_val >> e->shift_r) & e->mask; 2195 for (mux = 0; mux < e->max; mux++) { 2196 if (val == e->values[mux]) 2197 break; 2198 } 2199 ucontrol->value.enumerated.item[1] = mux; 2200 } 2201 2202 return 0; 2203 } 2204 EXPORT_SYMBOL_GPL(snd_soc_get_value_enum_double); 2205 2206 /** 2207 * snd_soc_put_value_enum_double - semi enumerated double mixer put callback 2208 * @kcontrol: mixer control 2209 * @ucontrol: control element information 2210 * 2211 * Callback to set the value of a double semi enumerated mixer. 2212 * 2213 * Semi enumerated mixer: the enumerated items are referred as values. Can be 2214 * used for handling bitfield coded enumeration for example. 2215 * 2216 * Returns 0 for success. 2217 */ 2218 int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, 2219 struct snd_ctl_elem_value *ucontrol) 2220 { 2221 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2222 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2223 unsigned int val; 2224 unsigned int mask; 2225 2226 if (ucontrol->value.enumerated.item[0] > e->max - 1) 2227 return -EINVAL; 2228 val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; 2229 mask = e->mask << e->shift_l; 2230 if (e->shift_l != e->shift_r) { 2231 if (ucontrol->value.enumerated.item[1] > e->max - 1) 2232 return -EINVAL; 2233 val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; 2234 mask |= e->mask << e->shift_r; 2235 } 2236 2237 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 2238 } 2239 EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double); 2240 2241 /** 2242 * snd_soc_info_enum_ext - external enumerated single mixer info callback 2243 * @kcontrol: mixer control 2244 * @uinfo: control element information 2245 * 2246 * Callback to provide information about an external enumerated 2247 * single mixer. 2248 * 2249 * Returns 0 for success. 2250 */ 2251 int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, 2252 struct snd_ctl_elem_info *uinfo) 2253 { 2254 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2255 2256 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2257 uinfo->count = 1; 2258 uinfo->value.enumerated.items = e->max; 2259 2260 if (uinfo->value.enumerated.item > e->max - 1) 2261 uinfo->value.enumerated.item = e->max - 1; 2262 strcpy(uinfo->value.enumerated.name, 2263 e->texts[uinfo->value.enumerated.item]); 2264 return 0; 2265 } 2266 EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext); 2267 2268 /** 2269 * snd_soc_info_volsw_ext - external single mixer info callback 2270 * @kcontrol: mixer control 2271 * @uinfo: control element information 2272 * 2273 * Callback to provide information about a single external mixer control. 2274 * 2275 * Returns 0 for success. 2276 */ 2277 int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol, 2278 struct snd_ctl_elem_info *uinfo) 2279 { 2280 int max = kcontrol->private_value; 2281 2282 if (max == 1 && !strstr(kcontrol->id.name, " Volume")) 2283 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2284 else 2285 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2286 2287 uinfo->count = 1; 2288 uinfo->value.integer.min = 0; 2289 uinfo->value.integer.max = max; 2290 return 0; 2291 } 2292 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext); 2293 2294 /** 2295 * snd_soc_info_volsw - single mixer info callback 2296 * @kcontrol: mixer control 2297 * @uinfo: control element information 2298 * 2299 * Callback to provide information about a single mixer control, or a double 2300 * mixer control that spans 2 registers. 2301 * 2302 * Returns 0 for success. 2303 */ 2304 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, 2305 struct snd_ctl_elem_info *uinfo) 2306 { 2307 struct soc_mixer_control *mc = 2308 (struct soc_mixer_control *)kcontrol->private_value; 2309 int platform_max; 2310 2311 if (!mc->platform_max) 2312 mc->platform_max = mc->max; 2313 platform_max = mc->platform_max; 2314 2315 if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume")) 2316 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2317 else 2318 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2319 2320 uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; 2321 uinfo->value.integer.min = 0; 2322 uinfo->value.integer.max = platform_max; 2323 return 0; 2324 } 2325 EXPORT_SYMBOL_GPL(snd_soc_info_volsw); 2326 2327 /** 2328 * snd_soc_get_volsw - single mixer get callback 2329 * @kcontrol: mixer control 2330 * @ucontrol: control element information 2331 * 2332 * Callback to get the value of a single mixer control, or a double mixer 2333 * control that spans 2 registers. 2334 * 2335 * Returns 0 for success. 2336 */ 2337 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, 2338 struct snd_ctl_elem_value *ucontrol) 2339 { 2340 struct soc_mixer_control *mc = 2341 (struct soc_mixer_control *)kcontrol->private_value; 2342 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2343 unsigned int reg = mc->reg; 2344 unsigned int reg2 = mc->rreg; 2345 unsigned int shift = mc->shift; 2346 unsigned int rshift = mc->rshift; 2347 int max = mc->max; 2348 unsigned int mask = (1 << fls(max)) - 1; 2349 unsigned int invert = mc->invert; 2350 2351 ucontrol->value.integer.value[0] = 2352 (snd_soc_read(codec, reg) >> shift) & mask; 2353 if (invert) 2354 ucontrol->value.integer.value[0] = 2355 max - ucontrol->value.integer.value[0]; 2356 2357 if (snd_soc_volsw_is_stereo(mc)) { 2358 if (reg == reg2) 2359 ucontrol->value.integer.value[1] = 2360 (snd_soc_read(codec, reg) >> rshift) & mask; 2361 else 2362 ucontrol->value.integer.value[1] = 2363 (snd_soc_read(codec, reg2) >> shift) & mask; 2364 if (invert) 2365 ucontrol->value.integer.value[1] = 2366 max - ucontrol->value.integer.value[1]; 2367 } 2368 2369 return 0; 2370 } 2371 EXPORT_SYMBOL_GPL(snd_soc_get_volsw); 2372 2373 /** 2374 * snd_soc_put_volsw - single mixer put callback 2375 * @kcontrol: mixer control 2376 * @ucontrol: control element information 2377 * 2378 * Callback to set the value of a single mixer control, or a double mixer 2379 * control that spans 2 registers. 2380 * 2381 * Returns 0 for success. 2382 */ 2383 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, 2384 struct snd_ctl_elem_value *ucontrol) 2385 { 2386 struct soc_mixer_control *mc = 2387 (struct soc_mixer_control *)kcontrol->private_value; 2388 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2389 unsigned int reg = mc->reg; 2390 unsigned int reg2 = mc->rreg; 2391 unsigned int shift = mc->shift; 2392 unsigned int rshift = mc->rshift; 2393 int max = mc->max; 2394 unsigned int mask = (1 << fls(max)) - 1; 2395 unsigned int invert = mc->invert; 2396 int err; 2397 bool type_2r = 0; 2398 unsigned int val2 = 0; 2399 unsigned int val, val_mask; 2400 2401 val = (ucontrol->value.integer.value[0] & mask); 2402 if (invert) 2403 val = max - val; 2404 val_mask = mask << shift; 2405 val = val << shift; 2406 if (snd_soc_volsw_is_stereo(mc)) { 2407 val2 = (ucontrol->value.integer.value[1] & mask); 2408 if (invert) 2409 val2 = max - val2; 2410 if (reg == reg2) { 2411 val_mask |= mask << rshift; 2412 val |= val2 << rshift; 2413 } else { 2414 val2 = val2 << shift; 2415 type_2r = 1; 2416 } 2417 } 2418 err = snd_soc_update_bits_locked(codec, reg, val_mask, val); 2419 if (err < 0) 2420 return err; 2421 2422 if (type_2r) 2423 err = snd_soc_update_bits_locked(codec, reg2, val_mask, val2); 2424 2425 return err; 2426 } 2427 EXPORT_SYMBOL_GPL(snd_soc_put_volsw); 2428 2429 /** 2430 * snd_soc_info_volsw_s8 - signed mixer info callback 2431 * @kcontrol: mixer control 2432 * @uinfo: control element information 2433 * 2434 * Callback to provide information about a signed mixer control. 2435 * 2436 * Returns 0 for success. 2437 */ 2438 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, 2439 struct snd_ctl_elem_info *uinfo) 2440 { 2441 struct soc_mixer_control *mc = 2442 (struct soc_mixer_control *)kcontrol->private_value; 2443 int platform_max; 2444 int min = mc->min; 2445 2446 if (!mc->platform_max) 2447 mc->platform_max = mc->max; 2448 platform_max = mc->platform_max; 2449 2450 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2451 uinfo->count = 2; 2452 uinfo->value.integer.min = 0; 2453 uinfo->value.integer.max = platform_max - min; 2454 return 0; 2455 } 2456 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8); 2457 2458 /** 2459 * snd_soc_get_volsw_s8 - signed mixer get callback 2460 * @kcontrol: mixer control 2461 * @ucontrol: control element information 2462 * 2463 * Callback to get the value of a signed mixer control. 2464 * 2465 * Returns 0 for success. 2466 */ 2467 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, 2468 struct snd_ctl_elem_value *ucontrol) 2469 { 2470 struct soc_mixer_control *mc = 2471 (struct soc_mixer_control *)kcontrol->private_value; 2472 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2473 unsigned int reg = mc->reg; 2474 int min = mc->min; 2475 int val = snd_soc_read(codec, reg); 2476 2477 ucontrol->value.integer.value[0] = 2478 ((signed char)(val & 0xff))-min; 2479 ucontrol->value.integer.value[1] = 2480 ((signed char)((val >> 8) & 0xff))-min; 2481 return 0; 2482 } 2483 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8); 2484 2485 /** 2486 * snd_soc_put_volsw_sgn - signed mixer put callback 2487 * @kcontrol: mixer control 2488 * @ucontrol: control element information 2489 * 2490 * Callback to set the value of a signed mixer control. 2491 * 2492 * Returns 0 for success. 2493 */ 2494 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 2495 struct snd_ctl_elem_value *ucontrol) 2496 { 2497 struct soc_mixer_control *mc = 2498 (struct soc_mixer_control *)kcontrol->private_value; 2499 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2500 unsigned int reg = mc->reg; 2501 int min = mc->min; 2502 unsigned int val; 2503 2504 val = (ucontrol->value.integer.value[0]+min) & 0xff; 2505 val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; 2506 2507 return snd_soc_update_bits_locked(codec, reg, 0xffff, val); 2508 } 2509 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8); 2510 2511 /** 2512 * snd_soc_limit_volume - Set new limit to an existing volume control. 2513 * 2514 * @codec: where to look for the control 2515 * @name: Name of the control 2516 * @max: new maximum limit 2517 * 2518 * Return 0 for success, else error. 2519 */ 2520 int snd_soc_limit_volume(struct snd_soc_codec *codec, 2521 const char *name, int max) 2522 { 2523 struct snd_card *card = codec->card->snd_card; 2524 struct snd_kcontrol *kctl; 2525 struct soc_mixer_control *mc; 2526 int found = 0; 2527 int ret = -EINVAL; 2528 2529 /* Sanity check for name and max */ 2530 if (unlikely(!name || max <= 0)) 2531 return -EINVAL; 2532 2533 list_for_each_entry(kctl, &card->controls, list) { 2534 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) { 2535 found = 1; 2536 break; 2537 } 2538 } 2539 if (found) { 2540 mc = (struct soc_mixer_control *)kctl->private_value; 2541 if (max <= mc->max) { 2542 mc->platform_max = max; 2543 ret = 0; 2544 } 2545 } 2546 return ret; 2547 } 2548 EXPORT_SYMBOL_GPL(snd_soc_limit_volume); 2549 2550 /** 2551 * snd_soc_info_volsw_2r_sx - double with tlv and variable data size 2552 * mixer info callback 2553 * @kcontrol: mixer control 2554 * @uinfo: control element information 2555 * 2556 * Returns 0 for success. 2557 */ 2558 int snd_soc_info_volsw_2r_sx(struct snd_kcontrol *kcontrol, 2559 struct snd_ctl_elem_info *uinfo) 2560 { 2561 struct soc_mixer_control *mc = 2562 (struct soc_mixer_control *)kcontrol->private_value; 2563 int max = mc->max; 2564 int min = mc->min; 2565 2566 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2567 uinfo->count = 2; 2568 uinfo->value.integer.min = 0; 2569 uinfo->value.integer.max = max-min; 2570 2571 return 0; 2572 } 2573 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_2r_sx); 2574 2575 /** 2576 * snd_soc_get_volsw_2r_sx - double with tlv and variable data size 2577 * mixer get callback 2578 * @kcontrol: mixer control 2579 * @uinfo: control element information 2580 * 2581 * Returns 0 for success. 2582 */ 2583 int snd_soc_get_volsw_2r_sx(struct snd_kcontrol *kcontrol, 2584 struct snd_ctl_elem_value *ucontrol) 2585 { 2586 struct soc_mixer_control *mc = 2587 (struct soc_mixer_control *)kcontrol->private_value; 2588 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2589 unsigned int mask = (1<<mc->shift)-1; 2590 int min = mc->min; 2591 int val = snd_soc_read(codec, mc->reg) & mask; 2592 int valr = snd_soc_read(codec, mc->rreg) & mask; 2593 2594 ucontrol->value.integer.value[0] = ((val & 0xff)-min) & mask; 2595 ucontrol->value.integer.value[1] = ((valr & 0xff)-min) & mask; 2596 return 0; 2597 } 2598 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_2r_sx); 2599 2600 /** 2601 * snd_soc_put_volsw_2r_sx - double with tlv and variable data size 2602 * mixer put callback 2603 * @kcontrol: mixer control 2604 * @uinfo: control element information 2605 * 2606 * Returns 0 for success. 2607 */ 2608 int snd_soc_put_volsw_2r_sx(struct snd_kcontrol *kcontrol, 2609 struct snd_ctl_elem_value *ucontrol) 2610 { 2611 struct soc_mixer_control *mc = 2612 (struct soc_mixer_control *)kcontrol->private_value; 2613 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2614 unsigned int mask = (1<<mc->shift)-1; 2615 int min = mc->min; 2616 int ret; 2617 unsigned int val, valr, oval, ovalr; 2618 2619 val = ((ucontrol->value.integer.value[0]+min) & 0xff); 2620 val &= mask; 2621 valr = ((ucontrol->value.integer.value[1]+min) & 0xff); 2622 valr &= mask; 2623 2624 oval = snd_soc_read(codec, mc->reg) & mask; 2625 ovalr = snd_soc_read(codec, mc->rreg) & mask; 2626 2627 ret = 0; 2628 if (oval != val) { 2629 ret = snd_soc_write(codec, mc->reg, val); 2630 if (ret < 0) 2631 return ret; 2632 } 2633 if (ovalr != valr) { 2634 ret = snd_soc_write(codec, mc->rreg, valr); 2635 if (ret < 0) 2636 return ret; 2637 } 2638 2639 return 0; 2640 } 2641 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r_sx); 2642 2643 /** 2644 * snd_soc_dai_set_sysclk - configure DAI system or master clock. 2645 * @dai: DAI 2646 * @clk_id: DAI specific clock ID 2647 * @freq: new clock frequency in Hz 2648 * @dir: new clock direction - input/output. 2649 * 2650 * Configures the DAI master (MCLK) or system (SYSCLK) clocking. 2651 */ 2652 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, 2653 unsigned int freq, int dir) 2654 { 2655 if (dai->driver && dai->driver->ops->set_sysclk) 2656 return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir); 2657 else if (dai->codec && dai->codec->driver->set_sysclk) 2658 return dai->codec->driver->set_sysclk(dai->codec, clk_id, 0, 2659 freq, dir); 2660 else 2661 return -EINVAL; 2662 } 2663 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk); 2664 2665 /** 2666 * snd_soc_codec_set_sysclk - configure CODEC system or master clock. 2667 * @codec: CODEC 2668 * @clk_id: DAI specific clock ID 2669 * @source: Source for the clock 2670 * @freq: new clock frequency in Hz 2671 * @dir: new clock direction - input/output. 2672 * 2673 * Configures the CODEC master (MCLK) or system (SYSCLK) clocking. 2674 */ 2675 int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id, 2676 int source, unsigned int freq, int dir) 2677 { 2678 if (codec->driver->set_sysclk) 2679 return codec->driver->set_sysclk(codec, clk_id, source, 2680 freq, dir); 2681 else 2682 return -EINVAL; 2683 } 2684 EXPORT_SYMBOL_GPL(snd_soc_codec_set_sysclk); 2685 2686 /** 2687 * snd_soc_dai_set_clkdiv - configure DAI clock dividers. 2688 * @dai: DAI 2689 * @div_id: DAI specific clock divider ID 2690 * @div: new clock divisor. 2691 * 2692 * Configures the clock dividers. This is used to derive the best DAI bit and 2693 * frame clocks from the system or master clock. It's best to set the DAI bit 2694 * and frame clocks as low as possible to save system power. 2695 */ 2696 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, 2697 int div_id, int div) 2698 { 2699 if (dai->driver && dai->driver->ops->set_clkdiv) 2700 return dai->driver->ops->set_clkdiv(dai, div_id, div); 2701 else 2702 return -EINVAL; 2703 } 2704 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv); 2705 2706 /** 2707 * snd_soc_dai_set_pll - configure DAI PLL. 2708 * @dai: DAI 2709 * @pll_id: DAI specific PLL ID 2710 * @source: DAI specific source for the PLL 2711 * @freq_in: PLL input clock frequency in Hz 2712 * @freq_out: requested PLL output clock frequency in Hz 2713 * 2714 * Configures and enables PLL to generate output clock based on input clock. 2715 */ 2716 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source, 2717 unsigned int freq_in, unsigned int freq_out) 2718 { 2719 if (dai->driver && dai->driver->ops->set_pll) 2720 return dai->driver->ops->set_pll(dai, pll_id, source, 2721 freq_in, freq_out); 2722 else if (dai->codec && dai->codec->driver->set_pll) 2723 return dai->codec->driver->set_pll(dai->codec, pll_id, source, 2724 freq_in, freq_out); 2725 else 2726 return -EINVAL; 2727 } 2728 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll); 2729 2730 /* 2731 * snd_soc_codec_set_pll - configure codec PLL. 2732 * @codec: CODEC 2733 * @pll_id: DAI specific PLL ID 2734 * @source: DAI specific source for the PLL 2735 * @freq_in: PLL input clock frequency in Hz 2736 * @freq_out: requested PLL output clock frequency in Hz 2737 * 2738 * Configures and enables PLL to generate output clock based on input clock. 2739 */ 2740 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source, 2741 unsigned int freq_in, unsigned int freq_out) 2742 { 2743 if (codec->driver->set_pll) 2744 return codec->driver->set_pll(codec, pll_id, source, 2745 freq_in, freq_out); 2746 else 2747 return -EINVAL; 2748 } 2749 EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll); 2750 2751 /** 2752 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 2753 * @dai: DAI 2754 * @fmt: SND_SOC_DAIFMT_ format value. 2755 * 2756 * Configures the DAI hardware format and clocking. 2757 */ 2758 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 2759 { 2760 if (dai->driver && dai->driver->ops->set_fmt) 2761 return dai->driver->ops->set_fmt(dai, fmt); 2762 else 2763 return -EINVAL; 2764 } 2765 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt); 2766 2767 /** 2768 * snd_soc_dai_set_tdm_slot - configure DAI TDM. 2769 * @dai: DAI 2770 * @tx_mask: bitmask representing active TX slots. 2771 * @rx_mask: bitmask representing active RX slots. 2772 * @slots: Number of slots in use. 2773 * @slot_width: Width in bits for each slot. 2774 * 2775 * Configures a DAI for TDM operation. Both mask and slots are codec and DAI 2776 * specific. 2777 */ 2778 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, 2779 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 2780 { 2781 if (dai->driver && dai->driver->ops->set_tdm_slot) 2782 return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask, 2783 slots, slot_width); 2784 else 2785 return -EINVAL; 2786 } 2787 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot); 2788 2789 /** 2790 * snd_soc_dai_set_channel_map - configure DAI audio channel map 2791 * @dai: DAI 2792 * @tx_num: how many TX channels 2793 * @tx_slot: pointer to an array which imply the TX slot number channel 2794 * 0~num-1 uses 2795 * @rx_num: how many RX channels 2796 * @rx_slot: pointer to an array which imply the RX slot number channel 2797 * 0~num-1 uses 2798 * 2799 * configure the relationship between channel number and TDM slot number. 2800 */ 2801 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai, 2802 unsigned int tx_num, unsigned int *tx_slot, 2803 unsigned int rx_num, unsigned int *rx_slot) 2804 { 2805 if (dai->driver && dai->driver->ops->set_channel_map) 2806 return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot, 2807 rx_num, rx_slot); 2808 else 2809 return -EINVAL; 2810 } 2811 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map); 2812 2813 /** 2814 * snd_soc_dai_set_tristate - configure DAI system or master clock. 2815 * @dai: DAI 2816 * @tristate: tristate enable 2817 * 2818 * Tristates the DAI so that others can use it. 2819 */ 2820 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) 2821 { 2822 if (dai->driver && dai->driver->ops->set_tristate) 2823 return dai->driver->ops->set_tristate(dai, tristate); 2824 else 2825 return -EINVAL; 2826 } 2827 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate); 2828 2829 /** 2830 * snd_soc_dai_digital_mute - configure DAI system or master clock. 2831 * @dai: DAI 2832 * @mute: mute enable 2833 * 2834 * Mutes the DAI DAC. 2835 */ 2836 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute) 2837 { 2838 if (dai->driver && dai->driver->ops->digital_mute) 2839 return dai->driver->ops->digital_mute(dai, mute); 2840 else 2841 return -EINVAL; 2842 } 2843 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute); 2844 2845 /** 2846 * snd_soc_register_card - Register a card with the ASoC core 2847 * 2848 * @card: Card to register 2849 * 2850 */ 2851 int snd_soc_register_card(struct snd_soc_card *card) 2852 { 2853 int i; 2854 2855 if (!card->name || !card->dev) 2856 return -EINVAL; 2857 2858 for (i = 0; i < card->num_links; i++) { 2859 struct snd_soc_dai_link *link = &card->dai_link[i]; 2860 2861 /* 2862 * Codec must be specified by 1 of name or OF node, 2863 * not both or neither. 2864 */ 2865 if (!!link->codec_name == !!link->codec_of_node) { 2866 dev_err(card->dev, 2867 "Neither/both codec name/of_node are set\n"); 2868 return -EINVAL; 2869 } 2870 2871 /* 2872 * Platform may be specified by either name or OF node, but 2873 * can be left unspecified, and a dummy platform will be used. 2874 */ 2875 if (link->platform_name && link->platform_of_node) { 2876 dev_err(card->dev, 2877 "Both platform name/of_node are set\n"); 2878 return -EINVAL; 2879 } 2880 2881 /* 2882 * CPU DAI must be specified by 1 of name or OF node, 2883 * not both or neither. 2884 */ 2885 if (!!link->cpu_dai_name == !!link->cpu_dai_of_node) { 2886 dev_err(card->dev, 2887 "Neither/both cpu_dai name/of_node are set\n"); 2888 return -EINVAL; 2889 } 2890 } 2891 2892 dev_set_drvdata(card->dev, card); 2893 2894 snd_soc_initialize_card_lists(card); 2895 2896 soc_init_card_debugfs(card); 2897 2898 card->rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime) * 2899 (card->num_links + card->num_aux_devs), 2900 GFP_KERNEL); 2901 if (card->rtd == NULL) 2902 return -ENOMEM; 2903 card->rtd_aux = &card->rtd[card->num_links]; 2904 2905 for (i = 0; i < card->num_links; i++) 2906 card->rtd[i].dai_link = &card->dai_link[i]; 2907 2908 INIT_LIST_HEAD(&card->list); 2909 INIT_LIST_HEAD(&card->dapm_dirty); 2910 card->instantiated = 0; 2911 mutex_init(&card->mutex); 2912 2913 mutex_lock(&client_mutex); 2914 list_add(&card->list, &card_list); 2915 snd_soc_instantiate_cards(); 2916 mutex_unlock(&client_mutex); 2917 2918 dev_dbg(card->dev, "Registered card '%s'\n", card->name); 2919 2920 return 0; 2921 } 2922 EXPORT_SYMBOL_GPL(snd_soc_register_card); 2923 2924 /** 2925 * snd_soc_unregister_card - Unregister a card with the ASoC core 2926 * 2927 * @card: Card to unregister 2928 * 2929 */ 2930 int snd_soc_unregister_card(struct snd_soc_card *card) 2931 { 2932 if (card->instantiated) 2933 soc_cleanup_card_resources(card); 2934 mutex_lock(&client_mutex); 2935 list_del(&card->list); 2936 mutex_unlock(&client_mutex); 2937 dev_dbg(card->dev, "Unregistered card '%s'\n", card->name); 2938 2939 return 0; 2940 } 2941 EXPORT_SYMBOL_GPL(snd_soc_unregister_card); 2942 2943 /* 2944 * Simplify DAI link configuration by removing ".-1" from device names 2945 * and sanitizing names. 2946 */ 2947 static char *fmt_single_name(struct device *dev, int *id) 2948 { 2949 char *found, name[NAME_SIZE]; 2950 int id1, id2; 2951 2952 if (dev_name(dev) == NULL) 2953 return NULL; 2954 2955 strlcpy(name, dev_name(dev), NAME_SIZE); 2956 2957 /* are we a "%s.%d" name (platform and SPI components) */ 2958 found = strstr(name, dev->driver->name); 2959 if (found) { 2960 /* get ID */ 2961 if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) { 2962 2963 /* discard ID from name if ID == -1 */ 2964 if (*id == -1) 2965 found[strlen(dev->driver->name)] = '\0'; 2966 } 2967 2968 } else { 2969 /* I2C component devices are named "bus-addr" */ 2970 if (sscanf(name, "%x-%x", &id1, &id2) == 2) { 2971 char tmp[NAME_SIZE]; 2972 2973 /* create unique ID number from I2C addr and bus */ 2974 *id = ((id1 & 0xffff) << 16) + id2; 2975 2976 /* sanitize component name for DAI link creation */ 2977 snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name); 2978 strlcpy(name, tmp, NAME_SIZE); 2979 } else 2980 *id = 0; 2981 } 2982 2983 return kstrdup(name, GFP_KERNEL); 2984 } 2985 2986 /* 2987 * Simplify DAI link naming for single devices with multiple DAIs by removing 2988 * any ".-1" and using the DAI name (instead of device name). 2989 */ 2990 static inline char *fmt_multiple_name(struct device *dev, 2991 struct snd_soc_dai_driver *dai_drv) 2992 { 2993 if (dai_drv->name == NULL) { 2994 printk(KERN_ERR "asoc: error - multiple DAI %s registered with no name\n", 2995 dev_name(dev)); 2996 return NULL; 2997 } 2998 2999 return kstrdup(dai_drv->name, GFP_KERNEL); 3000 } 3001 3002 /** 3003 * snd_soc_register_dai - Register a DAI with the ASoC core 3004 * 3005 * @dai: DAI to register 3006 */ 3007 int snd_soc_register_dai(struct device *dev, 3008 struct snd_soc_dai_driver *dai_drv) 3009 { 3010 struct snd_soc_dai *dai; 3011 3012 dev_dbg(dev, "dai register %s\n", dev_name(dev)); 3013 3014 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 3015 if (dai == NULL) 3016 return -ENOMEM; 3017 3018 /* create DAI component name */ 3019 dai->name = fmt_single_name(dev, &dai->id); 3020 if (dai->name == NULL) { 3021 kfree(dai); 3022 return -ENOMEM; 3023 } 3024 3025 dai->dev = dev; 3026 dai->driver = dai_drv; 3027 if (!dai->driver->ops) 3028 dai->driver->ops = &null_dai_ops; 3029 3030 mutex_lock(&client_mutex); 3031 list_add(&dai->list, &dai_list); 3032 snd_soc_instantiate_cards(); 3033 mutex_unlock(&client_mutex); 3034 3035 pr_debug("Registered DAI '%s'\n", dai->name); 3036 3037 return 0; 3038 } 3039 EXPORT_SYMBOL_GPL(snd_soc_register_dai); 3040 3041 /** 3042 * snd_soc_unregister_dai - Unregister a DAI from the ASoC core 3043 * 3044 * @dai: DAI to unregister 3045 */ 3046 void snd_soc_unregister_dai(struct device *dev) 3047 { 3048 struct snd_soc_dai *dai; 3049 3050 list_for_each_entry(dai, &dai_list, list) { 3051 if (dev == dai->dev) 3052 goto found; 3053 } 3054 return; 3055 3056 found: 3057 mutex_lock(&client_mutex); 3058 list_del(&dai->list); 3059 mutex_unlock(&client_mutex); 3060 3061 pr_debug("Unregistered DAI '%s'\n", dai->name); 3062 kfree(dai->name); 3063 kfree(dai); 3064 } 3065 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai); 3066 3067 /** 3068 * snd_soc_register_dais - Register multiple DAIs with the ASoC core 3069 * 3070 * @dai: Array of DAIs to register 3071 * @count: Number of DAIs 3072 */ 3073 int snd_soc_register_dais(struct device *dev, 3074 struct snd_soc_dai_driver *dai_drv, size_t count) 3075 { 3076 struct snd_soc_dai *dai; 3077 int i, ret = 0; 3078 3079 dev_dbg(dev, "dai register %s #%Zu\n", dev_name(dev), count); 3080 3081 for (i = 0; i < count; i++) { 3082 3083 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 3084 if (dai == NULL) { 3085 ret = -ENOMEM; 3086 goto err; 3087 } 3088 3089 /* create DAI component name */ 3090 dai->name = fmt_multiple_name(dev, &dai_drv[i]); 3091 if (dai->name == NULL) { 3092 kfree(dai); 3093 ret = -EINVAL; 3094 goto err; 3095 } 3096 3097 dai->dev = dev; 3098 dai->driver = &dai_drv[i]; 3099 if (dai->driver->id) 3100 dai->id = dai->driver->id; 3101 else 3102 dai->id = i; 3103 if (!dai->driver->ops) 3104 dai->driver->ops = &null_dai_ops; 3105 3106 mutex_lock(&client_mutex); 3107 list_add(&dai->list, &dai_list); 3108 mutex_unlock(&client_mutex); 3109 3110 pr_debug("Registered DAI '%s'\n", dai->name); 3111 } 3112 3113 mutex_lock(&client_mutex); 3114 snd_soc_instantiate_cards(); 3115 mutex_unlock(&client_mutex); 3116 return 0; 3117 3118 err: 3119 for (i--; i >= 0; i--) 3120 snd_soc_unregister_dai(dev); 3121 3122 return ret; 3123 } 3124 EXPORT_SYMBOL_GPL(snd_soc_register_dais); 3125 3126 /** 3127 * snd_soc_unregister_dais - Unregister multiple DAIs from the ASoC core 3128 * 3129 * @dai: Array of DAIs to unregister 3130 * @count: Number of DAIs 3131 */ 3132 void snd_soc_unregister_dais(struct device *dev, size_t count) 3133 { 3134 int i; 3135 3136 for (i = 0; i < count; i++) 3137 snd_soc_unregister_dai(dev); 3138 } 3139 EXPORT_SYMBOL_GPL(snd_soc_unregister_dais); 3140 3141 /** 3142 * snd_soc_register_platform - Register a platform with the ASoC core 3143 * 3144 * @platform: platform to register 3145 */ 3146 int snd_soc_register_platform(struct device *dev, 3147 struct snd_soc_platform_driver *platform_drv) 3148 { 3149 struct snd_soc_platform *platform; 3150 3151 dev_dbg(dev, "platform register %s\n", dev_name(dev)); 3152 3153 platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL); 3154 if (platform == NULL) 3155 return -ENOMEM; 3156 3157 /* create platform component name */ 3158 platform->name = fmt_single_name(dev, &platform->id); 3159 if (platform->name == NULL) { 3160 kfree(platform); 3161 return -ENOMEM; 3162 } 3163 3164 platform->dev = dev; 3165 platform->driver = platform_drv; 3166 platform->dapm.dev = dev; 3167 platform->dapm.platform = platform; 3168 platform->dapm.stream_event = platform_drv->stream_event; 3169 3170 mutex_lock(&client_mutex); 3171 list_add(&platform->list, &platform_list); 3172 snd_soc_instantiate_cards(); 3173 mutex_unlock(&client_mutex); 3174 3175 pr_debug("Registered platform '%s'\n", platform->name); 3176 3177 return 0; 3178 } 3179 EXPORT_SYMBOL_GPL(snd_soc_register_platform); 3180 3181 /** 3182 * snd_soc_unregister_platform - Unregister a platform from the ASoC core 3183 * 3184 * @platform: platform to unregister 3185 */ 3186 void snd_soc_unregister_platform(struct device *dev) 3187 { 3188 struct snd_soc_platform *platform; 3189 3190 list_for_each_entry(platform, &platform_list, list) { 3191 if (dev == platform->dev) 3192 goto found; 3193 } 3194 return; 3195 3196 found: 3197 mutex_lock(&client_mutex); 3198 list_del(&platform->list); 3199 mutex_unlock(&client_mutex); 3200 3201 pr_debug("Unregistered platform '%s'\n", platform->name); 3202 kfree(platform->name); 3203 kfree(platform); 3204 } 3205 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); 3206 3207 static u64 codec_format_map[] = { 3208 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE, 3209 SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE, 3210 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE, 3211 SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE, 3212 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE, 3213 SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE, 3214 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 3215 SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 3216 SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE, 3217 SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE, 3218 SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE, 3219 SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE, 3220 SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE, 3221 SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE, 3222 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE 3223 | SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE, 3224 }; 3225 3226 /* Fix up the DAI formats for endianness: codecs don't actually see 3227 * the endianness of the data but we're using the CPU format 3228 * definitions which do need to include endianness so we ensure that 3229 * codec DAIs always have both big and little endian variants set. 3230 */ 3231 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream) 3232 { 3233 int i; 3234 3235 for (i = 0; i < ARRAY_SIZE(codec_format_map); i++) 3236 if (stream->formats & codec_format_map[i]) 3237 stream->formats |= codec_format_map[i]; 3238 } 3239 3240 /** 3241 * snd_soc_register_codec - Register a codec with the ASoC core 3242 * 3243 * @codec: codec to register 3244 */ 3245 int snd_soc_register_codec(struct device *dev, 3246 const struct snd_soc_codec_driver *codec_drv, 3247 struct snd_soc_dai_driver *dai_drv, 3248 int num_dai) 3249 { 3250 size_t reg_size; 3251 struct snd_soc_codec *codec; 3252 int ret, i; 3253 3254 dev_dbg(dev, "codec register %s\n", dev_name(dev)); 3255 3256 codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); 3257 if (codec == NULL) 3258 return -ENOMEM; 3259 3260 /* create CODEC component name */ 3261 codec->name = fmt_single_name(dev, &codec->id); 3262 if (codec->name == NULL) { 3263 kfree(codec); 3264 return -ENOMEM; 3265 } 3266 3267 if (codec_drv->compress_type) 3268 codec->compress_type = codec_drv->compress_type; 3269 else 3270 codec->compress_type = SND_SOC_FLAT_COMPRESSION; 3271 3272 codec->write = codec_drv->write; 3273 codec->read = codec_drv->read; 3274 codec->volatile_register = codec_drv->volatile_register; 3275 codec->readable_register = codec_drv->readable_register; 3276 codec->writable_register = codec_drv->writable_register; 3277 codec->dapm.bias_level = SND_SOC_BIAS_OFF; 3278 codec->dapm.dev = dev; 3279 codec->dapm.codec = codec; 3280 codec->dapm.seq_notifier = codec_drv->seq_notifier; 3281 codec->dapm.stream_event = codec_drv->stream_event; 3282 codec->dev = dev; 3283 codec->driver = codec_drv; 3284 codec->num_dai = num_dai; 3285 mutex_init(&codec->mutex); 3286 3287 /* allocate CODEC register cache */ 3288 if (codec_drv->reg_cache_size && codec_drv->reg_word_size) { 3289 reg_size = codec_drv->reg_cache_size * codec_drv->reg_word_size; 3290 codec->reg_size = reg_size; 3291 /* it is necessary to make a copy of the default register cache 3292 * because in the case of using a compression type that requires 3293 * the default register cache to be marked as __devinitconst the 3294 * kernel might have freed the array by the time we initialize 3295 * the cache. 3296 */ 3297 if (codec_drv->reg_cache_default) { 3298 codec->reg_def_copy = kmemdup(codec_drv->reg_cache_default, 3299 reg_size, GFP_KERNEL); 3300 if (!codec->reg_def_copy) { 3301 ret = -ENOMEM; 3302 goto fail; 3303 } 3304 } 3305 } 3306 3307 if (codec_drv->reg_access_size && codec_drv->reg_access_default) { 3308 if (!codec->volatile_register) 3309 codec->volatile_register = snd_soc_default_volatile_register; 3310 if (!codec->readable_register) 3311 codec->readable_register = snd_soc_default_readable_register; 3312 if (!codec->writable_register) 3313 codec->writable_register = snd_soc_default_writable_register; 3314 } 3315 3316 for (i = 0; i < num_dai; i++) { 3317 fixup_codec_formats(&dai_drv[i].playback); 3318 fixup_codec_formats(&dai_drv[i].capture); 3319 } 3320 3321 /* register any DAIs */ 3322 if (num_dai) { 3323 ret = snd_soc_register_dais(dev, dai_drv, num_dai); 3324 if (ret < 0) 3325 goto fail; 3326 } 3327 3328 mutex_lock(&client_mutex); 3329 list_add(&codec->list, &codec_list); 3330 snd_soc_instantiate_cards(); 3331 mutex_unlock(&client_mutex); 3332 3333 pr_debug("Registered codec '%s'\n", codec->name); 3334 return 0; 3335 3336 fail: 3337 kfree(codec->reg_def_copy); 3338 codec->reg_def_copy = NULL; 3339 kfree(codec->name); 3340 kfree(codec); 3341 return ret; 3342 } 3343 EXPORT_SYMBOL_GPL(snd_soc_register_codec); 3344 3345 /** 3346 * snd_soc_unregister_codec - Unregister a codec from the ASoC core 3347 * 3348 * @codec: codec to unregister 3349 */ 3350 void snd_soc_unregister_codec(struct device *dev) 3351 { 3352 struct snd_soc_codec *codec; 3353 int i; 3354 3355 list_for_each_entry(codec, &codec_list, list) { 3356 if (dev == codec->dev) 3357 goto found; 3358 } 3359 return; 3360 3361 found: 3362 if (codec->num_dai) 3363 for (i = 0; i < codec->num_dai; i++) 3364 snd_soc_unregister_dai(dev); 3365 3366 mutex_lock(&client_mutex); 3367 list_del(&codec->list); 3368 mutex_unlock(&client_mutex); 3369 3370 pr_debug("Unregistered codec '%s'\n", codec->name); 3371 3372 snd_soc_cache_exit(codec); 3373 kfree(codec->reg_def_copy); 3374 kfree(codec->name); 3375 kfree(codec); 3376 } 3377 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec); 3378 3379 /* Retrieve a card's name from device tree */ 3380 int snd_soc_of_parse_card_name(struct snd_soc_card *card, 3381 const char *propname) 3382 { 3383 struct device_node *np = card->dev->of_node; 3384 int ret; 3385 3386 ret = of_property_read_string_index(np, propname, 0, &card->name); 3387 /* 3388 * EINVAL means the property does not exist. This is fine providing 3389 * card->name was previously set, which is checked later in 3390 * snd_soc_register_card. 3391 */ 3392 if (ret < 0 && ret != -EINVAL) { 3393 dev_err(card->dev, 3394 "Property '%s' could not be read: %d\n", 3395 propname, ret); 3396 return ret; 3397 } 3398 3399 return 0; 3400 } 3401 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name); 3402 3403 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, 3404 const char *propname) 3405 { 3406 struct device_node *np = card->dev->of_node; 3407 int num_routes; 3408 struct snd_soc_dapm_route *routes; 3409 int i, ret; 3410 3411 num_routes = of_property_count_strings(np, propname); 3412 if (num_routes & 1) { 3413 dev_err(card->dev, 3414 "Property '%s's length is not even\n", 3415 propname); 3416 return -EINVAL; 3417 } 3418 num_routes /= 2; 3419 if (!num_routes) { 3420 dev_err(card->dev, 3421 "Property '%s's length is zero\n", 3422 propname); 3423 return -EINVAL; 3424 } 3425 3426 routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes), 3427 GFP_KERNEL); 3428 if (!routes) { 3429 dev_err(card->dev, 3430 "Could not allocate DAPM route table\n"); 3431 return -EINVAL; 3432 } 3433 3434 for (i = 0; i < num_routes; i++) { 3435 ret = of_property_read_string_index(np, propname, 3436 2 * i, &routes[i].sink); 3437 if (ret) { 3438 dev_err(card->dev, 3439 "Property '%s' index %d could not be read: %d\n", 3440 propname, 2 * i, ret); 3441 return -EINVAL; 3442 } 3443 ret = of_property_read_string_index(np, propname, 3444 (2 * i) + 1, &routes[i].source); 3445 if (ret) { 3446 dev_err(card->dev, 3447 "Property '%s' index %d could not be read: %d\n", 3448 propname, (2 * i) + 1, ret); 3449 return -EINVAL; 3450 } 3451 } 3452 3453 card->num_dapm_routes = num_routes; 3454 card->dapm_routes = routes; 3455 3456 return 0; 3457 } 3458 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing); 3459 3460 static int __init snd_soc_init(void) 3461 { 3462 #ifdef CONFIG_DEBUG_FS 3463 snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL); 3464 if (IS_ERR(snd_soc_debugfs_root) || !snd_soc_debugfs_root) { 3465 printk(KERN_WARNING 3466 "ASoC: Failed to create debugfs directory\n"); 3467 snd_soc_debugfs_root = NULL; 3468 } 3469 3470 if (!debugfs_create_file("codecs", 0444, snd_soc_debugfs_root, NULL, 3471 &codec_list_fops)) 3472 pr_warn("ASoC: Failed to create CODEC list debugfs file\n"); 3473 3474 if (!debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL, 3475 &dai_list_fops)) 3476 pr_warn("ASoC: Failed to create DAI list debugfs file\n"); 3477 3478 if (!debugfs_create_file("platforms", 0444, snd_soc_debugfs_root, NULL, 3479 &platform_list_fops)) 3480 pr_warn("ASoC: Failed to create platform list debugfs file\n"); 3481 #endif 3482 3483 snd_soc_util_init(); 3484 3485 return platform_driver_register(&soc_driver); 3486 } 3487 module_init(snd_soc_init); 3488 3489 static void __exit snd_soc_exit(void) 3490 { 3491 snd_soc_util_exit(); 3492 3493 #ifdef CONFIG_DEBUG_FS 3494 debugfs_remove_recursive(snd_soc_debugfs_root); 3495 #endif 3496 platform_driver_unregister(&soc_driver); 3497 } 3498 module_exit(snd_soc_exit); 3499 3500 /* Module information */ 3501 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 3502 MODULE_DESCRIPTION("ALSA SoC Core"); 3503 MODULE_LICENSE("GPL"); 3504 MODULE_ALIAS("platform:soc-audio"); 3505