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 snd_soc_dapm_new_dai_widgets(&cpu_dai->dapm, cpu_dai); 1384 } 1385 1386 if (cpu_dai->driver->probe) { 1387 ret = cpu_dai->driver->probe(cpu_dai); 1388 if (ret < 0) { 1389 dev_err(cpu_dai->dev, 1390 "ASoC: failed to probe CPU DAI %s: %d\n", 1391 cpu_dai->name, ret); 1392 module_put(cpu_dai->dev->driver->owner); 1393 return ret; 1394 } 1395 } 1396 cpu_dai->probed = 1; 1397 /* mark cpu_dai as probed and add to card dai list */ 1398 list_add(&cpu_dai->card_list, &card->dai_dev_list); 1399 } 1400 1401 /* probe the CODEC DAI */ 1402 if (!codec_dai->probed && codec_dai->driver->probe_order == order) { 1403 if (codec_dai->driver->probe) { 1404 ret = codec_dai->driver->probe(codec_dai); 1405 if (ret < 0) { 1406 dev_err(codec_dai->dev, 1407 "ASoC: failed to probe CODEC DAI %s: %d\n", 1408 codec_dai->name, ret); 1409 return ret; 1410 } 1411 } 1412 1413 /* mark codec_dai as probed and add to card dai list */ 1414 codec_dai->probed = 1; 1415 list_add(&codec_dai->card_list, &card->dai_dev_list); 1416 } 1417 1418 /* complete DAI probe during last probe */ 1419 if (order != SND_SOC_COMP_ORDER_LAST) 1420 return 0; 1421 1422 ret = soc_post_component_init(card, codec, num, 0); 1423 if (ret) 1424 return ret; 1425 1426 ret = device_create_file(rtd->dev, &dev_attr_pmdown_time); 1427 if (ret < 0) 1428 dev_warn(rtd->dev, "ASoC: failed to add pmdown_time sysfs: %d\n", 1429 ret); 1430 1431 if (cpu_dai->driver->compress_dai) { 1432 /*create compress_device"*/ 1433 ret = soc_new_compress(rtd, num); 1434 if (ret < 0) { 1435 dev_err(card->dev, "ASoC: can't create compress %s\n", 1436 dai_link->stream_name); 1437 return ret; 1438 } 1439 } else { 1440 1441 if (!dai_link->params) { 1442 /* create the pcm */ 1443 ret = soc_new_pcm(rtd, num); 1444 if (ret < 0) { 1445 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", 1446 dai_link->stream_name, ret); 1447 return ret; 1448 } 1449 } else { 1450 INIT_DELAYED_WORK(&rtd->delayed_work, 1451 codec2codec_close_delayed_work); 1452 1453 /* link the DAI widgets */ 1454 play_w = codec_dai->playback_widget; 1455 capture_w = cpu_dai->capture_widget; 1456 if (play_w && capture_w) { 1457 ret = snd_soc_dapm_new_pcm(card, dai_link->params, 1458 capture_w, play_w); 1459 if (ret != 0) { 1460 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", 1461 play_w->name, capture_w->name, ret); 1462 return ret; 1463 } 1464 } 1465 1466 play_w = cpu_dai->playback_widget; 1467 capture_w = codec_dai->capture_widget; 1468 if (play_w && capture_w) { 1469 ret = snd_soc_dapm_new_pcm(card, dai_link->params, 1470 capture_w, play_w); 1471 if (ret != 0) { 1472 dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", 1473 play_w->name, capture_w->name, ret); 1474 return ret; 1475 } 1476 } 1477 } 1478 } 1479 1480 /* add platform data for AC97 devices */ 1481 if (rtd->codec_dai->driver->ac97_control) 1482 snd_ac97_dev_add_pdata(codec->ac97, rtd->cpu_dai->ac97_pdata); 1483 1484 return 0; 1485 } 1486 1487 #ifdef CONFIG_SND_SOC_AC97_BUS 1488 static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd) 1489 { 1490 int ret; 1491 1492 /* Only instantiate AC97 if not already done by the adaptor 1493 * for the generic AC97 subsystem. 1494 */ 1495 if (rtd->codec_dai->driver->ac97_control && !rtd->codec->ac97_registered) { 1496 /* 1497 * It is possible that the AC97 device is already registered to 1498 * the device subsystem. This happens when the device is created 1499 * via snd_ac97_mixer(). Currently only SoC codec that does so 1500 * is the generic AC97 glue but others migh emerge. 1501 * 1502 * In those cases we don't try to register the device again. 1503 */ 1504 if (!rtd->codec->ac97_created) 1505 return 0; 1506 1507 ret = soc_ac97_dev_register(rtd->codec); 1508 if (ret < 0) { 1509 dev_err(rtd->codec->dev, 1510 "ASoC: AC97 device register failed: %d\n", ret); 1511 return ret; 1512 } 1513 1514 rtd->codec->ac97_registered = 1; 1515 } 1516 return 0; 1517 } 1518 1519 static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec) 1520 { 1521 if (codec->ac97_registered) { 1522 soc_ac97_dev_unregister(codec); 1523 codec->ac97_registered = 0; 1524 } 1525 } 1526 #endif 1527 1528 static int soc_check_aux_dev(struct snd_soc_card *card, int num) 1529 { 1530 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1531 struct snd_soc_codec *codec; 1532 1533 /* find CODEC from registered CODECs*/ 1534 list_for_each_entry(codec, &codec_list, list) { 1535 if (!strcmp(codec->name, aux_dev->codec_name)) 1536 return 0; 1537 } 1538 1539 dev_err(card->dev, "ASoC: %s not registered\n", aux_dev->codec_name); 1540 1541 return -EPROBE_DEFER; 1542 } 1543 1544 static int soc_probe_aux_dev(struct snd_soc_card *card, int num) 1545 { 1546 struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; 1547 struct snd_soc_codec *codec; 1548 int ret = -ENODEV; 1549 1550 /* find CODEC from registered CODECs*/ 1551 list_for_each_entry(codec, &codec_list, list) { 1552 if (!strcmp(codec->name, aux_dev->codec_name)) { 1553 if (codec->probed) { 1554 dev_err(codec->dev, 1555 "ASoC: codec already probed"); 1556 ret = -EBUSY; 1557 goto out; 1558 } 1559 goto found; 1560 } 1561 } 1562 /* codec not found */ 1563 dev_err(card->dev, "ASoC: codec %s not found", aux_dev->codec_name); 1564 return -EPROBE_DEFER; 1565 1566 found: 1567 ret = soc_probe_codec(card, codec); 1568 if (ret < 0) 1569 return ret; 1570 1571 ret = soc_post_component_init(card, codec, num, 1); 1572 1573 out: 1574 return ret; 1575 } 1576 1577 static void soc_remove_aux_dev(struct snd_soc_card *card, int num) 1578 { 1579 struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num]; 1580 struct snd_soc_codec *codec = rtd->codec; 1581 1582 /* unregister the rtd device */ 1583 if (rtd->dev_registered) { 1584 device_remove_file(rtd->dev, &dev_attr_codec_reg); 1585 device_unregister(rtd->dev); 1586 rtd->dev_registered = 0; 1587 } 1588 1589 if (codec && codec->probed) 1590 soc_remove_codec(codec); 1591 } 1592 1593 static int snd_soc_init_codec_cache(struct snd_soc_codec *codec, 1594 enum snd_soc_compress_type compress_type) 1595 { 1596 int ret; 1597 1598 if (codec->cache_init) 1599 return 0; 1600 1601 /* override the compress_type if necessary */ 1602 if (compress_type && codec->compress_type != compress_type) 1603 codec->compress_type = compress_type; 1604 ret = snd_soc_cache_init(codec); 1605 if (ret < 0) { 1606 dev_err(codec->dev, 1607 "ASoC: Failed to set cache compression type: %d\n", 1608 ret); 1609 return ret; 1610 } 1611 codec->cache_init = 1; 1612 return 0; 1613 } 1614 1615 static int snd_soc_instantiate_card(struct snd_soc_card *card) 1616 { 1617 struct snd_soc_codec *codec; 1618 struct snd_soc_codec_conf *codec_conf; 1619 enum snd_soc_compress_type compress_type; 1620 struct snd_soc_dai_link *dai_link; 1621 int ret, i, order, dai_fmt; 1622 1623 mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); 1624 1625 /* bind DAIs */ 1626 for (i = 0; i < card->num_links; i++) { 1627 ret = soc_bind_dai_link(card, i); 1628 if (ret != 0) 1629 goto base_error; 1630 } 1631 1632 /* check aux_devs too */ 1633 for (i = 0; i < card->num_aux_devs; i++) { 1634 ret = soc_check_aux_dev(card, i); 1635 if (ret != 0) 1636 goto base_error; 1637 } 1638 1639 /* initialize the register cache for each available codec */ 1640 list_for_each_entry(codec, &codec_list, list) { 1641 if (codec->cache_init) 1642 continue; 1643 /* by default we don't override the compress_type */ 1644 compress_type = 0; 1645 /* check to see if we need to override the compress_type */ 1646 for (i = 0; i < card->num_configs; ++i) { 1647 codec_conf = &card->codec_conf[i]; 1648 if (!strcmp(codec->name, codec_conf->dev_name)) { 1649 compress_type = codec_conf->compress_type; 1650 if (compress_type && compress_type 1651 != codec->compress_type) 1652 break; 1653 } 1654 } 1655 ret = snd_soc_init_codec_cache(codec, compress_type); 1656 if (ret < 0) 1657 goto base_error; 1658 } 1659 1660 /* card bind complete so register a sound card */ 1661 ret = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, 1662 card->owner, 0, &card->snd_card); 1663 if (ret < 0) { 1664 dev_err(card->dev, 1665 "ASoC: can't create sound card for card %s: %d\n", 1666 card->name, ret); 1667 goto base_error; 1668 } 1669 card->snd_card->dev = card->dev; 1670 1671 card->dapm.bias_level = SND_SOC_BIAS_OFF; 1672 card->dapm.dev = card->dev; 1673 card->dapm.card = card; 1674 list_add(&card->dapm.list, &card->dapm_list); 1675 1676 #ifdef CONFIG_DEBUG_FS 1677 snd_soc_dapm_debugfs_init(&card->dapm, card->debugfs_card_root); 1678 #endif 1679 1680 #ifdef CONFIG_PM_SLEEP 1681 /* deferred resume work */ 1682 INIT_WORK(&card->deferred_resume_work, soc_resume_deferred); 1683 #endif 1684 1685 if (card->dapm_widgets) 1686 snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets, 1687 card->num_dapm_widgets); 1688 1689 /* initialise the sound card only once */ 1690 if (card->probe) { 1691 ret = card->probe(card); 1692 if (ret < 0) 1693 goto card_probe_error; 1694 } 1695 1696 /* probe all components used by DAI links on this card */ 1697 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1698 order++) { 1699 for (i = 0; i < card->num_links; i++) { 1700 ret = soc_probe_link_components(card, i, order); 1701 if (ret < 0) { 1702 dev_err(card->dev, 1703 "ASoC: failed to instantiate card %d\n", 1704 ret); 1705 goto probe_dai_err; 1706 } 1707 } 1708 } 1709 1710 /* probe all DAI links on this card */ 1711 for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST; 1712 order++) { 1713 for (i = 0; i < card->num_links; i++) { 1714 ret = soc_probe_link_dais(card, i, order); 1715 if (ret < 0) { 1716 dev_err(card->dev, 1717 "ASoC: failed to instantiate card %d\n", 1718 ret); 1719 goto probe_dai_err; 1720 } 1721 } 1722 } 1723 1724 for (i = 0; i < card->num_aux_devs; i++) { 1725 ret = soc_probe_aux_dev(card, i); 1726 if (ret < 0) { 1727 dev_err(card->dev, 1728 "ASoC: failed to add auxiliary devices %d\n", 1729 ret); 1730 goto probe_aux_dev_err; 1731 } 1732 } 1733 1734 snd_soc_dapm_link_dai_widgets(card); 1735 1736 if (card->controls) 1737 snd_soc_add_card_controls(card, card->controls, card->num_controls); 1738 1739 if (card->dapm_routes) 1740 snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, 1741 card->num_dapm_routes); 1742 1743 for (i = 0; i < card->num_links; i++) { 1744 dai_link = &card->dai_link[i]; 1745 dai_fmt = dai_link->dai_fmt; 1746 1747 if (dai_fmt) { 1748 ret = snd_soc_dai_set_fmt(card->rtd[i].codec_dai, 1749 dai_fmt); 1750 if (ret != 0 && ret != -ENOTSUPP) 1751 dev_warn(card->rtd[i].codec_dai->dev, 1752 "ASoC: Failed to set DAI format: %d\n", 1753 ret); 1754 } 1755 1756 /* If this is a regular CPU link there will be a platform */ 1757 if (dai_fmt && 1758 (dai_link->platform_name || dai_link->platform_of_node)) { 1759 ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai, 1760 dai_fmt); 1761 if (ret != 0 && ret != -ENOTSUPP) 1762 dev_warn(card->rtd[i].cpu_dai->dev, 1763 "ASoC: Failed to set DAI format: %d\n", 1764 ret); 1765 } else if (dai_fmt) { 1766 /* Flip the polarity for the "CPU" end */ 1767 dai_fmt &= ~SND_SOC_DAIFMT_MASTER_MASK; 1768 switch (dai_link->dai_fmt & 1769 SND_SOC_DAIFMT_MASTER_MASK) { 1770 case SND_SOC_DAIFMT_CBM_CFM: 1771 dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; 1772 break; 1773 case SND_SOC_DAIFMT_CBM_CFS: 1774 dai_fmt |= SND_SOC_DAIFMT_CBS_CFM; 1775 break; 1776 case SND_SOC_DAIFMT_CBS_CFM: 1777 dai_fmt |= SND_SOC_DAIFMT_CBM_CFS; 1778 break; 1779 case SND_SOC_DAIFMT_CBS_CFS: 1780 dai_fmt |= SND_SOC_DAIFMT_CBM_CFM; 1781 break; 1782 } 1783 1784 ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai, 1785 dai_fmt); 1786 if (ret != 0 && ret != -ENOTSUPP) 1787 dev_warn(card->rtd[i].cpu_dai->dev, 1788 "ASoC: Failed to set DAI format: %d\n", 1789 ret); 1790 } 1791 } 1792 1793 snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname), 1794 "%s", card->name); 1795 snprintf(card->snd_card->longname, sizeof(card->snd_card->longname), 1796 "%s", card->long_name ? card->long_name : card->name); 1797 snprintf(card->snd_card->driver, sizeof(card->snd_card->driver), 1798 "%s", card->driver_name ? card->driver_name : card->name); 1799 for (i = 0; i < ARRAY_SIZE(card->snd_card->driver); i++) { 1800 switch (card->snd_card->driver[i]) { 1801 case '_': 1802 case '-': 1803 case '\0': 1804 break; 1805 default: 1806 if (!isalnum(card->snd_card->driver[i])) 1807 card->snd_card->driver[i] = '_'; 1808 break; 1809 } 1810 } 1811 1812 if (card->late_probe) { 1813 ret = card->late_probe(card); 1814 if (ret < 0) { 1815 dev_err(card->dev, "ASoC: %s late_probe() failed: %d\n", 1816 card->name, ret); 1817 goto probe_aux_dev_err; 1818 } 1819 } 1820 1821 if (card->fully_routed) 1822 list_for_each_entry(codec, &card->codec_dev_list, card_list) 1823 snd_soc_dapm_auto_nc_codec_pins(codec); 1824 1825 snd_soc_dapm_new_widgets(card); 1826 1827 ret = snd_card_register(card->snd_card); 1828 if (ret < 0) { 1829 dev_err(card->dev, "ASoC: failed to register soundcard %d\n", 1830 ret); 1831 goto probe_aux_dev_err; 1832 } 1833 1834 #ifdef CONFIG_SND_SOC_AC97_BUS 1835 /* register any AC97 codecs */ 1836 for (i = 0; i < card->num_rtd; i++) { 1837 ret = soc_register_ac97_dai_link(&card->rtd[i]); 1838 if (ret < 0) { 1839 dev_err(card->dev, 1840 "ASoC: failed to register AC97: %d\n", ret); 1841 while (--i >= 0) 1842 soc_unregister_ac97_dai_link(card->rtd[i].codec); 1843 goto probe_aux_dev_err; 1844 } 1845 } 1846 #endif 1847 1848 card->instantiated = 1; 1849 snd_soc_dapm_sync(&card->dapm); 1850 mutex_unlock(&card->mutex); 1851 1852 return 0; 1853 1854 probe_aux_dev_err: 1855 for (i = 0; i < card->num_aux_devs; i++) 1856 soc_remove_aux_dev(card, i); 1857 1858 probe_dai_err: 1859 soc_remove_dai_links(card); 1860 1861 card_probe_error: 1862 if (card->remove) 1863 card->remove(card); 1864 1865 snd_card_free(card->snd_card); 1866 1867 base_error: 1868 mutex_unlock(&card->mutex); 1869 1870 return ret; 1871 } 1872 1873 /* probes a new socdev */ 1874 static int soc_probe(struct platform_device *pdev) 1875 { 1876 struct snd_soc_card *card = platform_get_drvdata(pdev); 1877 1878 /* 1879 * no card, so machine driver should be registering card 1880 * we should not be here in that case so ret error 1881 */ 1882 if (!card) 1883 return -EINVAL; 1884 1885 dev_warn(&pdev->dev, 1886 "ASoC: machine %s should use snd_soc_register_card()\n", 1887 card->name); 1888 1889 /* Bodge while we unpick instantiation */ 1890 card->dev = &pdev->dev; 1891 1892 return snd_soc_register_card(card); 1893 } 1894 1895 static int soc_cleanup_card_resources(struct snd_soc_card *card) 1896 { 1897 int i; 1898 1899 /* make sure any delayed work runs */ 1900 for (i = 0; i < card->num_rtd; i++) { 1901 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1902 flush_delayed_work(&rtd->delayed_work); 1903 } 1904 1905 /* remove auxiliary devices */ 1906 for (i = 0; i < card->num_aux_devs; i++) 1907 soc_remove_aux_dev(card, i); 1908 1909 /* remove and free each DAI */ 1910 soc_remove_dai_links(card); 1911 1912 soc_cleanup_card_debugfs(card); 1913 1914 /* remove the card */ 1915 if (card->remove) 1916 card->remove(card); 1917 1918 snd_soc_dapm_free(&card->dapm); 1919 1920 snd_card_free(card->snd_card); 1921 return 0; 1922 1923 } 1924 1925 /* removes a socdev */ 1926 static int soc_remove(struct platform_device *pdev) 1927 { 1928 struct snd_soc_card *card = platform_get_drvdata(pdev); 1929 1930 snd_soc_unregister_card(card); 1931 return 0; 1932 } 1933 1934 int snd_soc_poweroff(struct device *dev) 1935 { 1936 struct snd_soc_card *card = dev_get_drvdata(dev); 1937 int i; 1938 1939 if (!card->instantiated) 1940 return 0; 1941 1942 /* Flush out pmdown_time work - we actually do want to run it 1943 * now, we're shutting down so no imminent restart. */ 1944 for (i = 0; i < card->num_rtd; i++) { 1945 struct snd_soc_pcm_runtime *rtd = &card->rtd[i]; 1946 flush_delayed_work(&rtd->delayed_work); 1947 } 1948 1949 snd_soc_dapm_shutdown(card); 1950 1951 return 0; 1952 } 1953 EXPORT_SYMBOL_GPL(snd_soc_poweroff); 1954 1955 const struct dev_pm_ops snd_soc_pm_ops = { 1956 .suspend = snd_soc_suspend, 1957 .resume = snd_soc_resume, 1958 .freeze = snd_soc_suspend, 1959 .thaw = snd_soc_resume, 1960 .poweroff = snd_soc_poweroff, 1961 .restore = snd_soc_resume, 1962 }; 1963 EXPORT_SYMBOL_GPL(snd_soc_pm_ops); 1964 1965 /* ASoC platform driver */ 1966 static struct platform_driver soc_driver = { 1967 .driver = { 1968 .name = "soc-audio", 1969 .owner = THIS_MODULE, 1970 .pm = &snd_soc_pm_ops, 1971 }, 1972 .probe = soc_probe, 1973 .remove = soc_remove, 1974 }; 1975 1976 /** 1977 * snd_soc_codec_volatile_register: Report if a register is volatile. 1978 * 1979 * @codec: CODEC to query. 1980 * @reg: Register to query. 1981 * 1982 * Boolean function indiciating if a CODEC register is volatile. 1983 */ 1984 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, 1985 unsigned int reg) 1986 { 1987 if (codec->volatile_register) 1988 return codec->volatile_register(codec, reg); 1989 else 1990 return 0; 1991 } 1992 EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register); 1993 1994 /** 1995 * snd_soc_codec_readable_register: Report if a register is readable. 1996 * 1997 * @codec: CODEC to query. 1998 * @reg: Register to query. 1999 * 2000 * Boolean function indicating if a CODEC register is readable. 2001 */ 2002 int snd_soc_codec_readable_register(struct snd_soc_codec *codec, 2003 unsigned int reg) 2004 { 2005 if (codec->readable_register) 2006 return codec->readable_register(codec, reg); 2007 else 2008 return 1; 2009 } 2010 EXPORT_SYMBOL_GPL(snd_soc_codec_readable_register); 2011 2012 /** 2013 * snd_soc_codec_writable_register: Report if a register is writable. 2014 * 2015 * @codec: CODEC to query. 2016 * @reg: Register to query. 2017 * 2018 * Boolean function indicating if a CODEC register is writable. 2019 */ 2020 int snd_soc_codec_writable_register(struct snd_soc_codec *codec, 2021 unsigned int reg) 2022 { 2023 if (codec->writable_register) 2024 return codec->writable_register(codec, reg); 2025 else 2026 return 1; 2027 } 2028 EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register); 2029 2030 int snd_soc_platform_read(struct snd_soc_platform *platform, 2031 unsigned int reg) 2032 { 2033 unsigned int ret; 2034 2035 if (!platform->driver->read) { 2036 dev_err(platform->dev, "ASoC: platform has no read back\n"); 2037 return -1; 2038 } 2039 2040 ret = platform->driver->read(platform, reg); 2041 dev_dbg(platform->dev, "read %x => %x\n", reg, ret); 2042 trace_snd_soc_preg_read(platform, reg, ret); 2043 2044 return ret; 2045 } 2046 EXPORT_SYMBOL_GPL(snd_soc_platform_read); 2047 2048 int snd_soc_platform_write(struct snd_soc_platform *platform, 2049 unsigned int reg, unsigned int val) 2050 { 2051 if (!platform->driver->write) { 2052 dev_err(platform->dev, "ASoC: platform has no write back\n"); 2053 return -1; 2054 } 2055 2056 dev_dbg(platform->dev, "write %x = %x\n", reg, val); 2057 trace_snd_soc_preg_write(platform, reg, val); 2058 return platform->driver->write(platform, reg, val); 2059 } 2060 EXPORT_SYMBOL_GPL(snd_soc_platform_write); 2061 2062 /** 2063 * snd_soc_new_ac97_codec - initailise AC97 device 2064 * @codec: audio codec 2065 * @ops: AC97 bus operations 2066 * @num: AC97 codec number 2067 * 2068 * Initialises AC97 codec resources for use by ad-hoc devices only. 2069 */ 2070 int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, 2071 struct snd_ac97_bus_ops *ops, int num) 2072 { 2073 mutex_lock(&codec->mutex); 2074 2075 codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL); 2076 if (codec->ac97 == NULL) { 2077 mutex_unlock(&codec->mutex); 2078 return -ENOMEM; 2079 } 2080 2081 codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL); 2082 if (codec->ac97->bus == NULL) { 2083 kfree(codec->ac97); 2084 codec->ac97 = NULL; 2085 mutex_unlock(&codec->mutex); 2086 return -ENOMEM; 2087 } 2088 2089 codec->ac97->bus->ops = ops; 2090 codec->ac97->num = num; 2091 2092 /* 2093 * Mark the AC97 device to be created by us. This way we ensure that the 2094 * device will be registered with the device subsystem later on. 2095 */ 2096 codec->ac97_created = 1; 2097 2098 mutex_unlock(&codec->mutex); 2099 return 0; 2100 } 2101 EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec); 2102 2103 static struct snd_ac97_reset_cfg snd_ac97_rst_cfg; 2104 2105 static void snd_soc_ac97_warm_reset(struct snd_ac97 *ac97) 2106 { 2107 struct pinctrl *pctl = snd_ac97_rst_cfg.pctl; 2108 2109 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_warm_reset); 2110 2111 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 1); 2112 2113 udelay(10); 2114 2115 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0); 2116 2117 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run); 2118 msleep(2); 2119 } 2120 2121 static void snd_soc_ac97_reset(struct snd_ac97 *ac97) 2122 { 2123 struct pinctrl *pctl = snd_ac97_rst_cfg.pctl; 2124 2125 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_reset); 2126 2127 gpio_direction_output(snd_ac97_rst_cfg.gpio_sync, 0); 2128 gpio_direction_output(snd_ac97_rst_cfg.gpio_sdata, 0); 2129 gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 0); 2130 2131 udelay(10); 2132 2133 gpio_direction_output(snd_ac97_rst_cfg.gpio_reset, 1); 2134 2135 pinctrl_select_state(pctl, snd_ac97_rst_cfg.pstate_run); 2136 msleep(2); 2137 } 2138 2139 static int snd_soc_ac97_parse_pinctl(struct device *dev, 2140 struct snd_ac97_reset_cfg *cfg) 2141 { 2142 struct pinctrl *p; 2143 struct pinctrl_state *state; 2144 int gpio; 2145 int ret; 2146 2147 p = devm_pinctrl_get(dev); 2148 if (IS_ERR(p)) { 2149 dev_err(dev, "Failed to get pinctrl\n"); 2150 return PTR_RET(p); 2151 } 2152 cfg->pctl = p; 2153 2154 state = pinctrl_lookup_state(p, "ac97-reset"); 2155 if (IS_ERR(state)) { 2156 dev_err(dev, "Can't find pinctrl state ac97-reset\n"); 2157 return PTR_RET(state); 2158 } 2159 cfg->pstate_reset = state; 2160 2161 state = pinctrl_lookup_state(p, "ac97-warm-reset"); 2162 if (IS_ERR(state)) { 2163 dev_err(dev, "Can't find pinctrl state ac97-warm-reset\n"); 2164 return PTR_RET(state); 2165 } 2166 cfg->pstate_warm_reset = state; 2167 2168 state = pinctrl_lookup_state(p, "ac97-running"); 2169 if (IS_ERR(state)) { 2170 dev_err(dev, "Can't find pinctrl state ac97-running\n"); 2171 return PTR_RET(state); 2172 } 2173 cfg->pstate_run = state; 2174 2175 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 0); 2176 if (gpio < 0) { 2177 dev_err(dev, "Can't find ac97-sync gpio\n"); 2178 return gpio; 2179 } 2180 ret = devm_gpio_request(dev, gpio, "AC97 link sync"); 2181 if (ret) { 2182 dev_err(dev, "Failed requesting ac97-sync gpio\n"); 2183 return ret; 2184 } 2185 cfg->gpio_sync = gpio; 2186 2187 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 1); 2188 if (gpio < 0) { 2189 dev_err(dev, "Can't find ac97-sdata gpio %d\n", gpio); 2190 return gpio; 2191 } 2192 ret = devm_gpio_request(dev, gpio, "AC97 link sdata"); 2193 if (ret) { 2194 dev_err(dev, "Failed requesting ac97-sdata gpio\n"); 2195 return ret; 2196 } 2197 cfg->gpio_sdata = gpio; 2198 2199 gpio = of_get_named_gpio(dev->of_node, "ac97-gpios", 2); 2200 if (gpio < 0) { 2201 dev_err(dev, "Can't find ac97-reset gpio\n"); 2202 return gpio; 2203 } 2204 ret = devm_gpio_request(dev, gpio, "AC97 link reset"); 2205 if (ret) { 2206 dev_err(dev, "Failed requesting ac97-reset gpio\n"); 2207 return ret; 2208 } 2209 cfg->gpio_reset = gpio; 2210 2211 return 0; 2212 } 2213 2214 struct snd_ac97_bus_ops *soc_ac97_ops; 2215 EXPORT_SYMBOL_GPL(soc_ac97_ops); 2216 2217 int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops) 2218 { 2219 if (ops == soc_ac97_ops) 2220 return 0; 2221 2222 if (soc_ac97_ops && ops) 2223 return -EBUSY; 2224 2225 soc_ac97_ops = ops; 2226 2227 return 0; 2228 } 2229 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops); 2230 2231 /** 2232 * snd_soc_set_ac97_ops_of_reset - Set ac97 ops with generic ac97 reset functions 2233 * 2234 * This function sets the reset and warm_reset properties of ops and parses 2235 * the device node of pdev to get pinctrl states and gpio numbers to use. 2236 */ 2237 int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, 2238 struct platform_device *pdev) 2239 { 2240 struct device *dev = &pdev->dev; 2241 struct snd_ac97_reset_cfg cfg; 2242 int ret; 2243 2244 ret = snd_soc_ac97_parse_pinctl(dev, &cfg); 2245 if (ret) 2246 return ret; 2247 2248 ret = snd_soc_set_ac97_ops(ops); 2249 if (ret) 2250 return ret; 2251 2252 ops->warm_reset = snd_soc_ac97_warm_reset; 2253 ops->reset = snd_soc_ac97_reset; 2254 2255 snd_ac97_rst_cfg = cfg; 2256 return 0; 2257 } 2258 EXPORT_SYMBOL_GPL(snd_soc_set_ac97_ops_of_reset); 2259 2260 /** 2261 * snd_soc_free_ac97_codec - free AC97 codec device 2262 * @codec: audio codec 2263 * 2264 * Frees AC97 codec device resources. 2265 */ 2266 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec) 2267 { 2268 mutex_lock(&codec->mutex); 2269 #ifdef CONFIG_SND_SOC_AC97_BUS 2270 soc_unregister_ac97_dai_link(codec); 2271 #endif 2272 kfree(codec->ac97->bus); 2273 kfree(codec->ac97); 2274 codec->ac97 = NULL; 2275 codec->ac97_created = 0; 2276 mutex_unlock(&codec->mutex); 2277 } 2278 EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec); 2279 2280 unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg) 2281 { 2282 unsigned int ret; 2283 2284 ret = codec->read(codec, reg); 2285 dev_dbg(codec->dev, "read %x => %x\n", reg, ret); 2286 trace_snd_soc_reg_read(codec, reg, ret); 2287 2288 return ret; 2289 } 2290 EXPORT_SYMBOL_GPL(snd_soc_read); 2291 2292 unsigned int snd_soc_write(struct snd_soc_codec *codec, 2293 unsigned int reg, unsigned int val) 2294 { 2295 dev_dbg(codec->dev, "write %x = %x\n", reg, val); 2296 trace_snd_soc_reg_write(codec, reg, val); 2297 return codec->write(codec, reg, val); 2298 } 2299 EXPORT_SYMBOL_GPL(snd_soc_write); 2300 2301 unsigned int snd_soc_bulk_write_raw(struct snd_soc_codec *codec, 2302 unsigned int reg, const void *data, size_t len) 2303 { 2304 return codec->bulk_write_raw(codec, reg, data, len); 2305 } 2306 EXPORT_SYMBOL_GPL(snd_soc_bulk_write_raw); 2307 2308 /** 2309 * snd_soc_update_bits - update codec register bits 2310 * @codec: audio codec 2311 * @reg: codec register 2312 * @mask: register mask 2313 * @value: new value 2314 * 2315 * Writes new register value. 2316 * 2317 * Returns 1 for change, 0 for no change, or negative error code. 2318 */ 2319 int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, 2320 unsigned int mask, unsigned int value) 2321 { 2322 bool change; 2323 unsigned int old, new; 2324 int ret; 2325 2326 if (codec->using_regmap) { 2327 ret = regmap_update_bits_check(codec->control_data, reg, 2328 mask, value, &change); 2329 } else { 2330 ret = snd_soc_read(codec, reg); 2331 if (ret < 0) 2332 return ret; 2333 2334 old = ret; 2335 new = (old & ~mask) | (value & mask); 2336 change = old != new; 2337 if (change) 2338 ret = snd_soc_write(codec, reg, new); 2339 } 2340 2341 if (ret < 0) 2342 return ret; 2343 2344 return change; 2345 } 2346 EXPORT_SYMBOL_GPL(snd_soc_update_bits); 2347 2348 /** 2349 * snd_soc_update_bits_locked - update codec register bits 2350 * @codec: audio codec 2351 * @reg: codec register 2352 * @mask: register mask 2353 * @value: new value 2354 * 2355 * Writes new register value, and takes the codec mutex. 2356 * 2357 * Returns 1 for change else 0. 2358 */ 2359 int snd_soc_update_bits_locked(struct snd_soc_codec *codec, 2360 unsigned short reg, unsigned int mask, 2361 unsigned int value) 2362 { 2363 int change; 2364 2365 mutex_lock(&codec->mutex); 2366 change = snd_soc_update_bits(codec, reg, mask, value); 2367 mutex_unlock(&codec->mutex); 2368 2369 return change; 2370 } 2371 EXPORT_SYMBOL_GPL(snd_soc_update_bits_locked); 2372 2373 /** 2374 * snd_soc_test_bits - test register for change 2375 * @codec: audio codec 2376 * @reg: codec register 2377 * @mask: register mask 2378 * @value: new value 2379 * 2380 * Tests a register with a new value and checks if the new value is 2381 * different from the old value. 2382 * 2383 * Returns 1 for change else 0. 2384 */ 2385 int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, 2386 unsigned int mask, unsigned int value) 2387 { 2388 int change; 2389 unsigned int old, new; 2390 2391 old = snd_soc_read(codec, reg); 2392 new = (old & ~mask) | value; 2393 change = old != new; 2394 2395 return change; 2396 } 2397 EXPORT_SYMBOL_GPL(snd_soc_test_bits); 2398 2399 /** 2400 * snd_soc_cnew - create new control 2401 * @_template: control template 2402 * @data: control private data 2403 * @long_name: control long name 2404 * @prefix: control name prefix 2405 * 2406 * Create a new mixer control from a template control. 2407 * 2408 * Returns 0 for success, else error. 2409 */ 2410 struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, 2411 void *data, const char *long_name, 2412 const char *prefix) 2413 { 2414 struct snd_kcontrol_new template; 2415 struct snd_kcontrol *kcontrol; 2416 char *name = NULL; 2417 2418 memcpy(&template, _template, sizeof(template)); 2419 template.index = 0; 2420 2421 if (!long_name) 2422 long_name = template.name; 2423 2424 if (prefix) { 2425 name = kasprintf(GFP_KERNEL, "%s %s", prefix, long_name); 2426 if (!name) 2427 return NULL; 2428 2429 template.name = name; 2430 } else { 2431 template.name = long_name; 2432 } 2433 2434 kcontrol = snd_ctl_new1(&template, data); 2435 2436 kfree(name); 2437 2438 return kcontrol; 2439 } 2440 EXPORT_SYMBOL_GPL(snd_soc_cnew); 2441 2442 static int snd_soc_add_controls(struct snd_card *card, struct device *dev, 2443 const struct snd_kcontrol_new *controls, int num_controls, 2444 const char *prefix, void *data) 2445 { 2446 int err, i; 2447 2448 for (i = 0; i < num_controls; i++) { 2449 const struct snd_kcontrol_new *control = &controls[i]; 2450 err = snd_ctl_add(card, snd_soc_cnew(control, data, 2451 control->name, prefix)); 2452 if (err < 0) { 2453 dev_err(dev, "ASoC: Failed to add %s: %d\n", 2454 control->name, err); 2455 return err; 2456 } 2457 } 2458 2459 return 0; 2460 } 2461 2462 struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card, 2463 const char *name) 2464 { 2465 struct snd_card *card = soc_card->snd_card; 2466 struct snd_kcontrol *kctl; 2467 2468 if (unlikely(!name)) 2469 return NULL; 2470 2471 list_for_each_entry(kctl, &card->controls, list) 2472 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) 2473 return kctl; 2474 return NULL; 2475 } 2476 EXPORT_SYMBOL_GPL(snd_soc_card_get_kcontrol); 2477 2478 /** 2479 * snd_soc_add_codec_controls - add an array of controls to a codec. 2480 * Convenience function to add a list of controls. Many codecs were 2481 * duplicating this code. 2482 * 2483 * @codec: codec to add controls to 2484 * @controls: array of controls to add 2485 * @num_controls: number of elements in the array 2486 * 2487 * Return 0 for success, else error. 2488 */ 2489 int snd_soc_add_codec_controls(struct snd_soc_codec *codec, 2490 const struct snd_kcontrol_new *controls, int num_controls) 2491 { 2492 struct snd_card *card = codec->card->snd_card; 2493 2494 return snd_soc_add_controls(card, codec->dev, controls, num_controls, 2495 codec->name_prefix, codec); 2496 } 2497 EXPORT_SYMBOL_GPL(snd_soc_add_codec_controls); 2498 2499 /** 2500 * snd_soc_add_platform_controls - add an array of controls to a platform. 2501 * Convenience function to add a list of controls. 2502 * 2503 * @platform: platform to add controls to 2504 * @controls: array of controls to add 2505 * @num_controls: number of elements in the array 2506 * 2507 * Return 0 for success, else error. 2508 */ 2509 int snd_soc_add_platform_controls(struct snd_soc_platform *platform, 2510 const struct snd_kcontrol_new *controls, int num_controls) 2511 { 2512 struct snd_card *card = platform->card->snd_card; 2513 2514 return snd_soc_add_controls(card, platform->dev, controls, num_controls, 2515 NULL, platform); 2516 } 2517 EXPORT_SYMBOL_GPL(snd_soc_add_platform_controls); 2518 2519 /** 2520 * snd_soc_add_card_controls - add an array of controls to a SoC card. 2521 * Convenience function to add a list of controls. 2522 * 2523 * @soc_card: SoC card to add controls to 2524 * @controls: array of controls to add 2525 * @num_controls: number of elements in the array 2526 * 2527 * Return 0 for success, else error. 2528 */ 2529 int snd_soc_add_card_controls(struct snd_soc_card *soc_card, 2530 const struct snd_kcontrol_new *controls, int num_controls) 2531 { 2532 struct snd_card *card = soc_card->snd_card; 2533 2534 return snd_soc_add_controls(card, soc_card->dev, controls, num_controls, 2535 NULL, soc_card); 2536 } 2537 EXPORT_SYMBOL_GPL(snd_soc_add_card_controls); 2538 2539 /** 2540 * snd_soc_add_dai_controls - add an array of controls to a DAI. 2541 * Convienience function to add a list of controls. 2542 * 2543 * @dai: DAI to add controls to 2544 * @controls: array of controls to add 2545 * @num_controls: number of elements in the array 2546 * 2547 * Return 0 for success, else error. 2548 */ 2549 int snd_soc_add_dai_controls(struct snd_soc_dai *dai, 2550 const struct snd_kcontrol_new *controls, int num_controls) 2551 { 2552 struct snd_card *card = dai->card->snd_card; 2553 2554 return snd_soc_add_controls(card, dai->dev, controls, num_controls, 2555 NULL, dai); 2556 } 2557 EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls); 2558 2559 /** 2560 * snd_soc_info_enum_double - enumerated double mixer info callback 2561 * @kcontrol: mixer control 2562 * @uinfo: control element information 2563 * 2564 * Callback to provide information about a double enumerated 2565 * mixer control. 2566 * 2567 * Returns 0 for success. 2568 */ 2569 int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, 2570 struct snd_ctl_elem_info *uinfo) 2571 { 2572 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2573 2574 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2575 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 2576 uinfo->value.enumerated.items = e->max; 2577 2578 if (uinfo->value.enumerated.item > e->max - 1) 2579 uinfo->value.enumerated.item = e->max - 1; 2580 strcpy(uinfo->value.enumerated.name, 2581 e->texts[uinfo->value.enumerated.item]); 2582 return 0; 2583 } 2584 EXPORT_SYMBOL_GPL(snd_soc_info_enum_double); 2585 2586 /** 2587 * snd_soc_get_enum_double - enumerated double mixer get callback 2588 * @kcontrol: mixer control 2589 * @ucontrol: control element information 2590 * 2591 * Callback to get the value of a double enumerated mixer. 2592 * 2593 * Returns 0 for success. 2594 */ 2595 int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, 2596 struct snd_ctl_elem_value *ucontrol) 2597 { 2598 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2599 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2600 unsigned int val; 2601 2602 val = snd_soc_read(codec, e->reg); 2603 ucontrol->value.enumerated.item[0] 2604 = (val >> e->shift_l) & e->mask; 2605 if (e->shift_l != e->shift_r) 2606 ucontrol->value.enumerated.item[1] = 2607 (val >> e->shift_r) & e->mask; 2608 2609 return 0; 2610 } 2611 EXPORT_SYMBOL_GPL(snd_soc_get_enum_double); 2612 2613 /** 2614 * snd_soc_put_enum_double - enumerated double mixer put callback 2615 * @kcontrol: mixer control 2616 * @ucontrol: control element information 2617 * 2618 * Callback to set the value of a double enumerated mixer. 2619 * 2620 * Returns 0 for success. 2621 */ 2622 int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, 2623 struct snd_ctl_elem_value *ucontrol) 2624 { 2625 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2626 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2627 unsigned int val; 2628 unsigned int mask; 2629 2630 if (ucontrol->value.enumerated.item[0] > e->max - 1) 2631 return -EINVAL; 2632 val = ucontrol->value.enumerated.item[0] << e->shift_l; 2633 mask = e->mask << e->shift_l; 2634 if (e->shift_l != e->shift_r) { 2635 if (ucontrol->value.enumerated.item[1] > e->max - 1) 2636 return -EINVAL; 2637 val |= ucontrol->value.enumerated.item[1] << e->shift_r; 2638 mask |= e->mask << e->shift_r; 2639 } 2640 2641 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 2642 } 2643 EXPORT_SYMBOL_GPL(snd_soc_put_enum_double); 2644 2645 /** 2646 * snd_soc_get_value_enum_double - semi enumerated double mixer get callback 2647 * @kcontrol: mixer control 2648 * @ucontrol: control element information 2649 * 2650 * Callback to get the value of a double semi enumerated mixer. 2651 * 2652 * Semi enumerated mixer: the enumerated items are referred as values. Can be 2653 * used for handling bitfield coded enumeration for example. 2654 * 2655 * Returns 0 for success. 2656 */ 2657 int snd_soc_get_value_enum_double(struct snd_kcontrol *kcontrol, 2658 struct snd_ctl_elem_value *ucontrol) 2659 { 2660 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2661 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2662 unsigned int reg_val, val, mux; 2663 2664 reg_val = snd_soc_read(codec, e->reg); 2665 val = (reg_val >> e->shift_l) & e->mask; 2666 for (mux = 0; mux < e->max; mux++) { 2667 if (val == e->values[mux]) 2668 break; 2669 } 2670 ucontrol->value.enumerated.item[0] = mux; 2671 if (e->shift_l != e->shift_r) { 2672 val = (reg_val >> e->shift_r) & e->mask; 2673 for (mux = 0; mux < e->max; mux++) { 2674 if (val == e->values[mux]) 2675 break; 2676 } 2677 ucontrol->value.enumerated.item[1] = mux; 2678 } 2679 2680 return 0; 2681 } 2682 EXPORT_SYMBOL_GPL(snd_soc_get_value_enum_double); 2683 2684 /** 2685 * snd_soc_put_value_enum_double - semi enumerated double mixer put callback 2686 * @kcontrol: mixer control 2687 * @ucontrol: control element information 2688 * 2689 * Callback to set the value of a double semi enumerated mixer. 2690 * 2691 * Semi enumerated mixer: the enumerated items are referred as values. Can be 2692 * used for handling bitfield coded enumeration for example. 2693 * 2694 * Returns 0 for success. 2695 */ 2696 int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol, 2697 struct snd_ctl_elem_value *ucontrol) 2698 { 2699 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2700 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 2701 unsigned int val; 2702 unsigned int mask; 2703 2704 if (ucontrol->value.enumerated.item[0] > e->max - 1) 2705 return -EINVAL; 2706 val = e->values[ucontrol->value.enumerated.item[0]] << e->shift_l; 2707 mask = e->mask << e->shift_l; 2708 if (e->shift_l != e->shift_r) { 2709 if (ucontrol->value.enumerated.item[1] > e->max - 1) 2710 return -EINVAL; 2711 val |= e->values[ucontrol->value.enumerated.item[1]] << e->shift_r; 2712 mask |= e->mask << e->shift_r; 2713 } 2714 2715 return snd_soc_update_bits_locked(codec, e->reg, mask, val); 2716 } 2717 EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double); 2718 2719 /** 2720 * snd_soc_info_volsw - single mixer info callback 2721 * @kcontrol: mixer control 2722 * @uinfo: control element information 2723 * 2724 * Callback to provide information about a single mixer control, or a double 2725 * mixer control that spans 2 registers. 2726 * 2727 * Returns 0 for success. 2728 */ 2729 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, 2730 struct snd_ctl_elem_info *uinfo) 2731 { 2732 struct soc_mixer_control *mc = 2733 (struct soc_mixer_control *)kcontrol->private_value; 2734 int platform_max; 2735 2736 if (!mc->platform_max) 2737 mc->platform_max = mc->max; 2738 platform_max = mc->platform_max; 2739 2740 if (platform_max == 1 && !strstr(kcontrol->id.name, " Volume")) 2741 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2742 else 2743 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2744 2745 uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; 2746 uinfo->value.integer.min = 0; 2747 uinfo->value.integer.max = platform_max; 2748 return 0; 2749 } 2750 EXPORT_SYMBOL_GPL(snd_soc_info_volsw); 2751 2752 /** 2753 * snd_soc_get_volsw - single mixer get callback 2754 * @kcontrol: mixer control 2755 * @ucontrol: control element information 2756 * 2757 * Callback to get the value of a single mixer control, or a double mixer 2758 * control that spans 2 registers. 2759 * 2760 * Returns 0 for success. 2761 */ 2762 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, 2763 struct snd_ctl_elem_value *ucontrol) 2764 { 2765 struct soc_mixer_control *mc = 2766 (struct soc_mixer_control *)kcontrol->private_value; 2767 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2768 unsigned int reg = mc->reg; 2769 unsigned int reg2 = mc->rreg; 2770 unsigned int shift = mc->shift; 2771 unsigned int rshift = mc->rshift; 2772 int max = mc->max; 2773 unsigned int mask = (1 << fls(max)) - 1; 2774 unsigned int invert = mc->invert; 2775 2776 ucontrol->value.integer.value[0] = 2777 (snd_soc_read(codec, reg) >> shift) & mask; 2778 if (invert) 2779 ucontrol->value.integer.value[0] = 2780 max - ucontrol->value.integer.value[0]; 2781 2782 if (snd_soc_volsw_is_stereo(mc)) { 2783 if (reg == reg2) 2784 ucontrol->value.integer.value[1] = 2785 (snd_soc_read(codec, reg) >> rshift) & mask; 2786 else 2787 ucontrol->value.integer.value[1] = 2788 (snd_soc_read(codec, reg2) >> shift) & mask; 2789 if (invert) 2790 ucontrol->value.integer.value[1] = 2791 max - ucontrol->value.integer.value[1]; 2792 } 2793 2794 return 0; 2795 } 2796 EXPORT_SYMBOL_GPL(snd_soc_get_volsw); 2797 2798 /** 2799 * snd_soc_put_volsw - single mixer put callback 2800 * @kcontrol: mixer control 2801 * @ucontrol: control element information 2802 * 2803 * Callback to set the value of a single mixer control, or a double mixer 2804 * control that spans 2 registers. 2805 * 2806 * Returns 0 for success. 2807 */ 2808 int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, 2809 struct snd_ctl_elem_value *ucontrol) 2810 { 2811 struct soc_mixer_control *mc = 2812 (struct soc_mixer_control *)kcontrol->private_value; 2813 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2814 unsigned int reg = mc->reg; 2815 unsigned int reg2 = mc->rreg; 2816 unsigned int shift = mc->shift; 2817 unsigned int rshift = mc->rshift; 2818 int max = mc->max; 2819 unsigned int mask = (1 << fls(max)) - 1; 2820 unsigned int invert = mc->invert; 2821 int err; 2822 bool type_2r = 0; 2823 unsigned int val2 = 0; 2824 unsigned int val, val_mask; 2825 2826 val = (ucontrol->value.integer.value[0] & mask); 2827 if (invert) 2828 val = max - val; 2829 val_mask = mask << shift; 2830 val = val << shift; 2831 if (snd_soc_volsw_is_stereo(mc)) { 2832 val2 = (ucontrol->value.integer.value[1] & mask); 2833 if (invert) 2834 val2 = max - val2; 2835 if (reg == reg2) { 2836 val_mask |= mask << rshift; 2837 val |= val2 << rshift; 2838 } else { 2839 val2 = val2 << shift; 2840 type_2r = 1; 2841 } 2842 } 2843 err = snd_soc_update_bits_locked(codec, reg, val_mask, val); 2844 if (err < 0) 2845 return err; 2846 2847 if (type_2r) 2848 err = snd_soc_update_bits_locked(codec, reg2, val_mask, val2); 2849 2850 return err; 2851 } 2852 EXPORT_SYMBOL_GPL(snd_soc_put_volsw); 2853 2854 /** 2855 * snd_soc_get_volsw_sx - single mixer get callback 2856 * @kcontrol: mixer control 2857 * @ucontrol: control element information 2858 * 2859 * Callback to get the value of a single mixer control, or a double mixer 2860 * control that spans 2 registers. 2861 * 2862 * Returns 0 for success. 2863 */ 2864 int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol, 2865 struct snd_ctl_elem_value *ucontrol) 2866 { 2867 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2868 struct soc_mixer_control *mc = 2869 (struct soc_mixer_control *)kcontrol->private_value; 2870 2871 unsigned int reg = mc->reg; 2872 unsigned int reg2 = mc->rreg; 2873 unsigned int shift = mc->shift; 2874 unsigned int rshift = mc->rshift; 2875 int max = mc->max; 2876 int min = mc->min; 2877 int mask = (1 << (fls(min + max) - 1)) - 1; 2878 2879 ucontrol->value.integer.value[0] = 2880 ((snd_soc_read(codec, reg) >> shift) - min) & mask; 2881 2882 if (snd_soc_volsw_is_stereo(mc)) 2883 ucontrol->value.integer.value[1] = 2884 ((snd_soc_read(codec, reg2) >> rshift) - min) & mask; 2885 2886 return 0; 2887 } 2888 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_sx); 2889 2890 /** 2891 * snd_soc_put_volsw_sx - double mixer set callback 2892 * @kcontrol: mixer control 2893 * @uinfo: control element information 2894 * 2895 * Callback to set the value of a double mixer control that spans 2 registers. 2896 * 2897 * Returns 0 for success. 2898 */ 2899 int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, 2900 struct snd_ctl_elem_value *ucontrol) 2901 { 2902 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2903 struct soc_mixer_control *mc = 2904 (struct soc_mixer_control *)kcontrol->private_value; 2905 2906 unsigned int reg = mc->reg; 2907 unsigned int reg2 = mc->rreg; 2908 unsigned int shift = mc->shift; 2909 unsigned int rshift = mc->rshift; 2910 int max = mc->max; 2911 int min = mc->min; 2912 int mask = (1 << (fls(min + max) - 1)) - 1; 2913 int err = 0; 2914 unsigned short val, val_mask, val2 = 0; 2915 2916 val_mask = mask << shift; 2917 val = (ucontrol->value.integer.value[0] + min) & mask; 2918 val = val << shift; 2919 2920 err = snd_soc_update_bits_locked(codec, reg, val_mask, val); 2921 if (err < 0) 2922 return err; 2923 2924 if (snd_soc_volsw_is_stereo(mc)) { 2925 val_mask = mask << rshift; 2926 val2 = (ucontrol->value.integer.value[1] + min) & mask; 2927 val2 = val2 << rshift; 2928 2929 if (snd_soc_update_bits_locked(codec, reg2, val_mask, val2)) 2930 return err; 2931 } 2932 return 0; 2933 } 2934 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx); 2935 2936 /** 2937 * snd_soc_info_volsw_s8 - signed mixer info callback 2938 * @kcontrol: mixer control 2939 * @uinfo: control element information 2940 * 2941 * Callback to provide information about a signed mixer control. 2942 * 2943 * Returns 0 for success. 2944 */ 2945 int snd_soc_info_volsw_s8(struct snd_kcontrol *kcontrol, 2946 struct snd_ctl_elem_info *uinfo) 2947 { 2948 struct soc_mixer_control *mc = 2949 (struct soc_mixer_control *)kcontrol->private_value; 2950 int platform_max; 2951 int min = mc->min; 2952 2953 if (!mc->platform_max) 2954 mc->platform_max = mc->max; 2955 platform_max = mc->platform_max; 2956 2957 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2958 uinfo->count = 2; 2959 uinfo->value.integer.min = 0; 2960 uinfo->value.integer.max = platform_max - min; 2961 return 0; 2962 } 2963 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_s8); 2964 2965 /** 2966 * snd_soc_get_volsw_s8 - signed mixer get callback 2967 * @kcontrol: mixer control 2968 * @ucontrol: control element information 2969 * 2970 * Callback to get the value of a signed mixer control. 2971 * 2972 * Returns 0 for success. 2973 */ 2974 int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, 2975 struct snd_ctl_elem_value *ucontrol) 2976 { 2977 struct soc_mixer_control *mc = 2978 (struct soc_mixer_control *)kcontrol->private_value; 2979 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 2980 unsigned int reg = mc->reg; 2981 int min = mc->min; 2982 int val = snd_soc_read(codec, reg); 2983 2984 ucontrol->value.integer.value[0] = 2985 ((signed char)(val & 0xff))-min; 2986 ucontrol->value.integer.value[1] = 2987 ((signed char)((val >> 8) & 0xff))-min; 2988 return 0; 2989 } 2990 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_s8); 2991 2992 /** 2993 * snd_soc_put_volsw_sgn - signed mixer put callback 2994 * @kcontrol: mixer control 2995 * @ucontrol: control element information 2996 * 2997 * Callback to set the value of a signed mixer control. 2998 * 2999 * Returns 0 for success. 3000 */ 3001 int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 3002 struct snd_ctl_elem_value *ucontrol) 3003 { 3004 struct soc_mixer_control *mc = 3005 (struct soc_mixer_control *)kcontrol->private_value; 3006 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3007 unsigned int reg = mc->reg; 3008 int min = mc->min; 3009 unsigned int val; 3010 3011 val = (ucontrol->value.integer.value[0]+min) & 0xff; 3012 val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; 3013 3014 return snd_soc_update_bits_locked(codec, reg, 0xffff, val); 3015 } 3016 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8); 3017 3018 /** 3019 * snd_soc_info_volsw_range - single mixer info callback with range. 3020 * @kcontrol: mixer control 3021 * @uinfo: control element information 3022 * 3023 * Callback to provide information, within a range, about a single 3024 * mixer control. 3025 * 3026 * returns 0 for success. 3027 */ 3028 int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol, 3029 struct snd_ctl_elem_info *uinfo) 3030 { 3031 struct soc_mixer_control *mc = 3032 (struct soc_mixer_control *)kcontrol->private_value; 3033 int platform_max; 3034 int min = mc->min; 3035 3036 if (!mc->platform_max) 3037 mc->platform_max = mc->max; 3038 platform_max = mc->platform_max; 3039 3040 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 3041 uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1; 3042 uinfo->value.integer.min = 0; 3043 uinfo->value.integer.max = platform_max - min; 3044 3045 return 0; 3046 } 3047 EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range); 3048 3049 /** 3050 * snd_soc_put_volsw_range - single mixer put value callback with range. 3051 * @kcontrol: mixer control 3052 * @ucontrol: control element information 3053 * 3054 * Callback to set the value, within a range, for a single mixer control. 3055 * 3056 * Returns 0 for success. 3057 */ 3058 int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol, 3059 struct snd_ctl_elem_value *ucontrol) 3060 { 3061 struct soc_mixer_control *mc = 3062 (struct soc_mixer_control *)kcontrol->private_value; 3063 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3064 unsigned int reg = mc->reg; 3065 unsigned int rreg = mc->rreg; 3066 unsigned int shift = mc->shift; 3067 int min = mc->min; 3068 int max = mc->max; 3069 unsigned int mask = (1 << fls(max)) - 1; 3070 unsigned int invert = mc->invert; 3071 unsigned int val, val_mask; 3072 int ret; 3073 3074 val = ((ucontrol->value.integer.value[0] + min) & mask); 3075 if (invert) 3076 val = max - val; 3077 val_mask = mask << shift; 3078 val = val << shift; 3079 3080 ret = snd_soc_update_bits_locked(codec, reg, val_mask, val); 3081 if (ret < 0) 3082 return ret; 3083 3084 if (snd_soc_volsw_is_stereo(mc)) { 3085 val = ((ucontrol->value.integer.value[1] + min) & mask); 3086 if (invert) 3087 val = max - val; 3088 val_mask = mask << shift; 3089 val = val << shift; 3090 3091 ret = snd_soc_update_bits_locked(codec, rreg, val_mask, val); 3092 } 3093 3094 return ret; 3095 } 3096 EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range); 3097 3098 /** 3099 * snd_soc_get_volsw_range - single mixer get callback with range 3100 * @kcontrol: mixer control 3101 * @ucontrol: control element information 3102 * 3103 * Callback to get the value, within a range, of a single mixer control. 3104 * 3105 * Returns 0 for success. 3106 */ 3107 int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol, 3108 struct snd_ctl_elem_value *ucontrol) 3109 { 3110 struct soc_mixer_control *mc = 3111 (struct soc_mixer_control *)kcontrol->private_value; 3112 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3113 unsigned int reg = mc->reg; 3114 unsigned int rreg = mc->rreg; 3115 unsigned int shift = mc->shift; 3116 int min = mc->min; 3117 int max = mc->max; 3118 unsigned int mask = (1 << fls(max)) - 1; 3119 unsigned int invert = mc->invert; 3120 3121 ucontrol->value.integer.value[0] = 3122 (snd_soc_read(codec, reg) >> shift) & mask; 3123 if (invert) 3124 ucontrol->value.integer.value[0] = 3125 max - ucontrol->value.integer.value[0]; 3126 ucontrol->value.integer.value[0] = 3127 ucontrol->value.integer.value[0] - min; 3128 3129 if (snd_soc_volsw_is_stereo(mc)) { 3130 ucontrol->value.integer.value[1] = 3131 (snd_soc_read(codec, rreg) >> shift) & mask; 3132 if (invert) 3133 ucontrol->value.integer.value[1] = 3134 max - ucontrol->value.integer.value[1]; 3135 ucontrol->value.integer.value[1] = 3136 ucontrol->value.integer.value[1] - min; 3137 } 3138 3139 return 0; 3140 } 3141 EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range); 3142 3143 /** 3144 * snd_soc_limit_volume - Set new limit to an existing volume control. 3145 * 3146 * @codec: where to look for the control 3147 * @name: Name of the control 3148 * @max: new maximum limit 3149 * 3150 * Return 0 for success, else error. 3151 */ 3152 int snd_soc_limit_volume(struct snd_soc_codec *codec, 3153 const char *name, int max) 3154 { 3155 struct snd_card *card = codec->card->snd_card; 3156 struct snd_kcontrol *kctl; 3157 struct soc_mixer_control *mc; 3158 int found = 0; 3159 int ret = -EINVAL; 3160 3161 /* Sanity check for name and max */ 3162 if (unlikely(!name || max <= 0)) 3163 return -EINVAL; 3164 3165 list_for_each_entry(kctl, &card->controls, list) { 3166 if (!strncmp(kctl->id.name, name, sizeof(kctl->id.name))) { 3167 found = 1; 3168 break; 3169 } 3170 } 3171 if (found) { 3172 mc = (struct soc_mixer_control *)kctl->private_value; 3173 if (max <= mc->max) { 3174 mc->platform_max = max; 3175 ret = 0; 3176 } 3177 } 3178 return ret; 3179 } 3180 EXPORT_SYMBOL_GPL(snd_soc_limit_volume); 3181 3182 int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, 3183 struct snd_ctl_elem_info *uinfo) 3184 { 3185 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3186 struct soc_bytes *params = (void *)kcontrol->private_value; 3187 3188 uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES; 3189 uinfo->count = params->num_regs * codec->val_bytes; 3190 3191 return 0; 3192 } 3193 EXPORT_SYMBOL_GPL(snd_soc_bytes_info); 3194 3195 int snd_soc_bytes_get(struct snd_kcontrol *kcontrol, 3196 struct snd_ctl_elem_value *ucontrol) 3197 { 3198 struct soc_bytes *params = (void *)kcontrol->private_value; 3199 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3200 int ret; 3201 3202 if (codec->using_regmap) 3203 ret = regmap_raw_read(codec->control_data, params->base, 3204 ucontrol->value.bytes.data, 3205 params->num_regs * codec->val_bytes); 3206 else 3207 ret = -EINVAL; 3208 3209 /* Hide any masked bytes to ensure consistent data reporting */ 3210 if (ret == 0 && params->mask) { 3211 switch (codec->val_bytes) { 3212 case 1: 3213 ucontrol->value.bytes.data[0] &= ~params->mask; 3214 break; 3215 case 2: 3216 ((u16 *)(&ucontrol->value.bytes.data))[0] 3217 &= ~params->mask; 3218 break; 3219 case 4: 3220 ((u32 *)(&ucontrol->value.bytes.data))[0] 3221 &= ~params->mask; 3222 break; 3223 default: 3224 return -EINVAL; 3225 } 3226 } 3227 3228 return ret; 3229 } 3230 EXPORT_SYMBOL_GPL(snd_soc_bytes_get); 3231 3232 int snd_soc_bytes_put(struct snd_kcontrol *kcontrol, 3233 struct snd_ctl_elem_value *ucontrol) 3234 { 3235 struct soc_bytes *params = (void *)kcontrol->private_value; 3236 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3237 int ret, len; 3238 unsigned int val; 3239 void *data; 3240 3241 if (!codec->using_regmap) 3242 return -EINVAL; 3243 3244 len = params->num_regs * codec->val_bytes; 3245 3246 data = kmemdup(ucontrol->value.bytes.data, len, GFP_KERNEL | GFP_DMA); 3247 if (!data) 3248 return -ENOMEM; 3249 3250 /* 3251 * If we've got a mask then we need to preserve the register 3252 * bits. We shouldn't modify the incoming data so take a 3253 * copy. 3254 */ 3255 if (params->mask) { 3256 ret = regmap_read(codec->control_data, params->base, &val); 3257 if (ret != 0) 3258 goto out; 3259 3260 val &= params->mask; 3261 3262 switch (codec->val_bytes) { 3263 case 1: 3264 ((u8 *)data)[0] &= ~params->mask; 3265 ((u8 *)data)[0] |= val; 3266 break; 3267 case 2: 3268 ((u16 *)data)[0] &= cpu_to_be16(~params->mask); 3269 ((u16 *)data)[0] |= cpu_to_be16(val); 3270 break; 3271 case 4: 3272 ((u32 *)data)[0] &= cpu_to_be32(~params->mask); 3273 ((u32 *)data)[0] |= cpu_to_be32(val); 3274 break; 3275 default: 3276 ret = -EINVAL; 3277 goto out; 3278 } 3279 } 3280 3281 ret = regmap_raw_write(codec->control_data, params->base, 3282 data, len); 3283 3284 out: 3285 kfree(data); 3286 3287 return ret; 3288 } 3289 EXPORT_SYMBOL_GPL(snd_soc_bytes_put); 3290 3291 /** 3292 * snd_soc_info_xr_sx - signed multi register info callback 3293 * @kcontrol: mreg control 3294 * @uinfo: control element information 3295 * 3296 * Callback to provide information of a control that can 3297 * span multiple codec registers which together 3298 * forms a single signed value in a MSB/LSB manner. 3299 * 3300 * Returns 0 for success. 3301 */ 3302 int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol, 3303 struct snd_ctl_elem_info *uinfo) 3304 { 3305 struct soc_mreg_control *mc = 3306 (struct soc_mreg_control *)kcontrol->private_value; 3307 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 3308 uinfo->count = 1; 3309 uinfo->value.integer.min = mc->min; 3310 uinfo->value.integer.max = mc->max; 3311 3312 return 0; 3313 } 3314 EXPORT_SYMBOL_GPL(snd_soc_info_xr_sx); 3315 3316 /** 3317 * snd_soc_get_xr_sx - signed multi register get callback 3318 * @kcontrol: mreg control 3319 * @ucontrol: control element information 3320 * 3321 * Callback to get the value of a control that can span 3322 * multiple codec registers which together forms a single 3323 * signed value in a MSB/LSB manner. The control supports 3324 * specifying total no of bits used to allow for bitfields 3325 * across the multiple codec registers. 3326 * 3327 * Returns 0 for success. 3328 */ 3329 int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol, 3330 struct snd_ctl_elem_value *ucontrol) 3331 { 3332 struct soc_mreg_control *mc = 3333 (struct soc_mreg_control *)kcontrol->private_value; 3334 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3335 unsigned int regbase = mc->regbase; 3336 unsigned int regcount = mc->regcount; 3337 unsigned int regwshift = codec->driver->reg_word_size * BITS_PER_BYTE; 3338 unsigned int regwmask = (1<<regwshift)-1; 3339 unsigned int invert = mc->invert; 3340 unsigned long mask = (1UL<<mc->nbits)-1; 3341 long min = mc->min; 3342 long max = mc->max; 3343 long val = 0; 3344 unsigned long regval; 3345 unsigned int i; 3346 3347 for (i = 0; i < regcount; i++) { 3348 regval = snd_soc_read(codec, regbase+i) & regwmask; 3349 val |= regval << (regwshift*(regcount-i-1)); 3350 } 3351 val &= mask; 3352 if (min < 0 && val > max) 3353 val |= ~mask; 3354 if (invert) 3355 val = max - val; 3356 ucontrol->value.integer.value[0] = val; 3357 3358 return 0; 3359 } 3360 EXPORT_SYMBOL_GPL(snd_soc_get_xr_sx); 3361 3362 /** 3363 * snd_soc_put_xr_sx - signed multi register get callback 3364 * @kcontrol: mreg control 3365 * @ucontrol: control element information 3366 * 3367 * Callback to set the value of a control that can span 3368 * multiple codec registers which together forms a single 3369 * signed value in a MSB/LSB manner. The control supports 3370 * specifying total no of bits used to allow for bitfields 3371 * across the multiple codec registers. 3372 * 3373 * Returns 0 for success. 3374 */ 3375 int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol, 3376 struct snd_ctl_elem_value *ucontrol) 3377 { 3378 struct soc_mreg_control *mc = 3379 (struct soc_mreg_control *)kcontrol->private_value; 3380 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3381 unsigned int regbase = mc->regbase; 3382 unsigned int regcount = mc->regcount; 3383 unsigned int regwshift = codec->driver->reg_word_size * BITS_PER_BYTE; 3384 unsigned int regwmask = (1<<regwshift)-1; 3385 unsigned int invert = mc->invert; 3386 unsigned long mask = (1UL<<mc->nbits)-1; 3387 long max = mc->max; 3388 long val = ucontrol->value.integer.value[0]; 3389 unsigned int i, regval, regmask; 3390 int err; 3391 3392 if (invert) 3393 val = max - val; 3394 val &= mask; 3395 for (i = 0; i < regcount; i++) { 3396 regval = (val >> (regwshift*(regcount-i-1))) & regwmask; 3397 regmask = (mask >> (regwshift*(regcount-i-1))) & regwmask; 3398 err = snd_soc_update_bits_locked(codec, regbase+i, 3399 regmask, regval); 3400 if (err < 0) 3401 return err; 3402 } 3403 3404 return 0; 3405 } 3406 EXPORT_SYMBOL_GPL(snd_soc_put_xr_sx); 3407 3408 /** 3409 * snd_soc_get_strobe - strobe get callback 3410 * @kcontrol: mixer control 3411 * @ucontrol: control element information 3412 * 3413 * Callback get the value of a strobe mixer control. 3414 * 3415 * Returns 0 for success. 3416 */ 3417 int snd_soc_get_strobe(struct snd_kcontrol *kcontrol, 3418 struct snd_ctl_elem_value *ucontrol) 3419 { 3420 struct soc_mixer_control *mc = 3421 (struct soc_mixer_control *)kcontrol->private_value; 3422 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3423 unsigned int reg = mc->reg; 3424 unsigned int shift = mc->shift; 3425 unsigned int mask = 1 << shift; 3426 unsigned int invert = mc->invert != 0; 3427 unsigned int val = snd_soc_read(codec, reg) & mask; 3428 3429 if (shift != 0 && val != 0) 3430 val = val >> shift; 3431 ucontrol->value.enumerated.item[0] = val ^ invert; 3432 3433 return 0; 3434 } 3435 EXPORT_SYMBOL_GPL(snd_soc_get_strobe); 3436 3437 /** 3438 * snd_soc_put_strobe - strobe put callback 3439 * @kcontrol: mixer control 3440 * @ucontrol: control element information 3441 * 3442 * Callback strobe a register bit to high then low (or the inverse) 3443 * in one pass of a single mixer enum control. 3444 * 3445 * Returns 1 for success. 3446 */ 3447 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol, 3448 struct snd_ctl_elem_value *ucontrol) 3449 { 3450 struct soc_mixer_control *mc = 3451 (struct soc_mixer_control *)kcontrol->private_value; 3452 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); 3453 unsigned int reg = mc->reg; 3454 unsigned int shift = mc->shift; 3455 unsigned int mask = 1 << shift; 3456 unsigned int invert = mc->invert != 0; 3457 unsigned int strobe = ucontrol->value.enumerated.item[0] != 0; 3458 unsigned int val1 = (strobe ^ invert) ? mask : 0; 3459 unsigned int val2 = (strobe ^ invert) ? 0 : mask; 3460 int err; 3461 3462 err = snd_soc_update_bits_locked(codec, reg, mask, val1); 3463 if (err < 0) 3464 return err; 3465 3466 err = snd_soc_update_bits_locked(codec, reg, mask, val2); 3467 return err; 3468 } 3469 EXPORT_SYMBOL_GPL(snd_soc_put_strobe); 3470 3471 /** 3472 * snd_soc_dai_set_sysclk - configure DAI system or master clock. 3473 * @dai: DAI 3474 * @clk_id: DAI specific clock ID 3475 * @freq: new clock frequency in Hz 3476 * @dir: new clock direction - input/output. 3477 * 3478 * Configures the DAI master (MCLK) or system (SYSCLK) clocking. 3479 */ 3480 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id, 3481 unsigned int freq, int dir) 3482 { 3483 if (dai->driver && dai->driver->ops->set_sysclk) 3484 return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir); 3485 else if (dai->codec && dai->codec->driver->set_sysclk) 3486 return dai->codec->driver->set_sysclk(dai->codec, clk_id, 0, 3487 freq, dir); 3488 else 3489 return -EINVAL; 3490 } 3491 EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk); 3492 3493 /** 3494 * snd_soc_codec_set_sysclk - configure CODEC system or master clock. 3495 * @codec: CODEC 3496 * @clk_id: DAI specific clock ID 3497 * @source: Source for the clock 3498 * @freq: new clock frequency in Hz 3499 * @dir: new clock direction - input/output. 3500 * 3501 * Configures the CODEC master (MCLK) or system (SYSCLK) clocking. 3502 */ 3503 int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id, 3504 int source, unsigned int freq, int dir) 3505 { 3506 if (codec->driver->set_sysclk) 3507 return codec->driver->set_sysclk(codec, clk_id, source, 3508 freq, dir); 3509 else 3510 return -EINVAL; 3511 } 3512 EXPORT_SYMBOL_GPL(snd_soc_codec_set_sysclk); 3513 3514 /** 3515 * snd_soc_dai_set_clkdiv - configure DAI clock dividers. 3516 * @dai: DAI 3517 * @div_id: DAI specific clock divider ID 3518 * @div: new clock divisor. 3519 * 3520 * Configures the clock dividers. This is used to derive the best DAI bit and 3521 * frame clocks from the system or master clock. It's best to set the DAI bit 3522 * and frame clocks as low as possible to save system power. 3523 */ 3524 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai, 3525 int div_id, int div) 3526 { 3527 if (dai->driver && dai->driver->ops->set_clkdiv) 3528 return dai->driver->ops->set_clkdiv(dai, div_id, div); 3529 else 3530 return -EINVAL; 3531 } 3532 EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv); 3533 3534 /** 3535 * snd_soc_dai_set_pll - configure DAI PLL. 3536 * @dai: DAI 3537 * @pll_id: DAI specific PLL ID 3538 * @source: DAI specific source for the PLL 3539 * @freq_in: PLL input clock frequency in Hz 3540 * @freq_out: requested PLL output clock frequency in Hz 3541 * 3542 * Configures and enables PLL to generate output clock based on input clock. 3543 */ 3544 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source, 3545 unsigned int freq_in, unsigned int freq_out) 3546 { 3547 if (dai->driver && dai->driver->ops->set_pll) 3548 return dai->driver->ops->set_pll(dai, pll_id, source, 3549 freq_in, freq_out); 3550 else if (dai->codec && dai->codec->driver->set_pll) 3551 return dai->codec->driver->set_pll(dai->codec, pll_id, source, 3552 freq_in, freq_out); 3553 else 3554 return -EINVAL; 3555 } 3556 EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll); 3557 3558 /* 3559 * snd_soc_codec_set_pll - configure codec PLL. 3560 * @codec: CODEC 3561 * @pll_id: DAI specific PLL ID 3562 * @source: DAI specific source for the PLL 3563 * @freq_in: PLL input clock frequency in Hz 3564 * @freq_out: requested PLL output clock frequency in Hz 3565 * 3566 * Configures and enables PLL to generate output clock based on input clock. 3567 */ 3568 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source, 3569 unsigned int freq_in, unsigned int freq_out) 3570 { 3571 if (codec->driver->set_pll) 3572 return codec->driver->set_pll(codec, pll_id, source, 3573 freq_in, freq_out); 3574 else 3575 return -EINVAL; 3576 } 3577 EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll); 3578 3579 /** 3580 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 3581 * @dai: DAI 3582 * @fmt: SND_SOC_DAIFMT_ format value. 3583 * 3584 * Configures the DAI hardware format and clocking. 3585 */ 3586 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 3587 { 3588 if (dai->driver == NULL) 3589 return -EINVAL; 3590 if (dai->driver->ops->set_fmt == NULL) 3591 return -ENOTSUPP; 3592 return dai->driver->ops->set_fmt(dai, fmt); 3593 } 3594 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt); 3595 3596 /** 3597 * snd_soc_dai_set_tdm_slot - configure DAI TDM. 3598 * @dai: DAI 3599 * @tx_mask: bitmask representing active TX slots. 3600 * @rx_mask: bitmask representing active RX slots. 3601 * @slots: Number of slots in use. 3602 * @slot_width: Width in bits for each slot. 3603 * 3604 * Configures a DAI for TDM operation. Both mask and slots are codec and DAI 3605 * specific. 3606 */ 3607 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai, 3608 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 3609 { 3610 if (dai->driver && dai->driver->ops->set_tdm_slot) 3611 return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask, 3612 slots, slot_width); 3613 else 3614 return -EINVAL; 3615 } 3616 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot); 3617 3618 /** 3619 * snd_soc_dai_set_channel_map - configure DAI audio channel map 3620 * @dai: DAI 3621 * @tx_num: how many TX channels 3622 * @tx_slot: pointer to an array which imply the TX slot number channel 3623 * 0~num-1 uses 3624 * @rx_num: how many RX channels 3625 * @rx_slot: pointer to an array which imply the RX slot number channel 3626 * 0~num-1 uses 3627 * 3628 * configure the relationship between channel number and TDM slot number. 3629 */ 3630 int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai, 3631 unsigned int tx_num, unsigned int *tx_slot, 3632 unsigned int rx_num, unsigned int *rx_slot) 3633 { 3634 if (dai->driver && dai->driver->ops->set_channel_map) 3635 return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot, 3636 rx_num, rx_slot); 3637 else 3638 return -EINVAL; 3639 } 3640 EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map); 3641 3642 /** 3643 * snd_soc_dai_set_tristate - configure DAI system or master clock. 3644 * @dai: DAI 3645 * @tristate: tristate enable 3646 * 3647 * Tristates the DAI so that others can use it. 3648 */ 3649 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate) 3650 { 3651 if (dai->driver && dai->driver->ops->set_tristate) 3652 return dai->driver->ops->set_tristate(dai, tristate); 3653 else 3654 return -EINVAL; 3655 } 3656 EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate); 3657 3658 /** 3659 * snd_soc_dai_digital_mute - configure DAI system or master clock. 3660 * @dai: DAI 3661 * @mute: mute enable 3662 * @direction: stream to mute 3663 * 3664 * Mutes the DAI DAC. 3665 */ 3666 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute, 3667 int direction) 3668 { 3669 if (!dai->driver) 3670 return -ENOTSUPP; 3671 3672 if (dai->driver->ops->mute_stream) 3673 return dai->driver->ops->mute_stream(dai, mute, direction); 3674 else if (direction == SNDRV_PCM_STREAM_PLAYBACK && 3675 dai->driver->ops->digital_mute) 3676 return dai->driver->ops->digital_mute(dai, mute); 3677 else 3678 return -ENOTSUPP; 3679 } 3680 EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute); 3681 3682 /** 3683 * snd_soc_register_card - Register a card with the ASoC core 3684 * 3685 * @card: Card to register 3686 * 3687 */ 3688 int snd_soc_register_card(struct snd_soc_card *card) 3689 { 3690 int i, ret; 3691 3692 if (!card->name || !card->dev) 3693 return -EINVAL; 3694 3695 for (i = 0; i < card->num_links; i++) { 3696 struct snd_soc_dai_link *link = &card->dai_link[i]; 3697 3698 /* 3699 * Codec must be specified by 1 of name or OF node, 3700 * not both or neither. 3701 */ 3702 if (!!link->codec_name == !!link->codec_of_node) { 3703 dev_err(card->dev, 3704 "ASoC: Neither/both codec name/of_node are set for %s\n", 3705 link->name); 3706 return -EINVAL; 3707 } 3708 /* Codec DAI name must be specified */ 3709 if (!link->codec_dai_name) { 3710 dev_err(card->dev, 3711 "ASoC: codec_dai_name not set for %s\n", 3712 link->name); 3713 return -EINVAL; 3714 } 3715 3716 /* 3717 * Platform may be specified by either name or OF node, but 3718 * can be left unspecified, and a dummy platform will be used. 3719 */ 3720 if (link->platform_name && link->platform_of_node) { 3721 dev_err(card->dev, 3722 "ASoC: Both platform name/of_node are set for %s\n", 3723 link->name); 3724 return -EINVAL; 3725 } 3726 3727 /* 3728 * CPU device may be specified by either name or OF node, but 3729 * can be left unspecified, and will be matched based on DAI 3730 * name alone.. 3731 */ 3732 if (link->cpu_name && link->cpu_of_node) { 3733 dev_err(card->dev, 3734 "ASoC: Neither/both cpu name/of_node are set for %s\n", 3735 link->name); 3736 return -EINVAL; 3737 } 3738 /* 3739 * At least one of CPU DAI name or CPU device name/node must be 3740 * specified 3741 */ 3742 if (!link->cpu_dai_name && 3743 !(link->cpu_name || link->cpu_of_node)) { 3744 dev_err(card->dev, 3745 "ASoC: Neither cpu_dai_name nor cpu_name/of_node are set for %s\n", 3746 link->name); 3747 return -EINVAL; 3748 } 3749 } 3750 3751 dev_set_drvdata(card->dev, card); 3752 3753 snd_soc_initialize_card_lists(card); 3754 3755 soc_init_card_debugfs(card); 3756 3757 card->rtd = devm_kzalloc(card->dev, 3758 sizeof(struct snd_soc_pcm_runtime) * 3759 (card->num_links + card->num_aux_devs), 3760 GFP_KERNEL); 3761 if (card->rtd == NULL) 3762 return -ENOMEM; 3763 card->num_rtd = 0; 3764 card->rtd_aux = &card->rtd[card->num_links]; 3765 3766 for (i = 0; i < card->num_links; i++) 3767 card->rtd[i].dai_link = &card->dai_link[i]; 3768 3769 INIT_LIST_HEAD(&card->list); 3770 INIT_LIST_HEAD(&card->dapm_dirty); 3771 card->instantiated = 0; 3772 mutex_init(&card->mutex); 3773 mutex_init(&card->dapm_mutex); 3774 3775 ret = snd_soc_instantiate_card(card); 3776 if (ret != 0) 3777 soc_cleanup_card_debugfs(card); 3778 3779 return ret; 3780 } 3781 EXPORT_SYMBOL_GPL(snd_soc_register_card); 3782 3783 /** 3784 * snd_soc_unregister_card - Unregister a card with the ASoC core 3785 * 3786 * @card: Card to unregister 3787 * 3788 */ 3789 int snd_soc_unregister_card(struct snd_soc_card *card) 3790 { 3791 if (card->instantiated) 3792 soc_cleanup_card_resources(card); 3793 dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); 3794 3795 return 0; 3796 } 3797 EXPORT_SYMBOL_GPL(snd_soc_unregister_card); 3798 3799 /* 3800 * Simplify DAI link configuration by removing ".-1" from device names 3801 * and sanitizing names. 3802 */ 3803 static char *fmt_single_name(struct device *dev, int *id) 3804 { 3805 char *found, name[NAME_SIZE]; 3806 int id1, id2; 3807 3808 if (dev_name(dev) == NULL) 3809 return NULL; 3810 3811 strlcpy(name, dev_name(dev), NAME_SIZE); 3812 3813 /* are we a "%s.%d" name (platform and SPI components) */ 3814 found = strstr(name, dev->driver->name); 3815 if (found) { 3816 /* get ID */ 3817 if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) { 3818 3819 /* discard ID from name if ID == -1 */ 3820 if (*id == -1) 3821 found[strlen(dev->driver->name)] = '\0'; 3822 } 3823 3824 } else { 3825 /* I2C component devices are named "bus-addr" */ 3826 if (sscanf(name, "%x-%x", &id1, &id2) == 2) { 3827 char tmp[NAME_SIZE]; 3828 3829 /* create unique ID number from I2C addr and bus */ 3830 *id = ((id1 & 0xffff) << 16) + id2; 3831 3832 /* sanitize component name for DAI link creation */ 3833 snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name); 3834 strlcpy(name, tmp, NAME_SIZE); 3835 } else 3836 *id = 0; 3837 } 3838 3839 return kstrdup(name, GFP_KERNEL); 3840 } 3841 3842 /* 3843 * Simplify DAI link naming for single devices with multiple DAIs by removing 3844 * any ".-1" and using the DAI name (instead of device name). 3845 */ 3846 static inline char *fmt_multiple_name(struct device *dev, 3847 struct snd_soc_dai_driver *dai_drv) 3848 { 3849 if (dai_drv->name == NULL) { 3850 dev_err(dev, 3851 "ASoC: error - multiple DAI %s registered with no name\n", 3852 dev_name(dev)); 3853 return NULL; 3854 } 3855 3856 return kstrdup(dai_drv->name, GFP_KERNEL); 3857 } 3858 3859 /** 3860 * snd_soc_register_dai - Register a DAI with the ASoC core 3861 * 3862 * @dai: DAI to register 3863 */ 3864 static int snd_soc_register_dai(struct device *dev, 3865 struct snd_soc_dai_driver *dai_drv) 3866 { 3867 struct snd_soc_codec *codec; 3868 struct snd_soc_dai *dai; 3869 3870 dev_dbg(dev, "ASoC: dai register %s\n", dev_name(dev)); 3871 3872 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 3873 if (dai == NULL) 3874 return -ENOMEM; 3875 3876 /* create DAI component name */ 3877 dai->name = fmt_single_name(dev, &dai->id); 3878 if (dai->name == NULL) { 3879 kfree(dai); 3880 return -ENOMEM; 3881 } 3882 3883 dai->dev = dev; 3884 dai->driver = dai_drv; 3885 dai->dapm.dev = dev; 3886 if (!dai->driver->ops) 3887 dai->driver->ops = &null_dai_ops; 3888 3889 mutex_lock(&client_mutex); 3890 3891 list_for_each_entry(codec, &codec_list, list) { 3892 if (codec->dev == dev) { 3893 dev_dbg(dev, "ASoC: Mapped DAI %s to CODEC %s\n", 3894 dai->name, codec->name); 3895 dai->codec = codec; 3896 break; 3897 } 3898 } 3899 3900 if (!dai->codec) 3901 dai->dapm.idle_bias_off = 1; 3902 3903 list_add(&dai->list, &dai_list); 3904 3905 mutex_unlock(&client_mutex); 3906 3907 dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name); 3908 3909 return 0; 3910 } 3911 3912 /** 3913 * snd_soc_unregister_dai - Unregister a DAI from the ASoC core 3914 * 3915 * @dai: DAI to unregister 3916 */ 3917 static void snd_soc_unregister_dai(struct device *dev) 3918 { 3919 struct snd_soc_dai *dai; 3920 3921 list_for_each_entry(dai, &dai_list, list) { 3922 if (dev == dai->dev) 3923 goto found; 3924 } 3925 return; 3926 3927 found: 3928 mutex_lock(&client_mutex); 3929 list_del(&dai->list); 3930 mutex_unlock(&client_mutex); 3931 3932 dev_dbg(dev, "ASoC: Unregistered DAI '%s'\n", dai->name); 3933 kfree(dai->name); 3934 kfree(dai); 3935 } 3936 3937 /** 3938 * snd_soc_register_dais - Register multiple DAIs with the ASoC core 3939 * 3940 * @dai: Array of DAIs to register 3941 * @count: Number of DAIs 3942 */ 3943 static int snd_soc_register_dais(struct device *dev, 3944 struct snd_soc_dai_driver *dai_drv, size_t count) 3945 { 3946 struct snd_soc_codec *codec; 3947 struct snd_soc_dai *dai; 3948 int i, ret = 0; 3949 3950 dev_dbg(dev, "ASoC: dai register %s #%Zu\n", dev_name(dev), count); 3951 3952 for (i = 0; i < count; i++) { 3953 3954 dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); 3955 if (dai == NULL) { 3956 ret = -ENOMEM; 3957 goto err; 3958 } 3959 3960 /* create DAI component name */ 3961 dai->name = fmt_multiple_name(dev, &dai_drv[i]); 3962 if (dai->name == NULL) { 3963 kfree(dai); 3964 ret = -EINVAL; 3965 goto err; 3966 } 3967 3968 dai->dev = dev; 3969 dai->driver = &dai_drv[i]; 3970 if (dai->driver->id) 3971 dai->id = dai->driver->id; 3972 else 3973 dai->id = i; 3974 dai->dapm.dev = dev; 3975 if (!dai->driver->ops) 3976 dai->driver->ops = &null_dai_ops; 3977 3978 mutex_lock(&client_mutex); 3979 3980 list_for_each_entry(codec, &codec_list, list) { 3981 if (codec->dev == dev) { 3982 dev_dbg(dev, 3983 "ASoC: Mapped DAI %s to CODEC %s\n", 3984 dai->name, codec->name); 3985 dai->codec = codec; 3986 break; 3987 } 3988 } 3989 3990 if (!dai->codec) 3991 dai->dapm.idle_bias_off = 1; 3992 3993 list_add(&dai->list, &dai_list); 3994 3995 mutex_unlock(&client_mutex); 3996 3997 dev_dbg(dai->dev, "ASoC: Registered DAI '%s'\n", dai->name); 3998 } 3999 4000 return 0; 4001 4002 err: 4003 for (i--; i >= 0; i--) 4004 snd_soc_unregister_dai(dev); 4005 4006 return ret; 4007 } 4008 4009 /** 4010 * snd_soc_unregister_dais - Unregister multiple DAIs from the ASoC core 4011 * 4012 * @dai: Array of DAIs to unregister 4013 * @count: Number of DAIs 4014 */ 4015 static void snd_soc_unregister_dais(struct device *dev, size_t count) 4016 { 4017 int i; 4018 4019 for (i = 0; i < count; i++) 4020 snd_soc_unregister_dai(dev); 4021 } 4022 4023 /** 4024 * snd_soc_add_platform - Add a platform to the ASoC core 4025 * @dev: The parent device for the platform 4026 * @platform: The platform to add 4027 * @platform_driver: The driver for the platform 4028 */ 4029 int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform, 4030 const struct snd_soc_platform_driver *platform_drv) 4031 { 4032 /* create platform component name */ 4033 platform->name = fmt_single_name(dev, &platform->id); 4034 if (platform->name == NULL) 4035 return -ENOMEM; 4036 4037 platform->dev = dev; 4038 platform->driver = platform_drv; 4039 platform->dapm.dev = dev; 4040 platform->dapm.platform = platform; 4041 platform->dapm.stream_event = platform_drv->stream_event; 4042 mutex_init(&platform->mutex); 4043 4044 mutex_lock(&client_mutex); 4045 list_add(&platform->list, &platform_list); 4046 mutex_unlock(&client_mutex); 4047 4048 dev_dbg(dev, "ASoC: Registered platform '%s'\n", platform->name); 4049 4050 return 0; 4051 } 4052 EXPORT_SYMBOL_GPL(snd_soc_add_platform); 4053 4054 /** 4055 * snd_soc_register_platform - Register a platform with the ASoC core 4056 * 4057 * @platform: platform to register 4058 */ 4059 int snd_soc_register_platform(struct device *dev, 4060 const struct snd_soc_platform_driver *platform_drv) 4061 { 4062 struct snd_soc_platform *platform; 4063 int ret; 4064 4065 dev_dbg(dev, "ASoC: platform register %s\n", dev_name(dev)); 4066 4067 platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL); 4068 if (platform == NULL) 4069 return -ENOMEM; 4070 4071 ret = snd_soc_add_platform(dev, platform, platform_drv); 4072 if (ret) 4073 kfree(platform); 4074 4075 return ret; 4076 } 4077 EXPORT_SYMBOL_GPL(snd_soc_register_platform); 4078 4079 /** 4080 * snd_soc_remove_platform - Remove a platform from the ASoC core 4081 * @platform: the platform to remove 4082 */ 4083 void snd_soc_remove_platform(struct snd_soc_platform *platform) 4084 { 4085 mutex_lock(&client_mutex); 4086 list_del(&platform->list); 4087 mutex_unlock(&client_mutex); 4088 4089 dev_dbg(platform->dev, "ASoC: Unregistered platform '%s'\n", 4090 platform->name); 4091 kfree(platform->name); 4092 } 4093 EXPORT_SYMBOL_GPL(snd_soc_remove_platform); 4094 4095 struct snd_soc_platform *snd_soc_lookup_platform(struct device *dev) 4096 { 4097 struct snd_soc_platform *platform; 4098 4099 list_for_each_entry(platform, &platform_list, list) { 4100 if (dev == platform->dev) 4101 return platform; 4102 } 4103 4104 return NULL; 4105 } 4106 EXPORT_SYMBOL_GPL(snd_soc_lookup_platform); 4107 4108 /** 4109 * snd_soc_unregister_platform - Unregister a platform from the ASoC core 4110 * 4111 * @platform: platform to unregister 4112 */ 4113 void snd_soc_unregister_platform(struct device *dev) 4114 { 4115 struct snd_soc_platform *platform; 4116 4117 platform = snd_soc_lookup_platform(dev); 4118 if (!platform) 4119 return; 4120 4121 snd_soc_remove_platform(platform); 4122 kfree(platform); 4123 } 4124 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform); 4125 4126 static u64 codec_format_map[] = { 4127 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE, 4128 SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE, 4129 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE, 4130 SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE, 4131 SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE, 4132 SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE, 4133 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 4134 SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_U24_3BE, 4135 SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE, 4136 SNDRV_PCM_FMTBIT_U20_3LE | SNDRV_PCM_FMTBIT_U20_3BE, 4137 SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE, 4138 SNDRV_PCM_FMTBIT_U18_3LE | SNDRV_PCM_FMTBIT_U18_3BE, 4139 SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE, 4140 SNDRV_PCM_FMTBIT_FLOAT64_LE | SNDRV_PCM_FMTBIT_FLOAT64_BE, 4141 SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE 4142 | SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_BE, 4143 }; 4144 4145 /* Fix up the DAI formats for endianness: codecs don't actually see 4146 * the endianness of the data but we're using the CPU format 4147 * definitions which do need to include endianness so we ensure that 4148 * codec DAIs always have both big and little endian variants set. 4149 */ 4150 static void fixup_codec_formats(struct snd_soc_pcm_stream *stream) 4151 { 4152 int i; 4153 4154 for (i = 0; i < ARRAY_SIZE(codec_format_map); i++) 4155 if (stream->formats & codec_format_map[i]) 4156 stream->formats |= codec_format_map[i]; 4157 } 4158 4159 /** 4160 * snd_soc_register_codec - Register a codec with the ASoC core 4161 * 4162 * @codec: codec to register 4163 */ 4164 int snd_soc_register_codec(struct device *dev, 4165 const struct snd_soc_codec_driver *codec_drv, 4166 struct snd_soc_dai_driver *dai_drv, 4167 int num_dai) 4168 { 4169 size_t reg_size; 4170 struct snd_soc_codec *codec; 4171 int ret, i; 4172 4173 dev_dbg(dev, "codec register %s\n", dev_name(dev)); 4174 4175 codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); 4176 if (codec == NULL) 4177 return -ENOMEM; 4178 4179 /* create CODEC component name */ 4180 codec->name = fmt_single_name(dev, &codec->id); 4181 if (codec->name == NULL) { 4182 ret = -ENOMEM; 4183 goto fail_codec; 4184 } 4185 4186 if (codec_drv->compress_type) 4187 codec->compress_type = codec_drv->compress_type; 4188 else 4189 codec->compress_type = SND_SOC_FLAT_COMPRESSION; 4190 4191 codec->write = codec_drv->write; 4192 codec->read = codec_drv->read; 4193 codec->volatile_register = codec_drv->volatile_register; 4194 codec->readable_register = codec_drv->readable_register; 4195 codec->writable_register = codec_drv->writable_register; 4196 codec->ignore_pmdown_time = codec_drv->ignore_pmdown_time; 4197 codec->dapm.bias_level = SND_SOC_BIAS_OFF; 4198 codec->dapm.dev = dev; 4199 codec->dapm.codec = codec; 4200 codec->dapm.seq_notifier = codec_drv->seq_notifier; 4201 codec->dapm.stream_event = codec_drv->stream_event; 4202 codec->dev = dev; 4203 codec->driver = codec_drv; 4204 codec->num_dai = num_dai; 4205 mutex_init(&codec->mutex); 4206 4207 /* allocate CODEC register cache */ 4208 if (codec_drv->reg_cache_size && codec_drv->reg_word_size) { 4209 reg_size = codec_drv->reg_cache_size * codec_drv->reg_word_size; 4210 codec->reg_size = reg_size; 4211 /* it is necessary to make a copy of the default register cache 4212 * because in the case of using a compression type that requires 4213 * the default register cache to be marked as the 4214 * kernel might have freed the array by the time we initialize 4215 * the cache. 4216 */ 4217 if (codec_drv->reg_cache_default) { 4218 codec->reg_def_copy = kmemdup(codec_drv->reg_cache_default, 4219 reg_size, GFP_KERNEL); 4220 if (!codec->reg_def_copy) { 4221 ret = -ENOMEM; 4222 goto fail_codec_name; 4223 } 4224 } 4225 } 4226 4227 if (codec_drv->reg_access_size && codec_drv->reg_access_default) { 4228 if (!codec->volatile_register) 4229 codec->volatile_register = snd_soc_default_volatile_register; 4230 if (!codec->readable_register) 4231 codec->readable_register = snd_soc_default_readable_register; 4232 if (!codec->writable_register) 4233 codec->writable_register = snd_soc_default_writable_register; 4234 } 4235 4236 for (i = 0; i < num_dai; i++) { 4237 fixup_codec_formats(&dai_drv[i].playback); 4238 fixup_codec_formats(&dai_drv[i].capture); 4239 } 4240 4241 mutex_lock(&client_mutex); 4242 list_add(&codec->list, &codec_list); 4243 mutex_unlock(&client_mutex); 4244 4245 /* register any DAIs */ 4246 ret = snd_soc_register_dais(dev, dai_drv, num_dai); 4247 if (ret < 0) { 4248 dev_err(codec->dev, "ASoC: Failed to regster DAIs: %d\n", ret); 4249 goto fail_codec_name; 4250 } 4251 4252 dev_dbg(codec->dev, "ASoC: Registered codec '%s'\n", codec->name); 4253 return 0; 4254 4255 fail_codec_name: 4256 mutex_lock(&client_mutex); 4257 list_del(&codec->list); 4258 mutex_unlock(&client_mutex); 4259 4260 kfree(codec->name); 4261 fail_codec: 4262 kfree(codec); 4263 return ret; 4264 } 4265 EXPORT_SYMBOL_GPL(snd_soc_register_codec); 4266 4267 /** 4268 * snd_soc_unregister_codec - Unregister a codec from the ASoC core 4269 * 4270 * @codec: codec to unregister 4271 */ 4272 void snd_soc_unregister_codec(struct device *dev) 4273 { 4274 struct snd_soc_codec *codec; 4275 4276 list_for_each_entry(codec, &codec_list, list) { 4277 if (dev == codec->dev) 4278 goto found; 4279 } 4280 return; 4281 4282 found: 4283 snd_soc_unregister_dais(dev, codec->num_dai); 4284 4285 mutex_lock(&client_mutex); 4286 list_del(&codec->list); 4287 mutex_unlock(&client_mutex); 4288 4289 dev_dbg(codec->dev, "ASoC: Unregistered codec '%s'\n", codec->name); 4290 4291 snd_soc_cache_exit(codec); 4292 kfree(codec->reg_def_copy); 4293 kfree(codec->name); 4294 kfree(codec); 4295 } 4296 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec); 4297 4298 4299 /** 4300 * snd_soc_register_component - Register a component with the ASoC core 4301 * 4302 */ 4303 int snd_soc_register_component(struct device *dev, 4304 const struct snd_soc_component_driver *cmpnt_drv, 4305 struct snd_soc_dai_driver *dai_drv, 4306 int num_dai) 4307 { 4308 struct snd_soc_component *cmpnt; 4309 int ret; 4310 4311 dev_dbg(dev, "component register %s\n", dev_name(dev)); 4312 4313 cmpnt = devm_kzalloc(dev, sizeof(*cmpnt), GFP_KERNEL); 4314 if (!cmpnt) { 4315 dev_err(dev, "ASoC: Failed to allocate memory\n"); 4316 return -ENOMEM; 4317 } 4318 4319 cmpnt->name = fmt_single_name(dev, &cmpnt->id); 4320 if (!cmpnt->name) { 4321 dev_err(dev, "ASoC: Failed to simplifying name\n"); 4322 return -ENOMEM; 4323 } 4324 4325 cmpnt->dev = dev; 4326 cmpnt->driver = cmpnt_drv; 4327 cmpnt->num_dai = num_dai; 4328 4329 /* 4330 * snd_soc_register_dai() uses fmt_single_name(), and 4331 * snd_soc_register_dais() uses fmt_multiple_name() 4332 * for dai->name which is used for name based matching 4333 */ 4334 if (1 == num_dai) 4335 ret = snd_soc_register_dai(dev, dai_drv); 4336 else 4337 ret = snd_soc_register_dais(dev, dai_drv, num_dai); 4338 if (ret < 0) { 4339 dev_err(dev, "ASoC: Failed to regster DAIs: %d\n", ret); 4340 goto error_component_name; 4341 } 4342 4343 mutex_lock(&client_mutex); 4344 list_add(&cmpnt->list, &component_list); 4345 mutex_unlock(&client_mutex); 4346 4347 dev_dbg(cmpnt->dev, "ASoC: Registered component '%s'\n", cmpnt->name); 4348 4349 return ret; 4350 4351 error_component_name: 4352 kfree(cmpnt->name); 4353 4354 return ret; 4355 } 4356 EXPORT_SYMBOL_GPL(snd_soc_register_component); 4357 4358 /** 4359 * snd_soc_unregister_component - Unregister a component from the ASoC core 4360 * 4361 */ 4362 void snd_soc_unregister_component(struct device *dev) 4363 { 4364 struct snd_soc_component *cmpnt; 4365 4366 list_for_each_entry(cmpnt, &component_list, list) { 4367 if (dev == cmpnt->dev) 4368 goto found; 4369 } 4370 return; 4371 4372 found: 4373 snd_soc_unregister_dais(dev, cmpnt->num_dai); 4374 4375 mutex_lock(&client_mutex); 4376 list_del(&cmpnt->list); 4377 mutex_unlock(&client_mutex); 4378 4379 dev_dbg(dev, "ASoC: Unregistered component '%s'\n", cmpnt->name); 4380 kfree(cmpnt->name); 4381 } 4382 EXPORT_SYMBOL_GPL(snd_soc_unregister_component); 4383 4384 /* Retrieve a card's name from device tree */ 4385 int snd_soc_of_parse_card_name(struct snd_soc_card *card, 4386 const char *propname) 4387 { 4388 struct device_node *np = card->dev->of_node; 4389 int ret; 4390 4391 ret = of_property_read_string_index(np, propname, 0, &card->name); 4392 /* 4393 * EINVAL means the property does not exist. This is fine providing 4394 * card->name was previously set, which is checked later in 4395 * snd_soc_register_card. 4396 */ 4397 if (ret < 0 && ret != -EINVAL) { 4398 dev_err(card->dev, 4399 "ASoC: Property '%s' could not be read: %d\n", 4400 propname, ret); 4401 return ret; 4402 } 4403 4404 return 0; 4405 } 4406 EXPORT_SYMBOL_GPL(snd_soc_of_parse_card_name); 4407 4408 int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, 4409 const char *propname) 4410 { 4411 struct device_node *np = card->dev->of_node; 4412 int num_routes; 4413 struct snd_soc_dapm_route *routes; 4414 int i, ret; 4415 4416 num_routes = of_property_count_strings(np, propname); 4417 if (num_routes < 0 || num_routes & 1) { 4418 dev_err(card->dev, 4419 "ASoC: Property '%s' does not exist or its length is not even\n", 4420 propname); 4421 return -EINVAL; 4422 } 4423 num_routes /= 2; 4424 if (!num_routes) { 4425 dev_err(card->dev, "ASoC: Property '%s's length is zero\n", 4426 propname); 4427 return -EINVAL; 4428 } 4429 4430 routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes), 4431 GFP_KERNEL); 4432 if (!routes) { 4433 dev_err(card->dev, 4434 "ASoC: Could not allocate DAPM route table\n"); 4435 return -EINVAL; 4436 } 4437 4438 for (i = 0; i < num_routes; i++) { 4439 ret = of_property_read_string_index(np, propname, 4440 2 * i, &routes[i].sink); 4441 if (ret) { 4442 dev_err(card->dev, 4443 "ASoC: Property '%s' index %d could not be read: %d\n", 4444 propname, 2 * i, ret); 4445 return -EINVAL; 4446 } 4447 ret = of_property_read_string_index(np, propname, 4448 (2 * i) + 1, &routes[i].source); 4449 if (ret) { 4450 dev_err(card->dev, 4451 "ASoC: Property '%s' index %d could not be read: %d\n", 4452 propname, (2 * i) + 1, ret); 4453 return -EINVAL; 4454 } 4455 } 4456 4457 card->num_dapm_routes = num_routes; 4458 card->dapm_routes = routes; 4459 4460 return 0; 4461 } 4462 EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_routing); 4463 4464 unsigned int snd_soc_of_parse_daifmt(struct device_node *np, 4465 const char *prefix) 4466 { 4467 int ret, i; 4468 char prop[128]; 4469 unsigned int format = 0; 4470 int bit, frame; 4471 const char *str; 4472 struct { 4473 char *name; 4474 unsigned int val; 4475 } of_fmt_table[] = { 4476 { "i2s", SND_SOC_DAIFMT_I2S }, 4477 { "right_j", SND_SOC_DAIFMT_RIGHT_J }, 4478 { "left_j", SND_SOC_DAIFMT_LEFT_J }, 4479 { "dsp_a", SND_SOC_DAIFMT_DSP_A }, 4480 { "dsp_b", SND_SOC_DAIFMT_DSP_B }, 4481 { "ac97", SND_SOC_DAIFMT_AC97 }, 4482 { "pdm", SND_SOC_DAIFMT_PDM}, 4483 { "msb", SND_SOC_DAIFMT_MSB }, 4484 { "lsb", SND_SOC_DAIFMT_LSB }, 4485 }; 4486 4487 if (!prefix) 4488 prefix = ""; 4489 4490 /* 4491 * check "[prefix]format = xxx" 4492 * SND_SOC_DAIFMT_FORMAT_MASK area 4493 */ 4494 snprintf(prop, sizeof(prop), "%sformat", prefix); 4495 ret = of_property_read_string(np, prop, &str); 4496 if (ret == 0) { 4497 for (i = 0; i < ARRAY_SIZE(of_fmt_table); i++) { 4498 if (strcmp(str, of_fmt_table[i].name) == 0) { 4499 format |= of_fmt_table[i].val; 4500 break; 4501 } 4502 } 4503 } 4504 4505 /* 4506 * check "[prefix]continuous-clock" 4507 * SND_SOC_DAIFMT_CLOCK_MASK area 4508 */ 4509 snprintf(prop, sizeof(prop), "%scontinuous-clock", prefix); 4510 if (of_get_property(np, prop, NULL)) 4511 format |= SND_SOC_DAIFMT_CONT; 4512 else 4513 format |= SND_SOC_DAIFMT_GATED; 4514 4515 /* 4516 * check "[prefix]bitclock-inversion" 4517 * check "[prefix]frame-inversion" 4518 * SND_SOC_DAIFMT_INV_MASK area 4519 */ 4520 snprintf(prop, sizeof(prop), "%sbitclock-inversion", prefix); 4521 bit = !!of_get_property(np, prop, NULL); 4522 4523 snprintf(prop, sizeof(prop), "%sframe-inversion", prefix); 4524 frame = !!of_get_property(np, prop, NULL); 4525 4526 switch ((bit << 4) + frame) { 4527 case 0x11: 4528 format |= SND_SOC_DAIFMT_IB_IF; 4529 break; 4530 case 0x10: 4531 format |= SND_SOC_DAIFMT_IB_NF; 4532 break; 4533 case 0x01: 4534 format |= SND_SOC_DAIFMT_NB_IF; 4535 break; 4536 default: 4537 /* SND_SOC_DAIFMT_NB_NF is default */ 4538 break; 4539 } 4540 4541 /* 4542 * check "[prefix]bitclock-master" 4543 * check "[prefix]frame-master" 4544 * SND_SOC_DAIFMT_MASTER_MASK area 4545 */ 4546 snprintf(prop, sizeof(prop), "%sbitclock-master", prefix); 4547 bit = !!of_get_property(np, prop, NULL); 4548 4549 snprintf(prop, sizeof(prop), "%sframe-master", prefix); 4550 frame = !!of_get_property(np, prop, NULL); 4551 4552 switch ((bit << 4) + frame) { 4553 case 0x11: 4554 format |= SND_SOC_DAIFMT_CBM_CFM; 4555 break; 4556 case 0x10: 4557 format |= SND_SOC_DAIFMT_CBM_CFS; 4558 break; 4559 case 0x01: 4560 format |= SND_SOC_DAIFMT_CBS_CFM; 4561 break; 4562 default: 4563 format |= SND_SOC_DAIFMT_CBS_CFS; 4564 break; 4565 } 4566 4567 return format; 4568 } 4569 EXPORT_SYMBOL_GPL(snd_soc_of_parse_daifmt); 4570 4571 static int __init snd_soc_init(void) 4572 { 4573 #ifdef CONFIG_DEBUG_FS 4574 snd_soc_debugfs_root = debugfs_create_dir("asoc", NULL); 4575 if (IS_ERR(snd_soc_debugfs_root) || !snd_soc_debugfs_root) { 4576 pr_warn("ASoC: Failed to create debugfs directory\n"); 4577 snd_soc_debugfs_root = NULL; 4578 } 4579 4580 if (!debugfs_create_file("codecs", 0444, snd_soc_debugfs_root, NULL, 4581 &codec_list_fops)) 4582 pr_warn("ASoC: Failed to create CODEC list debugfs file\n"); 4583 4584 if (!debugfs_create_file("dais", 0444, snd_soc_debugfs_root, NULL, 4585 &dai_list_fops)) 4586 pr_warn("ASoC: Failed to create DAI list debugfs file\n"); 4587 4588 if (!debugfs_create_file("platforms", 0444, snd_soc_debugfs_root, NULL, 4589 &platform_list_fops)) 4590 pr_warn("ASoC: Failed to create platform list debugfs file\n"); 4591 #endif 4592 4593 snd_soc_util_init(); 4594 4595 return platform_driver_register(&soc_driver); 4596 } 4597 module_init(snd_soc_init); 4598 4599 static void __exit snd_soc_exit(void) 4600 { 4601 snd_soc_util_exit(); 4602 4603 #ifdef CONFIG_DEBUG_FS 4604 debugfs_remove_recursive(snd_soc_debugfs_root); 4605 #endif 4606 platform_driver_unregister(&soc_driver); 4607 } 4608 module_exit(snd_soc_exit); 4609 4610 /* Module information */ 4611 MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 4612 MODULE_DESCRIPTION("ALSA SoC Core"); 4613 MODULE_LICENSE("GPL"); 4614 MODULE_ALIAS("platform:soc-audio"); 4615