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