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