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