1 /* 2 * soc-core.c -- ALSA SoC Audio Layer 3 * 4 * Copyright 2005 Wolfson Microelectronics PLC. 5 * Copyright 2005 Openedhand Ltd. 6 * 7 * Author: Liam Girdwood <lrg@slimlogic.co.uk> 8 * with code, comments and ideas from :- 9 * Richard Purdie <richard@openedhand.com> 10 * 11 * This program is free software; you can redistribute it and/or modify it 12 * under the terms of the GNU General Public License as published by the 13 * Free Software Foundation; either version 2 of the License, or (at your 14 * option) any later version. 15 * 16 * TODO: 17 * o Add hw rules to enforce rates, etc. 18 * o More testing with other codecs/machines. 19 * o Add more codecs and platforms to ensure good API coverage. 20 * o Support TDM on PCM and I2S 21 */ 22 23 #include <linux/module.h> 24 #include <linux/moduleparam.h> 25 #include <linux/init.h> 26 #include <linux/delay.h> 27 #include <linux/pm.h> 28 #include <linux/bitops.h> 29 #include <linux/debugfs.h> 30 #include <linux/platform_device.h> 31 #include <sound/ac97_codec.h> 32 #include <sound/core.h> 33 #include <sound/pcm.h> 34 #include <sound/pcm_params.h> 35 #include <sound/soc.h> 36 #include <sound/soc-dapm.h> 37 #include <sound/initval.h> 38 39 static DEFINE_MUTEX(pcm_mutex); 40 static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq); 41 42 #ifdef CONFIG_DEBUG_FS 43 static struct dentry *debugfs_root; 44 #endif 45 46 static DEFINE_MUTEX(client_mutex); 47 static LIST_HEAD(card_list); 48 static LIST_HEAD(dai_list); 49 static LIST_HEAD(platform_list); 50 static LIST_HEAD(codec_list); 51 52 static int snd_soc_register_card(struct snd_soc_card *card); 53 static int snd_soc_unregister_card(struct snd_soc_card *card); 54 55 /* 56 * This is a timeout to do a DAPM powerdown after a stream is closed(). 57 * It can be used to eliminate pops between different playback streams, e.g. 58 * between two audio tracks. 59 */ 60 static int pmdown_time = 5000; 61 module_param(pmdown_time, int, 0); 62 MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 63 64 /* 65 * This function forces any delayed work to be queued and run. 66 */ 67 static int run_delayed_work(struct delayed_work *dwork) 68 { 69 int ret; 70 71 /* cancel any work waiting to be queued. */ 72 ret = cancel_delayed_work(dwork); 73 74 /* if there was any work waiting then we run it now and 75 * wait for it's completion */ 76 if (ret) { 77 schedule_delayed_work(dwork, 0); 78 flush_scheduled_work(); 79 } 80 return ret; 81 } 82 83 /* codec register dump */ 84 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) 85 { 86 int i, step = 1, count = 0; 87 88 if (!codec->reg_cache_size) 89 return 0; 90 91 if (codec->reg_cache_step) 92 step = codec->reg_cache_step; 93 94 count += sprintf(buf, "%s registers\n", codec->name); 95 for (i = 0; i < codec->reg_cache_size; i += step) { 96 if (codec->readable_register && !codec->readable_register(i)) 97 continue; 98 99 count += sprintf(buf + count, "%2x: ", i); 100 if (count >= PAGE_SIZE - 1) 101 break; 102 103 if (codec->display_register) 104 count += codec->display_register(codec, buf + count, 105 PAGE_SIZE - count, i); 106 else 107 count += snprintf(buf + count, PAGE_SIZE - count, 108 "%4x", codec->read(codec, i)); 109 110 if (count >= PAGE_SIZE - 1) 111 break; 112 113 count += snprintf(buf + count, PAGE_SIZE - count, "\n"); 114 if (count >= PAGE_SIZE - 1) 115 break; 116 } 117 118 /* Truncate count; min() would cause a warning */ 119 if (count >= PAGE_SIZE) 120 count = PAGE_SIZE - 1; 121 122 return count; 123 } 124 static ssize_t codec_reg_show(struct device *dev, 125 struct device_attribute *attr, char *buf) 126 { 127 struct snd_soc_device *devdata = dev_get_drvdata(dev); 128 return soc_codec_reg_show(devdata->card->codec, buf); 129 } 130 131 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL); 132 133 #ifdef CONFIG_DEBUG_FS 134 static int codec_reg_open_file(struct inode *inode, struct file *file) 135 { 136 file->private_data = inode->i_private; 137 return 0; 138 } 139 140 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf, 141 size_t count, loff_t *ppos) 142 { 143 ssize_t ret; 144 struct snd_soc_codec *codec = file->private_data; 145 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 146 if (!buf) 147 return -ENOMEM; 148 ret = soc_codec_reg_show(codec, buf); 149 if (ret >= 0) 150 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 151 kfree(buf); 152 return ret; 153 } 154 155 static ssize_t codec_reg_write_file(struct file *file, 156 const char __user *user_buf, size_t count, loff_t *ppos) 157 { 158 char buf[32]; 159 int buf_size; 160 char *start = buf; 161 unsigned long reg, value; 162 int step = 1; 163 struct snd_soc_codec *codec = file->private_data; 164 165 buf_size = min(count, (sizeof(buf)-1)); 166 if (copy_from_user(buf, user_buf, buf_size)) 167 return -EFAULT; 168 buf[buf_size] = 0; 169 170 if (codec->reg_cache_step) 171 step = codec->reg_cache_step; 172 173 while (*start == ' ') 174 start++; 175 reg = simple_strtoul(start, &start, 16); 176 if ((reg >= codec->reg_cache_size) || (reg % step)) 177 return -EINVAL; 178 while (*start == ' ') 179 start++; 180 if (strict_strtoul(start, 16, &value)) 181 return -EINVAL; 182 codec->write(codec, reg, value); 183 return buf_size; 184 } 185 186 static const struct file_operations codec_reg_fops = { 187 .open = codec_reg_open_file, 188 .read = codec_reg_read_file, 189 .write = codec_reg_write_file, 190 }; 191 192 static void soc_init_codec_debugfs(struct snd_soc_codec *codec) 193 { 194 char codec_root[128]; 195 196 if (codec->dev) 197 snprintf(codec_root, sizeof(codec_root), 198 "%s.%s", codec->name, dev_name(codec->dev)); 199 else 200 snprintf(codec_root, sizeof(codec_root), 201 "%s", codec->name); 202 203 codec->debugfs_codec_root = debugfs_create_dir(codec_root, 204 debugfs_root); 205 if (!codec->debugfs_codec_root) { 206 printk(KERN_WARNING 207 "ASoC: Failed to create codec debugfs directory\n"); 208 return; 209 } 210 211 codec->debugfs_reg = debugfs_create_file("codec_reg", 0644, 212 codec->debugfs_codec_root, 213 codec, &codec_reg_fops); 214 if (!codec->debugfs_reg) 215 printk(KERN_WARNING 216 "ASoC: Failed to create codec register debugfs file\n"); 217 218 codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744, 219 codec->debugfs_codec_root, 220 &codec->pop_time); 221 if (!codec->debugfs_pop_time) 222 printk(KERN_WARNING 223 "Failed to create pop time debugfs file\n"); 224 225 codec->debugfs_dapm = debugfs_create_dir("dapm", 226 codec->debugfs_codec_root); 227 if (!codec->debugfs_dapm) 228 printk(KERN_WARNING 229 "Failed to create DAPM debugfs directory\n"); 230 231 snd_soc_dapm_debugfs_init(codec); 232 } 233 234 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 235 { 236 debugfs_remove_recursive(codec->debugfs_codec_root); 237 } 238 239 #else 240 241 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec) 242 { 243 } 244 245 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 246 { 247 } 248 #endif 249 250 #ifdef CONFIG_SND_SOC_AC97_BUS 251 /* unregister ac97 codec */ 252 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec) 253 { 254 if (codec->ac97->dev.bus) 255 device_unregister(&codec->ac97->dev); 256 return 0; 257 } 258 259 /* stop no dev release warning */ 260 static void soc_ac97_device_release(struct device *dev){} 261 262 /* register ac97 codec to bus */ 263 static int soc_ac97_dev_register(struct snd_soc_codec *codec) 264 { 265 int err; 266 267 codec->ac97->dev.bus = &ac97_bus_type; 268 codec->ac97->dev.parent = codec->card->dev; 269 codec->ac97->dev.release = soc_ac97_device_release; 270 271 dev_set_name(&codec->ac97->dev, "%d-%d:%s", 272 codec->card->number, 0, codec->name); 273 err = device_register(&codec->ac97->dev); 274 if (err < 0) { 275 snd_printk(KERN_ERR "Can't register ac97 bus\n"); 276 codec->ac97->dev.bus = NULL; 277 return err; 278 } 279 return 0; 280 } 281 #endif 282 283 static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream) 284 { 285 struct snd_soc_pcm_runtime *rtd = substream->private_data; 286 struct snd_soc_device *socdev = rtd->socdev; 287 struct snd_soc_card *card = socdev->card; 288 struct snd_soc_dai_link *machine = rtd->dai; 289 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 290 struct snd_soc_dai *codec_dai = machine->codec_dai; 291 int ret; 292 293 if (codec_dai->symmetric_rates || cpu_dai->symmetric_rates || 294 machine->symmetric_rates) { 295 dev_dbg(card->dev, "Symmetry forces %dHz rate\n", 296 machine->rate); 297 298 ret = snd_pcm_hw_constraint_minmax(substream->runtime, 299 SNDRV_PCM_HW_PARAM_RATE, 300 machine->rate, 301 machine->rate); 302 if (ret < 0) { 303 dev_err(card->dev, 304 "Unable to apply rate symmetry constraint: %d\n", ret); 305 return ret; 306 } 307 } 308 309 return 0; 310 } 311 312 /* 313 * Called by ALSA when a PCM substream is opened, the runtime->hw record is 314 * then initialized and any private data can be allocated. This also calls 315 * startup for the cpu DAI, platform, machine and codec DAI. 316 */ 317 static int soc_pcm_open(struct snd_pcm_substream *substream) 318 { 319 struct snd_soc_pcm_runtime *rtd = substream->private_data; 320 struct snd_soc_device *socdev = rtd->socdev; 321 struct snd_soc_card *card = socdev->card; 322 struct snd_pcm_runtime *runtime = substream->runtime; 323 struct snd_soc_dai_link *machine = rtd->dai; 324 struct snd_soc_platform *platform = card->platform; 325 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 326 struct snd_soc_dai *codec_dai = machine->codec_dai; 327 int ret = 0; 328 329 mutex_lock(&pcm_mutex); 330 331 /* startup the audio subsystem */ 332 if (cpu_dai->ops->startup) { 333 ret = cpu_dai->ops->startup(substream, cpu_dai); 334 if (ret < 0) { 335 printk(KERN_ERR "asoc: can't open interface %s\n", 336 cpu_dai->name); 337 goto out; 338 } 339 } 340 341 if (platform->pcm_ops->open) { 342 ret = platform->pcm_ops->open(substream); 343 if (ret < 0) { 344 printk(KERN_ERR "asoc: can't open platform %s\n", platform->name); 345 goto platform_err; 346 } 347 } 348 349 if (codec_dai->ops->startup) { 350 ret = codec_dai->ops->startup(substream, codec_dai); 351 if (ret < 0) { 352 printk(KERN_ERR "asoc: can't open codec %s\n", 353 codec_dai->name); 354 goto codec_dai_err; 355 } 356 } 357 358 if (machine->ops && machine->ops->startup) { 359 ret = machine->ops->startup(substream); 360 if (ret < 0) { 361 printk(KERN_ERR "asoc: %s startup failed\n", machine->name); 362 goto machine_err; 363 } 364 } 365 366 /* Check that the codec and cpu DAI's are compatible */ 367 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 368 runtime->hw.rate_min = 369 max(codec_dai->playback.rate_min, 370 cpu_dai->playback.rate_min); 371 runtime->hw.rate_max = 372 min(codec_dai->playback.rate_max, 373 cpu_dai->playback.rate_max); 374 runtime->hw.channels_min = 375 max(codec_dai->playback.channels_min, 376 cpu_dai->playback.channels_min); 377 runtime->hw.channels_max = 378 min(codec_dai->playback.channels_max, 379 cpu_dai->playback.channels_max); 380 runtime->hw.formats = 381 codec_dai->playback.formats & cpu_dai->playback.formats; 382 runtime->hw.rates = 383 codec_dai->playback.rates & cpu_dai->playback.rates; 384 } else { 385 runtime->hw.rate_min = 386 max(codec_dai->capture.rate_min, 387 cpu_dai->capture.rate_min); 388 runtime->hw.rate_max = 389 min(codec_dai->capture.rate_max, 390 cpu_dai->capture.rate_max); 391 runtime->hw.channels_min = 392 max(codec_dai->capture.channels_min, 393 cpu_dai->capture.channels_min); 394 runtime->hw.channels_max = 395 min(codec_dai->capture.channels_max, 396 cpu_dai->capture.channels_max); 397 runtime->hw.formats = 398 codec_dai->capture.formats & cpu_dai->capture.formats; 399 runtime->hw.rates = 400 codec_dai->capture.rates & cpu_dai->capture.rates; 401 } 402 403 snd_pcm_limit_hw_rates(runtime); 404 if (!runtime->hw.rates) { 405 printk(KERN_ERR "asoc: %s <-> %s No matching rates\n", 406 codec_dai->name, cpu_dai->name); 407 goto machine_err; 408 } 409 if (!runtime->hw.formats) { 410 printk(KERN_ERR "asoc: %s <-> %s No matching formats\n", 411 codec_dai->name, cpu_dai->name); 412 goto machine_err; 413 } 414 if (!runtime->hw.channels_min || !runtime->hw.channels_max) { 415 printk(KERN_ERR "asoc: %s <-> %s No matching channels\n", 416 codec_dai->name, cpu_dai->name); 417 goto machine_err; 418 } 419 420 /* Symmetry only applies if we've already got an active stream. */ 421 if (cpu_dai->active || codec_dai->active) { 422 ret = soc_pcm_apply_symmetry(substream); 423 if (ret != 0) 424 goto machine_err; 425 } 426 427 pr_debug("asoc: %s <-> %s info:\n", codec_dai->name, cpu_dai->name); 428 pr_debug("asoc: rate mask 0x%x\n", runtime->hw.rates); 429 pr_debug("asoc: min ch %d max ch %d\n", runtime->hw.channels_min, 430 runtime->hw.channels_max); 431 pr_debug("asoc: min rate %d max rate %d\n", runtime->hw.rate_min, 432 runtime->hw.rate_max); 433 434 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 435 cpu_dai->playback.active = codec_dai->playback.active = 1; 436 else 437 cpu_dai->capture.active = codec_dai->capture.active = 1; 438 cpu_dai->active = codec_dai->active = 1; 439 cpu_dai->runtime = runtime; 440 card->codec->active++; 441 mutex_unlock(&pcm_mutex); 442 return 0; 443 444 machine_err: 445 if (machine->ops && machine->ops->shutdown) 446 machine->ops->shutdown(substream); 447 448 codec_dai_err: 449 if (platform->pcm_ops->close) 450 platform->pcm_ops->close(substream); 451 452 platform_err: 453 if (cpu_dai->ops->shutdown) 454 cpu_dai->ops->shutdown(substream, cpu_dai); 455 out: 456 mutex_unlock(&pcm_mutex); 457 return ret; 458 } 459 460 /* 461 * Power down the audio subsystem pmdown_time msecs after close is called. 462 * This is to ensure there are no pops or clicks in between any music tracks 463 * due to DAPM power cycling. 464 */ 465 static void close_delayed_work(struct work_struct *work) 466 { 467 struct snd_soc_card *card = container_of(work, struct snd_soc_card, 468 delayed_work.work); 469 struct snd_soc_codec *codec = card->codec; 470 struct snd_soc_dai *codec_dai; 471 int i; 472 473 mutex_lock(&pcm_mutex); 474 for (i = 0; i < codec->num_dai; i++) { 475 codec_dai = &codec->dai[i]; 476 477 pr_debug("pop wq checking: %s status: %s waiting: %s\n", 478 codec_dai->playback.stream_name, 479 codec_dai->playback.active ? "active" : "inactive", 480 codec_dai->pop_wait ? "yes" : "no"); 481 482 /* are we waiting on this codec DAI stream */ 483 if (codec_dai->pop_wait == 1) { 484 codec_dai->pop_wait = 0; 485 snd_soc_dapm_stream_event(codec, 486 codec_dai->playback.stream_name, 487 SND_SOC_DAPM_STREAM_STOP); 488 } 489 } 490 mutex_unlock(&pcm_mutex); 491 } 492 493 /* 494 * Called by ALSA when a PCM substream is closed. Private data can be 495 * freed here. The cpu DAI, codec DAI, machine and platform are also 496 * shutdown. 497 */ 498 static int soc_codec_close(struct snd_pcm_substream *substream) 499 { 500 struct snd_soc_pcm_runtime *rtd = substream->private_data; 501 struct snd_soc_device *socdev = rtd->socdev; 502 struct snd_soc_card *card = socdev->card; 503 struct snd_soc_dai_link *machine = rtd->dai; 504 struct snd_soc_platform *platform = card->platform; 505 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 506 struct snd_soc_dai *codec_dai = machine->codec_dai; 507 struct snd_soc_codec *codec = card->codec; 508 509 mutex_lock(&pcm_mutex); 510 511 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 512 cpu_dai->playback.active = codec_dai->playback.active = 0; 513 else 514 cpu_dai->capture.active = codec_dai->capture.active = 0; 515 516 if (codec_dai->playback.active == 0 && 517 codec_dai->capture.active == 0) { 518 cpu_dai->active = codec_dai->active = 0; 519 } 520 codec->active--; 521 522 /* Muting the DAC suppresses artifacts caused during digital 523 * shutdown, for example from stopping clocks. 524 */ 525 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 526 snd_soc_dai_digital_mute(codec_dai, 1); 527 528 if (cpu_dai->ops->shutdown) 529 cpu_dai->ops->shutdown(substream, cpu_dai); 530 531 if (codec_dai->ops->shutdown) 532 codec_dai->ops->shutdown(substream, codec_dai); 533 534 if (machine->ops && machine->ops->shutdown) 535 machine->ops->shutdown(substream); 536 537 if (platform->pcm_ops->close) 538 platform->pcm_ops->close(substream); 539 cpu_dai->runtime = NULL; 540 541 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 542 /* start delayed pop wq here for playback streams */ 543 codec_dai->pop_wait = 1; 544 schedule_delayed_work(&card->delayed_work, 545 msecs_to_jiffies(pmdown_time)); 546 } else { 547 /* capture streams can be powered down now */ 548 snd_soc_dapm_stream_event(codec, 549 codec_dai->capture.stream_name, 550 SND_SOC_DAPM_STREAM_STOP); 551 } 552 553 mutex_unlock(&pcm_mutex); 554 return 0; 555 } 556 557 /* 558 * Called by ALSA when the PCM substream is prepared, can set format, sample 559 * rate, etc. This function is non atomic and can be called multiple times, 560 * it can refer to the runtime info. 561 */ 562 static int soc_pcm_prepare(struct snd_pcm_substream *substream) 563 { 564 struct snd_soc_pcm_runtime *rtd = substream->private_data; 565 struct snd_soc_device *socdev = rtd->socdev; 566 struct snd_soc_card *card = socdev->card; 567 struct snd_soc_dai_link *machine = rtd->dai; 568 struct snd_soc_platform *platform = card->platform; 569 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 570 struct snd_soc_dai *codec_dai = machine->codec_dai; 571 struct snd_soc_codec *codec = card->codec; 572 int ret = 0; 573 574 mutex_lock(&pcm_mutex); 575 576 if (machine->ops && machine->ops->prepare) { 577 ret = machine->ops->prepare(substream); 578 if (ret < 0) { 579 printk(KERN_ERR "asoc: machine prepare error\n"); 580 goto out; 581 } 582 } 583 584 if (platform->pcm_ops->prepare) { 585 ret = platform->pcm_ops->prepare(substream); 586 if (ret < 0) { 587 printk(KERN_ERR "asoc: platform prepare error\n"); 588 goto out; 589 } 590 } 591 592 if (codec_dai->ops->prepare) { 593 ret = codec_dai->ops->prepare(substream, codec_dai); 594 if (ret < 0) { 595 printk(KERN_ERR "asoc: codec DAI prepare error\n"); 596 goto out; 597 } 598 } 599 600 if (cpu_dai->ops->prepare) { 601 ret = cpu_dai->ops->prepare(substream, cpu_dai); 602 if (ret < 0) { 603 printk(KERN_ERR "asoc: cpu DAI prepare error\n"); 604 goto out; 605 } 606 } 607 608 /* cancel any delayed stream shutdown that is pending */ 609 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && 610 codec_dai->pop_wait) { 611 codec_dai->pop_wait = 0; 612 cancel_delayed_work(&card->delayed_work); 613 } 614 615 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 616 snd_soc_dapm_stream_event(codec, 617 codec_dai->playback.stream_name, 618 SND_SOC_DAPM_STREAM_START); 619 else 620 snd_soc_dapm_stream_event(codec, 621 codec_dai->capture.stream_name, 622 SND_SOC_DAPM_STREAM_START); 623 624 snd_soc_dai_digital_mute(codec_dai, 0); 625 626 out: 627 mutex_unlock(&pcm_mutex); 628 return ret; 629 } 630 631 /* 632 * Called by ALSA when the hardware params are set by application. This 633 * function can also be called multiple times and can allocate buffers 634 * (using snd_pcm_lib_* ). It's non-atomic. 635 */ 636 static int soc_pcm_hw_params(struct snd_pcm_substream *substream, 637 struct snd_pcm_hw_params *params) 638 { 639 struct snd_soc_pcm_runtime *rtd = substream->private_data; 640 struct snd_soc_device *socdev = rtd->socdev; 641 struct snd_soc_dai_link *machine = rtd->dai; 642 struct snd_soc_card *card = socdev->card; 643 struct snd_soc_platform *platform = card->platform; 644 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 645 struct snd_soc_dai *codec_dai = machine->codec_dai; 646 int ret = 0; 647 648 mutex_lock(&pcm_mutex); 649 650 if (machine->ops && machine->ops->hw_params) { 651 ret = machine->ops->hw_params(substream, params); 652 if (ret < 0) { 653 printk(KERN_ERR "asoc: machine hw_params failed\n"); 654 goto out; 655 } 656 } 657 658 if (codec_dai->ops->hw_params) { 659 ret = codec_dai->ops->hw_params(substream, params, codec_dai); 660 if (ret < 0) { 661 printk(KERN_ERR "asoc: can't set codec %s hw params\n", 662 codec_dai->name); 663 goto codec_err; 664 } 665 } 666 667 if (cpu_dai->ops->hw_params) { 668 ret = cpu_dai->ops->hw_params(substream, params, cpu_dai); 669 if (ret < 0) { 670 printk(KERN_ERR "asoc: interface %s hw params failed\n", 671 cpu_dai->name); 672 goto interface_err; 673 } 674 } 675 676 if (platform->pcm_ops->hw_params) { 677 ret = platform->pcm_ops->hw_params(substream, params); 678 if (ret < 0) { 679 printk(KERN_ERR "asoc: platform %s hw params failed\n", 680 platform->name); 681 goto platform_err; 682 } 683 } 684 685 machine->rate = params_rate(params); 686 687 out: 688 mutex_unlock(&pcm_mutex); 689 return ret; 690 691 platform_err: 692 if (cpu_dai->ops->hw_free) 693 cpu_dai->ops->hw_free(substream, cpu_dai); 694 695 interface_err: 696 if (codec_dai->ops->hw_free) 697 codec_dai->ops->hw_free(substream, codec_dai); 698 699 codec_err: 700 if (machine->ops && machine->ops->hw_free) 701 machine->ops->hw_free(substream); 702 703 mutex_unlock(&pcm_mutex); 704 return ret; 705 } 706 707 /* 708 * Free's resources allocated by hw_params, can be called multiple times 709 */ 710 static int soc_pcm_hw_free(struct snd_pcm_substream *substream) 711 { 712 struct snd_soc_pcm_runtime *rtd = substream->private_data; 713 struct snd_soc_device *socdev = rtd->socdev; 714 struct snd_soc_dai_link *machine = rtd->dai; 715 struct snd_soc_card *card = socdev->card; 716 struct snd_soc_platform *platform = card->platform; 717 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 718 struct snd_soc_dai *codec_dai = machine->codec_dai; 719 struct snd_soc_codec *codec = card->codec; 720 721 mutex_lock(&pcm_mutex); 722 723 /* apply codec digital mute */ 724 if (!codec->active) 725 snd_soc_dai_digital_mute(codec_dai, 1); 726 727 /* free any machine hw params */ 728 if (machine->ops && machine->ops->hw_free) 729 machine->ops->hw_free(substream); 730 731 /* free any DMA resources */ 732 if (platform->pcm_ops->hw_free) 733 platform->pcm_ops->hw_free(substream); 734 735 /* now free hw params for the DAI's */ 736 if (codec_dai->ops->hw_free) 737 codec_dai->ops->hw_free(substream, codec_dai); 738 739 if (cpu_dai->ops->hw_free) 740 cpu_dai->ops->hw_free(substream, cpu_dai); 741 742 mutex_unlock(&pcm_mutex); 743 return 0; 744 } 745 746 static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) 747 { 748 struct snd_soc_pcm_runtime *rtd = substream->private_data; 749 struct snd_soc_device *socdev = rtd->socdev; 750 struct snd_soc_card *card= socdev->card; 751 struct snd_soc_dai_link *machine = rtd->dai; 752 struct snd_soc_platform *platform = card->platform; 753 struct snd_soc_dai *cpu_dai = machine->cpu_dai; 754 struct snd_soc_dai *codec_dai = machine->codec_dai; 755 int ret; 756 757 if (codec_dai->ops->trigger) { 758 ret = codec_dai->ops->trigger(substream, cmd, codec_dai); 759 if (ret < 0) 760 return ret; 761 } 762 763 if (platform->pcm_ops->trigger) { 764 ret = platform->pcm_ops->trigger(substream, cmd); 765 if (ret < 0) 766 return ret; 767 } 768 769 if (cpu_dai->ops->trigger) { 770 ret = cpu_dai->ops->trigger(substream, cmd, cpu_dai); 771 if (ret < 0) 772 return ret; 773 } 774 return 0; 775 } 776 777 /* ASoC PCM operations */ 778 static struct snd_pcm_ops soc_pcm_ops = { 779 .open = soc_pcm_open, 780 .close = soc_codec_close, 781 .hw_params = soc_pcm_hw_params, 782 .hw_free = soc_pcm_hw_free, 783 .prepare = soc_pcm_prepare, 784 .trigger = soc_pcm_trigger, 785 }; 786 787 #ifdef CONFIG_PM 788 /* powers down audio subsystem for suspend */ 789 static int soc_suspend(struct device *dev) 790 { 791 struct platform_device *pdev = to_platform_device(dev); 792 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 793 struct snd_soc_card *card = socdev->card; 794 struct snd_soc_platform *platform = card->platform; 795 struct snd_soc_codec_device *codec_dev = socdev->codec_dev; 796 struct snd_soc_codec *codec = card->codec; 797 int i; 798 799 /* If the initialization of this soc device failed, there is no codec 800 * associated with it. Just bail out in this case. 801 */ 802 if (!codec) 803 return 0; 804 805 /* Due to the resume being scheduled into a workqueue we could 806 * suspend before that's finished - wait for it to complete. 807 */ 808 snd_power_lock(codec->card); 809 snd_power_wait(codec->card, SNDRV_CTL_POWER_D0); 810 snd_power_unlock(codec->card); 811 812 /* we're going to block userspace touching us until resume completes */ 813 snd_power_change_state(codec->card, SNDRV_CTL_POWER_D3hot); 814 815 /* mute any active DAC's */ 816 for (i = 0; i < card->num_links; i++) { 817 struct snd_soc_dai *dai = card->dai_link[i].codec_dai; 818 if (dai->ops->digital_mute && dai->playback.active) 819 dai->ops->digital_mute(dai, 1); 820 } 821 822 /* suspend all pcms */ 823 for (i = 0; i < card->num_links; i++) 824 snd_pcm_suspend_all(card->dai_link[i].pcm); 825 826 if (card->suspend_pre) 827 card->suspend_pre(pdev, PMSG_SUSPEND); 828 829 for (i = 0; i < card->num_links; i++) { 830 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 831 if (cpu_dai->suspend && !cpu_dai->ac97_control) 832 cpu_dai->suspend(cpu_dai); 833 if (platform->suspend) 834 platform->suspend(cpu_dai); 835 } 836 837 /* close any waiting streams and save state */ 838 run_delayed_work(&card->delayed_work); 839 codec->suspend_bias_level = codec->bias_level; 840 841 for (i = 0; i < codec->num_dai; i++) { 842 char *stream = codec->dai[i].playback.stream_name; 843 if (stream != NULL) 844 snd_soc_dapm_stream_event(codec, stream, 845 SND_SOC_DAPM_STREAM_SUSPEND); 846 stream = codec->dai[i].capture.stream_name; 847 if (stream != NULL) 848 snd_soc_dapm_stream_event(codec, stream, 849 SND_SOC_DAPM_STREAM_SUSPEND); 850 } 851 852 if (codec_dev->suspend) 853 codec_dev->suspend(pdev, PMSG_SUSPEND); 854 855 for (i = 0; i < card->num_links; i++) { 856 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 857 if (cpu_dai->suspend && cpu_dai->ac97_control) 858 cpu_dai->suspend(cpu_dai); 859 } 860 861 if (card->suspend_post) 862 card->suspend_post(pdev, PMSG_SUSPEND); 863 864 return 0; 865 } 866 867 /* deferred resume work, so resume can complete before we finished 868 * setting our codec back up, which can be very slow on I2C 869 */ 870 static void soc_resume_deferred(struct work_struct *work) 871 { 872 struct snd_soc_card *card = container_of(work, 873 struct snd_soc_card, 874 deferred_resume_work); 875 struct snd_soc_device *socdev = card->socdev; 876 struct snd_soc_platform *platform = card->platform; 877 struct snd_soc_codec_device *codec_dev = socdev->codec_dev; 878 struct snd_soc_codec *codec = card->codec; 879 struct platform_device *pdev = to_platform_device(socdev->dev); 880 int i; 881 882 /* our power state is still SNDRV_CTL_POWER_D3hot from suspend time, 883 * so userspace apps are blocked from touching us 884 */ 885 886 dev_dbg(socdev->dev, "starting resume work\n"); 887 888 if (card->resume_pre) 889 card->resume_pre(pdev); 890 891 for (i = 0; i < card->num_links; i++) { 892 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 893 if (cpu_dai->resume && cpu_dai->ac97_control) 894 cpu_dai->resume(cpu_dai); 895 } 896 897 if (codec_dev->resume) 898 codec_dev->resume(pdev); 899 900 for (i = 0; i < codec->num_dai; i++) { 901 char *stream = codec->dai[i].playback.stream_name; 902 if (stream != NULL) 903 snd_soc_dapm_stream_event(codec, stream, 904 SND_SOC_DAPM_STREAM_RESUME); 905 stream = codec->dai[i].capture.stream_name; 906 if (stream != NULL) 907 snd_soc_dapm_stream_event(codec, stream, 908 SND_SOC_DAPM_STREAM_RESUME); 909 } 910 911 /* unmute any active DACs */ 912 for (i = 0; i < card->num_links; i++) { 913 struct snd_soc_dai *dai = card->dai_link[i].codec_dai; 914 if (dai->ops->digital_mute && dai->playback.active) 915 dai->ops->digital_mute(dai, 0); 916 } 917 918 for (i = 0; i < card->num_links; i++) { 919 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 920 if (cpu_dai->resume && !cpu_dai->ac97_control) 921 cpu_dai->resume(cpu_dai); 922 if (platform->resume) 923 platform->resume(cpu_dai); 924 } 925 926 if (card->resume_post) 927 card->resume_post(pdev); 928 929 dev_dbg(socdev->dev, "resume work completed\n"); 930 931 /* userspace can access us now we are back as we were before */ 932 snd_power_change_state(codec->card, SNDRV_CTL_POWER_D0); 933 } 934 935 /* powers up audio subsystem after a suspend */ 936 static int soc_resume(struct device *dev) 937 { 938 struct platform_device *pdev = to_platform_device(dev); 939 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 940 struct snd_soc_card *card = socdev->card; 941 struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai; 942 943 /* AC97 devices might have other drivers hanging off them so 944 * need to resume immediately. Other drivers don't have that 945 * problem and may take a substantial amount of time to resume 946 * due to I/O costs and anti-pop so handle them out of line. 947 */ 948 if (cpu_dai->ac97_control) { 949 dev_dbg(socdev->dev, "Resuming AC97 immediately\n"); 950 soc_resume_deferred(&card->deferred_resume_work); 951 } else { 952 dev_dbg(socdev->dev, "Scheduling resume work\n"); 953 if (!schedule_work(&card->deferred_resume_work)) 954 dev_err(socdev->dev, "resume work item may be lost\n"); 955 } 956 957 return 0; 958 } 959 #else 960 #define soc_suspend NULL 961 #define soc_resume NULL 962 #endif 963 964 static struct snd_soc_dai_ops null_dai_ops = { 965 }; 966 967 static void snd_soc_instantiate_card(struct snd_soc_card *card) 968 { 969 struct platform_device *pdev = container_of(card->dev, 970 struct platform_device, 971 dev); 972 struct snd_soc_codec_device *codec_dev = card->socdev->codec_dev; 973 struct snd_soc_codec *codec; 974 struct snd_soc_platform *platform; 975 struct snd_soc_dai *dai; 976 int i, found, ret, ac97; 977 978 if (card->instantiated) 979 return; 980 981 found = 0; 982 list_for_each_entry(platform, &platform_list, list) 983 if (card->platform == platform) { 984 found = 1; 985 break; 986 } 987 if (!found) { 988 dev_dbg(card->dev, "Platform %s not registered\n", 989 card->platform->name); 990 return; 991 } 992 993 ac97 = 0; 994 for (i = 0; i < card->num_links; i++) { 995 found = 0; 996 list_for_each_entry(dai, &dai_list, list) 997 if (card->dai_link[i].cpu_dai == dai) { 998 found = 1; 999 break; 1000 } 1001 if (!found) { 1002 dev_dbg(card->dev, "DAI %s not registered\n", 1003 card->dai_link[i].cpu_dai->name); 1004 return; 1005 } 1006 1007 if (card->dai_link[i].cpu_dai->ac97_control) 1008 ac97 = 1; 1009 } 1010 1011 for (i = 0; i < card->num_links; i++) { 1012 if (!card->dai_link[i].codec_dai->ops) 1013 card->dai_link[i].codec_dai->ops = &null_dai_ops; 1014 } 1015 1016 /* If we have AC97 in the system then don't wait for the 1017 * codec. This will need revisiting if we have to handle 1018 * systems with mixed AC97 and non-AC97 parts. Only check for 1019 * DAIs currently; we can't do this per link since some AC97 1020 * codecs have non-AC97 DAIs. 1021 */ 1022 if (!ac97) 1023 for (i = 0; i < card->num_links; i++) { 1024 found = 0; 1025 list_for_each_entry(dai, &dai_list, list) 1026 if (card->dai_link[i].codec_dai == dai) { 1027 found = 1; 1028 break; 1029 } 1030 if (!found) { 1031 dev_dbg(card->dev, "DAI %s not registered\n", 1032 card->dai_link[i].codec_dai->name); 1033 return; 1034 } 1035 } 1036 1037 /* Note that we do not current check for codec components */ 1038 1039 dev_dbg(card->dev, "All components present, instantiating\n"); 1040 1041 /* Found everything, bring it up */ 1042 if (card->probe) { 1043 ret = card->probe(pdev); 1044 if (ret < 0) 1045 return; 1046 } 1047 1048 for (i = 0; i < card->num_links; i++) { 1049 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 1050 if (cpu_dai->probe) { 1051 ret = cpu_dai->probe(pdev, cpu_dai); 1052 if (ret < 0) 1053 goto cpu_dai_err; 1054 } 1055 } 1056 1057 if (codec_dev->probe) { 1058 ret = codec_dev->probe(pdev); 1059 if (ret < 0) 1060 goto cpu_dai_err; 1061 } 1062 codec = card->codec; 1063 1064 if (platform->probe) { 1065 ret = platform->probe(pdev); 1066 if (ret < 0) 1067 goto platform_err; 1068 } 1069 1070 /* DAPM stream work */ 1071 INIT_DELAYED_WORK(&card->delayed_work, close_delayed_work); 1072 #ifdef CONFIG_PM 1073 /* deferred resume work */ 1074 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 1075 #endif 1076 1077 for (i = 0; i < card->num_links; i++) { 1078 if (card->dai_link[i].init) { 1079 ret = card->dai_link[i].init(codec); 1080 if (ret < 0) { 1081 printk(KERN_ERR "asoc: failed to init %s\n", 1082 card->dai_link[i].stream_name); 1083 continue; 1084 } 1085 } 1086 if (card->dai_link[i].codec_dai->ac97_control) 1087 ac97 = 1; 1088 } 1089 1090 snprintf(codec->card->shortname, sizeof(codec->card->shortname), 1091 "%s", card->name); 1092 snprintf(codec->card->longname, sizeof(codec->card->longname), 1093 "%s (%s)", card->name, codec->name); 1094 1095 /* Make sure all DAPM widgets are instantiated */ 1096 snd_soc_dapm_new_widgets(codec); 1097 1098 ret = snd_card_register(codec->card); 1099 if (ret < 0) { 1100 printk(KERN_ERR "asoc: failed to register soundcard for %s\n", 1101 codec->name); 1102 goto card_err; 1103 } 1104 1105 mutex_lock(&codec->mutex); 1106 #ifdef CONFIG_SND_SOC_AC97_BUS 1107 /* Only instantiate AC97 if not already done by the adaptor 1108 * for the generic AC97 subsystem. 1109 */ 1110 if (ac97 && strcmp(codec->name, "AC97") != 0) { 1111 ret = soc_ac97_dev_register(codec); 1112 if (ret < 0) { 1113 printk(KERN_ERR "asoc: AC97 device register failed\n"); 1114 snd_card_free(codec->card); 1115 mutex_unlock(&codec->mutex); 1116 goto card_err; 1117 } 1118 } 1119 #endif 1120 1121 ret = snd_soc_dapm_sys_add(card->socdev->dev); 1122 if (ret < 0) 1123 printk(KERN_WARNING "asoc: failed to add dapm sysfs entries\n"); 1124 1125 ret = device_create_file(card->socdev->dev, &dev_attr_codec_reg); 1126 if (ret < 0) 1127 printk(KERN_WARNING "asoc: failed to add codec sysfs files\n"); 1128 1129 soc_init_codec_debugfs(codec); 1130 mutex_unlock(&codec->mutex); 1131 1132 card->instantiated = 1; 1133 1134 return; 1135 1136 card_err: 1137 if (platform->remove) 1138 platform->remove(pdev); 1139 1140 platform_err: 1141 if (codec_dev->remove) 1142 codec_dev->remove(pdev); 1143 1144 cpu_dai_err: 1145 for (i--; i >= 0; i--) { 1146 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 1147 if (cpu_dai->remove) 1148 cpu_dai->remove(pdev, cpu_dai); 1149 } 1150 1151 if (card->remove) 1152 card->remove(pdev); 1153 } 1154 1155 /* 1156 * Attempt to initialise any uninitalised cards. Must be called with 1157 * client_mutex. 1158 */ 1159 static void snd_soc_instantiate_cards(void) 1160 { 1161 struct snd_soc_card *card; 1162 list_for_each_entry(card, &card_list, list) 1163 snd_soc_instantiate_card(card); 1164 } 1165 1166 /* probes a new socdev */ 1167 static int soc_probe(struct platform_device *pdev) 1168 { 1169 int ret = 0; 1170 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 1171 struct snd_soc_card *card = socdev->card; 1172 1173 /* Bodge while we push things out of socdev */ 1174 card->socdev = socdev; 1175 1176 /* Bodge while we unpick instantiation */ 1177 card->dev = &pdev->dev; 1178 ret = snd_soc_register_card(card); 1179 if (ret != 0) { 1180 dev_err(&pdev->dev, "Failed to register card\n"); 1181 return ret; 1182 } 1183 1184 return 0; 1185 } 1186 1187 /* removes a socdev */ 1188 static int soc_remove(struct platform_device *pdev) 1189 { 1190 int i; 1191 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 1192 struct snd_soc_card *card = socdev->card; 1193 struct snd_soc_platform *platform = card->platform; 1194 struct snd_soc_codec_device *codec_dev = socdev->codec_dev; 1195 1196 if (!card->instantiated) 1197 return 0; 1198 1199 run_delayed_work(&card->delayed_work); 1200 1201 if (platform->remove) 1202 platform->remove(pdev); 1203 1204 if (codec_dev->remove) 1205 codec_dev->remove(pdev); 1206 1207 for (i = 0; i < card->num_links; i++) { 1208 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 1209 if (cpu_dai->remove) 1210 cpu_dai->remove(pdev, cpu_dai); 1211 } 1212 1213 if (card->remove) 1214 card->remove(pdev); 1215 1216 snd_soc_unregister_card(card); 1217 1218 return 0; 1219 } 1220 1221 static int soc_poweroff(struct device *dev) 1222 { 1223 struct platform_device *pdev = to_platform_device(dev); 1224 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 1225 struct snd_soc_card *card = socdev->card; 1226 1227 if (!card->instantiated) 1228 return 0; 1229 1230 /* Flush out pmdown_time work - we actually do want to run it 1231 * now, we're shutting down so no imminent restart. */ 1232 run_delayed_work(&card->delayed_work); 1233 1234 snd_soc_dapm_shutdown(socdev); 1235 1236 return 0; 1237 } 1238 1239 static const struct dev_pm_ops soc_pm_ops = { 1240 .suspend = soc_suspend, 1241 .resume = soc_resume, 1242 .poweroff = soc_poweroff, 1243 }; 1244 1245 /* ASoC platform driver */ 1246 static struct platform_driver soc_driver = { 1247 .driver = { 1248 .name = "soc-audio", 1249 .owner = THIS_MODULE, 1250 .pm = &soc_pm_ops, 1251 }, 1252 .probe = soc_probe, 1253 .remove = soc_remove, 1254 }; 1255 1256 /* create a new pcm */ 1257 static int soc_new_pcm(struct snd_soc_device *socdev, 1258 struct snd_soc_dai_link *dai_link, int num) 1259 { 1260 struct snd_soc_card *card = socdev->card; 1261 struct snd_soc_codec *codec = card->codec; 1262 struct snd_soc_platform *platform = card->platform; 1263 struct snd_soc_dai *codec_dai = dai_link->codec_dai; 1264 struct snd_soc_dai *cpu_dai = dai_link->cpu_dai; 1265 struct snd_soc_pcm_runtime *rtd; 1266 struct snd_pcm *pcm; 1267 char new_name[64]; 1268 int ret = 0, playback = 0, capture = 0; 1269 1270 rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL); 1271 if (rtd == NULL) 1272 return -ENOMEM; 1273 1274 rtd->dai = dai_link; 1275 rtd->socdev = socdev; 1276 codec_dai->codec = card->codec; 1277 1278 /* check client and interface hw capabilities */ 1279 sprintf(new_name, "%s %s-%d", dai_link->stream_name, codec_dai->name, 1280 num); 1281 1282 if (codec_dai->playback.channels_min) 1283 playback = 1; 1284 if (codec_dai->capture.channels_min) 1285 capture = 1; 1286 1287 ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback, 1288 capture, &pcm); 1289 if (ret < 0) { 1290 printk(KERN_ERR "asoc: can't create pcm for codec %s\n", 1291 codec->name); 1292 kfree(rtd); 1293 return ret; 1294 } 1295 1296 dai_link->pcm = pcm; 1297 pcm->private_data = rtd; 1298 soc_pcm_ops.mmap = platform->pcm_ops->mmap; 1299 soc_pcm_ops.pointer = platform->pcm_ops->pointer; 1300 soc_pcm_ops.ioctl = platform->pcm_ops->ioctl; 1301 soc_pcm_ops.copy = platform->pcm_ops->copy; 1302 soc_pcm_ops.silence = platform->pcm_ops->silence; 1303 soc_pcm_ops.ack = platform->pcm_ops->ack; 1304 soc_pcm_ops.page = platform->pcm_ops->page; 1305 1306 if (playback) 1307 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops); 1308 1309 if (capture) 1310 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops); 1311 1312 ret = platform->pcm_new(codec->card, codec_dai, pcm); 1313 if (ret < 0) { 1314 printk(KERN_ERR "asoc: platform pcm constructor failed\n"); 1315 kfree(rtd); 1316 return ret; 1317 } 1318 1319 pcm->private_free = platform->pcm_free; 1320 printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name, 1321 cpu_dai->name); 1322 return ret; 1323 } 1324 1325 /** 1326 * snd_soc_codec_volatile_register: Report if a register is volatile. 1327 * 1328 * @codec: CODEC to query. 1329 * @reg: Register to query. 1330 * 1331 * Boolean function indiciating if a CODEC register is volatile. 1332 */ 1333 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg) 1334 { 1335 if (codec->volatile_register) 1336 return codec->volatile_register(reg); 1337 else 1338 return 0; 1339 } 1340 EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register); 1341 1342 /** 1343 * snd_soc_new_ac97_codec - initailise AC97 device 1344 * @codec: audio codec 1345 * @ops: AC97 bus operations 1346 * @num: AC97 codec number 1347 * 1348 * Initialises AC97 codec resources for use by ad-hoc devices only. 1349 */ 1350 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, 1351 struct snd_ac97_bus_ops *ops, int num) 1352 { 1353 mutex_lock(&codec->mutex); 1354 1355 codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); 1356 if (codec->ac97 == NULL) { 1357 mutex_unlock(&codec->mutex); 1358 return -ENOMEM; 1359 } 1360 1361 codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL); 1362 if (codec->ac97->bus == NULL) { 1363 kfree(codec->ac97); 1364 codec->ac97 = NULL; 1365 mutex_unlock(&codec->mutex); 1366 return -ENOMEM; 1367 } 1368 1369 codec->ac97->bus->ops = ops; 1370 codec->ac97->num = num; 1371 mutex_unlock(&codec->mutex); 1372 return 0; 1373 } 1374 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec); 1375 1376 /** 1377 * snd_soc_free_ac97_codec - free AC97 codec device 1378 * @codec: audio codec 1379 * 1380 * Frees AC97 codec device resources. 1381 */ 1382 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec) 1383 { 1384 mutex_lock(&codec->mutex); 1385 kfree(codec->ac97->bus); 1386 kfree(codec->ac97); 1387 codec->ac97 = NULL; 1388 mutex_unlock(&codec->mutex); 1389 } 1390 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec); 1391 1392 /** 1393 * snd_soc_update_bits - update codec register bits 1394 * @codec: audio codec 1395 * @reg: codec register 1396 * @mask: register mask 1397 * @value: new value 1398 * 1399 * Writes new register value. 1400 * 1401 * Returns 1 for change else 0. 1402 */ 1403 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, 1404 unsigned int mask, unsigned int value) 1405 { 1406 int change; 1407 unsigned int old, new; 1408 1409 old = snd_soc_read(codec, reg); 1410 new = (old & ~mask) | value; 1411 change = old != new; 1412 if (change) 1413 snd_soc_write(codec, reg, new); 1414 1415 return change; 1416 } 1417 EXPORT_SYMBOL_GPL(snd_soc_update_bits); 1418 1419 /** 1420 * snd_soc_update_bits_locked - update codec register bits 1421 * @codec: audio codec 1422 * @reg: codec register 1423 * @mask: register mask 1424 * @value: new value 1425 * 1426 * Writes new register value, and takes the codec mutex. 1427 * 1428 * Returns 1 for change else 0. 1429 */ 1430 static int snd_soc_update_bits_locked(struct snd_soc_codec *codec, 1431 unsigned short reg, unsigned int mask, 1432 unsigned int value) 1433 { 1434 int change; 1435 1436 mutex_lock(&codec->mutex); 1437 change = snd_soc_update_bits(codec, reg, mask, value); 1438 mutex_unlock(&codec->mutex); 1439 1440 return change; 1441 } 1442 1443 /** 1444 * snd_soc_test_bits - test register for change 1445 * @codec: audio codec 1446 * @reg: codec register 1447 * @mask: register mask 1448 * @value: new value 1449 * 1450 * Tests a register with a new value and checks if the new value is 1451 * different from the old value. 1452 * 1453 * Returns 1 for change else 0. 1454 */ 1455 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, 1456 unsigned int mask, unsigned int value) 1457 { 1458 int change; 1459 unsigned int old, new; 1460 1461 old = snd_soc_read(codec, reg); 1462 new = (old & ~mask) | value; 1463 change = old != new; 1464 1465 return change; 1466 } 1467 EXPORT_SYMBOL_GPL(snd_soc_test_bits); 1468 1469 /** 1470 * snd_soc_new_pcms - create new sound card and pcms 1471 * @socdev: the SoC audio device 1472 * @idx: ALSA card index 1473 * @xid: card identification 1474 * 1475 * Create a new sound card based upon the codec and interface pcms. 1476 * 1477 * Returns 0 for success, else error. 1478 */ 1479 int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid) 1480 { 1481 struct snd_soc_card *card = socdev->card; 1482 struct snd_soc_codec *codec = card->codec; 1483 int ret, i; 1484 1485 mutex_lock(&codec->mutex); 1486 1487 /* register a sound card */ 1488 ret = snd_card_create(idx, xid, codec->owner, 0, &codec->card); 1489 if (ret < 0) { 1490 printk(KERN_ERR "asoc: can't create sound card for codec %s\n", 1491 codec->name); 1492 mutex_unlock(&codec->mutex); 1493 return ret; 1494 } 1495 1496 codec->socdev = socdev; 1497 codec->card->dev = socdev->dev; 1498 codec->card->private_data = codec; 1499 strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver)); 1500 1501 /* create the pcms */ 1502 for (i = 0; i < card->num_links; i++) { 1503 ret = soc_new_pcm(socdev, &card->dai_link[i], i); 1504 if (ret < 0) { 1505 printk(KERN_ERR "asoc: can't create pcm %s\n", 1506 card->dai_link[i].stream_name); 1507 mutex_unlock(&codec->mutex); 1508 return ret; 1509 } 1510 if (card->dai_link[i].codec_dai->ac97_control) { 1511 snd_ac97_dev_add_pdata(codec->ac97, 1512 card->dai_link[i].cpu_dai->ac97_pdata); 1513 } 1514 } 1515 1516 mutex_unlock(&codec->mutex); 1517 return ret; 1518 } 1519 EXPORT_SYMBOL_GPL(snd_soc_new_pcms); 1520 1521 /** 1522 * snd_soc_free_pcms - free sound card and pcms 1523 * @socdev: the SoC audio device 1524 * 1525 * Frees sound card and pcms associated with the socdev. 1526 * Also unregister the codec if it is an AC97 device. 1527 */ 1528 void snd_soc_free_pcms(struct snd_soc_device *socdev) 1529 { 1530 struct snd_soc_codec *codec = socdev->card->codec; 1531 #ifdef CONFIG_SND_SOC_AC97_BUS 1532 struct snd_soc_dai *codec_dai; 1533 int i; 1534 #endif 1535 1536 mutex_lock(&codec->mutex); 1537 soc_cleanup_codec_debugfs(codec); 1538 #ifdef CONFIG_SND_SOC_AC97_BUS 1539 for (i = 0; i < codec->num_dai; i++) { 1540 codec_dai = &codec->dai[i]; 1541 if (codec_dai->ac97_control && codec->ac97 && 1542 strcmp(codec->name, "AC97") != 0) { 1543 soc_ac97_dev_unregister(codec); 1544 goto free_card; 1545 } 1546 } 1547 free_card: 1548 #endif 1549 1550 if (codec->card) 1551 snd_card_free(codec->card); 1552 device_remove_file(socdev->dev, &dev_attr_codec_reg); 1553 mutex_unlock(&codec->mutex); 1554 } 1555 EXPORT_SYMBOL_GPL(snd_soc_free_pcms); 1556 1557 /** 1558 * snd_soc_set_runtime_hwparams - set the runtime hardware parameters 1559 * @substream: the pcm substream 1560 * @hw: the hardware parameters 1561 * 1562 * Sets the substream runtime hardware parameters. 1563 */ 1564 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, 1565 const struct snd_pcm_hardware *hw) 1566 { 1567 struct snd_pcm_runtime *runtime = substream->runtime; 1568 runtime->hw.info = hw->info; 1569 runtime->hw.formats = hw->formats; 1570 runtime->hw.period_bytes_min = hw->period_bytes_min; 1571 runtime->hw.period_bytes_max = hw->period_bytes_max; 1572 runtime->hw.periods_min = hw->periods_min; 1573 runtime->hw.periods_max = hw->periods_max; 1574 runtime->hw.buffer_bytes_max = hw->buffer_bytes_max; 1575 runtime->hw.fifo_size = hw->fifo_size; 1576 return 0; 1577 } 1578 EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams); 1579 1580 /** 1581 * snd_soc_cnew - create new control 1582 * @_template: control template 1583 * @data: control private data 1584 * @long_name: control long name 1585 * 1586 * Create a new mixer control from a template control. 1587 * 1588 * Returns 0 for success, else error. 1589 */ 1590 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 1591 void *data, char *long_name) 1592 { 1593 struct snd_kcontrol_new template; 1594 1595 memcpy(&template, _template, sizeof(template)); 1596 if (long_name) 1597 template.name = long_name; 1598 template.index = 0; 1599 1600 return snd_ctl_new1(&template, data); 1601 } 1602 EXPORT_SYMBOL_GPL(snd_soc_cnew); 1603 1604 /** 1605 * snd_soc_add_controls - add an array of controls to a codec. 1606 * Convienience function to add a list of controls. Many codecs were 1607 * duplicating this code. 1608 * 1609 * @codec: codec to add controls to 1610 * @controls: array of controls to add 1611 * @num_controls: number of elements in the array 1612 * 1613 * Return 0 for success, else error. 1614 */ 1615 int snd_soc_add_controls(struct snd_soc_codec *codec, 1616 const struct snd_kcontrol_new *controls, int num_controls) 1617 { 1618 struct snd_card *card = codec->card; 1619 int err, i; 1620 1621 for (i = 0; i < num_controls; i++) { 1622 const struct snd_kcontrol_new *control = &controls[i]; 1623 err = snd_ctl_add(card, snd_soc_cnew(control, codec, NULL)); 1624 if (err < 0) { 1625 dev_err(codec->dev, "%s: Failed to add %s\n", 1626 codec->name, control->name); 1627 return err; 1628 } 1629 } 1630 1631 return 0; 1632 } 1633 EXPORT_SYMBOL_GPL(snd_soc_add_controls); 1634 1635 /** 1636 * snd_soc_info_enum_double - enumerated double mixer info callback 1637 * @kcontrol: mixer control 1638 * @uinfo: control element information 1639 * 1640 * Callback to provide information about a double enumerated 1641 * mixer control. 1642 * 1643 * Returns 0 for success. 1644 */ 1645 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 1646 struct snd_ctl_elem_info *uinfo) 1647 { 1648 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1649 1650 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1651 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 1652 uinfo->value.enumerated.items = e->max; 1653 1654 if (uinfo->value.enumerated.item > e->max - 1) 1655 uinfo->value.enumerated.item = e->max - 1; 1656 strcpy(uinfo->value.enumerated.name, 1657 e->texts[uinfo->value.enumerated.item]); 1658 return 0; 1659 } 1660 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double); 1661 1662 /** 1663 * snd_soc_get_enum_double - enumerated double mixer get callback 1664 * @kcontrol: mixer control 1665 * @ucontrol: control element information 1666 * 1667 * Callback to get the value of a double enumerated mixer. 1668 * 1669 * Returns 0 for success. 1670 */ 1671 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, 1672 struct snd_ctl_elem_value *ucontrol) 1673 { 1674 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1675 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1676 unsigned int val, bitmask; 1677 1678 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 1679 ; 1680 val = snd_soc_read(codec, e->reg); 1681 ucontrol->value.enumerated.item[0] 1682 = (val >> e->shift_l) & (bitmask - 1); 1683 if (e->shift_l != e->shift_r) 1684 ucontrol->value.enumerated.item[1] = 1685 (val >> e->shift_r) & (bitmask - 1); 1686 1687 return 0; 1688 } 1689 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double); 1690 1691 /** 1692 * snd_soc_put_enum_double - enumerated double mixer put callback 1693 * @kcontrol: mixer control 1694 * @ucontrol: control element information 1695 * 1696 * Callback to set the value of a double enumerated mixer. 1697 * 1698 * Returns 0 for success. 1699 */ 1700 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, 1701 struct snd_ctl_elem_value *ucontrol) 1702 { 1703 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1704 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1705 unsigned int val; 1706 unsigned int mask, bitmask; 1707 1708 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 1709 ; 1710 if (ucontrol->value.enumerated.item[0] > e->max - 1) 1711 return -EINVAL; 1712 val = ucontrol->value.enumerated.item[0] << e->shift_l; 1713 mask = (bitmask - 1) << e->shift_l; 1714 if (e->shift_l != e->shift_r) { 1715 if (ucontrol->value.enumerated.item[1] > e->max - 1) 1716 return -EINVAL; 1717 val |= ucontrol->value.enumerated.item[1] << e->shift_r; 1718 mask |= (bitmask - 1) << e->shift_r; 1719 } 1720 1721 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 1722 } 1723 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double); 1724 1725 /** 1726 * snd_soc_get_value_enum_double - semi enumerated double mixer get callback 1727 * @kcontrol: mixer control 1728 * @ucontrol: control element information 1729 * 1730 * Callback to get the value of a double semi enumerated mixer. 1731 * 1732 * Semi enumerated mixer: the enumerated items are referred as values. Can be 1733 * used for handling bitfield coded enumeration for example. 1734 * 1735 * Returns 0 for success. 1736 */ 1737 int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, 1738 struct snd_ctl_elem_value *ucontrol) 1739 { 1740 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1741 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1742 unsigned int reg_val, val, mux; 1743 1744 reg_val = snd_soc_read(codec, e->reg); 1745 val = (reg_val >> e->shift_l) & e->mask; 1746 for (mux = 0; mux < e->max; mux++) { 1747 if (val == e->values[mux]) 1748 break; 1749 } 1750 ucontrol->value.enumerated.item[0] = mux; 1751 if (e->shift_l != e->shift_r) { 1752 val = (reg_val >> e->shift_r) & e->mask; 1753 for (mux = 0; mux < e->max; mux++) { 1754 if (val == e->values[mux]) 1755 break; 1756 } 1757 ucontrol->value.enumerated.item[1] = mux; 1758 } 1759 1760 return 0; 1761 } 1762 EXPORT_SYMBOL_GPL(snd_soc_get_value_enum_double); 1763 1764 /** 1765 * snd_soc_put_value_enum_double - semi enumerated double mixer put callback 1766 * @kcontrol: mixer control 1767 * @ucontrol: control element information 1768 * 1769 * Callback to set the value of a double semi enumerated mixer. 1770 * 1771 * Semi enumerated mixer: the enumerated items are referred as values. Can be 1772 * used for handling bitfield coded enumeration for example. 1773 * 1774 * Returns 0 for success. 1775 */ 1776 int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, 1777 struct snd_ctl_elem_value *ucontrol) 1778 { 1779 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1780 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1781 unsigned int val; 1782 unsigned int mask; 1783 1784 if (ucontrol->value.enumerated.item[0] > e->max - 1) 1785 return -EINVAL; 1786 val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; 1787 mask = e->mask << e->shift_l; 1788 if (e->shift_l != e->shift_r) { 1789 if (ucontrol->value.enumerated.item[1] > e->max - 1) 1790 return -EINVAL; 1791 val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; 1792 mask |= e->mask << e->shift_r; 1793 } 1794 1795 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 1796 } 1797 EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double); 1798 1799 /** 1800 * snd_soc_info_enum_ext - external enumerated single mixer info callback 1801 * @kcontrol: mixer control 1802 * @uinfo: control element information 1803 * 1804 * Callback to provide information about an external enumerated 1805 * single mixer. 1806 * 1807 * Returns 0 for success. 1808 */ 1809 int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, 1810 struct snd_ctl_elem_info *uinfo) 1811 { 1812 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1813 1814 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1815 uinfo->count = 1; 1816 uinfo->value.enumerated.items = e->max; 1817 1818 if (uinfo->value.enumerated.item > e->max - 1) 1819 uinfo->value.enumerated.item = e->max - 1; 1820 strcpy(uinfo->value.enumerated.name, 1821 e->texts[uinfo->value.enumerated.item]); 1822 return 0; 1823 } 1824 EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext); 1825 1826 /** 1827 * snd_soc_info_volsw_ext - external single mixer info callback 1828 * @kcontrol: mixer control 1829 * @uinfo: control element information 1830 * 1831 * Callback to provide information about a single external mixer control. 1832 * 1833 * Returns 0 for success. 1834 */ 1835 int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol, 1836 struct snd_ctl_elem_info *uinfo) 1837 { 1838 int max = kcontrol->private_value; 1839 1840 if (max == 1 && !strstr(kcontrol->id.name, " Volume")) 1841 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1842 else 1843 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1844 1845 uinfo->count = 1; 1846 uinfo->value.integer.min = 0; 1847 uinfo->value.integer.max = max; 1848 return 0; 1849 } 1850 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext); 1851 1852 /** 1853 * snd_soc_info_volsw - single mixer info callback 1854 * @kcontrol: mixer control 1855 * @uinfo: control element information 1856 * 1857 * Callback to provide information about a single mixer control. 1858 * 1859 * Returns 0 for success. 1860 */ 1861 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, 1862 struct snd_ctl_elem_info *uinfo) 1863 { 1864 struct soc_mixer_control *mc = 1865 (struct soc_mixer_control *)kcontrol->private_value; 1866 int max = mc->max; 1867 unsigned int shift = mc->shift; 1868 unsigned int rshift = mc->rshift; 1869 1870 if (max == 1 && !strstr(kcontrol->id.name, " Volume")) 1871 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1872 else 1873 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1874 1875 uinfo->count = shift == rshift ? 1 : 2; 1876 uinfo->value.integer.min = 0; 1877 uinfo->value.integer.max = max; 1878 return 0; 1879 } 1880 EXPORT_SYMBOL_GPL(snd_soc_info_volsw); 1881 1882 /** 1883 * snd_soc_get_volsw - single mixer get callback 1884 * @kcontrol: mixer control 1885 * @ucontrol: control element information 1886 * 1887 * Callback to get the value of a single mixer control. 1888 * 1889 * Returns 0 for success. 1890 */ 1891 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, 1892 struct snd_ctl_elem_value *ucontrol) 1893 { 1894 struct soc_mixer_control *mc = 1895 (struct soc_mixer_control *)kcontrol->private_value; 1896 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1897 unsigned int reg = mc->reg; 1898 unsigned int shift = mc->shift; 1899 unsigned int rshift = mc->rshift; 1900 int max = mc->max; 1901 unsigned int mask = (1 << fls(max)) - 1; 1902 unsigned int invert = mc->invert; 1903 1904 ucontrol->value.integer.value[0] = 1905 (snd_soc_read(codec, reg) >> shift) & mask; 1906 if (shift != rshift) 1907 ucontrol->value.integer.value[1] = 1908 (snd_soc_read(codec, reg) >> rshift) & mask; 1909 if (invert) { 1910 ucontrol->value.integer.value[0] = 1911 max - ucontrol->value.integer.value[0]; 1912 if (shift != rshift) 1913 ucontrol->value.integer.value[1] = 1914 max - ucontrol->value.integer.value[1]; 1915 } 1916 1917 return 0; 1918 } 1919 EXPORT_SYMBOL_GPL(snd_soc_get_volsw); 1920 1921 /** 1922 * snd_soc_put_volsw - single mixer put callback 1923 * @kcontrol: mixer control 1924 * @ucontrol: control element information 1925 * 1926 * Callback to set the value of a single mixer control. 1927 * 1928 * Returns 0 for success. 1929 */ 1930 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, 1931 struct snd_ctl_elem_value *ucontrol) 1932 { 1933 struct soc_mixer_control *mc = 1934 (struct soc_mixer_control *)kcontrol->private_value; 1935 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1936 unsigned int reg = mc->reg; 1937 unsigned int shift = mc->shift; 1938 unsigned int rshift = mc->rshift; 1939 int max = mc->max; 1940 unsigned int mask = (1 << fls(max)) - 1; 1941 unsigned int invert = mc->invert; 1942 unsigned int val, val2, val_mask; 1943 1944 val = (ucontrol->value.integer.value[0] & mask); 1945 if (invert) 1946 val = max - val; 1947 val_mask = mask << shift; 1948 val = val << shift; 1949 if (shift != rshift) { 1950 val2 = (ucontrol->value.integer.value[1] & mask); 1951 if (invert) 1952 val2 = max - val2; 1953 val_mask |= mask << rshift; 1954 val |= val2 << rshift; 1955 } 1956 return snd_soc_update_bits_locked(codec, reg, val_mask, val); 1957 } 1958 EXPORT_SYMBOL_GPL(snd_soc_put_volsw); 1959 1960 /** 1961 * snd_soc_info_volsw_2r - double mixer info callback 1962 * @kcontrol: mixer control 1963 * @uinfo: control element information 1964 * 1965 * Callback to provide information about a double mixer control that 1966 * spans 2 codec registers. 1967 * 1968 * Returns 0 for success. 1969 */ 1970 int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol, 1971 struct snd_ctl_elem_info *uinfo) 1972 { 1973 struct soc_mixer_control *mc = 1974 (struct soc_mixer_control *)kcontrol->private_value; 1975 int max = mc->max; 1976 1977 if (max == 1 && !strstr(kcontrol->id.name, " Volume")) 1978 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1979 else 1980 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1981 1982 uinfo->count = 2; 1983 uinfo->value.integer.min = 0; 1984 uinfo->value.integer.max = max; 1985 return 0; 1986 } 1987 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_2r); 1988 1989 /** 1990 * snd_soc_get_volsw_2r - double mixer get callback 1991 * @kcontrol: mixer control 1992 * @ucontrol: control element information 1993 * 1994 * Callback to get the value of a double mixer control that spans 2 registers. 1995 * 1996 * Returns 0 for success. 1997 */ 1998 int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol, 1999 struct snd_ctl_elem_value *ucontrol) 2000 { 2001 struct soc_mixer_control *mc = 2002 (struct soc_mixer_control *)kcontrol->private_value; 2003 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2004 unsigned int reg = mc->reg; 2005 unsigned int reg2 = mc->rreg; 2006 unsigned int shift = mc->shift; 2007 int max = mc->max; 2008 unsigned int mask = (1 << fls(max)) - 1; 2009 unsigned int invert = mc->invert; 2010 2011 ucontrol->value.integer.value[0] = 2012 (snd_soc_read(codec, reg) >> shift) & mask; 2013 ucontrol->value.integer.value[1] = 2014 (snd_soc_read(codec, reg2) >> shift) & mask; 2015 if (invert) { 2016 ucontrol->value.integer.value[0] = 2017 max - ucontrol->value.integer.value[0]; 2018 ucontrol->value.integer.value[1] = 2019 max - ucontrol->value.integer.value[1]; 2020 } 2021 2022 return 0; 2023 } 2024 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_2r); 2025 2026 /** 2027 * snd_soc_put_volsw_2r - double mixer set callback 2028 * @kcontrol: mixer control 2029 * @ucontrol: control element information 2030 * 2031 * Callback to set the value of a double mixer control that spans 2 registers. 2032 * 2033 * Returns 0 for success. 2034 */ 2035 int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol, 2036 struct snd_ctl_elem_value *ucontrol) 2037 { 2038 struct soc_mixer_control *mc = 2039 (struct soc_mixer_control *)kcontrol->private_value; 2040 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2041 unsigned int reg = mc->reg; 2042 unsigned int reg2 = mc->rreg; 2043 unsigned int shift = mc->shift; 2044 int max = mc->max; 2045 unsigned int mask = (1 << fls(max)) - 1; 2046 unsigned int invert = mc->invert; 2047 int err; 2048 unsigned int val, val2, val_mask; 2049 2050 val_mask = mask << shift; 2051 val = (ucontrol->value.integer.value[0] & mask); 2052 val2 = (ucontrol->value.integer.value[1] & mask); 2053 2054 if (invert) { 2055 val = max - val; 2056 val2 = max - val2; 2057 } 2058 2059 val = val << shift; 2060 val2 = val2 << shift; 2061 2062 err = snd_soc_update_bits_locked(codec, reg, val_mask, val); 2063 if (err < 0) 2064 return err; 2065 2066 err = snd_soc_update_bits_locked(codec, reg2, val_mask, val2); 2067 return err; 2068 } 2069 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r); 2070 2071 /** 2072 * snd_soc_info_volsw_s8 - signed mixer info callback 2073 * @kcontrol: mixer control 2074 * @uinfo: control element information 2075 * 2076 * Callback to provide information about a signed mixer control. 2077 * 2078 * Returns 0 for success. 2079 */ 2080 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, 2081 struct snd_ctl_elem_info *uinfo) 2082 { 2083 struct soc_mixer_control *mc = 2084 (struct soc_mixer_control *)kcontrol->private_value; 2085 int max = mc->max; 2086 int min = mc->min; 2087 2088 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2089 uinfo->count = 2; 2090 uinfo->value.integer.min = 0; 2091 uinfo->value.integer.max = max-min; 2092 return 0; 2093 } 2094 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8); 2095 2096 /** 2097 * snd_soc_get_volsw_s8 - signed mixer get callback 2098 * @kcontrol: mixer control 2099 * @ucontrol: control element information 2100 * 2101 * Callback to get the value of a signed mixer control. 2102 * 2103 * Returns 0 for success. 2104 */ 2105 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, 2106 struct snd_ctl_elem_value *ucontrol) 2107 { 2108 struct soc_mixer_control *mc = 2109 (struct soc_mixer_control *)kcontrol->private_value; 2110 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2111 unsigned int reg = mc->reg; 2112 int min = mc->min; 2113 int val = snd_soc_read(codec, reg); 2114 2115 ucontrol->value.integer.value[0] = 2116 ((signed char)(val & 0xff))-min; 2117 ucontrol->value.integer.value[1] = 2118 ((signed char)((val >> 8) & 0xff))-min; 2119 return 0; 2120 } 2121 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8); 2122 2123 /** 2124 * snd_soc_put_volsw_sgn - signed mixer put callback 2125 * @kcontrol: mixer control 2126 * @ucontrol: control element information 2127 * 2128 * Callback to set the value of a signed mixer control. 2129 * 2130 * Returns 0 for success. 2131 */ 2132 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 2133 struct snd_ctl_elem_value *ucontrol) 2134 { 2135 struct soc_mixer_control *mc = 2136 (struct soc_mixer_control *)kcontrol->private_value; 2137 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2138 unsigned int reg = mc->reg; 2139 int min = mc->min; 2140 unsigned int val; 2141 2142 val = (ucontrol->value.integer.value[0]+min) & 0xff; 2143 val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; 2144 2145 return snd_soc_update_bits_locked(codec, reg, 0xffff, val); 2146 } 2147 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8); 2148 2149 /** 2150 * snd_soc_dai_set_sysclk - configure DAI system or master clock. 2151 * @dai: DAI 2152 * @clk_id: DAI specific clock ID 2153 * @freq: new clock frequency in Hz 2154 * @dir: new clock direction - input/output. 2155 * 2156 * Configures the DAI master (MCLK) or system (SYSCLK) clocking. 2157 */ 2158 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, 2159 unsigned int freq, int dir) 2160 { 2161 if (dai->ops && dai->ops->set_sysclk) 2162 return dai->ops->set_sysclk(dai, clk_id, freq, dir); 2163 else 2164 return -EINVAL; 2165 } 2166 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk); 2167 2168 /** 2169 * snd_soc_dai_set_clkdiv - configure DAI clock dividers. 2170 * @dai: DAI 2171 * @div_id: DAI specific clock divider ID 2172 * @div: new clock divisor. 2173 * 2174 * Configures the clock dividers. This is used to derive the best DAI bit and 2175 * frame clocks from the system or master clock. It's best to set the DAI bit 2176 * and frame clocks as low as possible to save system power. 2177 */ 2178 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, 2179 int div_id, int div) 2180 { 2181 if (dai->ops && dai->ops->set_clkdiv) 2182 return dai->ops->set_clkdiv(dai, div_id, div); 2183 else 2184 return -EINVAL; 2185 } 2186 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv); 2187 2188 /** 2189 * snd_soc_dai_set_pll - configure DAI PLL. 2190 * @dai: DAI 2191 * @pll_id: DAI specific PLL ID 2192 * @source: DAI specific source for the PLL 2193 * @freq_in: PLL input clock frequency in Hz 2194 * @freq_out: requested PLL output clock frequency in Hz 2195 * 2196 * Configures and enables PLL to generate output clock based on input clock. 2197 */ 2198 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source, 2199 unsigned int freq_in, unsigned int freq_out) 2200 { 2201 if (dai->ops && dai->ops->set_pll) 2202 return dai->ops->set_pll(dai, pll_id, source, 2203 freq_in, freq_out); 2204 else 2205 return -EINVAL; 2206 } 2207 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll); 2208 2209 /** 2210 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 2211 * @dai: DAI 2212 * @fmt: SND_SOC_DAIFMT_ format value. 2213 * 2214 * Configures the DAI hardware format and clocking. 2215 */ 2216 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 2217 { 2218 if (dai->ops && dai->ops->set_fmt) 2219 return dai->ops->set_fmt(dai, fmt); 2220 else 2221 return -EINVAL; 2222 } 2223 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt); 2224 2225 /** 2226 * snd_soc_dai_set_tdm_slot - configure DAI TDM. 2227 * @dai: DAI 2228 * @tx_mask: bitmask representing active TX slots. 2229 * @rx_mask: bitmask representing active RX slots. 2230 * @slots: Number of slots in use. 2231 * @slot_width: Width in bits for each slot. 2232 * 2233 * Configures a DAI for TDM operation. Both mask and slots are codec and DAI 2234 * specific. 2235 */ 2236 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, 2237 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 2238 { 2239 if (dai->ops && dai->ops->set_tdm_slot) 2240 return dai->ops->set_tdm_slot(dai, tx_mask, rx_mask, 2241 slots, slot_width); 2242 else 2243 return -EINVAL; 2244 } 2245 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot); 2246 2247 /** 2248 * snd_soc_dai_set_channel_map - configure DAI audio channel map 2249 * @dai: DAI 2250 * @tx_num: how many TX channels 2251 * @tx_slot: pointer to an array which imply the TX slot number channel 2252 * 0~num-1 uses 2253 * @rx_num: how many RX channels 2254 * @rx_slot: pointer to an array which imply the RX slot number channel 2255 * 0~num-1 uses 2256 * 2257 * configure the relationship between channel number and TDM slot number. 2258 */ 2259 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai, 2260 unsigned int tx_num, unsigned int *tx_slot, 2261 unsigned int rx_num, unsigned int *rx_slot) 2262 { 2263 if (dai->ops && dai->ops->set_channel_map) 2264 return dai->ops->set_channel_map(dai, tx_num, tx_slot, 2265 rx_num, rx_slot); 2266 else 2267 return -EINVAL; 2268 } 2269 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map); 2270 2271 /** 2272 * snd_soc_dai_set_tristate - configure DAI system or master clock. 2273 * @dai: DAI 2274 * @tristate: tristate enable 2275 * 2276 * Tristates the DAI so that others can use it. 2277 */ 2278 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) 2279 { 2280 if (dai->ops && dai->ops->set_tristate) 2281 return dai->ops->set_tristate(dai, tristate); 2282 else 2283 return -EINVAL; 2284 } 2285 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate); 2286 2287 /** 2288 * snd_soc_dai_digital_mute - configure DAI system or master clock. 2289 * @dai: DAI 2290 * @mute: mute enable 2291 * 2292 * Mutes the DAI DAC. 2293 */ 2294 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute) 2295 { 2296 if (dai->ops && dai->ops->digital_mute) 2297 return dai->ops->digital_mute(dai, mute); 2298 else 2299 return -EINVAL; 2300 } 2301 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute); 2302 2303 /** 2304 * snd_soc_register_card - Register a card with the ASoC core 2305 * 2306 * @card: Card to register 2307 * 2308 * Note that currently this is an internal only function: it will be 2309 * exposed to machine drivers after further backporting of ASoC v2 2310 * registration APIs. 2311 */ 2312 static int snd_soc_register_card(struct snd_soc_card *card) 2313 { 2314 if (!card->name || !card->dev) 2315 return -EINVAL; 2316 2317 INIT_LIST_HEAD(&card->list); 2318 card->instantiated = 0; 2319 2320 mutex_lock(&client_mutex); 2321 list_add(&card->list, &card_list); 2322 snd_soc_instantiate_cards(); 2323 mutex_unlock(&client_mutex); 2324 2325 dev_dbg(card->dev, "Registered card '%s'\n", card->name); 2326 2327 return 0; 2328 } 2329 2330 /** 2331 * snd_soc_unregister_card - Unregister a card with the ASoC core 2332 * 2333 * @card: Card to unregister 2334 * 2335 * Note that currently this is an internal only function: it will be 2336 * exposed to machine drivers after further backporting of ASoC v2 2337 * registration APIs. 2338 */ 2339 static int snd_soc_unregister_card(struct snd_soc_card *card) 2340 { 2341 mutex_lock(&client_mutex); 2342 list_del(&card->list); 2343 mutex_unlock(&client_mutex); 2344 2345 dev_dbg(card->dev, "Unregistered card '%s'\n", card->name); 2346 2347 return 0; 2348 } 2349 2350 /** 2351 * snd_soc_register_dai - Register a DAI with the ASoC core 2352 * 2353 * @dai: DAI to register 2354 */ 2355 int snd_soc_register_dai(struct snd_soc_dai *dai) 2356 { 2357 if (!dai->name) 2358 return -EINVAL; 2359 2360 /* The device should become mandatory over time */ 2361 if (!dai->dev) 2362 printk(KERN_WARNING "No device for DAI %s\n", dai->name); 2363 2364 if (!dai->ops) 2365 dai->ops = &null_dai_ops; 2366 2367 INIT_LIST_HEAD(&dai->list); 2368 2369 mutex_lock(&client_mutex); 2370 list_add(&dai->list, &dai_list); 2371 snd_soc_instantiate_cards(); 2372 mutex_unlock(&client_mutex); 2373 2374 pr_debug("Registered DAI '%s'\n", dai->name); 2375 2376 return 0; 2377 } 2378 EXPORT_SYMBOL_GPL(snd_soc_register_dai); 2379 2380 /** 2381 * snd_soc_unregister_dai - Unregister a DAI from the ASoC core 2382 * 2383 * @dai: DAI to unregister 2384 */ 2385 void snd_soc_unregister_dai(struct snd_soc_dai *dai) 2386 { 2387 mutex_lock(&client_mutex); 2388 list_del(&dai->list); 2389 mutex_unlock(&client_mutex); 2390 2391 pr_debug("Unregistered DAI '%s'\n", dai->name); 2392 } 2393 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai); 2394 2395 /** 2396 * snd_soc_register_dais - Register multiple DAIs with the ASoC core 2397 * 2398 * @dai: Array of DAIs to register 2399 * @count: Number of DAIs 2400 */ 2401 int snd_soc_register_dais(struct snd_soc_dai *dai, size_t count) 2402 { 2403 int i, ret; 2404 2405 for (i = 0; i < count; i++) { 2406 ret = snd_soc_register_dai(&dai[i]); 2407 if (ret != 0) 2408 goto err; 2409 } 2410 2411 return 0; 2412 2413 err: 2414 for (i--; i >= 0; i--) 2415 snd_soc_unregister_dai(&dai[i]); 2416 2417 return ret; 2418 } 2419 EXPORT_SYMBOL_GPL(snd_soc_register_dais); 2420 2421 /** 2422 * snd_soc_unregister_dais - Unregister multiple DAIs from the ASoC core 2423 * 2424 * @dai: Array of DAIs to unregister 2425 * @count: Number of DAIs 2426 */ 2427 void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count) 2428 { 2429 int i; 2430 2431 for (i = 0; i < count; i++) 2432 snd_soc_unregister_dai(&dai[i]); 2433 } 2434 EXPORT_SYMBOL_GPL(snd_soc_unregister_dais); 2435 2436 /** 2437 * snd_soc_register_platform - Register a platform with the ASoC core 2438 * 2439 * @platform: platform to register 2440 */ 2441 int snd_soc_register_platform(struct snd_soc_platform *platform) 2442 { 2443 if (!platform->name) 2444 return -EINVAL; 2445 2446 INIT_LIST_HEAD(&platform->list); 2447 2448 mutex_lock(&client_mutex); 2449 list_add(&platform->list, &platform_list); 2450 snd_soc_instantiate_cards(); 2451 mutex_unlock(&client_mutex); 2452 2453 pr_debug("Registered platform '%s'\n", platform->name); 2454 2455 return 0; 2456 } 2457 EXPORT_SYMBOL_GPL(snd_soc_register_platform); 2458 2459 /** 2460 * snd_soc_unregister_platform - Unregister a platform from the ASoC core 2461 * 2462 * @platform: platform to unregister 2463 */ 2464 void snd_soc_unregister_platform(struct snd_soc_platform *platform) 2465 { 2466 mutex_lock(&client_mutex); 2467 list_del(&platform->list); 2468 mutex_unlock(&client_mutex); 2469 2470 pr_debug("Unregistered platform '%s'\n", platform->name); 2471 } 2472 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); 2473 2474 static u64 codec_format_map[] = { 2475 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE, 2476 SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE, 2477 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE, 2478 SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE, 2479 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE, 2480 SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE, 2481 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 2482 SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 2483 SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE, 2484 SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE, 2485 SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE, 2486 SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE, 2487 SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE, 2488 SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE, 2489 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE 2490 | SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE, 2491 }; 2492 2493 /* Fix up the DAI formats for endianness: codecs don't actually see 2494 * the endianness of the data but we're using the CPU format 2495 * definitions which do need to include endianness so we ensure that 2496 * codec DAIs always have both big and little endian variants set. 2497 */ 2498 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream) 2499 { 2500 int i; 2501 2502 for (i = 0; i < ARRAY_SIZE(codec_format_map); i++) 2503 if (stream->formats & codec_format_map[i]) 2504 stream->formats |= codec_format_map[i]; 2505 } 2506 2507 /** 2508 * snd_soc_register_codec - Register a codec with the ASoC core 2509 * 2510 * @codec: codec to register 2511 */ 2512 int snd_soc_register_codec(struct snd_soc_codec *codec) 2513 { 2514 int i; 2515 2516 if (!codec->name) 2517 return -EINVAL; 2518 2519 /* The device should become mandatory over time */ 2520 if (!codec->dev) 2521 printk(KERN_WARNING "No device for codec %s\n", codec->name); 2522 2523 INIT_LIST_HEAD(&codec->list); 2524 2525 for (i = 0; i < codec->num_dai; i++) { 2526 fixup_codec_formats(&codec->dai[i].playback); 2527 fixup_codec_formats(&codec->dai[i].capture); 2528 } 2529 2530 mutex_lock(&client_mutex); 2531 list_add(&codec->list, &codec_list); 2532 snd_soc_instantiate_cards(); 2533 mutex_unlock(&client_mutex); 2534 2535 pr_debug("Registered codec '%s'\n", codec->name); 2536 2537 return 0; 2538 } 2539 EXPORT_SYMBOL_GPL(snd_soc_register_codec); 2540 2541 /** 2542 * snd_soc_unregister_codec - Unregister a codec from the ASoC core 2543 * 2544 * @codec: codec to unregister 2545 */ 2546 void snd_soc_unregister_codec(struct snd_soc_codec *codec) 2547 { 2548 mutex_lock(&client_mutex); 2549 list_del(&codec->list); 2550 mutex_unlock(&client_mutex); 2551 2552 pr_debug("Unregistered codec '%s'\n", codec->name); 2553 } 2554 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec); 2555 2556 static int __init snd_soc_init(void) 2557 { 2558 #ifdef CONFIG_DEBUG_FS 2559 debugfs_root = debugfs_create_dir("asoc", NULL); 2560 if (IS_ERR(debugfs_root) || !debugfs_root) { 2561 printk(KERN_WARNING 2562 "ASoC: Failed to create debugfs directory\n"); 2563 debugfs_root = NULL; 2564 } 2565 #endif 2566 2567 return platform_driver_register(&soc_driver); 2568 } 2569 2570 static void __exit snd_soc_exit(void) 2571 { 2572 #ifdef CONFIG_DEBUG_FS 2573 debugfs_remove_recursive(debugfs_root); 2574 #endif 2575 platform_driver_unregister(&soc_driver); 2576 } 2577 2578 module_init(snd_soc_init); 2579 module_exit(snd_soc_exit); 2580 2581 /* Module information */ 2582 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 2583 MODULE_DESCRIPTION("ALSA SoC Core"); 2584 MODULE_LICENSE("GPL"); 2585 MODULE_ALIAS("platform:soc-audio"); 2586