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