1 /* 2 * Universal Interface for Intel High Definition Audio Codec 3 * 4 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de> 5 * 6 * 7 * This driver is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This driver is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #include <sound/driver.h> 23 #include <linux/init.h> 24 #include <linux/delay.h> 25 #include <linux/slab.h> 26 #include <linux/pci.h> 27 #include <linux/mutex.h> 28 #include <sound/core.h> 29 #include "hda_codec.h" 30 #include <sound/asoundef.h> 31 #include <sound/tlv.h> 32 #include <sound/initval.h> 33 #include "hda_local.h" 34 #include <sound/hda_hwdep.h> 35 36 #ifdef CONFIG_SND_HDA_POWER_SAVE 37 /* define this option here to hide as static */ 38 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT; 39 module_param(power_save, int, 0644); 40 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout " 41 "(in second, 0 = disable)."); 42 #endif 43 44 /* 45 * vendor / preset table 46 */ 47 48 struct hda_vendor_id { 49 unsigned int id; 50 const char *name; 51 }; 52 53 /* codec vendor labels */ 54 static struct hda_vendor_id hda_vendor_ids[] = { 55 { 0x10ec, "Realtek" }, 56 { 0x1057, "Motorola" }, 57 { 0x1106, "VIA" }, 58 { 0x11d4, "Analog Devices" }, 59 { 0x13f6, "C-Media" }, 60 { 0x14f1, "Conexant" }, 61 { 0x434d, "C-Media" }, 62 { 0x8384, "SigmaTel" }, 63 {} /* terminator */ 64 }; 65 66 /* codec presets */ 67 #include "hda_patch.h" 68 69 70 #ifdef CONFIG_SND_HDA_POWER_SAVE 71 static void hda_power_work(struct work_struct *work); 72 static void hda_keep_power_on(struct hda_codec *codec); 73 #else 74 static inline void hda_keep_power_on(struct hda_codec *codec) {} 75 #endif 76 77 /** 78 * snd_hda_codec_read - send a command and get the response 79 * @codec: the HDA codec 80 * @nid: NID to send the command 81 * @direct: direct flag 82 * @verb: the verb to send 83 * @parm: the parameter for the verb 84 * 85 * Send a single command and read the corresponding response. 86 * 87 * Returns the obtained response value, or -1 for an error. 88 */ 89 unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid, 90 int direct, 91 unsigned int verb, unsigned int parm) 92 { 93 unsigned int res; 94 snd_hda_power_up(codec); 95 mutex_lock(&codec->bus->cmd_mutex); 96 if (!codec->bus->ops.command(codec, nid, direct, verb, parm)) 97 res = codec->bus->ops.get_response(codec); 98 else 99 res = (unsigned int)-1; 100 mutex_unlock(&codec->bus->cmd_mutex); 101 snd_hda_power_down(codec); 102 return res; 103 } 104 105 /** 106 * snd_hda_codec_write - send a single command without waiting for response 107 * @codec: the HDA codec 108 * @nid: NID to send the command 109 * @direct: direct flag 110 * @verb: the verb to send 111 * @parm: the parameter for the verb 112 * 113 * Send a single command without waiting for response. 114 * 115 * Returns 0 if successful, or a negative error code. 116 */ 117 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int direct, 118 unsigned int verb, unsigned int parm) 119 { 120 int err; 121 snd_hda_power_up(codec); 122 mutex_lock(&codec->bus->cmd_mutex); 123 err = codec->bus->ops.command(codec, nid, direct, verb, parm); 124 mutex_unlock(&codec->bus->cmd_mutex); 125 snd_hda_power_down(codec); 126 return err; 127 } 128 129 /** 130 * snd_hda_sequence_write - sequence writes 131 * @codec: the HDA codec 132 * @seq: VERB array to send 133 * 134 * Send the commands sequentially from the given array. 135 * The array must be terminated with NID=0. 136 */ 137 void snd_hda_sequence_write(struct hda_codec *codec, const struct hda_verb *seq) 138 { 139 for (; seq->nid; seq++) 140 snd_hda_codec_write(codec, seq->nid, 0, seq->verb, seq->param); 141 } 142 143 /** 144 * snd_hda_get_sub_nodes - get the range of sub nodes 145 * @codec: the HDA codec 146 * @nid: NID to parse 147 * @start_id: the pointer to store the start NID 148 * 149 * Parse the NID and store the start NID of its sub-nodes. 150 * Returns the number of sub-nodes. 151 */ 152 int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid, 153 hda_nid_t *start_id) 154 { 155 unsigned int parm; 156 157 parm = snd_hda_param_read(codec, nid, AC_PAR_NODE_COUNT); 158 if (parm == -1) 159 return 0; 160 *start_id = (parm >> 16) & 0x7fff; 161 return (int)(parm & 0x7fff); 162 } 163 164 /** 165 * snd_hda_get_connections - get connection list 166 * @codec: the HDA codec 167 * @nid: NID to parse 168 * @conn_list: connection list array 169 * @max_conns: max. number of connections to store 170 * 171 * Parses the connection list of the given widget and stores the list 172 * of NIDs. 173 * 174 * Returns the number of connections, or a negative error code. 175 */ 176 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid, 177 hda_nid_t *conn_list, int max_conns) 178 { 179 unsigned int parm; 180 int i, conn_len, conns; 181 unsigned int shift, num_elems, mask; 182 hda_nid_t prev_nid; 183 184 snd_assert(conn_list && max_conns > 0, return -EINVAL); 185 186 parm = snd_hda_param_read(codec, nid, AC_PAR_CONNLIST_LEN); 187 if (parm & AC_CLIST_LONG) { 188 /* long form */ 189 shift = 16; 190 num_elems = 2; 191 } else { 192 /* short form */ 193 shift = 8; 194 num_elems = 4; 195 } 196 conn_len = parm & AC_CLIST_LENGTH; 197 mask = (1 << (shift-1)) - 1; 198 199 if (!conn_len) 200 return 0; /* no connection */ 201 202 if (conn_len == 1) { 203 /* single connection */ 204 parm = snd_hda_codec_read(codec, nid, 0, 205 AC_VERB_GET_CONNECT_LIST, 0); 206 conn_list[0] = parm & mask; 207 return 1; 208 } 209 210 /* multi connection */ 211 conns = 0; 212 prev_nid = 0; 213 for (i = 0; i < conn_len; i++) { 214 int range_val; 215 hda_nid_t val, n; 216 217 if (i % num_elems == 0) 218 parm = snd_hda_codec_read(codec, nid, 0, 219 AC_VERB_GET_CONNECT_LIST, i); 220 range_val = !!(parm & (1 << (shift-1))); /* ranges */ 221 val = parm & mask; 222 parm >>= shift; 223 if (range_val) { 224 /* ranges between the previous and this one */ 225 if (!prev_nid || prev_nid >= val) { 226 snd_printk(KERN_WARNING "hda_codec: " 227 "invalid dep_range_val %x:%x\n", 228 prev_nid, val); 229 continue; 230 } 231 for (n = prev_nid + 1; n <= val; n++) { 232 if (conns >= max_conns) { 233 snd_printk(KERN_ERR 234 "Too many connections\n"); 235 return -EINVAL; 236 } 237 conn_list[conns++] = n; 238 } 239 } else { 240 if (conns >= max_conns) { 241 snd_printk(KERN_ERR "Too many connections\n"); 242 return -EINVAL; 243 } 244 conn_list[conns++] = val; 245 } 246 prev_nid = val; 247 } 248 return conns; 249 } 250 251 252 /** 253 * snd_hda_queue_unsol_event - add an unsolicited event to queue 254 * @bus: the BUS 255 * @res: unsolicited event (lower 32bit of RIRB entry) 256 * @res_ex: codec addr and flags (upper 32bit or RIRB entry) 257 * 258 * Adds the given event to the queue. The events are processed in 259 * the workqueue asynchronously. Call this function in the interrupt 260 * hanlder when RIRB receives an unsolicited event. 261 * 262 * Returns 0 if successful, or a negative error code. 263 */ 264 int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex) 265 { 266 struct hda_bus_unsolicited *unsol; 267 unsigned int wp; 268 269 unsol = bus->unsol; 270 if (!unsol) 271 return 0; 272 273 wp = (unsol->wp + 1) % HDA_UNSOL_QUEUE_SIZE; 274 unsol->wp = wp; 275 276 wp <<= 1; 277 unsol->queue[wp] = res; 278 unsol->queue[wp + 1] = res_ex; 279 280 schedule_work(&unsol->work); 281 282 return 0; 283 } 284 285 /* 286 * process queueud unsolicited events 287 */ 288 static void process_unsol_events(struct work_struct *work) 289 { 290 struct hda_bus_unsolicited *unsol = 291 container_of(work, struct hda_bus_unsolicited, work); 292 struct hda_bus *bus = unsol->bus; 293 struct hda_codec *codec; 294 unsigned int rp, caddr, res; 295 296 while (unsol->rp != unsol->wp) { 297 rp = (unsol->rp + 1) % HDA_UNSOL_QUEUE_SIZE; 298 unsol->rp = rp; 299 rp <<= 1; 300 res = unsol->queue[rp]; 301 caddr = unsol->queue[rp + 1]; 302 if (!(caddr & (1 << 4))) /* no unsolicited event? */ 303 continue; 304 codec = bus->caddr_tbl[caddr & 0x0f]; 305 if (codec && codec->patch_ops.unsol_event) 306 codec->patch_ops.unsol_event(codec, res); 307 } 308 } 309 310 /* 311 * initialize unsolicited queue 312 */ 313 static int __devinit init_unsol_queue(struct hda_bus *bus) 314 { 315 struct hda_bus_unsolicited *unsol; 316 317 if (bus->unsol) /* already initialized */ 318 return 0; 319 320 unsol = kzalloc(sizeof(*unsol), GFP_KERNEL); 321 if (!unsol) { 322 snd_printk(KERN_ERR "hda_codec: " 323 "can't allocate unsolicited queue\n"); 324 return -ENOMEM; 325 } 326 INIT_WORK(&unsol->work, process_unsol_events); 327 unsol->bus = bus; 328 bus->unsol = unsol; 329 return 0; 330 } 331 332 /* 333 * destructor 334 */ 335 static void snd_hda_codec_free(struct hda_codec *codec); 336 337 static int snd_hda_bus_free(struct hda_bus *bus) 338 { 339 struct hda_codec *codec, *n; 340 341 if (!bus) 342 return 0; 343 if (bus->unsol) { 344 flush_scheduled_work(); 345 kfree(bus->unsol); 346 } 347 list_for_each_entry_safe(codec, n, &bus->codec_list, list) { 348 snd_hda_codec_free(codec); 349 } 350 if (bus->ops.private_free) 351 bus->ops.private_free(bus); 352 kfree(bus); 353 return 0; 354 } 355 356 static int snd_hda_bus_dev_free(struct snd_device *device) 357 { 358 struct hda_bus *bus = device->device_data; 359 return snd_hda_bus_free(bus); 360 } 361 362 /** 363 * snd_hda_bus_new - create a HDA bus 364 * @card: the card entry 365 * @temp: the template for hda_bus information 366 * @busp: the pointer to store the created bus instance 367 * 368 * Returns 0 if successful, or a negative error code. 369 */ 370 int __devinit snd_hda_bus_new(struct snd_card *card, 371 const struct hda_bus_template *temp, 372 struct hda_bus **busp) 373 { 374 struct hda_bus *bus; 375 int err; 376 static struct snd_device_ops dev_ops = { 377 .dev_free = snd_hda_bus_dev_free, 378 }; 379 380 snd_assert(temp, return -EINVAL); 381 snd_assert(temp->ops.command && temp->ops.get_response, return -EINVAL); 382 383 if (busp) 384 *busp = NULL; 385 386 bus = kzalloc(sizeof(*bus), GFP_KERNEL); 387 if (bus == NULL) { 388 snd_printk(KERN_ERR "can't allocate struct hda_bus\n"); 389 return -ENOMEM; 390 } 391 392 bus->card = card; 393 bus->private_data = temp->private_data; 394 bus->pci = temp->pci; 395 bus->modelname = temp->modelname; 396 bus->ops = temp->ops; 397 398 mutex_init(&bus->cmd_mutex); 399 INIT_LIST_HEAD(&bus->codec_list); 400 401 err = snd_device_new(card, SNDRV_DEV_BUS, bus, &dev_ops); 402 if (err < 0) { 403 snd_hda_bus_free(bus); 404 return err; 405 } 406 if (busp) 407 *busp = bus; 408 return 0; 409 } 410 411 #ifdef CONFIG_SND_HDA_GENERIC 412 #define is_generic_config(codec) \ 413 (codec->bus->modelname && !strcmp(codec->bus->modelname, "generic")) 414 #else 415 #define is_generic_config(codec) 0 416 #endif 417 418 /* 419 * find a matching codec preset 420 */ 421 static const struct hda_codec_preset __devinit * 422 find_codec_preset(struct hda_codec *codec) 423 { 424 const struct hda_codec_preset **tbl, *preset; 425 426 if (is_generic_config(codec)) 427 return NULL; /* use the generic parser */ 428 429 for (tbl = hda_preset_tables; *tbl; tbl++) { 430 for (preset = *tbl; preset->id; preset++) { 431 u32 mask = preset->mask; 432 if (!mask) 433 mask = ~0; 434 if (preset->id == (codec->vendor_id & mask) && 435 (!preset->rev || 436 preset->rev == codec->revision_id)) 437 return preset; 438 } 439 } 440 return NULL; 441 } 442 443 /* 444 * snd_hda_get_codec_name - store the codec name 445 */ 446 void snd_hda_get_codec_name(struct hda_codec *codec, 447 char *name, int namelen) 448 { 449 const struct hda_vendor_id *c; 450 const char *vendor = NULL; 451 u16 vendor_id = codec->vendor_id >> 16; 452 char tmp[16]; 453 454 for (c = hda_vendor_ids; c->id; c++) { 455 if (c->id == vendor_id) { 456 vendor = c->name; 457 break; 458 } 459 } 460 if (!vendor) { 461 sprintf(tmp, "Generic %04x", vendor_id); 462 vendor = tmp; 463 } 464 if (codec->preset && codec->preset->name) 465 snprintf(name, namelen, "%s %s", vendor, codec->preset->name); 466 else 467 snprintf(name, namelen, "%s ID %x", vendor, 468 codec->vendor_id & 0xffff); 469 } 470 471 /* 472 * look for an AFG and MFG nodes 473 */ 474 static void __devinit setup_fg_nodes(struct hda_codec *codec) 475 { 476 int i, total_nodes; 477 hda_nid_t nid; 478 479 total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid); 480 for (i = 0; i < total_nodes; i++, nid++) { 481 unsigned int func; 482 func = snd_hda_param_read(codec, nid, AC_PAR_FUNCTION_TYPE); 483 switch (func & 0xff) { 484 case AC_GRP_AUDIO_FUNCTION: 485 codec->afg = nid; 486 break; 487 case AC_GRP_MODEM_FUNCTION: 488 codec->mfg = nid; 489 break; 490 default: 491 break; 492 } 493 } 494 } 495 496 /* 497 * read widget caps for each widget and store in cache 498 */ 499 static int read_widget_caps(struct hda_codec *codec, hda_nid_t fg_node) 500 { 501 int i; 502 hda_nid_t nid; 503 504 codec->num_nodes = snd_hda_get_sub_nodes(codec, fg_node, 505 &codec->start_nid); 506 codec->wcaps = kmalloc(codec->num_nodes * 4, GFP_KERNEL); 507 if (!codec->wcaps) 508 return -ENOMEM; 509 nid = codec->start_nid; 510 for (i = 0; i < codec->num_nodes; i++, nid++) 511 codec->wcaps[i] = snd_hda_param_read(codec, nid, 512 AC_PAR_AUDIO_WIDGET_CAP); 513 return 0; 514 } 515 516 517 static void init_hda_cache(struct hda_cache_rec *cache, 518 unsigned int record_size); 519 static void free_hda_cache(struct hda_cache_rec *cache); 520 521 /* 522 * codec destructor 523 */ 524 static void snd_hda_codec_free(struct hda_codec *codec) 525 { 526 if (!codec) 527 return; 528 #ifdef CONFIG_SND_HDA_POWER_SAVE 529 cancel_delayed_work(&codec->power_work); 530 flush_scheduled_work(); 531 #endif 532 list_del(&codec->list); 533 codec->bus->caddr_tbl[codec->addr] = NULL; 534 if (codec->patch_ops.free) 535 codec->patch_ops.free(codec); 536 free_hda_cache(&codec->amp_cache); 537 free_hda_cache(&codec->cmd_cache); 538 kfree(codec->wcaps); 539 kfree(codec); 540 } 541 542 /** 543 * snd_hda_codec_new - create a HDA codec 544 * @bus: the bus to assign 545 * @codec_addr: the codec address 546 * @codecp: the pointer to store the generated codec 547 * 548 * Returns 0 if successful, or a negative error code. 549 */ 550 int __devinit snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr, 551 struct hda_codec **codecp) 552 { 553 struct hda_codec *codec; 554 char component[13]; 555 int err; 556 557 snd_assert(bus, return -EINVAL); 558 snd_assert(codec_addr <= HDA_MAX_CODEC_ADDRESS, return -EINVAL); 559 560 if (bus->caddr_tbl[codec_addr]) { 561 snd_printk(KERN_ERR "hda_codec: " 562 "address 0x%x is already occupied\n", codec_addr); 563 return -EBUSY; 564 } 565 566 codec = kzalloc(sizeof(*codec), GFP_KERNEL); 567 if (codec == NULL) { 568 snd_printk(KERN_ERR "can't allocate struct hda_codec\n"); 569 return -ENOMEM; 570 } 571 572 codec->bus = bus; 573 codec->addr = codec_addr; 574 mutex_init(&codec->spdif_mutex); 575 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info)); 576 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head)); 577 578 #ifdef CONFIG_SND_HDA_POWER_SAVE 579 INIT_DELAYED_WORK(&codec->power_work, hda_power_work); 580 /* snd_hda_codec_new() marks the codec as power-up, and leave it as is. 581 * the caller has to power down appropriatley after initialization 582 * phase. 583 */ 584 hda_keep_power_on(codec); 585 #endif 586 587 list_add_tail(&codec->list, &bus->codec_list); 588 bus->caddr_tbl[codec_addr] = codec; 589 590 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT, 591 AC_PAR_VENDOR_ID); 592 if (codec->vendor_id == -1) 593 /* read again, hopefully the access method was corrected 594 * in the last read... 595 */ 596 codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT, 597 AC_PAR_VENDOR_ID); 598 codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT, 599 AC_PAR_SUBSYSTEM_ID); 600 codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT, 601 AC_PAR_REV_ID); 602 603 setup_fg_nodes(codec); 604 if (!codec->afg && !codec->mfg) { 605 snd_printdd("hda_codec: no AFG or MFG node found\n"); 606 snd_hda_codec_free(codec); 607 return -ENODEV; 608 } 609 610 if (read_widget_caps(codec, codec->afg ? codec->afg : codec->mfg) < 0) { 611 snd_printk(KERN_ERR "hda_codec: cannot malloc\n"); 612 snd_hda_codec_free(codec); 613 return -ENOMEM; 614 } 615 616 if (!codec->subsystem_id) { 617 hda_nid_t nid = codec->afg ? codec->afg : codec->mfg; 618 codec->subsystem_id = 619 snd_hda_codec_read(codec, nid, 0, 620 AC_VERB_GET_SUBSYSTEM_ID, 0); 621 } 622 623 codec->preset = find_codec_preset(codec); 624 /* audio codec should override the mixer name */ 625 if (codec->afg || !*bus->card->mixername) 626 snd_hda_get_codec_name(codec, bus->card->mixername, 627 sizeof(bus->card->mixername)); 628 629 #ifdef CONFIG_SND_HDA_GENERIC 630 if (is_generic_config(codec)) { 631 err = snd_hda_parse_generic_codec(codec); 632 goto patched; 633 } 634 #endif 635 if (codec->preset && codec->preset->patch) { 636 err = codec->preset->patch(codec); 637 goto patched; 638 } 639 640 /* call the default parser */ 641 #ifdef CONFIG_SND_HDA_GENERIC 642 err = snd_hda_parse_generic_codec(codec); 643 #else 644 printk(KERN_ERR "hda-codec: No codec parser is available\n"); 645 err = -ENODEV; 646 #endif 647 648 patched: 649 if (err < 0) { 650 snd_hda_codec_free(codec); 651 return err; 652 } 653 654 if (codec->patch_ops.unsol_event) 655 init_unsol_queue(bus); 656 657 snd_hda_codec_proc_new(codec); 658 #ifdef CONFIG_SND_HDA_HWDEP 659 snd_hda_create_hwdep(codec); 660 #endif 661 662 sprintf(component, "HDA:%08x", codec->vendor_id); 663 snd_component_add(codec->bus->card, component); 664 665 if (codecp) 666 *codecp = codec; 667 return 0; 668 } 669 670 /** 671 * snd_hda_codec_setup_stream - set up the codec for streaming 672 * @codec: the CODEC to set up 673 * @nid: the NID to set up 674 * @stream_tag: stream tag to pass, it's between 0x1 and 0xf. 675 * @channel_id: channel id to pass, zero based. 676 * @format: stream format. 677 */ 678 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, 679 u32 stream_tag, 680 int channel_id, int format) 681 { 682 if (!nid) 683 return; 684 685 snd_printdd("hda_codec_setup_stream: " 686 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n", 687 nid, stream_tag, channel_id, format); 688 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 689 (stream_tag << 4) | channel_id); 690 msleep(1); 691 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format); 692 } 693 694 /* 695 * amp access functions 696 */ 697 698 /* FIXME: more better hash key? */ 699 #define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24)) 700 #define INFO_AMP_CAPS (1<<0) 701 #define INFO_AMP_VOL(ch) (1 << (1 + (ch))) 702 703 /* initialize the hash table */ 704 static void __devinit init_hda_cache(struct hda_cache_rec *cache, 705 unsigned int record_size) 706 { 707 memset(cache, 0, sizeof(*cache)); 708 memset(cache->hash, 0xff, sizeof(cache->hash)); 709 cache->record_size = record_size; 710 } 711 712 static void free_hda_cache(struct hda_cache_rec *cache) 713 { 714 kfree(cache->buffer); 715 } 716 717 /* query the hash. allocate an entry if not found. */ 718 static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache, 719 u32 key) 720 { 721 u16 idx = key % (u16)ARRAY_SIZE(cache->hash); 722 u16 cur = cache->hash[idx]; 723 struct hda_cache_head *info; 724 725 while (cur != 0xffff) { 726 info = (struct hda_cache_head *)(cache->buffer + 727 cur * cache->record_size); 728 if (info->key == key) 729 return info; 730 cur = info->next; 731 } 732 733 /* add a new hash entry */ 734 if (cache->num_entries >= cache->size) { 735 /* reallocate the array */ 736 unsigned int new_size = cache->size + 64; 737 void *new_buffer; 738 new_buffer = kcalloc(new_size, cache->record_size, GFP_KERNEL); 739 if (!new_buffer) { 740 snd_printk(KERN_ERR "hda_codec: " 741 "can't malloc amp_info\n"); 742 return NULL; 743 } 744 if (cache->buffer) { 745 memcpy(new_buffer, cache->buffer, 746 cache->size * cache->record_size); 747 kfree(cache->buffer); 748 } 749 cache->size = new_size; 750 cache->buffer = new_buffer; 751 } 752 cur = cache->num_entries++; 753 info = (struct hda_cache_head *)(cache->buffer + 754 cur * cache->record_size); 755 info->key = key; 756 info->val = 0; 757 info->next = cache->hash[idx]; 758 cache->hash[idx] = cur; 759 760 return info; 761 } 762 763 /* query and allocate an amp hash entry */ 764 static inline struct hda_amp_info * 765 get_alloc_amp_hash(struct hda_codec *codec, u32 key) 766 { 767 return (struct hda_amp_info *)get_alloc_hash(&codec->amp_cache, key); 768 } 769 770 /* 771 * query AMP capabilities for the given widget and direction 772 */ 773 static u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction) 774 { 775 struct hda_amp_info *info; 776 777 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0)); 778 if (!info) 779 return 0; 780 if (!(info->head.val & INFO_AMP_CAPS)) { 781 if (!(get_wcaps(codec, nid) & AC_WCAP_AMP_OVRD)) 782 nid = codec->afg; 783 info->amp_caps = snd_hda_param_read(codec, nid, 784 direction == HDA_OUTPUT ? 785 AC_PAR_AMP_OUT_CAP : 786 AC_PAR_AMP_IN_CAP); 787 if (info->amp_caps) 788 info->head.val |= INFO_AMP_CAPS; 789 } 790 return info->amp_caps; 791 } 792 793 int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir, 794 unsigned int caps) 795 { 796 struct hda_amp_info *info; 797 798 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, dir, 0)); 799 if (!info) 800 return -EINVAL; 801 info->amp_caps = caps; 802 info->head.val |= INFO_AMP_CAPS; 803 return 0; 804 } 805 806 /* 807 * read the current volume to info 808 * if the cache exists, read the cache value. 809 */ 810 static unsigned int get_vol_mute(struct hda_codec *codec, 811 struct hda_amp_info *info, hda_nid_t nid, 812 int ch, int direction, int index) 813 { 814 u32 val, parm; 815 816 if (info->head.val & INFO_AMP_VOL(ch)) 817 return info->vol[ch]; 818 819 parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT; 820 parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT; 821 parm |= index; 822 val = snd_hda_codec_read(codec, nid, 0, 823 AC_VERB_GET_AMP_GAIN_MUTE, parm); 824 info->vol[ch] = val & 0xff; 825 info->head.val |= INFO_AMP_VOL(ch); 826 return info->vol[ch]; 827 } 828 829 /* 830 * write the current volume in info to the h/w and update the cache 831 */ 832 static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info, 833 hda_nid_t nid, int ch, int direction, int index, 834 int val) 835 { 836 u32 parm; 837 838 parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT; 839 parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT; 840 parm |= index << AC_AMP_SET_INDEX_SHIFT; 841 parm |= val; 842 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm); 843 info->vol[ch] = val; 844 } 845 846 /* 847 * read AMP value. The volume is between 0 to 0x7f, 0x80 = mute bit. 848 */ 849 int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch, 850 int direction, int index) 851 { 852 struct hda_amp_info *info; 853 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index)); 854 if (!info) 855 return 0; 856 return get_vol_mute(codec, info, nid, ch, direction, index); 857 } 858 859 /* 860 * update the AMP value, mask = bit mask to set, val = the value 861 */ 862 int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch, 863 int direction, int idx, int mask, int val) 864 { 865 struct hda_amp_info *info; 866 867 info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx)); 868 if (!info) 869 return 0; 870 val &= mask; 871 val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask; 872 if (info->vol[ch] == val) 873 return 0; 874 put_vol_mute(codec, info, nid, ch, direction, idx, val); 875 return 1; 876 } 877 878 /* 879 * update the AMP stereo with the same mask and value 880 */ 881 int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid, 882 int direction, int idx, int mask, int val) 883 { 884 int ch, ret = 0; 885 for (ch = 0; ch < 2; ch++) 886 ret |= snd_hda_codec_amp_update(codec, nid, ch, direction, 887 idx, mask, val); 888 return ret; 889 } 890 891 #ifdef SND_HDA_NEEDS_RESUME 892 /* resume the all amp commands from the cache */ 893 void snd_hda_codec_resume_amp(struct hda_codec *codec) 894 { 895 struct hda_amp_info *buffer = codec->amp_cache.buffer; 896 int i; 897 898 for (i = 0; i < codec->amp_cache.size; i++, buffer++) { 899 u32 key = buffer->head.key; 900 hda_nid_t nid; 901 unsigned int idx, dir, ch; 902 if (!key) 903 continue; 904 nid = key & 0xff; 905 idx = (key >> 16) & 0xff; 906 dir = (key >> 24) & 0xff; 907 for (ch = 0; ch < 2; ch++) { 908 if (!(buffer->head.val & INFO_AMP_VOL(ch))) 909 continue; 910 put_vol_mute(codec, buffer, nid, ch, dir, idx, 911 buffer->vol[ch]); 912 } 913 } 914 } 915 #endif /* SND_HDA_NEEDS_RESUME */ 916 917 /* 918 * AMP control callbacks 919 */ 920 /* retrieve parameters from private_value */ 921 #define get_amp_nid(kc) ((kc)->private_value & 0xffff) 922 #define get_amp_channels(kc) (((kc)->private_value >> 16) & 0x3) 923 #define get_amp_direction(kc) (((kc)->private_value >> 18) & 0x1) 924 #define get_amp_index(kc) (((kc)->private_value >> 19) & 0xf) 925 926 /* volume */ 927 int snd_hda_mixer_amp_volume_info(struct snd_kcontrol *kcontrol, 928 struct snd_ctl_elem_info *uinfo) 929 { 930 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 931 u16 nid = get_amp_nid(kcontrol); 932 u8 chs = get_amp_channels(kcontrol); 933 int dir = get_amp_direction(kcontrol); 934 u32 caps; 935 936 caps = query_amp_caps(codec, nid, dir); 937 /* num steps */ 938 caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT; 939 if (!caps) { 940 printk(KERN_WARNING "hda_codec: " 941 "num_steps = 0 for NID=0x%x\n", nid); 942 return -EINVAL; 943 } 944 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 945 uinfo->count = chs == 3 ? 2 : 1; 946 uinfo->value.integer.min = 0; 947 uinfo->value.integer.max = caps; 948 return 0; 949 } 950 951 int snd_hda_mixer_amp_volume_get(struct snd_kcontrol *kcontrol, 952 struct snd_ctl_elem_value *ucontrol) 953 { 954 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 955 hda_nid_t nid = get_amp_nid(kcontrol); 956 int chs = get_amp_channels(kcontrol); 957 int dir = get_amp_direction(kcontrol); 958 int idx = get_amp_index(kcontrol); 959 long *valp = ucontrol->value.integer.value; 960 961 if (chs & 1) 962 *valp++ = snd_hda_codec_amp_read(codec, nid, 0, dir, idx) 963 & HDA_AMP_VOLMASK; 964 if (chs & 2) 965 *valp = snd_hda_codec_amp_read(codec, nid, 1, dir, idx) 966 & HDA_AMP_VOLMASK; 967 return 0; 968 } 969 970 int snd_hda_mixer_amp_volume_put(struct snd_kcontrol *kcontrol, 971 struct snd_ctl_elem_value *ucontrol) 972 { 973 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 974 hda_nid_t nid = get_amp_nid(kcontrol); 975 int chs = get_amp_channels(kcontrol); 976 int dir = get_amp_direction(kcontrol); 977 int idx = get_amp_index(kcontrol); 978 long *valp = ucontrol->value.integer.value; 979 int change = 0; 980 981 snd_hda_power_up(codec); 982 if (chs & 1) { 983 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx, 984 0x7f, *valp); 985 valp++; 986 } 987 if (chs & 2) 988 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx, 989 0x7f, *valp); 990 snd_hda_power_down(codec); 991 return change; 992 } 993 994 int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag, 995 unsigned int size, unsigned int __user *_tlv) 996 { 997 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 998 hda_nid_t nid = get_amp_nid(kcontrol); 999 int dir = get_amp_direction(kcontrol); 1000 u32 caps, val1, val2; 1001 1002 if (size < 4 * sizeof(unsigned int)) 1003 return -ENOMEM; 1004 caps = query_amp_caps(codec, nid, dir); 1005 val2 = (caps & AC_AMPCAP_STEP_SIZE) >> AC_AMPCAP_STEP_SIZE_SHIFT; 1006 val2 = (val2 + 1) * 25; 1007 val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT); 1008 val1 = ((int)val1) * ((int)val2); 1009 if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv)) 1010 return -EFAULT; 1011 if (put_user(2 * sizeof(unsigned int), _tlv + 1)) 1012 return -EFAULT; 1013 if (put_user(val1, _tlv + 2)) 1014 return -EFAULT; 1015 if (put_user(val2, _tlv + 3)) 1016 return -EFAULT; 1017 return 0; 1018 } 1019 1020 /* switch */ 1021 int snd_hda_mixer_amp_switch_info(struct snd_kcontrol *kcontrol, 1022 struct snd_ctl_elem_info *uinfo) 1023 { 1024 int chs = get_amp_channels(kcontrol); 1025 1026 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1027 uinfo->count = chs == 3 ? 2 : 1; 1028 uinfo->value.integer.min = 0; 1029 uinfo->value.integer.max = 1; 1030 return 0; 1031 } 1032 1033 int snd_hda_mixer_amp_switch_get(struct snd_kcontrol *kcontrol, 1034 struct snd_ctl_elem_value *ucontrol) 1035 { 1036 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1037 hda_nid_t nid = get_amp_nid(kcontrol); 1038 int chs = get_amp_channels(kcontrol); 1039 int dir = get_amp_direction(kcontrol); 1040 int idx = get_amp_index(kcontrol); 1041 long *valp = ucontrol->value.integer.value; 1042 1043 if (chs & 1) 1044 *valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) & 1045 HDA_AMP_MUTE) ? 0 : 1; 1046 if (chs & 2) 1047 *valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) & 1048 HDA_AMP_MUTE) ? 0 : 1; 1049 return 0; 1050 } 1051 1052 int snd_hda_mixer_amp_switch_put(struct snd_kcontrol *kcontrol, 1053 struct snd_ctl_elem_value *ucontrol) 1054 { 1055 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1056 hda_nid_t nid = get_amp_nid(kcontrol); 1057 int chs = get_amp_channels(kcontrol); 1058 int dir = get_amp_direction(kcontrol); 1059 int idx = get_amp_index(kcontrol); 1060 long *valp = ucontrol->value.integer.value; 1061 int change = 0; 1062 1063 snd_hda_power_up(codec); 1064 if (chs & 1) { 1065 change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx, 1066 HDA_AMP_MUTE, 1067 *valp ? 0 : HDA_AMP_MUTE); 1068 valp++; 1069 } 1070 if (chs & 2) 1071 change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx, 1072 HDA_AMP_MUTE, 1073 *valp ? 0 : HDA_AMP_MUTE); 1074 #ifdef CONFIG_SND_HDA_POWER_SAVE 1075 if (codec->patch_ops.check_power_status) 1076 codec->patch_ops.check_power_status(codec, nid); 1077 #endif 1078 snd_hda_power_down(codec); 1079 return change; 1080 } 1081 1082 /* 1083 * bound volume controls 1084 * 1085 * bind multiple volumes (# indices, from 0) 1086 */ 1087 1088 #define AMP_VAL_IDX_SHIFT 19 1089 #define AMP_VAL_IDX_MASK (0x0f<<19) 1090 1091 int snd_hda_mixer_bind_switch_get(struct snd_kcontrol *kcontrol, 1092 struct snd_ctl_elem_value *ucontrol) 1093 { 1094 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1095 unsigned long pval; 1096 int err; 1097 1098 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1099 pval = kcontrol->private_value; 1100 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */ 1101 err = snd_hda_mixer_amp_switch_get(kcontrol, ucontrol); 1102 kcontrol->private_value = pval; 1103 mutex_unlock(&codec->spdif_mutex); 1104 return err; 1105 } 1106 1107 int snd_hda_mixer_bind_switch_put(struct snd_kcontrol *kcontrol, 1108 struct snd_ctl_elem_value *ucontrol) 1109 { 1110 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1111 unsigned long pval; 1112 int i, indices, err = 0, change = 0; 1113 1114 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1115 pval = kcontrol->private_value; 1116 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT; 1117 for (i = 0; i < indices; i++) { 1118 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) | 1119 (i << AMP_VAL_IDX_SHIFT); 1120 err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol); 1121 if (err < 0) 1122 break; 1123 change |= err; 1124 } 1125 kcontrol->private_value = pval; 1126 mutex_unlock(&codec->spdif_mutex); 1127 return err < 0 ? err : change; 1128 } 1129 1130 /* 1131 * generic bound volume/swtich controls 1132 */ 1133 int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol, 1134 struct snd_ctl_elem_info *uinfo) 1135 { 1136 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1137 struct hda_bind_ctls *c; 1138 int err; 1139 1140 c = (struct hda_bind_ctls *)kcontrol->private_value; 1141 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1142 kcontrol->private_value = *c->values; 1143 err = c->ops->info(kcontrol, uinfo); 1144 kcontrol->private_value = (long)c; 1145 mutex_unlock(&codec->spdif_mutex); 1146 return err; 1147 } 1148 1149 int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol, 1150 struct snd_ctl_elem_value *ucontrol) 1151 { 1152 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1153 struct hda_bind_ctls *c; 1154 int err; 1155 1156 c = (struct hda_bind_ctls *)kcontrol->private_value; 1157 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1158 kcontrol->private_value = *c->values; 1159 err = c->ops->get(kcontrol, ucontrol); 1160 kcontrol->private_value = (long)c; 1161 mutex_unlock(&codec->spdif_mutex); 1162 return err; 1163 } 1164 1165 int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol, 1166 struct snd_ctl_elem_value *ucontrol) 1167 { 1168 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1169 struct hda_bind_ctls *c; 1170 unsigned long *vals; 1171 int err = 0, change = 0; 1172 1173 c = (struct hda_bind_ctls *)kcontrol->private_value; 1174 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1175 for (vals = c->values; *vals; vals++) { 1176 kcontrol->private_value = *vals; 1177 err = c->ops->put(kcontrol, ucontrol); 1178 if (err < 0) 1179 break; 1180 change |= err; 1181 } 1182 kcontrol->private_value = (long)c; 1183 mutex_unlock(&codec->spdif_mutex); 1184 return err < 0 ? err : change; 1185 } 1186 1187 int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag, 1188 unsigned int size, unsigned int __user *tlv) 1189 { 1190 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1191 struct hda_bind_ctls *c; 1192 int err; 1193 1194 c = (struct hda_bind_ctls *)kcontrol->private_value; 1195 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1196 kcontrol->private_value = *c->values; 1197 err = c->ops->tlv(kcontrol, op_flag, size, tlv); 1198 kcontrol->private_value = (long)c; 1199 mutex_unlock(&codec->spdif_mutex); 1200 return err; 1201 } 1202 1203 struct hda_ctl_ops snd_hda_bind_vol = { 1204 .info = snd_hda_mixer_amp_volume_info, 1205 .get = snd_hda_mixer_amp_volume_get, 1206 .put = snd_hda_mixer_amp_volume_put, 1207 .tlv = snd_hda_mixer_amp_tlv 1208 }; 1209 1210 struct hda_ctl_ops snd_hda_bind_sw = { 1211 .info = snd_hda_mixer_amp_switch_info, 1212 .get = snd_hda_mixer_amp_switch_get, 1213 .put = snd_hda_mixer_amp_switch_put, 1214 .tlv = snd_hda_mixer_amp_tlv 1215 }; 1216 1217 /* 1218 * SPDIF out controls 1219 */ 1220 1221 static int snd_hda_spdif_mask_info(struct snd_kcontrol *kcontrol, 1222 struct snd_ctl_elem_info *uinfo) 1223 { 1224 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1225 uinfo->count = 1; 1226 return 0; 1227 } 1228 1229 static int snd_hda_spdif_cmask_get(struct snd_kcontrol *kcontrol, 1230 struct snd_ctl_elem_value *ucontrol) 1231 { 1232 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL | 1233 IEC958_AES0_NONAUDIO | 1234 IEC958_AES0_CON_EMPHASIS_5015 | 1235 IEC958_AES0_CON_NOT_COPYRIGHT; 1236 ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY | 1237 IEC958_AES1_CON_ORIGINAL; 1238 return 0; 1239 } 1240 1241 static int snd_hda_spdif_pmask_get(struct snd_kcontrol *kcontrol, 1242 struct snd_ctl_elem_value *ucontrol) 1243 { 1244 ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL | 1245 IEC958_AES0_NONAUDIO | 1246 IEC958_AES0_PRO_EMPHASIS_5015; 1247 return 0; 1248 } 1249 1250 static int snd_hda_spdif_default_get(struct snd_kcontrol *kcontrol, 1251 struct snd_ctl_elem_value *ucontrol) 1252 { 1253 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1254 1255 ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff; 1256 ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff; 1257 ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff; 1258 ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff; 1259 1260 return 0; 1261 } 1262 1263 /* convert from SPDIF status bits to HDA SPDIF bits 1264 * bit 0 (DigEn) is always set zero (to be filled later) 1265 */ 1266 static unsigned short convert_from_spdif_status(unsigned int sbits) 1267 { 1268 unsigned short val = 0; 1269 1270 if (sbits & IEC958_AES0_PROFESSIONAL) 1271 val |= AC_DIG1_PROFESSIONAL; 1272 if (sbits & IEC958_AES0_NONAUDIO) 1273 val |= AC_DIG1_NONAUDIO; 1274 if (sbits & IEC958_AES0_PROFESSIONAL) { 1275 if ((sbits & IEC958_AES0_PRO_EMPHASIS) == 1276 IEC958_AES0_PRO_EMPHASIS_5015) 1277 val |= AC_DIG1_EMPHASIS; 1278 } else { 1279 if ((sbits & IEC958_AES0_CON_EMPHASIS) == 1280 IEC958_AES0_CON_EMPHASIS_5015) 1281 val |= AC_DIG1_EMPHASIS; 1282 if (!(sbits & IEC958_AES0_CON_NOT_COPYRIGHT)) 1283 val |= AC_DIG1_COPYRIGHT; 1284 if (sbits & (IEC958_AES1_CON_ORIGINAL << 8)) 1285 val |= AC_DIG1_LEVEL; 1286 val |= sbits & (IEC958_AES1_CON_CATEGORY << 8); 1287 } 1288 return val; 1289 } 1290 1291 /* convert to SPDIF status bits from HDA SPDIF bits 1292 */ 1293 static unsigned int convert_to_spdif_status(unsigned short val) 1294 { 1295 unsigned int sbits = 0; 1296 1297 if (val & AC_DIG1_NONAUDIO) 1298 sbits |= IEC958_AES0_NONAUDIO; 1299 if (val & AC_DIG1_PROFESSIONAL) 1300 sbits |= IEC958_AES0_PROFESSIONAL; 1301 if (sbits & IEC958_AES0_PROFESSIONAL) { 1302 if (sbits & AC_DIG1_EMPHASIS) 1303 sbits |= IEC958_AES0_PRO_EMPHASIS_5015; 1304 } else { 1305 if (val & AC_DIG1_EMPHASIS) 1306 sbits |= IEC958_AES0_CON_EMPHASIS_5015; 1307 if (!(val & AC_DIG1_COPYRIGHT)) 1308 sbits |= IEC958_AES0_CON_NOT_COPYRIGHT; 1309 if (val & AC_DIG1_LEVEL) 1310 sbits |= (IEC958_AES1_CON_ORIGINAL << 8); 1311 sbits |= val & (0x7f << 8); 1312 } 1313 return sbits; 1314 } 1315 1316 static int snd_hda_spdif_default_put(struct snd_kcontrol *kcontrol, 1317 struct snd_ctl_elem_value *ucontrol) 1318 { 1319 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1320 hda_nid_t nid = kcontrol->private_value; 1321 unsigned short val; 1322 int change; 1323 1324 mutex_lock(&codec->spdif_mutex); 1325 codec->spdif_status = ucontrol->value.iec958.status[0] | 1326 ((unsigned int)ucontrol->value.iec958.status[1] << 8) | 1327 ((unsigned int)ucontrol->value.iec958.status[2] << 16) | 1328 ((unsigned int)ucontrol->value.iec958.status[3] << 24); 1329 val = convert_from_spdif_status(codec->spdif_status); 1330 val |= codec->spdif_ctls & 1; 1331 change = codec->spdif_ctls != val; 1332 codec->spdif_ctls = val; 1333 1334 if (change) { 1335 snd_hda_codec_write_cache(codec, nid, 0, 1336 AC_VERB_SET_DIGI_CONVERT_1, 1337 val & 0xff); 1338 snd_hda_codec_write_cache(codec, nid, 0, 1339 AC_VERB_SET_DIGI_CONVERT_2, 1340 val >> 8); 1341 } 1342 1343 mutex_unlock(&codec->spdif_mutex); 1344 return change; 1345 } 1346 1347 #define snd_hda_spdif_out_switch_info snd_ctl_boolean_mono_info 1348 1349 static int snd_hda_spdif_out_switch_get(struct snd_kcontrol *kcontrol, 1350 struct snd_ctl_elem_value *ucontrol) 1351 { 1352 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1353 1354 ucontrol->value.integer.value[0] = codec->spdif_ctls & AC_DIG1_ENABLE; 1355 return 0; 1356 } 1357 1358 static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol, 1359 struct snd_ctl_elem_value *ucontrol) 1360 { 1361 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1362 hda_nid_t nid = kcontrol->private_value; 1363 unsigned short val; 1364 int change; 1365 1366 mutex_lock(&codec->spdif_mutex); 1367 val = codec->spdif_ctls & ~AC_DIG1_ENABLE; 1368 if (ucontrol->value.integer.value[0]) 1369 val |= AC_DIG1_ENABLE; 1370 change = codec->spdif_ctls != val; 1371 if (change) { 1372 codec->spdif_ctls = val; 1373 snd_hda_codec_write_cache(codec, nid, 0, 1374 AC_VERB_SET_DIGI_CONVERT_1, 1375 val & 0xff); 1376 /* unmute amp switch (if any) */ 1377 if ((get_wcaps(codec, nid) & AC_WCAP_OUT_AMP) && 1378 (val & AC_DIG1_ENABLE)) 1379 snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0, 1380 HDA_AMP_MUTE, 0); 1381 } 1382 mutex_unlock(&codec->spdif_mutex); 1383 return change; 1384 } 1385 1386 static struct snd_kcontrol_new dig_mixes[] = { 1387 { 1388 .access = SNDRV_CTL_ELEM_ACCESS_READ, 1389 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1390 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK), 1391 .info = snd_hda_spdif_mask_info, 1392 .get = snd_hda_spdif_cmask_get, 1393 }, 1394 { 1395 .access = SNDRV_CTL_ELEM_ACCESS_READ, 1396 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1397 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK), 1398 .info = snd_hda_spdif_mask_info, 1399 .get = snd_hda_spdif_pmask_get, 1400 }, 1401 { 1402 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1403 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), 1404 .info = snd_hda_spdif_mask_info, 1405 .get = snd_hda_spdif_default_get, 1406 .put = snd_hda_spdif_default_put, 1407 }, 1408 { 1409 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1410 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,SWITCH), 1411 .info = snd_hda_spdif_out_switch_info, 1412 .get = snd_hda_spdif_out_switch_get, 1413 .put = snd_hda_spdif_out_switch_put, 1414 }, 1415 { } /* end */ 1416 }; 1417 1418 /** 1419 * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls 1420 * @codec: the HDA codec 1421 * @nid: audio out widget NID 1422 * 1423 * Creates controls related with the SPDIF output. 1424 * Called from each patch supporting the SPDIF out. 1425 * 1426 * Returns 0 if successful, or a negative error code. 1427 */ 1428 int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid) 1429 { 1430 int err; 1431 struct snd_kcontrol *kctl; 1432 struct snd_kcontrol_new *dig_mix; 1433 1434 for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { 1435 kctl = snd_ctl_new1(dig_mix, codec); 1436 kctl->private_value = nid; 1437 err = snd_ctl_add(codec->bus->card, kctl); 1438 if (err < 0) 1439 return err; 1440 } 1441 codec->spdif_ctls = 1442 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0); 1443 codec->spdif_status = convert_to_spdif_status(codec->spdif_ctls); 1444 return 0; 1445 } 1446 1447 /* 1448 * SPDIF input 1449 */ 1450 1451 #define snd_hda_spdif_in_switch_info snd_hda_spdif_out_switch_info 1452 1453 static int snd_hda_spdif_in_switch_get(struct snd_kcontrol *kcontrol, 1454 struct snd_ctl_elem_value *ucontrol) 1455 { 1456 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1457 1458 ucontrol->value.integer.value[0] = codec->spdif_in_enable; 1459 return 0; 1460 } 1461 1462 static int snd_hda_spdif_in_switch_put(struct snd_kcontrol *kcontrol, 1463 struct snd_ctl_elem_value *ucontrol) 1464 { 1465 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1466 hda_nid_t nid = kcontrol->private_value; 1467 unsigned int val = !!ucontrol->value.integer.value[0]; 1468 int change; 1469 1470 mutex_lock(&codec->spdif_mutex); 1471 change = codec->spdif_in_enable != val; 1472 if (change) { 1473 codec->spdif_in_enable = val; 1474 snd_hda_codec_write_cache(codec, nid, 0, 1475 AC_VERB_SET_DIGI_CONVERT_1, val); 1476 } 1477 mutex_unlock(&codec->spdif_mutex); 1478 return change; 1479 } 1480 1481 static int snd_hda_spdif_in_status_get(struct snd_kcontrol *kcontrol, 1482 struct snd_ctl_elem_value *ucontrol) 1483 { 1484 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 1485 hda_nid_t nid = kcontrol->private_value; 1486 unsigned short val; 1487 unsigned int sbits; 1488 1489 val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0); 1490 sbits = convert_to_spdif_status(val); 1491 ucontrol->value.iec958.status[0] = sbits; 1492 ucontrol->value.iec958.status[1] = sbits >> 8; 1493 ucontrol->value.iec958.status[2] = sbits >> 16; 1494 ucontrol->value.iec958.status[3] = sbits >> 24; 1495 return 0; 1496 } 1497 1498 static struct snd_kcontrol_new dig_in_ctls[] = { 1499 { 1500 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1501 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), 1502 .info = snd_hda_spdif_in_switch_info, 1503 .get = snd_hda_spdif_in_switch_get, 1504 .put = snd_hda_spdif_in_switch_put, 1505 }, 1506 { 1507 .access = SNDRV_CTL_ELEM_ACCESS_READ, 1508 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1509 .name = SNDRV_CTL_NAME_IEC958("",CAPTURE,DEFAULT), 1510 .info = snd_hda_spdif_mask_info, 1511 .get = snd_hda_spdif_in_status_get, 1512 }, 1513 { } /* end */ 1514 }; 1515 1516 /** 1517 * snd_hda_create_spdif_in_ctls - create Input SPDIF-related controls 1518 * @codec: the HDA codec 1519 * @nid: audio in widget NID 1520 * 1521 * Creates controls related with the SPDIF input. 1522 * Called from each patch supporting the SPDIF in. 1523 * 1524 * Returns 0 if successful, or a negative error code. 1525 */ 1526 int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid) 1527 { 1528 int err; 1529 struct snd_kcontrol *kctl; 1530 struct snd_kcontrol_new *dig_mix; 1531 1532 for (dig_mix = dig_in_ctls; dig_mix->name; dig_mix++) { 1533 kctl = snd_ctl_new1(dig_mix, codec); 1534 kctl->private_value = nid; 1535 err = snd_ctl_add(codec->bus->card, kctl); 1536 if (err < 0) 1537 return err; 1538 } 1539 codec->spdif_in_enable = 1540 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_DIGI_CONVERT, 0) & 1541 AC_DIG1_ENABLE; 1542 return 0; 1543 } 1544 1545 #ifdef SND_HDA_NEEDS_RESUME 1546 /* 1547 * command cache 1548 */ 1549 1550 /* build a 32bit cache key with the widget id and the command parameter */ 1551 #define build_cmd_cache_key(nid, verb) ((verb << 8) | nid) 1552 #define get_cmd_cache_nid(key) ((key) & 0xff) 1553 #define get_cmd_cache_cmd(key) (((key) >> 8) & 0xffff) 1554 1555 /** 1556 * snd_hda_codec_write_cache - send a single command with caching 1557 * @codec: the HDA codec 1558 * @nid: NID to send the command 1559 * @direct: direct flag 1560 * @verb: the verb to send 1561 * @parm: the parameter for the verb 1562 * 1563 * Send a single command without waiting for response. 1564 * 1565 * Returns 0 if successful, or a negative error code. 1566 */ 1567 int snd_hda_codec_write_cache(struct hda_codec *codec, hda_nid_t nid, 1568 int direct, unsigned int verb, unsigned int parm) 1569 { 1570 int err; 1571 snd_hda_power_up(codec); 1572 mutex_lock(&codec->bus->cmd_mutex); 1573 err = codec->bus->ops.command(codec, nid, direct, verb, parm); 1574 if (!err) { 1575 struct hda_cache_head *c; 1576 u32 key = build_cmd_cache_key(nid, verb); 1577 c = get_alloc_hash(&codec->cmd_cache, key); 1578 if (c) 1579 c->val = parm; 1580 } 1581 mutex_unlock(&codec->bus->cmd_mutex); 1582 snd_hda_power_down(codec); 1583 return err; 1584 } 1585 1586 /* resume the all commands from the cache */ 1587 void snd_hda_codec_resume_cache(struct hda_codec *codec) 1588 { 1589 struct hda_cache_head *buffer = codec->cmd_cache.buffer; 1590 int i; 1591 1592 for (i = 0; i < codec->cmd_cache.size; i++, buffer++) { 1593 u32 key = buffer->key; 1594 if (!key) 1595 continue; 1596 snd_hda_codec_write(codec, get_cmd_cache_nid(key), 0, 1597 get_cmd_cache_cmd(key), buffer->val); 1598 } 1599 } 1600 1601 /** 1602 * snd_hda_sequence_write_cache - sequence writes with caching 1603 * @codec: the HDA codec 1604 * @seq: VERB array to send 1605 * 1606 * Send the commands sequentially from the given array. 1607 * Thte commands are recorded on cache for power-save and resume. 1608 * The array must be terminated with NID=0. 1609 */ 1610 void snd_hda_sequence_write_cache(struct hda_codec *codec, 1611 const struct hda_verb *seq) 1612 { 1613 for (; seq->nid; seq++) 1614 snd_hda_codec_write_cache(codec, seq->nid, 0, seq->verb, 1615 seq->param); 1616 } 1617 #endif /* SND_HDA_NEEDS_RESUME */ 1618 1619 /* 1620 * set power state of the codec 1621 */ 1622 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, 1623 unsigned int power_state) 1624 { 1625 hda_nid_t nid; 1626 int i; 1627 1628 snd_hda_codec_write(codec, fg, 0, AC_VERB_SET_POWER_STATE, 1629 power_state); 1630 1631 nid = codec->start_nid; 1632 for (i = 0; i < codec->num_nodes; i++, nid++) { 1633 if (get_wcaps(codec, nid) & AC_WCAP_POWER) { 1634 unsigned int pincap; 1635 /* 1636 * don't power down the widget if it controls eapd 1637 * and EAPD_BTLENABLE is set. 1638 */ 1639 pincap = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP); 1640 if (pincap & AC_PINCAP_EAPD) { 1641 int eapd = snd_hda_codec_read(codec, nid, 1642 0, AC_VERB_GET_EAPD_BTLENABLE, 0); 1643 eapd &= 0x02; 1644 if (power_state == AC_PWRST_D3 && eapd) 1645 continue; 1646 } 1647 snd_hda_codec_write(codec, nid, 0, 1648 AC_VERB_SET_POWER_STATE, 1649 power_state); 1650 } 1651 } 1652 1653 if (power_state == AC_PWRST_D0) { 1654 unsigned long end_time; 1655 int state; 1656 msleep(10); 1657 /* wait until the codec reachs to D0 */ 1658 end_time = jiffies + msecs_to_jiffies(500); 1659 do { 1660 state = snd_hda_codec_read(codec, fg, 0, 1661 AC_VERB_GET_POWER_STATE, 0); 1662 if (state == power_state) 1663 break; 1664 msleep(1); 1665 } while (time_after_eq(end_time, jiffies)); 1666 } 1667 } 1668 1669 #ifdef SND_HDA_NEEDS_RESUME 1670 /* 1671 * call suspend and power-down; used both from PM and power-save 1672 */ 1673 static void hda_call_codec_suspend(struct hda_codec *codec) 1674 { 1675 if (codec->patch_ops.suspend) 1676 codec->patch_ops.suspend(codec, PMSG_SUSPEND); 1677 hda_set_power_state(codec, 1678 codec->afg ? codec->afg : codec->mfg, 1679 AC_PWRST_D3); 1680 #ifdef CONFIG_SND_HDA_POWER_SAVE 1681 cancel_delayed_work(&codec->power_work); 1682 codec->power_on = 0; 1683 codec->power_transition = 0; 1684 #endif 1685 } 1686 1687 /* 1688 * kick up codec; used both from PM and power-save 1689 */ 1690 static void hda_call_codec_resume(struct hda_codec *codec) 1691 { 1692 hda_set_power_state(codec, 1693 codec->afg ? codec->afg : codec->mfg, 1694 AC_PWRST_D0); 1695 if (codec->patch_ops.resume) 1696 codec->patch_ops.resume(codec); 1697 else { 1698 if (codec->patch_ops.init) 1699 codec->patch_ops.init(codec); 1700 snd_hda_codec_resume_amp(codec); 1701 snd_hda_codec_resume_cache(codec); 1702 } 1703 } 1704 #endif /* SND_HDA_NEEDS_RESUME */ 1705 1706 1707 /** 1708 * snd_hda_build_controls - build mixer controls 1709 * @bus: the BUS 1710 * 1711 * Creates mixer controls for each codec included in the bus. 1712 * 1713 * Returns 0 if successful, otherwise a negative error code. 1714 */ 1715 int __devinit snd_hda_build_controls(struct hda_bus *bus) 1716 { 1717 struct hda_codec *codec; 1718 1719 list_for_each_entry(codec, &bus->codec_list, list) { 1720 int err = 0; 1721 /* fake as if already powered-on */ 1722 hda_keep_power_on(codec); 1723 /* then fire up */ 1724 hda_set_power_state(codec, 1725 codec->afg ? codec->afg : codec->mfg, 1726 AC_PWRST_D0); 1727 /* continue to initialize... */ 1728 if (codec->patch_ops.init) 1729 err = codec->patch_ops.init(codec); 1730 if (!err && codec->patch_ops.build_controls) 1731 err = codec->patch_ops.build_controls(codec); 1732 snd_hda_power_down(codec); 1733 if (err < 0) 1734 return err; 1735 } 1736 1737 return 0; 1738 } 1739 1740 /* 1741 * stream formats 1742 */ 1743 struct hda_rate_tbl { 1744 unsigned int hz; 1745 unsigned int alsa_bits; 1746 unsigned int hda_fmt; 1747 }; 1748 1749 static struct hda_rate_tbl rate_bits[] = { 1750 /* rate in Hz, ALSA rate bitmask, HDA format value */ 1751 1752 /* autodetected value used in snd_hda_query_supported_pcm */ 1753 { 8000, SNDRV_PCM_RATE_8000, 0x0500 }, /* 1/6 x 48 */ 1754 { 11025, SNDRV_PCM_RATE_11025, 0x4300 }, /* 1/4 x 44 */ 1755 { 16000, SNDRV_PCM_RATE_16000, 0x0200 }, /* 1/3 x 48 */ 1756 { 22050, SNDRV_PCM_RATE_22050, 0x4100 }, /* 1/2 x 44 */ 1757 { 32000, SNDRV_PCM_RATE_32000, 0x0a00 }, /* 2/3 x 48 */ 1758 { 44100, SNDRV_PCM_RATE_44100, 0x4000 }, /* 44 */ 1759 { 48000, SNDRV_PCM_RATE_48000, 0x0000 }, /* 48 */ 1760 { 88200, SNDRV_PCM_RATE_88200, 0x4800 }, /* 2 x 44 */ 1761 { 96000, SNDRV_PCM_RATE_96000, 0x0800 }, /* 2 x 48 */ 1762 { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */ 1763 { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */ 1764 #define AC_PAR_PCM_RATE_BITS 11 1765 /* up to bits 10, 384kHZ isn't supported properly */ 1766 1767 /* not autodetected value */ 1768 { 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */ 1769 1770 { 0 } /* terminator */ 1771 }; 1772 1773 /** 1774 * snd_hda_calc_stream_format - calculate format bitset 1775 * @rate: the sample rate 1776 * @channels: the number of channels 1777 * @format: the PCM format (SNDRV_PCM_FORMAT_XXX) 1778 * @maxbps: the max. bps 1779 * 1780 * Calculate the format bitset from the given rate, channels and th PCM format. 1781 * 1782 * Return zero if invalid. 1783 */ 1784 unsigned int snd_hda_calc_stream_format(unsigned int rate, 1785 unsigned int channels, 1786 unsigned int format, 1787 unsigned int maxbps) 1788 { 1789 int i; 1790 unsigned int val = 0; 1791 1792 for (i = 0; rate_bits[i].hz; i++) 1793 if (rate_bits[i].hz == rate) { 1794 val = rate_bits[i].hda_fmt; 1795 break; 1796 } 1797 if (!rate_bits[i].hz) { 1798 snd_printdd("invalid rate %d\n", rate); 1799 return 0; 1800 } 1801 1802 if (channels == 0 || channels > 8) { 1803 snd_printdd("invalid channels %d\n", channels); 1804 return 0; 1805 } 1806 val |= channels - 1; 1807 1808 switch (snd_pcm_format_width(format)) { 1809 case 8: val |= 0x00; break; 1810 case 16: val |= 0x10; break; 1811 case 20: 1812 case 24: 1813 case 32: 1814 if (maxbps >= 32) 1815 val |= 0x40; 1816 else if (maxbps >= 24) 1817 val |= 0x30; 1818 else 1819 val |= 0x20; 1820 break; 1821 default: 1822 snd_printdd("invalid format width %d\n", 1823 snd_pcm_format_width(format)); 1824 return 0; 1825 } 1826 1827 return val; 1828 } 1829 1830 /** 1831 * snd_hda_query_supported_pcm - query the supported PCM rates and formats 1832 * @codec: the HDA codec 1833 * @nid: NID to query 1834 * @ratesp: the pointer to store the detected rate bitflags 1835 * @formatsp: the pointer to store the detected formats 1836 * @bpsp: the pointer to store the detected format widths 1837 * 1838 * Queries the supported PCM rates and formats. The NULL @ratesp, @formatsp 1839 * or @bsps argument is ignored. 1840 * 1841 * Returns 0 if successful, otherwise a negative error code. 1842 */ 1843 int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid, 1844 u32 *ratesp, u64 *formatsp, unsigned int *bpsp) 1845 { 1846 int i; 1847 unsigned int val, streams; 1848 1849 val = 0; 1850 if (nid != codec->afg && 1851 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) { 1852 val = snd_hda_param_read(codec, nid, AC_PAR_PCM); 1853 if (val == -1) 1854 return -EIO; 1855 } 1856 if (!val) 1857 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM); 1858 1859 if (ratesp) { 1860 u32 rates = 0; 1861 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) { 1862 if (val & (1 << i)) 1863 rates |= rate_bits[i].alsa_bits; 1864 } 1865 *ratesp = rates; 1866 } 1867 1868 if (formatsp || bpsp) { 1869 u64 formats = 0; 1870 unsigned int bps; 1871 unsigned int wcaps; 1872 1873 wcaps = get_wcaps(codec, nid); 1874 streams = snd_hda_param_read(codec, nid, AC_PAR_STREAM); 1875 if (streams == -1) 1876 return -EIO; 1877 if (!streams) { 1878 streams = snd_hda_param_read(codec, codec->afg, 1879 AC_PAR_STREAM); 1880 if (streams == -1) 1881 return -EIO; 1882 } 1883 1884 bps = 0; 1885 if (streams & AC_SUPFMT_PCM) { 1886 if (val & AC_SUPPCM_BITS_8) { 1887 formats |= SNDRV_PCM_FMTBIT_U8; 1888 bps = 8; 1889 } 1890 if (val & AC_SUPPCM_BITS_16) { 1891 formats |= SNDRV_PCM_FMTBIT_S16_LE; 1892 bps = 16; 1893 } 1894 if (wcaps & AC_WCAP_DIGITAL) { 1895 if (val & AC_SUPPCM_BITS_32) 1896 formats |= SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE; 1897 if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24)) 1898 formats |= SNDRV_PCM_FMTBIT_S32_LE; 1899 if (val & AC_SUPPCM_BITS_24) 1900 bps = 24; 1901 else if (val & AC_SUPPCM_BITS_20) 1902 bps = 20; 1903 } else if (val & (AC_SUPPCM_BITS_20|AC_SUPPCM_BITS_24| 1904 AC_SUPPCM_BITS_32)) { 1905 formats |= SNDRV_PCM_FMTBIT_S32_LE; 1906 if (val & AC_SUPPCM_BITS_32) 1907 bps = 32; 1908 else if (val & AC_SUPPCM_BITS_24) 1909 bps = 24; 1910 else if (val & AC_SUPPCM_BITS_20) 1911 bps = 20; 1912 } 1913 } 1914 else if (streams == AC_SUPFMT_FLOAT32) { 1915 /* should be exclusive */ 1916 formats |= SNDRV_PCM_FMTBIT_FLOAT_LE; 1917 bps = 32; 1918 } else if (streams == AC_SUPFMT_AC3) { 1919 /* should be exclusive */ 1920 /* temporary hack: we have still no proper support 1921 * for the direct AC3 stream... 1922 */ 1923 formats |= SNDRV_PCM_FMTBIT_U8; 1924 bps = 8; 1925 } 1926 if (formatsp) 1927 *formatsp = formats; 1928 if (bpsp) 1929 *bpsp = bps; 1930 } 1931 1932 return 0; 1933 } 1934 1935 /** 1936 * snd_hda_is_supported_format - check whether the given node supports 1937 * the format val 1938 * 1939 * Returns 1 if supported, 0 if not. 1940 */ 1941 int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid, 1942 unsigned int format) 1943 { 1944 int i; 1945 unsigned int val = 0, rate, stream; 1946 1947 if (nid != codec->afg && 1948 (get_wcaps(codec, nid) & AC_WCAP_FORMAT_OVRD)) { 1949 val = snd_hda_param_read(codec, nid, AC_PAR_PCM); 1950 if (val == -1) 1951 return 0; 1952 } 1953 if (!val) { 1954 val = snd_hda_param_read(codec, codec->afg, AC_PAR_PCM); 1955 if (val == -1) 1956 return 0; 1957 } 1958 1959 rate = format & 0xff00; 1960 for (i = 0; i < AC_PAR_PCM_RATE_BITS; i++) 1961 if (rate_bits[i].hda_fmt == rate) { 1962 if (val & (1 << i)) 1963 break; 1964 return 0; 1965 } 1966 if (i >= AC_PAR_PCM_RATE_BITS) 1967 return 0; 1968 1969 stream = snd_hda_param_read(codec, nid, AC_PAR_STREAM); 1970 if (stream == -1) 1971 return 0; 1972 if (!stream && nid != codec->afg) 1973 stream = snd_hda_param_read(codec, codec->afg, AC_PAR_STREAM); 1974 if (!stream || stream == -1) 1975 return 0; 1976 1977 if (stream & AC_SUPFMT_PCM) { 1978 switch (format & 0xf0) { 1979 case 0x00: 1980 if (!(val & AC_SUPPCM_BITS_8)) 1981 return 0; 1982 break; 1983 case 0x10: 1984 if (!(val & AC_SUPPCM_BITS_16)) 1985 return 0; 1986 break; 1987 case 0x20: 1988 if (!(val & AC_SUPPCM_BITS_20)) 1989 return 0; 1990 break; 1991 case 0x30: 1992 if (!(val & AC_SUPPCM_BITS_24)) 1993 return 0; 1994 break; 1995 case 0x40: 1996 if (!(val & AC_SUPPCM_BITS_32)) 1997 return 0; 1998 break; 1999 default: 2000 return 0; 2001 } 2002 } else { 2003 /* FIXME: check for float32 and AC3? */ 2004 } 2005 2006 return 1; 2007 } 2008 2009 /* 2010 * PCM stuff 2011 */ 2012 static int hda_pcm_default_open_close(struct hda_pcm_stream *hinfo, 2013 struct hda_codec *codec, 2014 struct snd_pcm_substream *substream) 2015 { 2016 return 0; 2017 } 2018 2019 static int hda_pcm_default_prepare(struct hda_pcm_stream *hinfo, 2020 struct hda_codec *codec, 2021 unsigned int stream_tag, 2022 unsigned int format, 2023 struct snd_pcm_substream *substream) 2024 { 2025 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); 2026 return 0; 2027 } 2028 2029 static int hda_pcm_default_cleanup(struct hda_pcm_stream *hinfo, 2030 struct hda_codec *codec, 2031 struct snd_pcm_substream *substream) 2032 { 2033 snd_hda_codec_setup_stream(codec, hinfo->nid, 0, 0, 0); 2034 return 0; 2035 } 2036 2037 static int __devinit set_pcm_default_values(struct hda_codec *codec, 2038 struct hda_pcm_stream *info) 2039 { 2040 /* query support PCM information from the given NID */ 2041 if (info->nid && (!info->rates || !info->formats)) { 2042 snd_hda_query_supported_pcm(codec, info->nid, 2043 info->rates ? NULL : &info->rates, 2044 info->formats ? NULL : &info->formats, 2045 info->maxbps ? NULL : &info->maxbps); 2046 } 2047 if (info->ops.open == NULL) 2048 info->ops.open = hda_pcm_default_open_close; 2049 if (info->ops.close == NULL) 2050 info->ops.close = hda_pcm_default_open_close; 2051 if (info->ops.prepare == NULL) { 2052 snd_assert(info->nid, return -EINVAL); 2053 info->ops.prepare = hda_pcm_default_prepare; 2054 } 2055 if (info->ops.cleanup == NULL) { 2056 snd_assert(info->nid, return -EINVAL); 2057 info->ops.cleanup = hda_pcm_default_cleanup; 2058 } 2059 return 0; 2060 } 2061 2062 /** 2063 * snd_hda_build_pcms - build PCM information 2064 * @bus: the BUS 2065 * 2066 * Create PCM information for each codec included in the bus. 2067 * 2068 * The build_pcms codec patch is requested to set up codec->num_pcms and 2069 * codec->pcm_info properly. The array is referred by the top-level driver 2070 * to create its PCM instances. 2071 * The allocated codec->pcm_info should be released in codec->patch_ops.free 2072 * callback. 2073 * 2074 * At least, substreams, channels_min and channels_max must be filled for 2075 * each stream. substreams = 0 indicates that the stream doesn't exist. 2076 * When rates and/or formats are zero, the supported values are queried 2077 * from the given nid. The nid is used also by the default ops.prepare 2078 * and ops.cleanup callbacks. 2079 * 2080 * The driver needs to call ops.open in its open callback. Similarly, 2081 * ops.close is supposed to be called in the close callback. 2082 * ops.prepare should be called in the prepare or hw_params callback 2083 * with the proper parameters for set up. 2084 * ops.cleanup should be called in hw_free for clean up of streams. 2085 * 2086 * This function returns 0 if successfull, or a negative error code. 2087 */ 2088 int __devinit snd_hda_build_pcms(struct hda_bus *bus) 2089 { 2090 struct hda_codec *codec; 2091 2092 list_for_each_entry(codec, &bus->codec_list, list) { 2093 unsigned int pcm, s; 2094 int err; 2095 if (!codec->patch_ops.build_pcms) 2096 continue; 2097 err = codec->patch_ops.build_pcms(codec); 2098 if (err < 0) 2099 return err; 2100 for (pcm = 0; pcm < codec->num_pcms; pcm++) { 2101 for (s = 0; s < 2; s++) { 2102 struct hda_pcm_stream *info; 2103 info = &codec->pcm_info[pcm].stream[s]; 2104 if (!info->substreams) 2105 continue; 2106 err = set_pcm_default_values(codec, info); 2107 if (err < 0) 2108 return err; 2109 } 2110 } 2111 } 2112 return 0; 2113 } 2114 2115 /** 2116 * snd_hda_check_board_config - compare the current codec with the config table 2117 * @codec: the HDA codec 2118 * @num_configs: number of config enums 2119 * @models: array of model name strings 2120 * @tbl: configuration table, terminated by null entries 2121 * 2122 * Compares the modelname or PCI subsystem id of the current codec with the 2123 * given configuration table. If a matching entry is found, returns its 2124 * config value (supposed to be 0 or positive). 2125 * 2126 * If no entries are matching, the function returns a negative value. 2127 */ 2128 int snd_hda_check_board_config(struct hda_codec *codec, 2129 int num_configs, const char **models, 2130 const struct snd_pci_quirk *tbl) 2131 { 2132 if (codec->bus->modelname && models) { 2133 int i; 2134 for (i = 0; i < num_configs; i++) { 2135 if (models[i] && 2136 !strcmp(codec->bus->modelname, models[i])) { 2137 snd_printd(KERN_INFO "hda_codec: model '%s' is " 2138 "selected\n", models[i]); 2139 return i; 2140 } 2141 } 2142 } 2143 2144 if (!codec->bus->pci || !tbl) 2145 return -1; 2146 2147 tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl); 2148 if (!tbl) 2149 return -1; 2150 if (tbl->value >= 0 && tbl->value < num_configs) { 2151 #ifdef CONFIG_SND_DEBUG_DETECT 2152 char tmp[10]; 2153 const char *model = NULL; 2154 if (models) 2155 model = models[tbl->value]; 2156 if (!model) { 2157 sprintf(tmp, "#%d", tbl->value); 2158 model = tmp; 2159 } 2160 snd_printdd(KERN_INFO "hda_codec: model '%s' is selected " 2161 "for config %x:%x (%s)\n", 2162 model, tbl->subvendor, tbl->subdevice, 2163 (tbl->name ? tbl->name : "Unknown device")); 2164 #endif 2165 return tbl->value; 2166 } 2167 return -1; 2168 } 2169 2170 /** 2171 * snd_hda_add_new_ctls - create controls from the array 2172 * @codec: the HDA codec 2173 * @knew: the array of struct snd_kcontrol_new 2174 * 2175 * This helper function creates and add new controls in the given array. 2176 * The array must be terminated with an empty entry as terminator. 2177 * 2178 * Returns 0 if successful, or a negative error code. 2179 */ 2180 int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew) 2181 { 2182 int err; 2183 2184 for (; knew->name; knew++) { 2185 struct snd_kcontrol *kctl; 2186 kctl = snd_ctl_new1(knew, codec); 2187 if (!kctl) 2188 return -ENOMEM; 2189 err = snd_ctl_add(codec->bus->card, kctl); 2190 if (err < 0) { 2191 if (!codec->addr) 2192 return err; 2193 kctl = snd_ctl_new1(knew, codec); 2194 if (!kctl) 2195 return -ENOMEM; 2196 kctl->id.device = codec->addr; 2197 err = snd_ctl_add(codec->bus->card, kctl); 2198 if (err < 0) 2199 return err; 2200 } 2201 } 2202 return 0; 2203 } 2204 2205 #ifdef CONFIG_SND_HDA_POWER_SAVE 2206 static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, 2207 unsigned int power_state); 2208 2209 static void hda_power_work(struct work_struct *work) 2210 { 2211 struct hda_codec *codec = 2212 container_of(work, struct hda_codec, power_work.work); 2213 2214 if (!codec->power_on || codec->power_count) { 2215 codec->power_transition = 0; 2216 return; 2217 } 2218 2219 hda_call_codec_suspend(codec); 2220 if (codec->bus->ops.pm_notify) 2221 codec->bus->ops.pm_notify(codec); 2222 } 2223 2224 static void hda_keep_power_on(struct hda_codec *codec) 2225 { 2226 codec->power_count++; 2227 codec->power_on = 1; 2228 } 2229 2230 void snd_hda_power_up(struct hda_codec *codec) 2231 { 2232 codec->power_count++; 2233 if (codec->power_on || codec->power_transition) 2234 return; 2235 2236 codec->power_on = 1; 2237 if (codec->bus->ops.pm_notify) 2238 codec->bus->ops.pm_notify(codec); 2239 hda_call_codec_resume(codec); 2240 cancel_delayed_work(&codec->power_work); 2241 codec->power_transition = 0; 2242 } 2243 2244 void snd_hda_power_down(struct hda_codec *codec) 2245 { 2246 --codec->power_count; 2247 if (!codec->power_on || codec->power_count || codec->power_transition) 2248 return; 2249 if (power_save) { 2250 codec->power_transition = 1; /* avoid reentrance */ 2251 schedule_delayed_work(&codec->power_work, 2252 msecs_to_jiffies(power_save * 1000)); 2253 } 2254 } 2255 2256 int snd_hda_check_amp_list_power(struct hda_codec *codec, 2257 struct hda_loopback_check *check, 2258 hda_nid_t nid) 2259 { 2260 struct hda_amp_list *p; 2261 int ch, v; 2262 2263 if (!check->amplist) 2264 return 0; 2265 for (p = check->amplist; p->nid; p++) { 2266 if (p->nid == nid) 2267 break; 2268 } 2269 if (!p->nid) 2270 return 0; /* nothing changed */ 2271 2272 for (p = check->amplist; p->nid; p++) { 2273 for (ch = 0; ch < 2; ch++) { 2274 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir, 2275 p->idx); 2276 if (!(v & HDA_AMP_MUTE) && v > 0) { 2277 if (!check->power_on) { 2278 check->power_on = 1; 2279 snd_hda_power_up(codec); 2280 } 2281 return 1; 2282 } 2283 } 2284 } 2285 if (check->power_on) { 2286 check->power_on = 0; 2287 snd_hda_power_down(codec); 2288 } 2289 return 0; 2290 } 2291 #endif 2292 2293 /* 2294 * Channel mode helper 2295 */ 2296 int snd_hda_ch_mode_info(struct hda_codec *codec, 2297 struct snd_ctl_elem_info *uinfo, 2298 const struct hda_channel_mode *chmode, 2299 int num_chmodes) 2300 { 2301 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2302 uinfo->count = 1; 2303 uinfo->value.enumerated.items = num_chmodes; 2304 if (uinfo->value.enumerated.item >= num_chmodes) 2305 uinfo->value.enumerated.item = num_chmodes - 1; 2306 sprintf(uinfo->value.enumerated.name, "%dch", 2307 chmode[uinfo->value.enumerated.item].channels); 2308 return 0; 2309 } 2310 2311 int snd_hda_ch_mode_get(struct hda_codec *codec, 2312 struct snd_ctl_elem_value *ucontrol, 2313 const struct hda_channel_mode *chmode, 2314 int num_chmodes, 2315 int max_channels) 2316 { 2317 int i; 2318 2319 for (i = 0; i < num_chmodes; i++) { 2320 if (max_channels == chmode[i].channels) { 2321 ucontrol->value.enumerated.item[0] = i; 2322 break; 2323 } 2324 } 2325 return 0; 2326 } 2327 2328 int snd_hda_ch_mode_put(struct hda_codec *codec, 2329 struct snd_ctl_elem_value *ucontrol, 2330 const struct hda_channel_mode *chmode, 2331 int num_chmodes, 2332 int *max_channelsp) 2333 { 2334 unsigned int mode; 2335 2336 mode = ucontrol->value.enumerated.item[0]; 2337 snd_assert(mode < num_chmodes, return -EINVAL); 2338 if (*max_channelsp == chmode[mode].channels) 2339 return 0; 2340 /* change the current channel setting */ 2341 *max_channelsp = chmode[mode].channels; 2342 if (chmode[mode].sequence) 2343 snd_hda_sequence_write_cache(codec, chmode[mode].sequence); 2344 return 1; 2345 } 2346 2347 /* 2348 * input MUX helper 2349 */ 2350 int snd_hda_input_mux_info(const struct hda_input_mux *imux, 2351 struct snd_ctl_elem_info *uinfo) 2352 { 2353 unsigned int index; 2354 2355 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2356 uinfo->count = 1; 2357 uinfo->value.enumerated.items = imux->num_items; 2358 if (!imux->num_items) 2359 return 0; 2360 index = uinfo->value.enumerated.item; 2361 if (index >= imux->num_items) 2362 index = imux->num_items - 1; 2363 strcpy(uinfo->value.enumerated.name, imux->items[index].label); 2364 return 0; 2365 } 2366 2367 int snd_hda_input_mux_put(struct hda_codec *codec, 2368 const struct hda_input_mux *imux, 2369 struct snd_ctl_elem_value *ucontrol, 2370 hda_nid_t nid, 2371 unsigned int *cur_val) 2372 { 2373 unsigned int idx; 2374 2375 if (!imux->num_items) 2376 return 0; 2377 idx = ucontrol->value.enumerated.item[0]; 2378 if (idx >= imux->num_items) 2379 idx = imux->num_items - 1; 2380 if (*cur_val == idx) 2381 return 0; 2382 snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, 2383 imux->items[idx].index); 2384 *cur_val = idx; 2385 return 1; 2386 } 2387 2388 2389 /* 2390 * Multi-channel / digital-out PCM helper functions 2391 */ 2392 2393 /* setup SPDIF output stream */ 2394 static void setup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid, 2395 unsigned int stream_tag, unsigned int format) 2396 { 2397 /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */ 2398 if (codec->spdif_ctls & AC_DIG1_ENABLE) 2399 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1, 2400 codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff); 2401 snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format); 2402 /* turn on again (if needed) */ 2403 if (codec->spdif_ctls & AC_DIG1_ENABLE) 2404 snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1, 2405 codec->spdif_ctls & 0xff); 2406 } 2407 2408 /* 2409 * open the digital out in the exclusive mode 2410 */ 2411 int snd_hda_multi_out_dig_open(struct hda_codec *codec, 2412 struct hda_multi_out *mout) 2413 { 2414 mutex_lock(&codec->spdif_mutex); 2415 if (mout->dig_out_used == HDA_DIG_ANALOG_DUP) 2416 /* already opened as analog dup; reset it once */ 2417 snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 0, 0, 0); 2418 mout->dig_out_used = HDA_DIG_EXCLUSIVE; 2419 mutex_unlock(&codec->spdif_mutex); 2420 return 0; 2421 } 2422 2423 int snd_hda_multi_out_dig_prepare(struct hda_codec *codec, 2424 struct hda_multi_out *mout, 2425 unsigned int stream_tag, 2426 unsigned int format, 2427 struct snd_pcm_substream *substream) 2428 { 2429 mutex_lock(&codec->spdif_mutex); 2430 setup_dig_out_stream(codec, mout->dig_out_nid, stream_tag, format); 2431 mutex_unlock(&codec->spdif_mutex); 2432 return 0; 2433 } 2434 2435 /* 2436 * release the digital out 2437 */ 2438 int snd_hda_multi_out_dig_close(struct hda_codec *codec, 2439 struct hda_multi_out *mout) 2440 { 2441 mutex_lock(&codec->spdif_mutex); 2442 mout->dig_out_used = 0; 2443 mutex_unlock(&codec->spdif_mutex); 2444 return 0; 2445 } 2446 2447 /* 2448 * set up more restrictions for analog out 2449 */ 2450 int snd_hda_multi_out_analog_open(struct hda_codec *codec, 2451 struct hda_multi_out *mout, 2452 struct snd_pcm_substream *substream) 2453 { 2454 substream->runtime->hw.channels_max = mout->max_channels; 2455 return snd_pcm_hw_constraint_step(substream->runtime, 0, 2456 SNDRV_PCM_HW_PARAM_CHANNELS, 2); 2457 } 2458 2459 /* 2460 * set up the i/o for analog out 2461 * when the digital out is available, copy the front out to digital out, too. 2462 */ 2463 int snd_hda_multi_out_analog_prepare(struct hda_codec *codec, 2464 struct hda_multi_out *mout, 2465 unsigned int stream_tag, 2466 unsigned int format, 2467 struct snd_pcm_substream *substream) 2468 { 2469 hda_nid_t *nids = mout->dac_nids; 2470 int chs = substream->runtime->channels; 2471 int i; 2472 2473 mutex_lock(&codec->spdif_mutex); 2474 if (mout->dig_out_nid && mout->dig_out_used != HDA_DIG_EXCLUSIVE) { 2475 if (chs == 2 && 2476 snd_hda_is_supported_format(codec, mout->dig_out_nid, 2477 format) && 2478 !(codec->spdif_status & IEC958_AES0_NONAUDIO)) { 2479 mout->dig_out_used = HDA_DIG_ANALOG_DUP; 2480 setup_dig_out_stream(codec, mout->dig_out_nid, 2481 stream_tag, format); 2482 } else { 2483 mout->dig_out_used = 0; 2484 snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 2485 0, 0, 0); 2486 } 2487 } 2488 mutex_unlock(&codec->spdif_mutex); 2489 2490 /* front */ 2491 snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag, 2492 0, format); 2493 if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT]) 2494 /* headphone out will just decode front left/right (stereo) */ 2495 snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag, 2496 0, format); 2497 /* extra outputs copied from front */ 2498 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) 2499 if (mout->extra_out_nid[i]) 2500 snd_hda_codec_setup_stream(codec, 2501 mout->extra_out_nid[i], 2502 stream_tag, 0, format); 2503 2504 /* surrounds */ 2505 for (i = 1; i < mout->num_dacs; i++) { 2506 if (chs >= (i + 1) * 2) /* independent out */ 2507 snd_hda_codec_setup_stream(codec, nids[i], stream_tag, 2508 i * 2, format); 2509 else /* copy front */ 2510 snd_hda_codec_setup_stream(codec, nids[i], stream_tag, 2511 0, format); 2512 } 2513 return 0; 2514 } 2515 2516 /* 2517 * clean up the setting for analog out 2518 */ 2519 int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec, 2520 struct hda_multi_out *mout) 2521 { 2522 hda_nid_t *nids = mout->dac_nids; 2523 int i; 2524 2525 for (i = 0; i < mout->num_dacs; i++) 2526 snd_hda_codec_setup_stream(codec, nids[i], 0, 0, 0); 2527 if (mout->hp_nid) 2528 snd_hda_codec_setup_stream(codec, mout->hp_nid, 0, 0, 0); 2529 for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++) 2530 if (mout->extra_out_nid[i]) 2531 snd_hda_codec_setup_stream(codec, 2532 mout->extra_out_nid[i], 2533 0, 0, 0); 2534 mutex_lock(&codec->spdif_mutex); 2535 if (mout->dig_out_nid && mout->dig_out_used == HDA_DIG_ANALOG_DUP) { 2536 snd_hda_codec_setup_stream(codec, mout->dig_out_nid, 0, 0, 0); 2537 mout->dig_out_used = 0; 2538 } 2539 mutex_unlock(&codec->spdif_mutex); 2540 return 0; 2541 } 2542 2543 /* 2544 * Helper for automatic ping configuration 2545 */ 2546 2547 static int is_in_nid_list(hda_nid_t nid, hda_nid_t *list) 2548 { 2549 for (; *list; list++) 2550 if (*list == nid) 2551 return 1; 2552 return 0; 2553 } 2554 2555 2556 /* 2557 * Sort an associated group of pins according to their sequence numbers. 2558 */ 2559 static void sort_pins_by_sequence(hda_nid_t * pins, short * sequences, 2560 int num_pins) 2561 { 2562 int i, j; 2563 short seq; 2564 hda_nid_t nid; 2565 2566 for (i = 0; i < num_pins; i++) { 2567 for (j = i + 1; j < num_pins; j++) { 2568 if (sequences[i] > sequences[j]) { 2569 seq = sequences[i]; 2570 sequences[i] = sequences[j]; 2571 sequences[j] = seq; 2572 nid = pins[i]; 2573 pins[i] = pins[j]; 2574 pins[j] = nid; 2575 } 2576 } 2577 } 2578 } 2579 2580 2581 /* 2582 * Parse all pin widgets and store the useful pin nids to cfg 2583 * 2584 * The number of line-outs or any primary output is stored in line_outs, 2585 * and the corresponding output pins are assigned to line_out_pins[], 2586 * in the order of front, rear, CLFE, side, ... 2587 * 2588 * If more extra outputs (speaker and headphone) are found, the pins are 2589 * assisnged to hp_pins[] and speaker_pins[], respectively. If no line-out jack 2590 * is detected, one of speaker of HP pins is assigned as the primary 2591 * output, i.e. to line_out_pins[0]. So, line_outs is always positive 2592 * if any analog output exists. 2593 * 2594 * The analog input pins are assigned to input_pins array. 2595 * The digital input/output pins are assigned to dig_in_pin and dig_out_pin, 2596 * respectively. 2597 */ 2598 int snd_hda_parse_pin_def_config(struct hda_codec *codec, 2599 struct auto_pin_cfg *cfg, 2600 hda_nid_t *ignore_nids) 2601 { 2602 hda_nid_t nid, nid_start; 2603 int nodes; 2604 short seq, assoc_line_out, assoc_speaker; 2605 short sequences_line_out[ARRAY_SIZE(cfg->line_out_pins)]; 2606 short sequences_speaker[ARRAY_SIZE(cfg->speaker_pins)]; 2607 2608 memset(cfg, 0, sizeof(*cfg)); 2609 2610 memset(sequences_line_out, 0, sizeof(sequences_line_out)); 2611 memset(sequences_speaker, 0, sizeof(sequences_speaker)); 2612 assoc_line_out = assoc_speaker = 0; 2613 2614 nodes = snd_hda_get_sub_nodes(codec, codec->afg, &nid_start); 2615 for (nid = nid_start; nid < nodes + nid_start; nid++) { 2616 unsigned int wid_caps = get_wcaps(codec, nid); 2617 unsigned int wid_type = 2618 (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; 2619 unsigned int def_conf; 2620 short assoc, loc; 2621 2622 /* read all default configuration for pin complex */ 2623 if (wid_type != AC_WID_PIN) 2624 continue; 2625 /* ignore the given nids (e.g. pc-beep returns error) */ 2626 if (ignore_nids && is_in_nid_list(nid, ignore_nids)) 2627 continue; 2628 2629 def_conf = snd_hda_codec_read(codec, nid, 0, 2630 AC_VERB_GET_CONFIG_DEFAULT, 0); 2631 if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE) 2632 continue; 2633 loc = get_defcfg_location(def_conf); 2634 switch (get_defcfg_device(def_conf)) { 2635 case AC_JACK_LINE_OUT: 2636 seq = get_defcfg_sequence(def_conf); 2637 assoc = get_defcfg_association(def_conf); 2638 if (!assoc) 2639 continue; 2640 if (!assoc_line_out) 2641 assoc_line_out = assoc; 2642 else if (assoc_line_out != assoc) 2643 continue; 2644 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins)) 2645 continue; 2646 cfg->line_out_pins[cfg->line_outs] = nid; 2647 sequences_line_out[cfg->line_outs] = seq; 2648 cfg->line_outs++; 2649 break; 2650 case AC_JACK_SPEAKER: 2651 seq = get_defcfg_sequence(def_conf); 2652 assoc = get_defcfg_association(def_conf); 2653 if (! assoc) 2654 continue; 2655 if (! assoc_speaker) 2656 assoc_speaker = assoc; 2657 else if (assoc_speaker != assoc) 2658 continue; 2659 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins)) 2660 continue; 2661 cfg->speaker_pins[cfg->speaker_outs] = nid; 2662 sequences_speaker[cfg->speaker_outs] = seq; 2663 cfg->speaker_outs++; 2664 break; 2665 case AC_JACK_HP_OUT: 2666 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins)) 2667 continue; 2668 cfg->hp_pins[cfg->hp_outs] = nid; 2669 cfg->hp_outs++; 2670 break; 2671 case AC_JACK_MIC_IN: { 2672 int preferred, alt; 2673 if (loc == AC_JACK_LOC_FRONT) { 2674 preferred = AUTO_PIN_FRONT_MIC; 2675 alt = AUTO_PIN_MIC; 2676 } else { 2677 preferred = AUTO_PIN_MIC; 2678 alt = AUTO_PIN_FRONT_MIC; 2679 } 2680 if (!cfg->input_pins[preferred]) 2681 cfg->input_pins[preferred] = nid; 2682 else if (!cfg->input_pins[alt]) 2683 cfg->input_pins[alt] = nid; 2684 break; 2685 } 2686 case AC_JACK_LINE_IN: 2687 if (loc == AC_JACK_LOC_FRONT) 2688 cfg->input_pins[AUTO_PIN_FRONT_LINE] = nid; 2689 else 2690 cfg->input_pins[AUTO_PIN_LINE] = nid; 2691 break; 2692 case AC_JACK_CD: 2693 cfg->input_pins[AUTO_PIN_CD] = nid; 2694 break; 2695 case AC_JACK_AUX: 2696 cfg->input_pins[AUTO_PIN_AUX] = nid; 2697 break; 2698 case AC_JACK_SPDIF_OUT: 2699 cfg->dig_out_pin = nid; 2700 break; 2701 case AC_JACK_SPDIF_IN: 2702 cfg->dig_in_pin = nid; 2703 break; 2704 } 2705 } 2706 2707 /* sort by sequence */ 2708 sort_pins_by_sequence(cfg->line_out_pins, sequences_line_out, 2709 cfg->line_outs); 2710 sort_pins_by_sequence(cfg->speaker_pins, sequences_speaker, 2711 cfg->speaker_outs); 2712 2713 /* 2714 * FIX-UP: if no line-outs are detected, try to use speaker or HP pin 2715 * as a primary output 2716 */ 2717 if (!cfg->line_outs) { 2718 if (cfg->speaker_outs) { 2719 cfg->line_outs = cfg->speaker_outs; 2720 memcpy(cfg->line_out_pins, cfg->speaker_pins, 2721 sizeof(cfg->speaker_pins)); 2722 cfg->speaker_outs = 0; 2723 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins)); 2724 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; 2725 } else if (cfg->hp_outs) { 2726 cfg->line_outs = cfg->hp_outs; 2727 memcpy(cfg->line_out_pins, cfg->hp_pins, 2728 sizeof(cfg->hp_pins)); 2729 cfg->hp_outs = 0; 2730 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins)); 2731 cfg->line_out_type = AUTO_PIN_HP_OUT; 2732 } 2733 } 2734 2735 /* Reorder the surround channels 2736 * ALSA sequence is front/surr/clfe/side 2737 * HDA sequence is: 2738 * 4-ch: front/surr => OK as it is 2739 * 6-ch: front/clfe/surr 2740 * 8-ch: front/clfe/rear/side|fc 2741 */ 2742 switch (cfg->line_outs) { 2743 case 3: 2744 case 4: 2745 nid = cfg->line_out_pins[1]; 2746 cfg->line_out_pins[1] = cfg->line_out_pins[2]; 2747 cfg->line_out_pins[2] = nid; 2748 break; 2749 } 2750 2751 /* 2752 * debug prints of the parsed results 2753 */ 2754 snd_printd("autoconfig: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", 2755 cfg->line_outs, cfg->line_out_pins[0], cfg->line_out_pins[1], 2756 cfg->line_out_pins[2], cfg->line_out_pins[3], 2757 cfg->line_out_pins[4]); 2758 snd_printd(" speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", 2759 cfg->speaker_outs, cfg->speaker_pins[0], 2760 cfg->speaker_pins[1], cfg->speaker_pins[2], 2761 cfg->speaker_pins[3], cfg->speaker_pins[4]); 2762 snd_printd(" hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", 2763 cfg->hp_outs, cfg->hp_pins[0], 2764 cfg->hp_pins[1], cfg->hp_pins[2], 2765 cfg->hp_pins[3], cfg->hp_pins[4]); 2766 snd_printd(" inputs: mic=0x%x, fmic=0x%x, line=0x%x, fline=0x%x," 2767 " cd=0x%x, aux=0x%x\n", 2768 cfg->input_pins[AUTO_PIN_MIC], 2769 cfg->input_pins[AUTO_PIN_FRONT_MIC], 2770 cfg->input_pins[AUTO_PIN_LINE], 2771 cfg->input_pins[AUTO_PIN_FRONT_LINE], 2772 cfg->input_pins[AUTO_PIN_CD], 2773 cfg->input_pins[AUTO_PIN_AUX]); 2774 2775 return 0; 2776 } 2777 2778 /* labels for input pins */ 2779 const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = { 2780 "Mic", "Front Mic", "Line", "Front Line", "CD", "Aux" 2781 }; 2782 2783 2784 #ifdef CONFIG_PM 2785 /* 2786 * power management 2787 */ 2788 2789 /** 2790 * snd_hda_suspend - suspend the codecs 2791 * @bus: the HDA bus 2792 * @state: suspsend state 2793 * 2794 * Returns 0 if successful. 2795 */ 2796 int snd_hda_suspend(struct hda_bus *bus, pm_message_t state) 2797 { 2798 struct hda_codec *codec; 2799 2800 list_for_each_entry(codec, &bus->codec_list, list) { 2801 #ifdef CONFIG_SND_HDA_POWER_SAVE 2802 if (!codec->power_on) 2803 continue; 2804 #endif 2805 hda_call_codec_suspend(codec); 2806 } 2807 return 0; 2808 } 2809 2810 /** 2811 * snd_hda_resume - resume the codecs 2812 * @bus: the HDA bus 2813 * @state: resume state 2814 * 2815 * Returns 0 if successful. 2816 * 2817 * This fucntion is defined only when POWER_SAVE isn't set. 2818 * In the power-save mode, the codec is resumed dynamically. 2819 */ 2820 int snd_hda_resume(struct hda_bus *bus) 2821 { 2822 struct hda_codec *codec; 2823 2824 list_for_each_entry(codec, &bus->codec_list, list) { 2825 if (snd_hda_codec_needs_resume(codec)) 2826 hda_call_codec_resume(codec); 2827 } 2828 return 0; 2829 } 2830 #ifdef CONFIG_SND_HDA_POWER_SAVE 2831 int snd_hda_codecs_inuse(struct hda_bus *bus) 2832 { 2833 struct hda_codec *codec; 2834 2835 list_for_each_entry(codec, &bus->codec_list, list) { 2836 if (snd_hda_codec_needs_resume(codec)) 2837 return 1; 2838 } 2839 return 0; 2840 } 2841 #endif 2842 #endif 2843