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 = codec->card->dev; 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 struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai; 771 772 /* AC97 devices might have other drivers hanging off them so 773 * need to resume immediately. Other drivers don't have that 774 * problem and may take a substantial amount of time to resume 775 * due to I/O costs and anti-pop so handle them out of line. 776 */ 777 if (cpu_dai->ac97_control) { 778 dev_dbg(socdev->dev, "Resuming AC97 immediately\n"); 779 soc_resume_deferred(&card->deferred_resume_work); 780 } else { 781 dev_dbg(socdev->dev, "Scheduling resume work\n"); 782 if (!schedule_work(&card->deferred_resume_work)) 783 dev_err(socdev->dev, "resume work item may be lost\n"); 784 } 785 786 return 0; 787 } 788 789 #else 790 #define soc_suspend NULL 791 #define soc_resume NULL 792 #endif 793 794 static void snd_soc_instantiate_card(struct snd_soc_card *card) 795 { 796 struct platform_device *pdev = container_of(card->dev, 797 struct platform_device, 798 dev); 799 struct snd_soc_codec_device *codec_dev = card->socdev->codec_dev; 800 struct snd_soc_platform *platform; 801 struct snd_soc_dai *dai; 802 int i, found, ret, ac97; 803 804 if (card->instantiated) 805 return; 806 807 found = 0; 808 list_for_each_entry(platform, &platform_list, list) 809 if (card->platform == platform) { 810 found = 1; 811 break; 812 } 813 if (!found) { 814 dev_dbg(card->dev, "Platform %s not registered\n", 815 card->platform->name); 816 return; 817 } 818 819 ac97 = 0; 820 for (i = 0; i < card->num_links; i++) { 821 found = 0; 822 list_for_each_entry(dai, &dai_list, list) 823 if (card->dai_link[i].cpu_dai == dai) { 824 found = 1; 825 break; 826 } 827 if (!found) { 828 dev_dbg(card->dev, "DAI %s not registered\n", 829 card->dai_link[i].cpu_dai->name); 830 return; 831 } 832 833 if (card->dai_link[i].cpu_dai->ac97_control) 834 ac97 = 1; 835 } 836 837 /* If we have AC97 in the system then don't wait for the 838 * codec. This will need revisiting if we have to handle 839 * systems with mixed AC97 and non-AC97 parts. Only check for 840 * DAIs currently; we can't do this per link since some AC97 841 * codecs have non-AC97 DAIs. 842 */ 843 if (!ac97) 844 for (i = 0; i < card->num_links; i++) { 845 found = 0; 846 list_for_each_entry(dai, &dai_list, list) 847 if (card->dai_link[i].codec_dai == dai) { 848 found = 1; 849 break; 850 } 851 if (!found) { 852 dev_dbg(card->dev, "DAI %s not registered\n", 853 card->dai_link[i].codec_dai->name); 854 return; 855 } 856 } 857 858 /* Note that we do not current check for codec components */ 859 860 dev_dbg(card->dev, "All components present, instantiating\n"); 861 862 /* Found everything, bring it up */ 863 if (card->probe) { 864 ret = card->probe(pdev); 865 if (ret < 0) 866 return; 867 } 868 869 for (i = 0; i < card->num_links; i++) { 870 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 871 if (cpu_dai->probe) { 872 ret = cpu_dai->probe(pdev, cpu_dai); 873 if (ret < 0) 874 goto cpu_dai_err; 875 } 876 } 877 878 if (codec_dev->probe) { 879 ret = codec_dev->probe(pdev); 880 if (ret < 0) 881 goto cpu_dai_err; 882 } 883 884 if (platform->probe) { 885 ret = platform->probe(pdev); 886 if (ret < 0) 887 goto platform_err; 888 } 889 890 /* DAPM stream work */ 891 INIT_DELAYED_WORK(&card->delayed_work, close_delayed_work); 892 #ifdef CONFIG_PM 893 /* deferred resume work */ 894 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 895 #endif 896 897 card->instantiated = 1; 898 899 return; 900 901 platform_err: 902 if (codec_dev->remove) 903 codec_dev->remove(pdev); 904 905 cpu_dai_err: 906 for (i--; i >= 0; i--) { 907 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 908 if (cpu_dai->remove) 909 cpu_dai->remove(pdev, cpu_dai); 910 } 911 912 if (card->remove) 913 card->remove(pdev); 914 } 915 916 /* 917 * Attempt to initialise any uninitalised cards. Must be called with 918 * client_mutex. 919 */ 920 static void snd_soc_instantiate_cards(void) 921 { 922 struct snd_soc_card *card; 923 list_for_each_entry(card, &card_list, list) 924 snd_soc_instantiate_card(card); 925 } 926 927 /* probes a new socdev */ 928 static int soc_probe(struct platform_device *pdev) 929 { 930 int ret = 0; 931 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 932 struct snd_soc_card *card = socdev->card; 933 934 /* Bodge while we push things out of socdev */ 935 card->socdev = socdev; 936 937 /* Bodge while we unpick instantiation */ 938 card->dev = &pdev->dev; 939 ret = snd_soc_register_card(card); 940 if (ret != 0) { 941 dev_err(&pdev->dev, "Failed to register card\n"); 942 return ret; 943 } 944 945 return 0; 946 } 947 948 /* removes a socdev */ 949 static int soc_remove(struct platform_device *pdev) 950 { 951 int i; 952 struct snd_soc_device *socdev = platform_get_drvdata(pdev); 953 struct snd_soc_card *card = socdev->card; 954 struct snd_soc_platform *platform = card->platform; 955 struct snd_soc_codec_device *codec_dev = socdev->codec_dev; 956 957 if (!card->instantiated) 958 return 0; 959 960 run_delayed_work(&card->delayed_work); 961 962 if (platform->remove) 963 platform->remove(pdev); 964 965 if (codec_dev->remove) 966 codec_dev->remove(pdev); 967 968 for (i = 0; i < card->num_links; i++) { 969 struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; 970 if (cpu_dai->remove) 971 cpu_dai->remove(pdev, cpu_dai); 972 } 973 974 if (card->remove) 975 card->remove(pdev); 976 977 snd_soc_unregister_card(card); 978 979 return 0; 980 } 981 982 /* ASoC platform driver */ 983 static struct platform_driver soc_driver = { 984 .driver = { 985 .name = "soc-audio", 986 .owner = THIS_MODULE, 987 }, 988 .probe = soc_probe, 989 .remove = soc_remove, 990 .suspend = soc_suspend, 991 .resume = soc_resume, 992 }; 993 994 /* create a new pcm */ 995 static int soc_new_pcm(struct snd_soc_device *socdev, 996 struct snd_soc_dai_link *dai_link, int num) 997 { 998 struct snd_soc_card *card = socdev->card; 999 struct snd_soc_codec *codec = card->codec; 1000 struct snd_soc_platform *platform = card->platform; 1001 struct snd_soc_dai *codec_dai = dai_link->codec_dai; 1002 struct snd_soc_dai *cpu_dai = dai_link->cpu_dai; 1003 struct snd_soc_pcm_runtime *rtd; 1004 struct snd_pcm *pcm; 1005 char new_name[64]; 1006 int ret = 0, playback = 0, capture = 0; 1007 1008 rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL); 1009 if (rtd == NULL) 1010 return -ENOMEM; 1011 1012 rtd->dai = dai_link; 1013 rtd->socdev = socdev; 1014 codec_dai->codec = card->codec; 1015 1016 /* check client and interface hw capabilities */ 1017 sprintf(new_name, "%s %s-%d", dai_link->stream_name, codec_dai->name, 1018 num); 1019 1020 if (codec_dai->playback.channels_min) 1021 playback = 1; 1022 if (codec_dai->capture.channels_min) 1023 capture = 1; 1024 1025 ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback, 1026 capture, &pcm); 1027 if (ret < 0) { 1028 printk(KERN_ERR "asoc: can't create pcm for codec %s\n", 1029 codec->name); 1030 kfree(rtd); 1031 return ret; 1032 } 1033 1034 dai_link->pcm = pcm; 1035 pcm->private_data = rtd; 1036 soc_pcm_ops.mmap = platform->pcm_ops->mmap; 1037 soc_pcm_ops.pointer = platform->pcm_ops->pointer; 1038 soc_pcm_ops.ioctl = platform->pcm_ops->ioctl; 1039 soc_pcm_ops.copy = platform->pcm_ops->copy; 1040 soc_pcm_ops.silence = platform->pcm_ops->silence; 1041 soc_pcm_ops.ack = platform->pcm_ops->ack; 1042 soc_pcm_ops.page = platform->pcm_ops->page; 1043 1044 if (playback) 1045 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops); 1046 1047 if (capture) 1048 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops); 1049 1050 ret = platform->pcm_new(codec->card, codec_dai, pcm); 1051 if (ret < 0) { 1052 printk(KERN_ERR "asoc: platform pcm constructor failed\n"); 1053 kfree(rtd); 1054 return ret; 1055 } 1056 1057 pcm->private_free = platform->pcm_free; 1058 printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name, 1059 cpu_dai->name); 1060 return ret; 1061 } 1062 1063 /* codec register dump */ 1064 static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf) 1065 { 1066 int i, step = 1, count = 0; 1067 1068 if (!codec->reg_cache_size) 1069 return 0; 1070 1071 if (codec->reg_cache_step) 1072 step = codec->reg_cache_step; 1073 1074 count += sprintf(buf, "%s registers\n", codec->name); 1075 for (i = 0; i < codec->reg_cache_size; i += step) { 1076 count += sprintf(buf + count, "%2x: ", i); 1077 if (count >= PAGE_SIZE - 1) 1078 break; 1079 1080 if (codec->display_register) 1081 count += codec->display_register(codec, buf + count, 1082 PAGE_SIZE - count, i); 1083 else 1084 count += snprintf(buf + count, PAGE_SIZE - count, 1085 "%4x", codec->read(codec, i)); 1086 1087 if (count >= PAGE_SIZE - 1) 1088 break; 1089 1090 count += snprintf(buf + count, PAGE_SIZE - count, "\n"); 1091 if (count >= PAGE_SIZE - 1) 1092 break; 1093 } 1094 1095 /* Truncate count; min() would cause a warning */ 1096 if (count >= PAGE_SIZE) 1097 count = PAGE_SIZE - 1; 1098 1099 return count; 1100 } 1101 static ssize_t codec_reg_show(struct device *dev, 1102 struct device_attribute *attr, char *buf) 1103 { 1104 struct snd_soc_device *devdata = dev_get_drvdata(dev); 1105 return soc_codec_reg_show(devdata->card->codec, buf); 1106 } 1107 1108 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL); 1109 1110 #ifdef CONFIG_DEBUG_FS 1111 static int codec_reg_open_file(struct inode *inode, struct file *file) 1112 { 1113 file->private_data = inode->i_private; 1114 return 0; 1115 } 1116 1117 static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf, 1118 size_t count, loff_t *ppos) 1119 { 1120 ssize_t ret; 1121 struct snd_soc_codec *codec = file->private_data; 1122 char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); 1123 if (!buf) 1124 return -ENOMEM; 1125 ret = soc_codec_reg_show(codec, buf); 1126 if (ret >= 0) 1127 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); 1128 kfree(buf); 1129 return ret; 1130 } 1131 1132 static ssize_t codec_reg_write_file(struct file *file, 1133 const char __user *user_buf, size_t count, loff_t *ppos) 1134 { 1135 char buf[32]; 1136 int buf_size; 1137 char *start = buf; 1138 unsigned long reg, value; 1139 int step = 1; 1140 struct snd_soc_codec *codec = file->private_data; 1141 1142 buf_size = min(count, (sizeof(buf)-1)); 1143 if (copy_from_user(buf, user_buf, buf_size)) 1144 return -EFAULT; 1145 buf[buf_size] = 0; 1146 1147 if (codec->reg_cache_step) 1148 step = codec->reg_cache_step; 1149 1150 while (*start == ' ') 1151 start++; 1152 reg = simple_strtoul(start, &start, 16); 1153 if ((reg >= codec->reg_cache_size) || (reg % step)) 1154 return -EINVAL; 1155 while (*start == ' ') 1156 start++; 1157 if (strict_strtoul(start, 16, &value)) 1158 return -EINVAL; 1159 codec->write(codec, reg, value); 1160 return buf_size; 1161 } 1162 1163 static const struct file_operations codec_reg_fops = { 1164 .open = codec_reg_open_file, 1165 .read = codec_reg_read_file, 1166 .write = codec_reg_write_file, 1167 }; 1168 1169 static void soc_init_codec_debugfs(struct snd_soc_codec *codec) 1170 { 1171 codec->debugfs_reg = debugfs_create_file("codec_reg", 0644, 1172 debugfs_root, codec, 1173 &codec_reg_fops); 1174 if (!codec->debugfs_reg) 1175 printk(KERN_WARNING 1176 "ASoC: Failed to create codec register debugfs file\n"); 1177 1178 codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744, 1179 debugfs_root, 1180 &codec->pop_time); 1181 if (!codec->debugfs_pop_time) 1182 printk(KERN_WARNING 1183 "Failed to create pop time debugfs file\n"); 1184 } 1185 1186 static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 1187 { 1188 debugfs_remove(codec->debugfs_pop_time); 1189 debugfs_remove(codec->debugfs_reg); 1190 } 1191 1192 #else 1193 1194 static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec) 1195 { 1196 } 1197 1198 static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec) 1199 { 1200 } 1201 #endif 1202 1203 /** 1204 * snd_soc_new_ac97_codec - initailise AC97 device 1205 * @codec: audio codec 1206 * @ops: AC97 bus operations 1207 * @num: AC97 codec number 1208 * 1209 * Initialises AC97 codec resources for use by ad-hoc devices only. 1210 */ 1211 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, 1212 struct snd_ac97_bus_ops *ops, int num) 1213 { 1214 mutex_lock(&codec->mutex); 1215 1216 codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); 1217 if (codec->ac97 == NULL) { 1218 mutex_unlock(&codec->mutex); 1219 return -ENOMEM; 1220 } 1221 1222 codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL); 1223 if (codec->ac97->bus == NULL) { 1224 kfree(codec->ac97); 1225 codec->ac97 = NULL; 1226 mutex_unlock(&codec->mutex); 1227 return -ENOMEM; 1228 } 1229 1230 codec->ac97->bus->ops = ops; 1231 codec->ac97->num = num; 1232 mutex_unlock(&codec->mutex); 1233 return 0; 1234 } 1235 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec); 1236 1237 /** 1238 * snd_soc_free_ac97_codec - free AC97 codec device 1239 * @codec: audio codec 1240 * 1241 * Frees AC97 codec device resources. 1242 */ 1243 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec) 1244 { 1245 mutex_lock(&codec->mutex); 1246 kfree(codec->ac97->bus); 1247 kfree(codec->ac97); 1248 codec->ac97 = NULL; 1249 mutex_unlock(&codec->mutex); 1250 } 1251 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec); 1252 1253 /** 1254 * snd_soc_update_bits - update codec register bits 1255 * @codec: audio codec 1256 * @reg: codec register 1257 * @mask: register mask 1258 * @value: new value 1259 * 1260 * Writes new register value. 1261 * 1262 * Returns 1 for change else 0. 1263 */ 1264 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, 1265 unsigned short mask, unsigned short value) 1266 { 1267 int change; 1268 unsigned short old, new; 1269 1270 mutex_lock(&io_mutex); 1271 old = snd_soc_read(codec, reg); 1272 new = (old & ~mask) | value; 1273 change = old != new; 1274 if (change) 1275 snd_soc_write(codec, reg, new); 1276 1277 mutex_unlock(&io_mutex); 1278 return change; 1279 } 1280 EXPORT_SYMBOL_GPL(snd_soc_update_bits); 1281 1282 /** 1283 * snd_soc_test_bits - test register for change 1284 * @codec: audio codec 1285 * @reg: codec register 1286 * @mask: register mask 1287 * @value: new value 1288 * 1289 * Tests a register with a new value and checks if the new value is 1290 * different from the old value. 1291 * 1292 * Returns 1 for change else 0. 1293 */ 1294 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, 1295 unsigned short mask, unsigned short value) 1296 { 1297 int change; 1298 unsigned short old, new; 1299 1300 mutex_lock(&io_mutex); 1301 old = snd_soc_read(codec, reg); 1302 new = (old & ~mask) | value; 1303 change = old != new; 1304 mutex_unlock(&io_mutex); 1305 1306 return change; 1307 } 1308 EXPORT_SYMBOL_GPL(snd_soc_test_bits); 1309 1310 /** 1311 * snd_soc_new_pcms - create new sound card and pcms 1312 * @socdev: the SoC audio device 1313 * @idx: ALSA card index 1314 * @xid: card identification 1315 * 1316 * Create a new sound card based upon the codec and interface pcms. 1317 * 1318 * Returns 0 for success, else error. 1319 */ 1320 int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid) 1321 { 1322 struct snd_soc_card *card = socdev->card; 1323 struct snd_soc_codec *codec = card->codec; 1324 int ret, i; 1325 1326 mutex_lock(&codec->mutex); 1327 1328 /* register a sound card */ 1329 ret = snd_card_create(idx, xid, codec->owner, 0, &codec->card); 1330 if (ret < 0) { 1331 printk(KERN_ERR "asoc: can't create sound card for codec %s\n", 1332 codec->name); 1333 mutex_unlock(&codec->mutex); 1334 return ret; 1335 } 1336 1337 codec->card->dev = socdev->dev; 1338 codec->card->private_data = codec; 1339 strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver)); 1340 1341 /* create the pcms */ 1342 for (i = 0; i < card->num_links; i++) { 1343 ret = soc_new_pcm(socdev, &card->dai_link[i], i); 1344 if (ret < 0) { 1345 printk(KERN_ERR "asoc: can't create pcm %s\n", 1346 card->dai_link[i].stream_name); 1347 mutex_unlock(&codec->mutex); 1348 return ret; 1349 } 1350 } 1351 1352 mutex_unlock(&codec->mutex); 1353 return ret; 1354 } 1355 EXPORT_SYMBOL_GPL(snd_soc_new_pcms); 1356 1357 /** 1358 * snd_soc_init_card - register sound card 1359 * @socdev: the SoC audio device 1360 * 1361 * Register a SoC sound card. Also registers an AC97 device if the 1362 * codec is AC97 for ad hoc devices. 1363 * 1364 * Returns 0 for success, else error. 1365 */ 1366 int snd_soc_init_card(struct snd_soc_device *socdev) 1367 { 1368 struct snd_soc_card *card = socdev->card; 1369 struct snd_soc_codec *codec = card->codec; 1370 int ret = 0, i, ac97 = 0, err = 0; 1371 1372 for (i = 0; i < card->num_links; i++) { 1373 if (card->dai_link[i].init) { 1374 err = card->dai_link[i].init(codec); 1375 if (err < 0) { 1376 printk(KERN_ERR "asoc: failed to init %s\n", 1377 card->dai_link[i].stream_name); 1378 continue; 1379 } 1380 } 1381 if (card->dai_link[i].codec_dai->ac97_control) 1382 ac97 = 1; 1383 } 1384 snprintf(codec->card->shortname, sizeof(codec->card->shortname), 1385 "%s", card->name); 1386 snprintf(codec->card->longname, sizeof(codec->card->longname), 1387 "%s (%s)", card->name, codec->name); 1388 1389 ret = snd_card_register(codec->card); 1390 if (ret < 0) { 1391 printk(KERN_ERR "asoc: failed to register soundcard for %s\n", 1392 codec->name); 1393 goto out; 1394 } 1395 1396 mutex_lock(&codec->mutex); 1397 #ifdef CONFIG_SND_SOC_AC97_BUS 1398 /* Only instantiate AC97 if not already done by the adaptor 1399 * for the generic AC97 subsystem. 1400 */ 1401 if (ac97 && strcmp(codec->name, "AC97") != 0) { 1402 ret = soc_ac97_dev_register(codec); 1403 if (ret < 0) { 1404 printk(KERN_ERR "asoc: AC97 device register failed\n"); 1405 snd_card_free(codec->card); 1406 mutex_unlock(&codec->mutex); 1407 goto out; 1408 } 1409 } 1410 #endif 1411 1412 err = snd_soc_dapm_sys_add(socdev->dev); 1413 if (err < 0) 1414 printk(KERN_WARNING "asoc: failed to add dapm sysfs entries\n"); 1415 1416 err = device_create_file(socdev->dev, &dev_attr_codec_reg); 1417 if (err < 0) 1418 printk(KERN_WARNING "asoc: failed to add codec sysfs files\n"); 1419 1420 soc_init_codec_debugfs(codec); 1421 mutex_unlock(&codec->mutex); 1422 1423 out: 1424 return ret; 1425 } 1426 EXPORT_SYMBOL_GPL(snd_soc_init_card); 1427 1428 /** 1429 * snd_soc_free_pcms - free sound card and pcms 1430 * @socdev: the SoC audio device 1431 * 1432 * Frees sound card and pcms associated with the socdev. 1433 * Also unregister the codec if it is an AC97 device. 1434 */ 1435 void snd_soc_free_pcms(struct snd_soc_device *socdev) 1436 { 1437 struct snd_soc_codec *codec = socdev->card->codec; 1438 #ifdef CONFIG_SND_SOC_AC97_BUS 1439 struct snd_soc_dai *codec_dai; 1440 int i; 1441 #endif 1442 1443 mutex_lock(&codec->mutex); 1444 soc_cleanup_codec_debugfs(codec); 1445 #ifdef CONFIG_SND_SOC_AC97_BUS 1446 for (i = 0; i < codec->num_dai; i++) { 1447 codec_dai = &codec->dai[i]; 1448 if (codec_dai->ac97_control && codec->ac97 && 1449 strcmp(codec->name, "AC97") != 0) { 1450 soc_ac97_dev_unregister(codec); 1451 goto free_card; 1452 } 1453 } 1454 free_card: 1455 #endif 1456 1457 if (codec->card) 1458 snd_card_free(codec->card); 1459 device_remove_file(socdev->dev, &dev_attr_codec_reg); 1460 mutex_unlock(&codec->mutex); 1461 } 1462 EXPORT_SYMBOL_GPL(snd_soc_free_pcms); 1463 1464 /** 1465 * snd_soc_set_runtime_hwparams - set the runtime hardware parameters 1466 * @substream: the pcm substream 1467 * @hw: the hardware parameters 1468 * 1469 * Sets the substream runtime hardware parameters. 1470 */ 1471 int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, 1472 const struct snd_pcm_hardware *hw) 1473 { 1474 struct snd_pcm_runtime *runtime = substream->runtime; 1475 runtime->hw.info = hw->info; 1476 runtime->hw.formats = hw->formats; 1477 runtime->hw.period_bytes_min = hw->period_bytes_min; 1478 runtime->hw.period_bytes_max = hw->period_bytes_max; 1479 runtime->hw.periods_min = hw->periods_min; 1480 runtime->hw.periods_max = hw->periods_max; 1481 runtime->hw.buffer_bytes_max = hw->buffer_bytes_max; 1482 runtime->hw.fifo_size = hw->fifo_size; 1483 return 0; 1484 } 1485 EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams); 1486 1487 /** 1488 * snd_soc_cnew - create new control 1489 * @_template: control template 1490 * @data: control private data 1491 * @long_name: control long name 1492 * 1493 * Create a new mixer control from a template control. 1494 * 1495 * Returns 0 for success, else error. 1496 */ 1497 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 1498 void *data, char *long_name) 1499 { 1500 struct snd_kcontrol_new template; 1501 1502 memcpy(&template, _template, sizeof(template)); 1503 if (long_name) 1504 template.name = long_name; 1505 template.index = 0; 1506 1507 return snd_ctl_new1(&template, data); 1508 } 1509 EXPORT_SYMBOL_GPL(snd_soc_cnew); 1510 1511 /** 1512 * snd_soc_add_controls - add an array of controls to a codec. 1513 * Convienience function to add a list of controls. Many codecs were 1514 * duplicating this code. 1515 * 1516 * @codec: codec to add controls to 1517 * @controls: array of controls to add 1518 * @num_controls: number of elements in the array 1519 * 1520 * Return 0 for success, else error. 1521 */ 1522 int snd_soc_add_controls(struct snd_soc_codec *codec, 1523 const struct snd_kcontrol_new *controls, int num_controls) 1524 { 1525 struct snd_card *card = codec->card; 1526 int err, i; 1527 1528 for (i = 0; i < num_controls; i++) { 1529 const struct snd_kcontrol_new *control = &controls[i]; 1530 err = snd_ctl_add(card, snd_soc_cnew(control, codec, NULL)); 1531 if (err < 0) { 1532 dev_err(codec->dev, "%s: Failed to add %s\n", 1533 codec->name, control->name); 1534 return err; 1535 } 1536 } 1537 1538 return 0; 1539 } 1540 EXPORT_SYMBOL_GPL(snd_soc_add_controls); 1541 1542 /** 1543 * snd_soc_info_enum_double - enumerated double mixer info callback 1544 * @kcontrol: mixer control 1545 * @uinfo: control element information 1546 * 1547 * Callback to provide information about a double enumerated 1548 * mixer control. 1549 * 1550 * Returns 0 for success. 1551 */ 1552 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 1553 struct snd_ctl_elem_info *uinfo) 1554 { 1555 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1556 1557 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1558 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 1559 uinfo->value.enumerated.items = e->max; 1560 1561 if (uinfo->value.enumerated.item > e->max - 1) 1562 uinfo->value.enumerated.item = e->max - 1; 1563 strcpy(uinfo->value.enumerated.name, 1564 e->texts[uinfo->value.enumerated.item]); 1565 return 0; 1566 } 1567 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double); 1568 1569 /** 1570 * snd_soc_get_enum_double - enumerated double mixer get callback 1571 * @kcontrol: mixer control 1572 * @ucontrol: control element information 1573 * 1574 * Callback to get the value of a double enumerated mixer. 1575 * 1576 * Returns 0 for success. 1577 */ 1578 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, 1579 struct snd_ctl_elem_value *ucontrol) 1580 { 1581 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1582 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1583 unsigned short val, bitmask; 1584 1585 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 1586 ; 1587 val = snd_soc_read(codec, e->reg); 1588 ucontrol->value.enumerated.item[0] 1589 = (val >> e->shift_l) & (bitmask - 1); 1590 if (e->shift_l != e->shift_r) 1591 ucontrol->value.enumerated.item[1] = 1592 (val >> e->shift_r) & (bitmask - 1); 1593 1594 return 0; 1595 } 1596 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double); 1597 1598 /** 1599 * snd_soc_put_enum_double - enumerated double mixer put callback 1600 * @kcontrol: mixer control 1601 * @ucontrol: control element information 1602 * 1603 * Callback to set the value of a double enumerated mixer. 1604 * 1605 * Returns 0 for success. 1606 */ 1607 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, 1608 struct snd_ctl_elem_value *ucontrol) 1609 { 1610 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1611 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1612 unsigned short val; 1613 unsigned short mask, bitmask; 1614 1615 for (bitmask = 1; bitmask < e->max; bitmask <<= 1) 1616 ; 1617 if (ucontrol->value.enumerated.item[0] > e->max - 1) 1618 return -EINVAL; 1619 val = ucontrol->value.enumerated.item[0] << e->shift_l; 1620 mask = (bitmask - 1) << e->shift_l; 1621 if (e->shift_l != e->shift_r) { 1622 if (ucontrol->value.enumerated.item[1] > e->max - 1) 1623 return -EINVAL; 1624 val |= ucontrol->value.enumerated.item[1] << e->shift_r; 1625 mask |= (bitmask - 1) << e->shift_r; 1626 } 1627 1628 return snd_soc_update_bits(codec, e->reg, mask, val); 1629 } 1630 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double); 1631 1632 /** 1633 * snd_soc_get_value_enum_double - semi enumerated double mixer get callback 1634 * @kcontrol: mixer control 1635 * @ucontrol: control element information 1636 * 1637 * Callback to get the value of a double semi enumerated mixer. 1638 * 1639 * Semi enumerated mixer: the enumerated items are referred as values. Can be 1640 * used for handling bitfield coded enumeration for example. 1641 * 1642 * Returns 0 for success. 1643 */ 1644 int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, 1645 struct snd_ctl_elem_value *ucontrol) 1646 { 1647 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1648 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1649 unsigned short reg_val, val, mux; 1650 1651 reg_val = snd_soc_read(codec, e->reg); 1652 val = (reg_val >> e->shift_l) & e->mask; 1653 for (mux = 0; mux < e->max; mux++) { 1654 if (val == e->values[mux]) 1655 break; 1656 } 1657 ucontrol->value.enumerated.item[0] = mux; 1658 if (e->shift_l != e->shift_r) { 1659 val = (reg_val >> e->shift_r) & e->mask; 1660 for (mux = 0; mux < e->max; mux++) { 1661 if (val == e->values[mux]) 1662 break; 1663 } 1664 ucontrol->value.enumerated.item[1] = mux; 1665 } 1666 1667 return 0; 1668 } 1669 EXPORT_SYMBOL_GPL(snd_soc_get_value_enum_double); 1670 1671 /** 1672 * snd_soc_put_value_enum_double - semi enumerated double mixer put callback 1673 * @kcontrol: mixer control 1674 * @ucontrol: control element information 1675 * 1676 * Callback to set the value of a double semi enumerated mixer. 1677 * 1678 * Semi enumerated mixer: the enumerated items are referred as values. Can be 1679 * used for handling bitfield coded enumeration for example. 1680 * 1681 * Returns 0 for success. 1682 */ 1683 int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, 1684 struct snd_ctl_elem_value *ucontrol) 1685 { 1686 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1687 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1688 unsigned short val; 1689 unsigned short mask; 1690 1691 if (ucontrol->value.enumerated.item[0] > e->max - 1) 1692 return -EINVAL; 1693 val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; 1694 mask = e->mask << e->shift_l; 1695 if (e->shift_l != e->shift_r) { 1696 if (ucontrol->value.enumerated.item[1] > e->max - 1) 1697 return -EINVAL; 1698 val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; 1699 mask |= e->mask << e->shift_r; 1700 } 1701 1702 return snd_soc_update_bits(codec, e->reg, mask, val); 1703 } 1704 EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double); 1705 1706 /** 1707 * snd_soc_info_enum_ext - external enumerated single mixer info callback 1708 * @kcontrol: mixer control 1709 * @uinfo: control element information 1710 * 1711 * Callback to provide information about an external enumerated 1712 * single mixer. 1713 * 1714 * Returns 0 for success. 1715 */ 1716 int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, 1717 struct snd_ctl_elem_info *uinfo) 1718 { 1719 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 1720 1721 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1722 uinfo->count = 1; 1723 uinfo->value.enumerated.items = e->max; 1724 1725 if (uinfo->value.enumerated.item > e->max - 1) 1726 uinfo->value.enumerated.item = e->max - 1; 1727 strcpy(uinfo->value.enumerated.name, 1728 e->texts[uinfo->value.enumerated.item]); 1729 return 0; 1730 } 1731 EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext); 1732 1733 /** 1734 * snd_soc_info_volsw_ext - external single mixer info callback 1735 * @kcontrol: mixer control 1736 * @uinfo: control element information 1737 * 1738 * Callback to provide information about a single external mixer control. 1739 * 1740 * Returns 0 for success. 1741 */ 1742 int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol, 1743 struct snd_ctl_elem_info *uinfo) 1744 { 1745 int max = kcontrol->private_value; 1746 1747 if (max == 1) 1748 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1749 else 1750 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1751 1752 uinfo->count = 1; 1753 uinfo->value.integer.min = 0; 1754 uinfo->value.integer.max = max; 1755 return 0; 1756 } 1757 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext); 1758 1759 /** 1760 * snd_soc_info_volsw - single mixer info callback 1761 * @kcontrol: mixer control 1762 * @uinfo: control element information 1763 * 1764 * Callback to provide information about a single mixer control. 1765 * 1766 * Returns 0 for success. 1767 */ 1768 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, 1769 struct snd_ctl_elem_info *uinfo) 1770 { 1771 struct soc_mixer_control *mc = 1772 (struct soc_mixer_control *)kcontrol->private_value; 1773 int max = mc->max; 1774 unsigned int shift = mc->shift; 1775 unsigned int rshift = mc->rshift; 1776 1777 if (max == 1) 1778 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1779 else 1780 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1781 1782 uinfo->count = shift == rshift ? 1 : 2; 1783 uinfo->value.integer.min = 0; 1784 uinfo->value.integer.max = max; 1785 return 0; 1786 } 1787 EXPORT_SYMBOL_GPL(snd_soc_info_volsw); 1788 1789 /** 1790 * snd_soc_get_volsw - single mixer get callback 1791 * @kcontrol: mixer control 1792 * @ucontrol: control element information 1793 * 1794 * Callback to get the value of a single mixer control. 1795 * 1796 * Returns 0 for success. 1797 */ 1798 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, 1799 struct snd_ctl_elem_value *ucontrol) 1800 { 1801 struct soc_mixer_control *mc = 1802 (struct soc_mixer_control *)kcontrol->private_value; 1803 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1804 unsigned int reg = mc->reg; 1805 unsigned int shift = mc->shift; 1806 unsigned int rshift = mc->rshift; 1807 int max = mc->max; 1808 unsigned int mask = (1 << fls(max)) - 1; 1809 unsigned int invert = mc->invert; 1810 1811 ucontrol->value.integer.value[0] = 1812 (snd_soc_read(codec, reg) >> shift) & mask; 1813 if (shift != rshift) 1814 ucontrol->value.integer.value[1] = 1815 (snd_soc_read(codec, reg) >> rshift) & mask; 1816 if (invert) { 1817 ucontrol->value.integer.value[0] = 1818 max - ucontrol->value.integer.value[0]; 1819 if (shift != rshift) 1820 ucontrol->value.integer.value[1] = 1821 max - ucontrol->value.integer.value[1]; 1822 } 1823 1824 return 0; 1825 } 1826 EXPORT_SYMBOL_GPL(snd_soc_get_volsw); 1827 1828 /** 1829 * snd_soc_put_volsw - single mixer put callback 1830 * @kcontrol: mixer control 1831 * @ucontrol: control element information 1832 * 1833 * Callback to set the value of a single mixer control. 1834 * 1835 * Returns 0 for success. 1836 */ 1837 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, 1838 struct snd_ctl_elem_value *ucontrol) 1839 { 1840 struct soc_mixer_control *mc = 1841 (struct soc_mixer_control *)kcontrol->private_value; 1842 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1843 unsigned int reg = mc->reg; 1844 unsigned int shift = mc->shift; 1845 unsigned int rshift = mc->rshift; 1846 int max = mc->max; 1847 unsigned int mask = (1 << fls(max)) - 1; 1848 unsigned int invert = mc->invert; 1849 unsigned short val, val2, val_mask; 1850 1851 val = (ucontrol->value.integer.value[0] & mask); 1852 if (invert) 1853 val = max - val; 1854 val_mask = mask << shift; 1855 val = val << shift; 1856 if (shift != rshift) { 1857 val2 = (ucontrol->value.integer.value[1] & mask); 1858 if (invert) 1859 val2 = max - val2; 1860 val_mask |= mask << rshift; 1861 val |= val2 << rshift; 1862 } 1863 return snd_soc_update_bits(codec, reg, val_mask, val); 1864 } 1865 EXPORT_SYMBOL_GPL(snd_soc_put_volsw); 1866 1867 /** 1868 * snd_soc_info_volsw_2r - double mixer info callback 1869 * @kcontrol: mixer control 1870 * @uinfo: control element information 1871 * 1872 * Callback to provide information about a double mixer control that 1873 * spans 2 codec registers. 1874 * 1875 * Returns 0 for success. 1876 */ 1877 int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol, 1878 struct snd_ctl_elem_info *uinfo) 1879 { 1880 struct soc_mixer_control *mc = 1881 (struct soc_mixer_control *)kcontrol->private_value; 1882 int max = mc->max; 1883 1884 if (max == 1) 1885 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1886 else 1887 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1888 1889 uinfo->count = 2; 1890 uinfo->value.integer.min = 0; 1891 uinfo->value.integer.max = max; 1892 return 0; 1893 } 1894 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_2r); 1895 1896 /** 1897 * snd_soc_get_volsw_2r - double mixer get callback 1898 * @kcontrol: mixer control 1899 * @ucontrol: control element information 1900 * 1901 * Callback to get the value of a double mixer control that spans 2 registers. 1902 * 1903 * Returns 0 for success. 1904 */ 1905 int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol, 1906 struct snd_ctl_elem_value *ucontrol) 1907 { 1908 struct soc_mixer_control *mc = 1909 (struct soc_mixer_control *)kcontrol->private_value; 1910 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1911 unsigned int reg = mc->reg; 1912 unsigned int reg2 = mc->rreg; 1913 unsigned int shift = mc->shift; 1914 int max = mc->max; 1915 unsigned int mask = (1<<fls(max))-1; 1916 unsigned int invert = mc->invert; 1917 1918 ucontrol->value.integer.value[0] = 1919 (snd_soc_read(codec, reg) >> shift) & mask; 1920 ucontrol->value.integer.value[1] = 1921 (snd_soc_read(codec, reg2) >> shift) & mask; 1922 if (invert) { 1923 ucontrol->value.integer.value[0] = 1924 max - ucontrol->value.integer.value[0]; 1925 ucontrol->value.integer.value[1] = 1926 max - ucontrol->value.integer.value[1]; 1927 } 1928 1929 return 0; 1930 } 1931 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_2r); 1932 1933 /** 1934 * snd_soc_put_volsw_2r - double mixer set callback 1935 * @kcontrol: mixer control 1936 * @ucontrol: control element information 1937 * 1938 * Callback to set the value of a double mixer control that spans 2 registers. 1939 * 1940 * Returns 0 for success. 1941 */ 1942 int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol, 1943 struct snd_ctl_elem_value *ucontrol) 1944 { 1945 struct soc_mixer_control *mc = 1946 (struct soc_mixer_control *)kcontrol->private_value; 1947 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 1948 unsigned int reg = mc->reg; 1949 unsigned int reg2 = mc->rreg; 1950 unsigned int shift = mc->shift; 1951 int max = mc->max; 1952 unsigned int mask = (1 << fls(max)) - 1; 1953 unsigned int invert = mc->invert; 1954 int err; 1955 unsigned short val, val2, val_mask; 1956 1957 val_mask = mask << shift; 1958 val = (ucontrol->value.integer.value[0] & mask); 1959 val2 = (ucontrol->value.integer.value[1] & mask); 1960 1961 if (invert) { 1962 val = max - val; 1963 val2 = max - val2; 1964 } 1965 1966 val = val << shift; 1967 val2 = val2 << shift; 1968 1969 err = snd_soc_update_bits(codec, reg, val_mask, val); 1970 if (err < 0) 1971 return err; 1972 1973 err = snd_soc_update_bits(codec, reg2, val_mask, val2); 1974 return err; 1975 } 1976 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r); 1977 1978 /** 1979 * snd_soc_info_volsw_s8 - signed mixer info callback 1980 * @kcontrol: mixer control 1981 * @uinfo: control element information 1982 * 1983 * Callback to provide information about a signed mixer control. 1984 * 1985 * Returns 0 for success. 1986 */ 1987 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, 1988 struct snd_ctl_elem_info *uinfo) 1989 { 1990 struct soc_mixer_control *mc = 1991 (struct soc_mixer_control *)kcontrol->private_value; 1992 int max = mc->max; 1993 int min = mc->min; 1994 1995 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1996 uinfo->count = 2; 1997 uinfo->value.integer.min = 0; 1998 uinfo->value.integer.max = max-min; 1999 return 0; 2000 } 2001 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8); 2002 2003 /** 2004 * snd_soc_get_volsw_s8 - signed mixer get callback 2005 * @kcontrol: mixer control 2006 * @ucontrol: control element information 2007 * 2008 * Callback to get the value of a signed mixer control. 2009 * 2010 * Returns 0 for success. 2011 */ 2012 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, 2013 struct snd_ctl_elem_value *ucontrol) 2014 { 2015 struct soc_mixer_control *mc = 2016 (struct soc_mixer_control *)kcontrol->private_value; 2017 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2018 unsigned int reg = mc->reg; 2019 int min = mc->min; 2020 int val = snd_soc_read(codec, reg); 2021 2022 ucontrol->value.integer.value[0] = 2023 ((signed char)(val & 0xff))-min; 2024 ucontrol->value.integer.value[1] = 2025 ((signed char)((val >> 8) & 0xff))-min; 2026 return 0; 2027 } 2028 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8); 2029 2030 /** 2031 * snd_soc_put_volsw_sgn - signed mixer put callback 2032 * @kcontrol: mixer control 2033 * @ucontrol: control element information 2034 * 2035 * Callback to set the value of a signed mixer control. 2036 * 2037 * Returns 0 for success. 2038 */ 2039 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 2040 struct snd_ctl_elem_value *ucontrol) 2041 { 2042 struct soc_mixer_control *mc = 2043 (struct soc_mixer_control *)kcontrol->private_value; 2044 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2045 unsigned int reg = mc->reg; 2046 int min = mc->min; 2047 unsigned short val; 2048 2049 val = (ucontrol->value.integer.value[0]+min) & 0xff; 2050 val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; 2051 2052 return snd_soc_update_bits(codec, reg, 0xffff, val); 2053 } 2054 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8); 2055 2056 /** 2057 * snd_soc_dai_set_sysclk - configure DAI system or master clock. 2058 * @dai: DAI 2059 * @clk_id: DAI specific clock ID 2060 * @freq: new clock frequency in Hz 2061 * @dir: new clock direction - input/output. 2062 * 2063 * Configures the DAI master (MCLK) or system (SYSCLK) clocking. 2064 */ 2065 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, 2066 unsigned int freq, int dir) 2067 { 2068 if (dai->ops->set_sysclk) 2069 return dai->ops->set_sysclk(dai, clk_id, freq, dir); 2070 else 2071 return -EINVAL; 2072 } 2073 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk); 2074 2075 /** 2076 * snd_soc_dai_set_clkdiv - configure DAI clock dividers. 2077 * @dai: DAI 2078 * @div_id: DAI specific clock divider ID 2079 * @div: new clock divisor. 2080 * 2081 * Configures the clock dividers. This is used to derive the best DAI bit and 2082 * frame clocks from the system or master clock. It's best to set the DAI bit 2083 * and frame clocks as low as possible to save system power. 2084 */ 2085 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, 2086 int div_id, int div) 2087 { 2088 if (dai->ops->set_clkdiv) 2089 return dai->ops->set_clkdiv(dai, div_id, div); 2090 else 2091 return -EINVAL; 2092 } 2093 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv); 2094 2095 /** 2096 * snd_soc_dai_set_pll - configure DAI PLL. 2097 * @dai: DAI 2098 * @pll_id: DAI specific PLL ID 2099 * @freq_in: PLL input clock frequency in Hz 2100 * @freq_out: requested PLL output clock frequency in Hz 2101 * 2102 * Configures and enables PLL to generate output clock based on input clock. 2103 */ 2104 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, 2105 int pll_id, unsigned int freq_in, unsigned int freq_out) 2106 { 2107 if (dai->ops->set_pll) 2108 return dai->ops->set_pll(dai, pll_id, freq_in, freq_out); 2109 else 2110 return -EINVAL; 2111 } 2112 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll); 2113 2114 /** 2115 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 2116 * @dai: DAI 2117 * @fmt: SND_SOC_DAIFMT_ format value. 2118 * 2119 * Configures the DAI hardware format and clocking. 2120 */ 2121 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 2122 { 2123 if (dai->ops->set_fmt) 2124 return dai->ops->set_fmt(dai, fmt); 2125 else 2126 return -EINVAL; 2127 } 2128 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt); 2129 2130 /** 2131 * snd_soc_dai_set_tdm_slot - configure DAI TDM. 2132 * @dai: DAI 2133 * @mask: DAI specific mask representing used slots. 2134 * @slots: Number of slots in use. 2135 * 2136 * Configures a DAI for TDM operation. Both mask and slots are codec and DAI 2137 * specific. 2138 */ 2139 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, 2140 unsigned int mask, int slots) 2141 { 2142 if (dai->ops->set_sysclk) 2143 return dai->ops->set_tdm_slot(dai, mask, slots); 2144 else 2145 return -EINVAL; 2146 } 2147 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot); 2148 2149 /** 2150 * snd_soc_dai_set_tristate - configure DAI system or master clock. 2151 * @dai: DAI 2152 * @tristate: tristate enable 2153 * 2154 * Tristates the DAI so that others can use it. 2155 */ 2156 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) 2157 { 2158 if (dai->ops->set_sysclk) 2159 return dai->ops->set_tristate(dai, tristate); 2160 else 2161 return -EINVAL; 2162 } 2163 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate); 2164 2165 /** 2166 * snd_soc_dai_digital_mute - configure DAI system or master clock. 2167 * @dai: DAI 2168 * @mute: mute enable 2169 * 2170 * Mutes the DAI DAC. 2171 */ 2172 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute) 2173 { 2174 if (dai->ops->digital_mute) 2175 return dai->ops->digital_mute(dai, mute); 2176 else 2177 return -EINVAL; 2178 } 2179 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute); 2180 2181 /** 2182 * snd_soc_register_card - Register a card with the ASoC core 2183 * 2184 * @card: Card to register 2185 * 2186 * Note that currently this is an internal only function: it will be 2187 * exposed to machine drivers after further backporting of ASoC v2 2188 * registration APIs. 2189 */ 2190 static int snd_soc_register_card(struct snd_soc_card *card) 2191 { 2192 if (!card->name || !card->dev) 2193 return -EINVAL; 2194 2195 INIT_LIST_HEAD(&card->list); 2196 card->instantiated = 0; 2197 2198 mutex_lock(&client_mutex); 2199 list_add(&card->list, &card_list); 2200 snd_soc_instantiate_cards(); 2201 mutex_unlock(&client_mutex); 2202 2203 dev_dbg(card->dev, "Registered card '%s'\n", card->name); 2204 2205 return 0; 2206 } 2207 2208 /** 2209 * snd_soc_unregister_card - Unregister a card with the ASoC core 2210 * 2211 * @card: Card to unregister 2212 * 2213 * Note that currently this is an internal only function: it will be 2214 * exposed to machine drivers after further backporting of ASoC v2 2215 * registration APIs. 2216 */ 2217 static int snd_soc_unregister_card(struct snd_soc_card *card) 2218 { 2219 mutex_lock(&client_mutex); 2220 list_del(&card->list); 2221 mutex_unlock(&client_mutex); 2222 2223 dev_dbg(card->dev, "Unregistered card '%s'\n", card->name); 2224 2225 return 0; 2226 } 2227 2228 static struct snd_soc_dai_ops null_dai_ops = { 2229 }; 2230 2231 /** 2232 * snd_soc_register_dai - Register a DAI with the ASoC core 2233 * 2234 * @dai: DAI to register 2235 */ 2236 int snd_soc_register_dai(struct snd_soc_dai *dai) 2237 { 2238 if (!dai->name) 2239 return -EINVAL; 2240 2241 /* The device should become mandatory over time */ 2242 if (!dai->dev) 2243 printk(KERN_WARNING "No device for DAI %s\n", dai->name); 2244 2245 if (!dai->ops) 2246 dai->ops = &null_dai_ops; 2247 2248 INIT_LIST_HEAD(&dai->list); 2249 2250 mutex_lock(&client_mutex); 2251 list_add(&dai->list, &dai_list); 2252 snd_soc_instantiate_cards(); 2253 mutex_unlock(&client_mutex); 2254 2255 pr_debug("Registered DAI '%s'\n", dai->name); 2256 2257 return 0; 2258 } 2259 EXPORT_SYMBOL_GPL(snd_soc_register_dai); 2260 2261 /** 2262 * snd_soc_unregister_dai - Unregister a DAI from the ASoC core 2263 * 2264 * @dai: DAI to unregister 2265 */ 2266 void snd_soc_unregister_dai(struct snd_soc_dai *dai) 2267 { 2268 mutex_lock(&client_mutex); 2269 list_del(&dai->list); 2270 mutex_unlock(&client_mutex); 2271 2272 pr_debug("Unregistered DAI '%s'\n", dai->name); 2273 } 2274 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai); 2275 2276 /** 2277 * snd_soc_register_dais - Register multiple DAIs with the ASoC core 2278 * 2279 * @dai: Array of DAIs to register 2280 * @count: Number of DAIs 2281 */ 2282 int snd_soc_register_dais(struct snd_soc_dai *dai, size_t count) 2283 { 2284 int i, ret; 2285 2286 for (i = 0; i < count; i++) { 2287 ret = snd_soc_register_dai(&dai[i]); 2288 if (ret != 0) 2289 goto err; 2290 } 2291 2292 return 0; 2293 2294 err: 2295 for (i--; i >= 0; i--) 2296 snd_soc_unregister_dai(&dai[i]); 2297 2298 return ret; 2299 } 2300 EXPORT_SYMBOL_GPL(snd_soc_register_dais); 2301 2302 /** 2303 * snd_soc_unregister_dais - Unregister multiple DAIs from the ASoC core 2304 * 2305 * @dai: Array of DAIs to unregister 2306 * @count: Number of DAIs 2307 */ 2308 void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count) 2309 { 2310 int i; 2311 2312 for (i = 0; i < count; i++) 2313 snd_soc_unregister_dai(&dai[i]); 2314 } 2315 EXPORT_SYMBOL_GPL(snd_soc_unregister_dais); 2316 2317 /** 2318 * snd_soc_register_platform - Register a platform with the ASoC core 2319 * 2320 * @platform: platform to register 2321 */ 2322 int snd_soc_register_platform(struct snd_soc_platform *platform) 2323 { 2324 if (!platform->name) 2325 return -EINVAL; 2326 2327 INIT_LIST_HEAD(&platform->list); 2328 2329 mutex_lock(&client_mutex); 2330 list_add(&platform->list, &platform_list); 2331 snd_soc_instantiate_cards(); 2332 mutex_unlock(&client_mutex); 2333 2334 pr_debug("Registered platform '%s'\n", platform->name); 2335 2336 return 0; 2337 } 2338 EXPORT_SYMBOL_GPL(snd_soc_register_platform); 2339 2340 /** 2341 * snd_soc_unregister_platform - Unregister a platform from the ASoC core 2342 * 2343 * @platform: platform to unregister 2344 */ 2345 void snd_soc_unregister_platform(struct snd_soc_platform *platform) 2346 { 2347 mutex_lock(&client_mutex); 2348 list_del(&platform->list); 2349 mutex_unlock(&client_mutex); 2350 2351 pr_debug("Unregistered platform '%s'\n", platform->name); 2352 } 2353 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); 2354 2355 /** 2356 * snd_soc_register_codec - Register a codec with the ASoC core 2357 * 2358 * @codec: codec to register 2359 */ 2360 int snd_soc_register_codec(struct snd_soc_codec *codec) 2361 { 2362 if (!codec->name) 2363 return -EINVAL; 2364 2365 /* The device should become mandatory over time */ 2366 if (!codec->dev) 2367 printk(KERN_WARNING "No device for codec %s\n", codec->name); 2368 2369 INIT_LIST_HEAD(&codec->list); 2370 2371 mutex_lock(&client_mutex); 2372 list_add(&codec->list, &codec_list); 2373 snd_soc_instantiate_cards(); 2374 mutex_unlock(&client_mutex); 2375 2376 pr_debug("Registered codec '%s'\n", codec->name); 2377 2378 return 0; 2379 } 2380 EXPORT_SYMBOL_GPL(snd_soc_register_codec); 2381 2382 /** 2383 * snd_soc_unregister_codec - Unregister a codec from the ASoC core 2384 * 2385 * @codec: codec to unregister 2386 */ 2387 void snd_soc_unregister_codec(struct snd_soc_codec *codec) 2388 { 2389 mutex_lock(&client_mutex); 2390 list_del(&codec->list); 2391 mutex_unlock(&client_mutex); 2392 2393 pr_debug("Unregistered codec '%s'\n", codec->name); 2394 } 2395 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec); 2396 2397 static int __init snd_soc_init(void) 2398 { 2399 #ifdef CONFIG_DEBUG_FS 2400 debugfs_root = debugfs_create_dir("asoc", NULL); 2401 if (IS_ERR(debugfs_root) || !debugfs_root) { 2402 printk(KERN_WARNING 2403 "ASoC: Failed to create debugfs directory\n"); 2404 debugfs_root = NULL; 2405 } 2406 #endif 2407 2408 return platform_driver_register(&soc_driver); 2409 } 2410 2411 static void __exit snd_soc_exit(void) 2412 { 2413 #ifdef CONFIG_DEBUG_FS 2414 debugfs_remove_recursive(debugfs_root); 2415 #endif 2416 platform_driver_unregister(&soc_driver); 2417 } 2418 2419 module_init(snd_soc_init); 2420 module_exit(snd_soc_exit); 2421 2422 /* Module information */ 2423 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 2424 MODULE_DESCRIPTION("ALSA SoC Core"); 2425 MODULE_LICENSE("GPL"); 2426 MODULE_ALIAS("platform:soc-audio"); 2427