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