linux/sound/pci/hda/hda_generic.c
<<
>>
Prefs
   1/*
   2 * Universal Interface for Intel High Definition Audio Codec
   3 *
   4 * Generic widget tree parser
   5 *
   6 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
   7 *
   8 *  This driver is free software; you can redistribute it and/or modify
   9 *  it under the terms of the GNU General Public License as published by
  10 *  the Free Software Foundation; either version 2 of the License, or
  11 *  (at your option) any later version.
  12 *
  13 *  This driver is distributed in the hope that it will be useful,
  14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 *  GNU General Public License for more details.
  17 *
  18 *  You should have received a copy of the GNU General Public License
  19 *  along with this program; if not, write to the Free Software
  20 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21 */
  22
  23#include <linux/init.h>
  24#include <linux/slab.h>
  25#include <linux/export.h>
  26#include <linux/sort.h>
  27#include <linux/delay.h>
  28#include <linux/ctype.h>
  29#include <linux/string.h>
  30#include <linux/bitops.h>
  31#include <sound/core.h>
  32#include <sound/jack.h>
  33#include "hda_codec.h"
  34#include "hda_local.h"
  35#include "hda_auto_parser.h"
  36#include "hda_jack.h"
  37#include "hda_beep.h"
  38#include "hda_generic.h"
  39
  40
  41/* initialize hda_gen_spec struct */
  42int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
  43{
  44        snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
  45        snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
  46        snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8);
  47        mutex_init(&spec->pcm_mutex);
  48        return 0;
  49}
  50EXPORT_SYMBOL_HDA(snd_hda_gen_spec_init);
  51
  52struct snd_kcontrol_new *
  53snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
  54                     const struct snd_kcontrol_new *temp)
  55{
  56        struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
  57        if (!knew)
  58                return NULL;
  59        *knew = *temp;
  60        if (name)
  61                knew->name = kstrdup(name, GFP_KERNEL);
  62        else if (knew->name)
  63                knew->name = kstrdup(knew->name, GFP_KERNEL);
  64        if (!knew->name)
  65                return NULL;
  66        return knew;
  67}
  68EXPORT_SYMBOL_HDA(snd_hda_gen_add_kctl);
  69
  70static void free_kctls(struct hda_gen_spec *spec)
  71{
  72        if (spec->kctls.list) {
  73                struct snd_kcontrol_new *kctl = spec->kctls.list;
  74                int i;
  75                for (i = 0; i < spec->kctls.used; i++)
  76                        kfree(kctl[i].name);
  77        }
  78        snd_array_free(&spec->kctls);
  79}
  80
  81void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
  82{
  83        if (!spec)
  84                return;
  85        free_kctls(spec);
  86        snd_array_free(&spec->paths);
  87        snd_array_free(&spec->loopback_list);
  88}
  89EXPORT_SYMBOL_HDA(snd_hda_gen_spec_free);
  90
  91/*
  92 * store user hints
  93 */
  94static void parse_user_hints(struct hda_codec *codec)
  95{
  96        struct hda_gen_spec *spec = codec->spec;
  97        int val;
  98
  99        val = snd_hda_get_bool_hint(codec, "jack_detect");
 100        if (val >= 0)
 101                codec->no_jack_detect = !val;
 102        val = snd_hda_get_bool_hint(codec, "inv_jack_detect");
 103        if (val >= 0)
 104                codec->inv_jack_detect = !!val;
 105        val = snd_hda_get_bool_hint(codec, "trigger_sense");
 106        if (val >= 0)
 107                codec->no_trigger_sense = !val;
 108        val = snd_hda_get_bool_hint(codec, "inv_eapd");
 109        if (val >= 0)
 110                codec->inv_eapd = !!val;
 111        val = snd_hda_get_bool_hint(codec, "pcm_format_first");
 112        if (val >= 0)
 113                codec->pcm_format_first = !!val;
 114        val = snd_hda_get_bool_hint(codec, "sticky_stream");
 115        if (val >= 0)
 116                codec->no_sticky_stream = !val;
 117        val = snd_hda_get_bool_hint(codec, "spdif_status_reset");
 118        if (val >= 0)
 119                codec->spdif_status_reset = !!val;
 120        val = snd_hda_get_bool_hint(codec, "pin_amp_workaround");
 121        if (val >= 0)
 122                codec->pin_amp_workaround = !!val;
 123        val = snd_hda_get_bool_hint(codec, "single_adc_amp");
 124        if (val >= 0)
 125                codec->single_adc_amp = !!val;
 126
 127        val = snd_hda_get_bool_hint(codec, "auto_mute");
 128        if (val >= 0)
 129                spec->suppress_auto_mute = !val;
 130        val = snd_hda_get_bool_hint(codec, "auto_mic");
 131        if (val >= 0)
 132                spec->suppress_auto_mic = !val;
 133        val = snd_hda_get_bool_hint(codec, "line_in_auto_switch");
 134        if (val >= 0)
 135                spec->line_in_auto_switch = !!val;
 136        val = snd_hda_get_bool_hint(codec, "auto_mute_via_amp");
 137        if (val >= 0)
 138                spec->auto_mute_via_amp = !!val;
 139        val = snd_hda_get_bool_hint(codec, "need_dac_fix");
 140        if (val >= 0)
 141                spec->need_dac_fix = !!val;
 142        val = snd_hda_get_bool_hint(codec, "primary_hp");
 143        if (val >= 0)
 144                spec->no_primary_hp = !val;
 145        val = snd_hda_get_bool_hint(codec, "multi_cap_vol");
 146        if (val >= 0)
 147                spec->multi_cap_vol = !!val;
 148        val = snd_hda_get_bool_hint(codec, "inv_dmic_split");
 149        if (val >= 0)
 150                spec->inv_dmic_split = !!val;
 151        val = snd_hda_get_bool_hint(codec, "indep_hp");
 152        if (val >= 0)
 153                spec->indep_hp = !!val;
 154        val = snd_hda_get_bool_hint(codec, "add_stereo_mix_input");
 155        if (val >= 0)
 156                spec->add_stereo_mix_input = !!val;
 157        /* the following two are just for compatibility */
 158        val = snd_hda_get_bool_hint(codec, "add_out_jack_modes");
 159        if (val >= 0)
 160                spec->add_jack_modes = !!val;
 161        val = snd_hda_get_bool_hint(codec, "add_in_jack_modes");
 162        if (val >= 0)
 163                spec->add_jack_modes = !!val;
 164        val = snd_hda_get_bool_hint(codec, "add_jack_modes");
 165        if (val >= 0)
 166                spec->add_jack_modes = !!val;
 167        val = snd_hda_get_bool_hint(codec, "power_down_unused");
 168        if (val >= 0)
 169                spec->power_down_unused = !!val;
 170        val = snd_hda_get_bool_hint(codec, "add_hp_mic");
 171        if (val >= 0)
 172                spec->hp_mic = !!val;
 173        val = snd_hda_get_bool_hint(codec, "hp_mic_detect");
 174        if (val >= 0)
 175                spec->suppress_hp_mic_detect = !val;
 176
 177        if (!snd_hda_get_int_hint(codec, "mixer_nid", &val))
 178                spec->mixer_nid = val;
 179}
 180
 181/*
 182 * pin control value accesses
 183 */
 184
 185#define update_pin_ctl(codec, pin, val) \
 186        snd_hda_codec_update_cache(codec, pin, 0, \
 187                                   AC_VERB_SET_PIN_WIDGET_CONTROL, val)
 188
 189/* restore the pinctl based on the cached value */
 190static inline void restore_pin_ctl(struct hda_codec *codec, hda_nid_t pin)
 191{
 192        update_pin_ctl(codec, pin, snd_hda_codec_get_pin_target(codec, pin));
 193}
 194
 195/* set the pinctl target value and write it if requested */
 196static void set_pin_target(struct hda_codec *codec, hda_nid_t pin,
 197                           unsigned int val, bool do_write)
 198{
 199        if (!pin)
 200                return;
 201        val = snd_hda_correct_pin_ctl(codec, pin, val);
 202        snd_hda_codec_set_pin_target(codec, pin, val);
 203        if (do_write)
 204                update_pin_ctl(codec, pin, val);
 205}
 206
 207/* set pinctl target values for all given pins */
 208static void set_pin_targets(struct hda_codec *codec, int num_pins,
 209                            hda_nid_t *pins, unsigned int val)
 210{
 211        int i;
 212        for (i = 0; i < num_pins; i++)
 213                set_pin_target(codec, pins[i], val, false);
 214}
 215
 216/*
 217 * parsing paths
 218 */
 219
 220/* return the position of NID in the list, or -1 if not found */
 221static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
 222{
 223        int i;
 224        for (i = 0; i < nums; i++)
 225                if (list[i] == nid)
 226                        return i;
 227        return -1;
 228}
 229
 230/* return true if the given NID is contained in the path */
 231static bool is_nid_contained(struct nid_path *path, hda_nid_t nid)
 232{
 233        return find_idx_in_nid_list(nid, path->path, path->depth) >= 0;
 234}
 235
 236static struct nid_path *get_nid_path(struct hda_codec *codec,
 237                                     hda_nid_t from_nid, hda_nid_t to_nid,
 238                                     int anchor_nid)
 239{
 240        struct hda_gen_spec *spec = codec->spec;
 241        int i;
 242
 243        for (i = 0; i < spec->paths.used; i++) {
 244                struct nid_path *path = snd_array_elem(&spec->paths, i);
 245                if (path->depth <= 0)
 246                        continue;
 247                if ((!from_nid || path->path[0] == from_nid) &&
 248                    (!to_nid || path->path[path->depth - 1] == to_nid)) {
 249                        if (!anchor_nid ||
 250                            (anchor_nid > 0 && is_nid_contained(path, anchor_nid)) ||
 251                            (anchor_nid < 0 && !is_nid_contained(path, anchor_nid)))
 252                                return path;
 253                }
 254        }
 255        return NULL;
 256}
 257
 258/* get the path between the given NIDs;
 259 * passing 0 to either @pin or @dac behaves as a wildcard
 260 */
 261struct nid_path *snd_hda_get_nid_path(struct hda_codec *codec,
 262                                      hda_nid_t from_nid, hda_nid_t to_nid)
 263{
 264        return get_nid_path(codec, from_nid, to_nid, 0);
 265}
 266EXPORT_SYMBOL_HDA(snd_hda_get_nid_path);
 267
 268/* get the index number corresponding to the path instance;
 269 * the index starts from 1, for easier checking the invalid value
 270 */
 271int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path)
 272{
 273        struct hda_gen_spec *spec = codec->spec;
 274        struct nid_path *array = spec->paths.list;
 275        ssize_t idx;
 276
 277        if (!spec->paths.used)
 278                return 0;
 279        idx = path - array;
 280        if (idx < 0 || idx >= spec->paths.used)
 281                return 0;
 282        return idx + 1;
 283}
 284EXPORT_SYMBOL_HDA(snd_hda_get_path_idx);
 285
 286/* get the path instance corresponding to the given index number */
 287struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx)
 288{
 289        struct hda_gen_spec *spec = codec->spec;
 290
 291        if (idx <= 0 || idx > spec->paths.used)
 292                return NULL;
 293        return snd_array_elem(&spec->paths, idx - 1);
 294}
 295EXPORT_SYMBOL_HDA(snd_hda_get_path_from_idx);
 296
 297/* check whether the given DAC is already found in any existing paths */
 298static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid)
 299{
 300        struct hda_gen_spec *spec = codec->spec;
 301        int i;
 302
 303        for (i = 0; i < spec->paths.used; i++) {
 304                struct nid_path *path = snd_array_elem(&spec->paths, i);
 305                if (path->path[0] == nid)
 306                        return true;
 307        }
 308        return false;
 309}
 310
 311/* check whether the given two widgets can be connected */
 312static bool is_reachable_path(struct hda_codec *codec,
 313                              hda_nid_t from_nid, hda_nid_t to_nid)
 314{
 315        if (!from_nid || !to_nid)
 316                return false;
 317        return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0;
 318}
 319
 320/* nid, dir and idx */
 321#define AMP_VAL_COMPARE_MASK    (0xffff | (1U << 18) | (0x0f << 19))
 322
 323/* check whether the given ctl is already assigned in any path elements */
 324static bool is_ctl_used(struct hda_codec *codec, unsigned int val, int type)
 325{
 326        struct hda_gen_spec *spec = codec->spec;
 327        int i;
 328
 329        val &= AMP_VAL_COMPARE_MASK;
 330        for (i = 0; i < spec->paths.used; i++) {
 331                struct nid_path *path = snd_array_elem(&spec->paths, i);
 332                if ((path->ctls[type] & AMP_VAL_COMPARE_MASK) == val)
 333                        return true;
 334        }
 335        return false;
 336}
 337
 338/* check whether a control with the given (nid, dir, idx) was assigned */
 339static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid,
 340                              int dir, int idx, int type)
 341{
 342        unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
 343        return is_ctl_used(codec, val, type);
 344}
 345
 346static void print_nid_path(const char *pfx, struct nid_path *path)
 347{
 348        char buf[40];
 349        int i;
 350
 351
 352        buf[0] = 0;
 353        for (i = 0; i < path->depth; i++) {
 354                char tmp[4];
 355                sprintf(tmp, ":%02x", path->path[i]);
 356                strlcat(buf, tmp, sizeof(buf));
 357        }
 358        snd_printdd("%s path: depth=%d %s\n", pfx, path->depth, buf);
 359}
 360
 361/* called recursively */
 362static bool __parse_nid_path(struct hda_codec *codec,
 363                             hda_nid_t from_nid, hda_nid_t to_nid,
 364                             int anchor_nid, struct nid_path *path,
 365                             int depth)
 366{
 367        const hda_nid_t *conn;
 368        int i, nums;
 369
 370        if (to_nid == anchor_nid)
 371                anchor_nid = 0; /* anchor passed */
 372        else if (to_nid == (hda_nid_t)(-anchor_nid))
 373                return false; /* hit the exclusive nid */
 374
 375        nums = snd_hda_get_conn_list(codec, to_nid, &conn);
 376        for (i = 0; i < nums; i++) {
 377                if (conn[i] != from_nid) {
 378                        /* special case: when from_nid is 0,
 379                         * try to find an empty DAC
 380                         */
 381                        if (from_nid ||
 382                            get_wcaps_type(get_wcaps(codec, conn[i])) != AC_WID_AUD_OUT ||
 383                            is_dac_already_used(codec, conn[i]))
 384                                continue;
 385                }
 386                /* anchor is not requested or already passed? */
 387                if (anchor_nid <= 0)
 388                        goto found;
 389        }
 390        if (depth >= MAX_NID_PATH_DEPTH)
 391                return false;
 392        for (i = 0; i < nums; i++) {
 393                unsigned int type;
 394                type = get_wcaps_type(get_wcaps(codec, conn[i]));
 395                if (type == AC_WID_AUD_OUT || type == AC_WID_AUD_IN ||
 396                    type == AC_WID_PIN)
 397                        continue;
 398                if (__parse_nid_path(codec, from_nid, conn[i],
 399                                     anchor_nid, path, depth + 1))
 400                        goto found;
 401        }
 402        return false;
 403
 404 found:
 405        path->path[path->depth] = conn[i];
 406        path->idx[path->depth + 1] = i;
 407        if (nums > 1 && get_wcaps_type(get_wcaps(codec, to_nid)) != AC_WID_AUD_MIX)
 408                path->multi[path->depth + 1] = 1;
 409        path->depth++;
 410        return true;
 411}
 412
 413/* parse the widget path from the given nid to the target nid;
 414 * when @from_nid is 0, try to find an empty DAC;
 415 * when @anchor_nid is set to a positive value, only paths through the widget
 416 * with the given value are evaluated.
 417 * when @anchor_nid is set to a negative value, paths through the widget
 418 * with the negative of given value are excluded, only other paths are chosen.
 419 * when @anchor_nid is zero, no special handling about path selection.
 420 */
 421bool snd_hda_parse_nid_path(struct hda_codec *codec, hda_nid_t from_nid,
 422                            hda_nid_t to_nid, int anchor_nid,
 423                            struct nid_path *path)
 424{
 425        if (__parse_nid_path(codec, from_nid, to_nid, anchor_nid, path, 1)) {
 426                path->path[path->depth] = to_nid;
 427                path->depth++;
 428                return true;
 429        }
 430        return false;
 431}
 432EXPORT_SYMBOL_HDA(snd_hda_parse_nid_path);
 433
 434/*
 435 * parse the path between the given NIDs and add to the path list.
 436 * if no valid path is found, return NULL
 437 */
 438struct nid_path *
 439snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
 440                     hda_nid_t to_nid, int anchor_nid)
 441{
 442        struct hda_gen_spec *spec = codec->spec;
 443        struct nid_path *path;
 444
 445        if (from_nid && to_nid && !is_reachable_path(codec, from_nid, to_nid))
 446                return NULL;
 447
 448        /* check whether the path has been already added */
 449        path = get_nid_path(codec, from_nid, to_nid, anchor_nid);
 450        if (path)
 451                return path;
 452
 453        path = snd_array_new(&spec->paths);
 454        if (!path)
 455                return NULL;
 456        memset(path, 0, sizeof(*path));
 457        if (snd_hda_parse_nid_path(codec, from_nid, to_nid, anchor_nid, path))
 458                return path;
 459        /* push back */
 460        spec->paths.used--;
 461        return NULL;
 462}
 463EXPORT_SYMBOL_HDA(snd_hda_add_new_path);
 464
 465/* clear the given path as invalid so that it won't be picked up later */
 466static void invalidate_nid_path(struct hda_codec *codec, int idx)
 467{
 468        struct nid_path *path = snd_hda_get_path_from_idx(codec, idx);
 469        if (!path)
 470                return;
 471        memset(path, 0, sizeof(*path));
 472}
 473
 474/* look for an empty DAC slot */
 475static hda_nid_t look_for_dac(struct hda_codec *codec, hda_nid_t pin,
 476                              bool is_digital)
 477{
 478        struct hda_gen_spec *spec = codec->spec;
 479        bool cap_digital;
 480        int i;
 481
 482        for (i = 0; i < spec->num_all_dacs; i++) {
 483                hda_nid_t nid = spec->all_dacs[i];
 484                if (!nid || is_dac_already_used(codec, nid))
 485                        continue;
 486                cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL);
 487                if (is_digital != cap_digital)
 488                        continue;
 489                if (is_reachable_path(codec, nid, pin))
 490                        return nid;
 491        }
 492        return 0;
 493}
 494
 495/* replace the channels in the composed amp value with the given number */
 496static unsigned int amp_val_replace_channels(unsigned int val, unsigned int chs)
 497{
 498        val &= ~(0x3U << 16);
 499        val |= chs << 16;
 500        return val;
 501}
 502
 503/* check whether the widget has the given amp capability for the direction */
 504static bool check_amp_caps(struct hda_codec *codec, hda_nid_t nid,
 505                           int dir, unsigned int bits)
 506{
 507        if (!nid)
 508                return false;
 509        if (get_wcaps(codec, nid) & (1 << (dir + 1)))
 510                if (query_amp_caps(codec, nid, dir) & bits)
 511                        return true;
 512        return false;
 513}
 514
 515static bool same_amp_caps(struct hda_codec *codec, hda_nid_t nid1,
 516                          hda_nid_t nid2, int dir)
 517{
 518        if (!(get_wcaps(codec, nid1) & (1 << (dir + 1))))
 519                return !(get_wcaps(codec, nid2) & (1 << (dir + 1)));
 520        return (query_amp_caps(codec, nid1, dir) ==
 521                query_amp_caps(codec, nid2, dir));
 522}
 523
 524#define nid_has_mute(codec, nid, dir) \
 525        check_amp_caps(codec, nid, dir, (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE))
 526#define nid_has_volume(codec, nid, dir) \
 527        check_amp_caps(codec, nid, dir, AC_AMPCAP_NUM_STEPS)
 528
 529/* look for a widget suitable for assigning a mute switch in the path */
 530static hda_nid_t look_for_out_mute_nid(struct hda_codec *codec,
 531                                       struct nid_path *path)
 532{
 533        int i;
 534
 535        for (i = path->depth - 1; i >= 0; i--) {
 536                if (nid_has_mute(codec, path->path[i], HDA_OUTPUT))
 537                        return path->path[i];
 538                if (i != path->depth - 1 && i != 0 &&
 539                    nid_has_mute(codec, path->path[i], HDA_INPUT))
 540                        return path->path[i];
 541        }
 542        return 0;
 543}
 544
 545/* look for a widget suitable for assigning a volume ctl in the path */
 546static hda_nid_t look_for_out_vol_nid(struct hda_codec *codec,
 547                                      struct nid_path *path)
 548{
 549        int i;
 550
 551        for (i = path->depth - 1; i >= 0; i--) {
 552                if (nid_has_volume(codec, path->path[i], HDA_OUTPUT))
 553                        return path->path[i];
 554        }
 555        return 0;
 556}
 557
 558/*
 559 * path activation / deactivation
 560 */
 561
 562/* can have the amp-in capability? */
 563static bool has_amp_in(struct hda_codec *codec, struct nid_path *path, int idx)
 564{
 565        hda_nid_t nid = path->path[idx];
 566        unsigned int caps = get_wcaps(codec, nid);
 567        unsigned int type = get_wcaps_type(caps);
 568
 569        if (!(caps & AC_WCAP_IN_AMP))
 570                return false;
 571        if (type == AC_WID_PIN && idx > 0) /* only for input pins */
 572                return false;
 573        return true;
 574}
 575
 576/* can have the amp-out capability? */
 577static bool has_amp_out(struct hda_codec *codec, struct nid_path *path, int idx)
 578{
 579        hda_nid_t nid = path->path[idx];
 580        unsigned int caps = get_wcaps(codec, nid);
 581        unsigned int type = get_wcaps_type(caps);
 582
 583        if (!(caps & AC_WCAP_OUT_AMP))
 584                return false;
 585        if (type == AC_WID_PIN && !idx) /* only for output pins */
 586                return false;
 587        return true;
 588}
 589
 590/* check whether the given (nid,dir,idx) is active */
 591static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid,
 592                          unsigned int dir, unsigned int idx)
 593{
 594        struct hda_gen_spec *spec = codec->spec;
 595        int i, n;
 596
 597        for (n = 0; n < spec->paths.used; n++) {
 598                struct nid_path *path = snd_array_elem(&spec->paths, n);
 599                if (!path->active)
 600                        continue;
 601                for (i = 0; i < path->depth; i++) {
 602                        if (path->path[i] == nid) {
 603                                if (dir == HDA_OUTPUT || path->idx[i] == idx)
 604                                        return true;
 605                                break;
 606                        }
 607                }
 608        }
 609        return false;
 610}
 611
 612/* check whether the NID is referred by any active paths */
 613#define is_active_nid_for_any(codec, nid) \
 614        is_active_nid(codec, nid, HDA_OUTPUT, 0)
 615
 616/* get the default amp value for the target state */
 617static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid,
 618                                   int dir, unsigned int caps, bool enable)
 619{
 620        unsigned int val = 0;
 621
 622        if (caps & AC_AMPCAP_NUM_STEPS) {
 623                /* set to 0dB */
 624                if (enable)
 625                        val = (caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT;
 626        }
 627        if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
 628                if (!enable)
 629                        val |= HDA_AMP_MUTE;
 630        }
 631        return val;
 632}
 633
 634/* initialize the amp value (only at the first time) */
 635static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx)
 636{
 637        unsigned int caps = query_amp_caps(codec, nid, dir);
 638        int val = get_amp_val_to_activate(codec, nid, dir, caps, false);
 639        snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val);
 640}
 641
 642/* calculate amp value mask we can modify;
 643 * if the given amp is controlled by mixers, don't touch it
 644 */
 645static unsigned int get_amp_mask_to_modify(struct hda_codec *codec,
 646                                           hda_nid_t nid, int dir, int idx,
 647                                           unsigned int caps)
 648{
 649        unsigned int mask = 0xff;
 650
 651        if (caps & (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) {
 652                if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL))
 653                        mask &= ~0x80;
 654        }
 655        if (caps & AC_AMPCAP_NUM_STEPS) {
 656                if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
 657                    is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
 658                        mask &= ~0x7f;
 659        }
 660        return mask;
 661}
 662
 663static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir,
 664                         int idx, int idx_to_check, bool enable)
 665{
 666        unsigned int caps;
 667        unsigned int mask, val;
 668
 669        if (!enable && is_active_nid(codec, nid, dir, idx_to_check))
 670                return;
 671
 672        caps = query_amp_caps(codec, nid, dir);
 673        val = get_amp_val_to_activate(codec, nid, dir, caps, enable);
 674        mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps);
 675        if (!mask)
 676                return;
 677
 678        val &= mask;
 679        snd_hda_codec_amp_stereo(codec, nid, dir, idx, mask, val);
 680}
 681
 682static void activate_amp_out(struct hda_codec *codec, struct nid_path *path,
 683                             int i, bool enable)
 684{
 685        hda_nid_t nid = path->path[i];
 686        init_amp(codec, nid, HDA_OUTPUT, 0);
 687        activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable);
 688}
 689
 690static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
 691                            int i, bool enable, bool add_aamix)
 692{
 693        struct hda_gen_spec *spec = codec->spec;
 694        const hda_nid_t *conn;
 695        int n, nums, idx;
 696        int type;
 697        hda_nid_t nid = path->path[i];
 698
 699        nums = snd_hda_get_conn_list(codec, nid, &conn);
 700        type = get_wcaps_type(get_wcaps(codec, nid));
 701        if (type == AC_WID_PIN ||
 702            (type == AC_WID_AUD_IN && codec->single_adc_amp)) {
 703                nums = 1;
 704                idx = 0;
 705        } else
 706                idx = path->idx[i];
 707
 708        for (n = 0; n < nums; n++)
 709                init_amp(codec, nid, HDA_INPUT, n);
 710
 711        /* here is a little bit tricky in comparison with activate_amp_out();
 712         * when aa-mixer is available, we need to enable the path as well
 713         */
 714        for (n = 0; n < nums; n++) {
 715                if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid))
 716                        continue;
 717                activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
 718        }
 719}
 720
 721/* activate or deactivate the given path
 722 * if @add_aamix is set, enable the input from aa-mix NID as well (if any)
 723 */
 724void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
 725                           bool enable, bool add_aamix)
 726{
 727        struct hda_gen_spec *spec = codec->spec;
 728        int i;
 729
 730        if (!enable)
 731                path->active = false;
 732
 733        for (i = path->depth - 1; i >= 0; i--) {
 734                hda_nid_t nid = path->path[i];
 735                if (enable && spec->power_down_unused) {
 736                        /* make sure the widget is powered up */
 737                        if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D0))
 738                                snd_hda_codec_write(codec, nid, 0,
 739                                                    AC_VERB_SET_POWER_STATE,
 740                                                    AC_PWRST_D0);
 741                }
 742                if (enable && path->multi[i])
 743                        snd_hda_codec_write_cache(codec, nid, 0,
 744                                            AC_VERB_SET_CONNECT_SEL,
 745                                            path->idx[i]);
 746                if (has_amp_in(codec, path, i))
 747                        activate_amp_in(codec, path, i, enable, add_aamix);
 748                if (has_amp_out(codec, path, i))
 749                        activate_amp_out(codec, path, i, enable);
 750        }
 751
 752        if (enable)
 753                path->active = true;
 754}
 755EXPORT_SYMBOL_HDA(snd_hda_activate_path);
 756
 757/* if the given path is inactive, put widgets into D3 (only if suitable) */
 758static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path)
 759{
 760        struct hda_gen_spec *spec = codec->spec;
 761        bool changed = false;
 762        int i;
 763
 764        if (!spec->power_down_unused || path->active)
 765                return;
 766
 767        for (i = 0; i < path->depth; i++) {
 768                hda_nid_t nid = path->path[i];
 769                if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3) &&
 770                    !is_active_nid_for_any(codec, nid)) {
 771                        snd_hda_codec_write(codec, nid, 0,
 772                                            AC_VERB_SET_POWER_STATE,
 773                                            AC_PWRST_D3);
 774                        changed = true;
 775                }
 776        }
 777
 778        if (changed) {
 779                msleep(10);
 780                snd_hda_codec_read(codec, path->path[0], 0,
 781                                   AC_VERB_GET_POWER_STATE, 0);
 782        }
 783}
 784
 785/* turn on/off EAPD on the given pin */
 786static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable)
 787{
 788        struct hda_gen_spec *spec = codec->spec;
 789        if (spec->own_eapd_ctl ||
 790            !(snd_hda_query_pin_caps(codec, pin) & AC_PINCAP_EAPD))
 791                return;
 792        if (codec->inv_eapd)
 793                enable = !enable;
 794        if (spec->keep_eapd_on && !enable)
 795                return;
 796        snd_hda_codec_update_cache(codec, pin, 0,
 797                                   AC_VERB_SET_EAPD_BTLENABLE,
 798                                   enable ? 0x02 : 0x00);
 799}
 800
 801/* re-initialize the path specified by the given path index */
 802static void resume_path_from_idx(struct hda_codec *codec, int path_idx)
 803{
 804        struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
 805        if (path)
 806                snd_hda_activate_path(codec, path, path->active, false);
 807}
 808
 809
 810/*
 811 * Helper functions for creating mixer ctl elements
 812 */
 813
 814static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
 815                                  struct snd_ctl_elem_value *ucontrol);
 816
 817enum {
 818        HDA_CTL_WIDGET_VOL,
 819        HDA_CTL_WIDGET_MUTE,
 820        HDA_CTL_BIND_MUTE,
 821};
 822static const struct snd_kcontrol_new control_templates[] = {
 823        HDA_CODEC_VOLUME(NULL, 0, 0, 0),
 824        /* only the put callback is replaced for handling the special mute */
 825        {
 826                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 827                .subdevice = HDA_SUBDEV_AMP_FLAG,
 828                .info = snd_hda_mixer_amp_switch_info,
 829                .get = snd_hda_mixer_amp_switch_get,
 830                .put = hda_gen_mixer_mute_put, /* replaced */
 831                .private_value = HDA_COMPOSE_AMP_VAL(0, 3, 0, 0),
 832        },
 833        HDA_BIND_MUTE(NULL, 0, 0, 0),
 834};
 835
 836/* add dynamic controls from template */
 837static struct snd_kcontrol_new *
 838add_control(struct hda_gen_spec *spec, int type, const char *name,
 839                       int cidx, unsigned long val)
 840{
 841        struct snd_kcontrol_new *knew;
 842
 843        knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
 844        if (!knew)
 845                return NULL;
 846        knew->index = cidx;
 847        if (get_amp_nid_(val))
 848                knew->subdevice = HDA_SUBDEV_AMP_FLAG;
 849        knew->private_value = val;
 850        return knew;
 851}
 852
 853static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
 854                                const char *pfx, const char *dir,
 855                                const char *sfx, int cidx, unsigned long val)
 856{
 857        char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
 858        snprintf(name, sizeof(name), "%s %s %s", pfx, dir, sfx);
 859        if (!add_control(spec, type, name, cidx, val))
 860                return -ENOMEM;
 861        return 0;
 862}
 863
 864#define add_pb_vol_ctrl(spec, type, pfx, val)                   \
 865        add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
 866#define add_pb_sw_ctrl(spec, type, pfx, val)                    \
 867        add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
 868#define __add_pb_vol_ctrl(spec, type, pfx, cidx, val)                   \
 869        add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
 870#define __add_pb_sw_ctrl(spec, type, pfx, cidx, val)                    \
 871        add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
 872
 873static int add_vol_ctl(struct hda_codec *codec, const char *pfx, int cidx,
 874                       unsigned int chs, struct nid_path *path)
 875{
 876        unsigned int val;
 877        if (!path)
 878                return 0;
 879        val = path->ctls[NID_PATH_VOL_CTL];
 880        if (!val)
 881                return 0;
 882        val = amp_val_replace_channels(val, chs);
 883        return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
 884}
 885
 886/* return the channel bits suitable for the given path->ctls[] */
 887static int get_default_ch_nums(struct hda_codec *codec, struct nid_path *path,
 888                               int type)
 889{
 890        int chs = 1; /* mono (left only) */
 891        if (path) {
 892                hda_nid_t nid = get_amp_nid_(path->ctls[type]);
 893                if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO))
 894                        chs = 3; /* stereo */
 895        }
 896        return chs;
 897}
 898
 899static int add_stereo_vol(struct hda_codec *codec, const char *pfx, int cidx,
 900                          struct nid_path *path)
 901{
 902        int chs = get_default_ch_nums(codec, path, NID_PATH_VOL_CTL);
 903        return add_vol_ctl(codec, pfx, cidx, chs, path);
 904}
 905
 906/* create a mute-switch for the given mixer widget;
 907 * if it has multiple sources (e.g. DAC and loopback), create a bind-mute
 908 */
 909static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx,
 910                      unsigned int chs, struct nid_path *path)
 911{
 912        unsigned int val;
 913        int type = HDA_CTL_WIDGET_MUTE;
 914
 915        if (!path)
 916                return 0;
 917        val = path->ctls[NID_PATH_MUTE_CTL];
 918        if (!val)
 919                return 0;
 920        val = amp_val_replace_channels(val, chs);
 921        if (get_amp_direction_(val) == HDA_INPUT) {
 922                hda_nid_t nid = get_amp_nid_(val);
 923                int nums = snd_hda_get_num_conns(codec, nid);
 924                if (nums > 1) {
 925                        type = HDA_CTL_BIND_MUTE;
 926                        val |= nums << 19;
 927                }
 928        }
 929        return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
 930}
 931
 932static int add_stereo_sw(struct hda_codec *codec, const char *pfx,
 933                                  int cidx, struct nid_path *path)
 934{
 935        int chs = get_default_ch_nums(codec, path, NID_PATH_MUTE_CTL);
 936        return add_sw_ctl(codec, pfx, cidx, chs, path);
 937}
 938
 939/* playback mute control with the software mute bit check */
 940static int hda_gen_mixer_mute_put(struct snd_kcontrol *kcontrol,
 941                                  struct snd_ctl_elem_value *ucontrol)
 942{
 943        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
 944        struct hda_gen_spec *spec = codec->spec;
 945
 946        if (spec->auto_mute_via_amp) {
 947                hda_nid_t nid = get_amp_nid(kcontrol);
 948                bool enabled = !((spec->mute_bits >> nid) & 1);
 949                ucontrol->value.integer.value[0] &= enabled;
 950                ucontrol->value.integer.value[1] &= enabled;
 951        }
 952
 953        return snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
 954}
 955
 956/* any ctl assigned to the path with the given index? */
 957static bool path_has_mixer(struct hda_codec *codec, int path_idx, int ctl_type)
 958{
 959        struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx);
 960        return path && path->ctls[ctl_type];
 961}
 962
 963static const char * const channel_name[4] = {
 964        "Front", "Surround", "CLFE", "Side"
 965};
 966
 967/* give some appropriate ctl name prefix for the given line out channel */
 968static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
 969                                    int *index, int ctl_type)
 970{
 971        struct hda_gen_spec *spec = codec->spec;
 972        struct auto_pin_cfg *cfg = &spec->autocfg;
 973
 974        *index = 0;
 975        if (cfg->line_outs == 1 && !spec->multi_ios &&
 976            !cfg->hp_outs && !cfg->speaker_outs)
 977                return spec->vmaster_mute.hook ? "PCM" : "Master";
 978
 979        /* if there is really a single DAC used in the whole output paths,
 980         * use it master (or "PCM" if a vmaster hook is present)
 981         */
 982        if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
 983            !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
 984                return spec->vmaster_mute.hook ? "PCM" : "Master";
 985
 986        /* multi-io channels */
 987        if (ch >= cfg->line_outs)
 988                return channel_name[ch];
 989
 990        switch (cfg->line_out_type) {
 991        case AUTO_PIN_SPEAKER_OUT:
 992                /* if the primary channel vol/mute is shared with HP volume,
 993                 * don't name it as Speaker
 994                 */
 995                if (!ch && cfg->hp_outs &&
 996                    !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
 997                        break;
 998                if (cfg->line_outs == 1)
 999                        return "Speaker";
1000                if (cfg->line_outs == 2)
1001                        return ch ? "Bass Speaker" : "Speaker";
1002                break;
1003        case AUTO_PIN_HP_OUT:
1004                /* if the primary channel vol/mute is shared with spk volume,
1005                 * don't name it as Headphone
1006                 */
1007                if (!ch && cfg->speaker_outs &&
1008                    !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1009                        break;
1010                /* for multi-io case, only the primary out */
1011                if (ch && spec->multi_ios)
1012                        break;
1013                *index = ch;
1014                return "Headphone";
1015        }
1016
1017        /* for a single channel output, we don't have to name the channel */
1018        if (cfg->line_outs == 1 && !spec->multi_ios)
1019                return "PCM";
1020
1021        if (ch >= ARRAY_SIZE(channel_name)) {
1022                snd_BUG();
1023                return "PCM";
1024        }
1025
1026        return channel_name[ch];
1027}
1028
1029/*
1030 * Parse output paths
1031 */
1032
1033/* badness definition */
1034enum {
1035        /* No primary DAC is found for the main output */
1036        BAD_NO_PRIMARY_DAC = 0x10000,
1037        /* No DAC is found for the extra output */
1038        BAD_NO_DAC = 0x4000,
1039        /* No possible multi-ios */
1040        BAD_MULTI_IO = 0x120,
1041        /* No individual DAC for extra output */
1042        BAD_NO_EXTRA_DAC = 0x102,
1043        /* No individual DAC for extra surrounds */
1044        BAD_NO_EXTRA_SURR_DAC = 0x101,
1045        /* Primary DAC shared with main surrounds */
1046        BAD_SHARED_SURROUND = 0x100,
1047        /* No independent HP possible */
1048        BAD_NO_INDEP_HP = 0x10,
1049        /* Primary DAC shared with main CLFE */
1050        BAD_SHARED_CLFE = 0x10,
1051        /* Primary DAC shared with extra surrounds */
1052        BAD_SHARED_EXTRA_SURROUND = 0x10,
1053        /* Volume widget is shared */
1054        BAD_SHARED_VOL = 0x10,
1055};
1056
1057/* look for widgets in the given path which are appropriate for
1058 * volume and mute controls, and assign the values to ctls[].
1059 *
1060 * When no appropriate widget is found in the path, the badness value
1061 * is incremented depending on the situation.  The function returns the
1062 * total badness for both volume and mute controls.
1063 */
1064static int assign_out_path_ctls(struct hda_codec *codec, struct nid_path *path)
1065{
1066        hda_nid_t nid;
1067        unsigned int val;
1068        int badness = 0;
1069
1070        if (!path)
1071                return BAD_SHARED_VOL * 2;
1072
1073        if (path->ctls[NID_PATH_VOL_CTL] ||
1074            path->ctls[NID_PATH_MUTE_CTL])
1075                return 0; /* already evaluated */
1076
1077        nid = look_for_out_vol_nid(codec, path);
1078        if (nid) {
1079                val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1080                if (is_ctl_used(codec, val, NID_PATH_VOL_CTL))
1081                        badness += BAD_SHARED_VOL;
1082                else
1083                        path->ctls[NID_PATH_VOL_CTL] = val;
1084        } else
1085                badness += BAD_SHARED_VOL;
1086        nid = look_for_out_mute_nid(codec, path);
1087        if (nid) {
1088                unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid));
1089                if (wid_type == AC_WID_PIN || wid_type == AC_WID_AUD_OUT ||
1090                    nid_has_mute(codec, nid, HDA_OUTPUT))
1091                        val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
1092                else
1093                        val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
1094                if (is_ctl_used(codec, val, NID_PATH_MUTE_CTL))
1095                        badness += BAD_SHARED_VOL;
1096                else
1097                        path->ctls[NID_PATH_MUTE_CTL] = val;
1098        } else
1099                badness += BAD_SHARED_VOL;
1100        return badness;
1101}
1102
1103const struct badness_table hda_main_out_badness = {
1104        .no_primary_dac = BAD_NO_PRIMARY_DAC,
1105        .no_dac = BAD_NO_DAC,
1106        .shared_primary = BAD_NO_PRIMARY_DAC,
1107        .shared_surr = BAD_SHARED_SURROUND,
1108        .shared_clfe = BAD_SHARED_CLFE,
1109        .shared_surr_main = BAD_SHARED_SURROUND,
1110};
1111EXPORT_SYMBOL_HDA(hda_main_out_badness);
1112
1113const struct badness_table hda_extra_out_badness = {
1114        .no_primary_dac = BAD_NO_DAC,
1115        .no_dac = BAD_NO_DAC,
1116        .shared_primary = BAD_NO_EXTRA_DAC,
1117        .shared_surr = BAD_SHARED_EXTRA_SURROUND,
1118        .shared_clfe = BAD_SHARED_EXTRA_SURROUND,
1119        .shared_surr_main = BAD_NO_EXTRA_SURR_DAC,
1120};
1121EXPORT_SYMBOL_HDA(hda_extra_out_badness);
1122
1123/* get the DAC of the primary output corresponding to the given array index */
1124static hda_nid_t get_primary_out(struct hda_codec *codec, int idx)
1125{
1126        struct hda_gen_spec *spec = codec->spec;
1127        struct auto_pin_cfg *cfg = &spec->autocfg;
1128
1129        if (cfg->line_outs > idx)
1130                return spec->private_dac_nids[idx];
1131        idx -= cfg->line_outs;
1132        if (spec->multi_ios > idx)
1133                return spec->multi_io[idx].dac;
1134        return 0;
1135}
1136
1137/* return the DAC if it's reachable, otherwise zero */
1138static inline hda_nid_t try_dac(struct hda_codec *codec,
1139                                hda_nid_t dac, hda_nid_t pin)
1140{
1141        return is_reachable_path(codec, dac, pin) ? dac : 0;
1142}
1143
1144/* try to assign DACs to pins and return the resultant badness */
1145static int try_assign_dacs(struct hda_codec *codec, int num_outs,
1146                           const hda_nid_t *pins, hda_nid_t *dacs,
1147                           int *path_idx,
1148                           const struct badness_table *bad)
1149{
1150        struct hda_gen_spec *spec = codec->spec;
1151        int i, j;
1152        int badness = 0;
1153        hda_nid_t dac;
1154
1155        if (!num_outs)
1156                return 0;
1157
1158        for (i = 0; i < num_outs; i++) {
1159                struct nid_path *path;
1160                hda_nid_t pin = pins[i];
1161
1162                path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1163                if (path) {
1164                        badness += assign_out_path_ctls(codec, path);
1165                        continue;
1166                }
1167
1168                dacs[i] = look_for_dac(codec, pin, false);
1169                if (!dacs[i] && !i) {
1170                        /* try to steal the DAC of surrounds for the front */
1171                        for (j = 1; j < num_outs; j++) {
1172                                if (is_reachable_path(codec, dacs[j], pin)) {
1173                                        dacs[0] = dacs[j];
1174                                        dacs[j] = 0;
1175                                        invalidate_nid_path(codec, path_idx[j]);
1176                                        path_idx[j] = 0;
1177                                        break;
1178                                }
1179                        }
1180                }
1181                dac = dacs[i];
1182                if (!dac) {
1183                        if (num_outs > 2)
1184                                dac = try_dac(codec, get_primary_out(codec, i), pin);
1185                        if (!dac)
1186                                dac = try_dac(codec, dacs[0], pin);
1187                        if (!dac)
1188                                dac = try_dac(codec, get_primary_out(codec, i), pin);
1189                        if (dac) {
1190                                if (!i)
1191                                        badness += bad->shared_primary;
1192                                else if (i == 1)
1193                                        badness += bad->shared_surr;
1194                                else
1195                                        badness += bad->shared_clfe;
1196                        } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1197                                dac = spec->private_dac_nids[0];
1198                                badness += bad->shared_surr_main;
1199                        } else if (!i)
1200                                badness += bad->no_primary_dac;
1201                        else
1202                                badness += bad->no_dac;
1203                }
1204                if (!dac)
1205                        continue;
1206                path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1207                if (!path && !i && spec->mixer_nid) {
1208                        /* try with aamix */
1209                        path = snd_hda_add_new_path(codec, dac, pin, 0);
1210                }
1211                if (!path) {
1212                        dac = dacs[i] = 0;
1213                        badness += bad->no_dac;
1214                } else {
1215                        /* print_nid_path("output", path); */
1216                        path->active = true;
1217                        path_idx[i] = snd_hda_get_path_idx(codec, path);
1218                        badness += assign_out_path_ctls(codec, path);
1219                }
1220        }
1221
1222        return badness;
1223}
1224
1225/* return NID if the given pin has only a single connection to a certain DAC */
1226static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
1227{
1228        struct hda_gen_spec *spec = codec->spec;
1229        int i;
1230        hda_nid_t nid_found = 0;
1231
1232        for (i = 0; i < spec->num_all_dacs; i++) {
1233                hda_nid_t nid = spec->all_dacs[i];
1234                if (!nid || is_dac_already_used(codec, nid))
1235                        continue;
1236                if (is_reachable_path(codec, nid, pin)) {
1237                        if (nid_found)
1238                                return 0;
1239                        nid_found = nid;
1240                }
1241        }
1242        return nid_found;
1243}
1244
1245/* check whether the given pin can be a multi-io pin */
1246static bool can_be_multiio_pin(struct hda_codec *codec,
1247                               unsigned int location, hda_nid_t nid)
1248{
1249        unsigned int defcfg, caps;
1250
1251        defcfg = snd_hda_codec_get_pincfg(codec, nid);
1252        if (get_defcfg_connect(defcfg) != AC_JACK_PORT_COMPLEX)
1253                return false;
1254        if (location && get_defcfg_location(defcfg) != location)
1255                return false;
1256        caps = snd_hda_query_pin_caps(codec, nid);
1257        if (!(caps & AC_PINCAP_OUT))
1258                return false;
1259        return true;
1260}
1261
1262/* count the number of input pins that are capable to be multi-io */
1263static int count_multiio_pins(struct hda_codec *codec, hda_nid_t reference_pin)
1264{
1265        struct hda_gen_spec *spec = codec->spec;
1266        struct auto_pin_cfg *cfg = &spec->autocfg;
1267        unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1268        unsigned int location = get_defcfg_location(defcfg);
1269        int type, i;
1270        int num_pins = 0;
1271
1272        for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1273                for (i = 0; i < cfg->num_inputs; i++) {
1274                        if (cfg->inputs[i].type != type)
1275                                continue;
1276                        if (can_be_multiio_pin(codec, location,
1277                                               cfg->inputs[i].pin))
1278                                num_pins++;
1279                }
1280        }
1281        return num_pins;
1282}
1283
1284/*
1285 * multi-io helper
1286 *
1287 * When hardwired is set, try to fill ony hardwired pins, and returns
1288 * zero if any pins are filled, non-zero if nothing found.
1289 * When hardwired is off, try to fill possible input pins, and returns
1290 * the badness value.
1291 */
1292static int fill_multi_ios(struct hda_codec *codec,
1293                          hda_nid_t reference_pin,
1294                          bool hardwired)
1295{
1296        struct hda_gen_spec *spec = codec->spec;
1297        struct auto_pin_cfg *cfg = &spec->autocfg;
1298        int type, i, j, num_pins, old_pins;
1299        unsigned int defcfg = snd_hda_codec_get_pincfg(codec, reference_pin);
1300        unsigned int location = get_defcfg_location(defcfg);
1301        int badness = 0;
1302        struct nid_path *path;
1303
1304        old_pins = spec->multi_ios;
1305        if (old_pins >= 2)
1306                goto end_fill;
1307
1308        num_pins = count_multiio_pins(codec, reference_pin);
1309        if (num_pins < 2)
1310                goto end_fill;
1311
1312        for (type = AUTO_PIN_LINE_IN; type >= AUTO_PIN_MIC; type--) {
1313                for (i = 0; i < cfg->num_inputs; i++) {
1314                        hda_nid_t nid = cfg->inputs[i].pin;
1315                        hda_nid_t dac = 0;
1316
1317                        if (cfg->inputs[i].type != type)
1318                                continue;
1319                        if (!can_be_multiio_pin(codec, location, nid))
1320                                continue;
1321                        for (j = 0; j < spec->multi_ios; j++) {
1322                                if (nid == spec->multi_io[j].pin)
1323                                        break;
1324                        }
1325                        if (j < spec->multi_ios)
1326                                continue;
1327
1328                        if (hardwired)
1329                                dac = get_dac_if_single(codec, nid);
1330                        else if (!dac)
1331                                dac = look_for_dac(codec, nid, false);
1332                        if (!dac) {
1333                                badness++;
1334                                continue;
1335                        }
1336                        path = snd_hda_add_new_path(codec, dac, nid,
1337                                                    -spec->mixer_nid);
1338                        if (!path) {
1339                                badness++;
1340                                continue;
1341                        }
1342                        /* print_nid_path("multiio", path); */
1343                        spec->multi_io[spec->multi_ios].pin = nid;
1344                        spec->multi_io[spec->multi_ios].dac = dac;
1345                        spec->out_paths[cfg->line_outs + spec->multi_ios] =
1346                                snd_hda_get_path_idx(codec, path);
1347                        spec->multi_ios++;
1348                        if (spec->multi_ios >= 2)
1349                                break;
1350                }
1351        }
1352 end_fill:
1353        if (badness)
1354                badness = BAD_MULTI_IO;
1355        if (old_pins == spec->multi_ios) {
1356                if (hardwired)
1357                        return 1; /* nothing found */
1358                else
1359                        return badness; /* no badness if nothing found */
1360        }
1361        if (!hardwired && spec->multi_ios < 2) {
1362                /* cancel newly assigned paths */
1363                spec->paths.used -= spec->multi_ios - old_pins;
1364                spec->multi_ios = old_pins;
1365                return badness;
1366        }
1367
1368        /* assign volume and mute controls */
1369        for (i = old_pins; i < spec->multi_ios; i++) {
1370                path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1371                badness += assign_out_path_ctls(codec, path);
1372        }
1373
1374        return badness;
1375}
1376
1377/* map DACs for all pins in the list if they are single connections */
1378static bool map_singles(struct hda_codec *codec, int outs,
1379                        const hda_nid_t *pins, hda_nid_t *dacs, int *path_idx)
1380{
1381        struct hda_gen_spec *spec = codec->spec;
1382        int i;
1383        bool found = false;
1384        for (i = 0; i < outs; i++) {
1385                struct nid_path *path;
1386                hda_nid_t dac;
1387                if (dacs[i])
1388                        continue;
1389                dac = get_dac_if_single(codec, pins[i]);
1390                if (!dac)
1391                        continue;
1392                path = snd_hda_add_new_path(codec, dac, pins[i],
1393                                            -spec->mixer_nid);
1394                if (!path && !i && spec->mixer_nid)
1395                        path = snd_hda_add_new_path(codec, dac, pins[i], 0);
1396                if (path) {
1397                        dacs[i] = dac;
1398                        found = true;
1399                        /* print_nid_path("output", path); */
1400                        path->active = true;
1401                        path_idx[i] = snd_hda_get_path_idx(codec, path);
1402                }
1403        }
1404        return found;
1405}
1406
1407/* create a new path including aamix if available, and return its index */
1408static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
1409{
1410        struct hda_gen_spec *spec = codec->spec;
1411        struct nid_path *path;
1412        hda_nid_t path_dac, dac, pin;
1413
1414        path = snd_hda_get_path_from_idx(codec, path_idx);
1415        if (!path || !path->depth ||
1416            is_nid_contained(path, spec->mixer_nid))
1417                return 0;
1418        path_dac = path->path[0];
1419        dac = spec->private_dac_nids[0];
1420        pin = path->path[path->depth - 1];
1421        path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1422        if (!path) {
1423                if (dac != path_dac)
1424                        dac = path_dac;
1425                else if (spec->multiout.hp_out_nid[0])
1426                        dac = spec->multiout.hp_out_nid[0];
1427                else if (spec->multiout.extra_out_nid[0])
1428                        dac = spec->multiout.extra_out_nid[0];
1429                else
1430                        dac = 0;
1431                if (dac)
1432                        path = snd_hda_add_new_path(codec, dac, pin,
1433                                                    spec->mixer_nid);
1434        }
1435        if (!path)
1436                return 0;
1437        /* print_nid_path("output-aamix", path); */
1438        path->active = false; /* unused as default */
1439        return snd_hda_get_path_idx(codec, path);
1440}
1441
1442/* check whether the independent HP is available with the current config */
1443static bool indep_hp_possible(struct hda_codec *codec)
1444{
1445        struct hda_gen_spec *spec = codec->spec;
1446        struct auto_pin_cfg *cfg = &spec->autocfg;
1447        struct nid_path *path;
1448        int i, idx;
1449
1450        if (cfg->line_out_type == AUTO_PIN_HP_OUT)
1451                idx = spec->out_paths[0];
1452        else
1453                idx = spec->hp_paths[0];
1454        path = snd_hda_get_path_from_idx(codec, idx);
1455        if (!path)
1456                return false;
1457
1458        /* assume no path conflicts unless aamix is involved */
1459        if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1460                return true;
1461
1462        /* check whether output paths contain aamix */
1463        for (i = 0; i < cfg->line_outs; i++) {
1464                if (spec->out_paths[i] == idx)
1465                        break;
1466                path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1467                if (path && is_nid_contained(path, spec->mixer_nid))
1468                        return false;
1469        }
1470        for (i = 0; i < cfg->speaker_outs; i++) {
1471                path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1472                if (path && is_nid_contained(path, spec->mixer_nid))
1473                        return false;
1474        }
1475
1476        return true;
1477}
1478
1479/* fill the empty entries in the dac array for speaker/hp with the
1480 * shared dac pointed by the paths
1481 */
1482static void refill_shared_dacs(struct hda_codec *codec, int num_outs,
1483                               hda_nid_t *dacs, int *path_idx)
1484{
1485        struct nid_path *path;
1486        int i;
1487
1488        for (i = 0; i < num_outs; i++) {
1489                if (dacs[i])
1490                        continue;
1491                path = snd_hda_get_path_from_idx(codec, path_idx[i]);
1492                if (!path)
1493                        continue;
1494                dacs[i] = path->path[0];
1495        }
1496}
1497
1498/* fill in the dac_nids table from the parsed pin configuration */
1499static int fill_and_eval_dacs(struct hda_codec *codec,
1500                              bool fill_hardwired,
1501                              bool fill_mio_first)
1502{
1503        struct hda_gen_spec *spec = codec->spec;
1504        struct auto_pin_cfg *cfg = &spec->autocfg;
1505        int i, err, badness;
1506
1507        /* set num_dacs once to full for look_for_dac() */
1508        spec->multiout.num_dacs = cfg->line_outs;
1509        spec->multiout.dac_nids = spec->private_dac_nids;
1510        memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1511        memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1512        memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1513        spec->multi_ios = 0;
1514        snd_array_free(&spec->paths);
1515
1516        /* clear path indices */
1517        memset(spec->out_paths, 0, sizeof(spec->out_paths));
1518        memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1519        memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1520        memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1521        memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1522        memset(spec->input_paths, 0, sizeof(spec->input_paths));
1523        memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1524        memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1525
1526        badness = 0;
1527
1528        /* fill hard-wired DACs first */
1529        if (fill_hardwired) {
1530                bool mapped;
1531                do {
1532                        mapped = map_singles(codec, cfg->line_outs,
1533                                             cfg->line_out_pins,
1534                                             spec->private_dac_nids,
1535                                             spec->out_paths);
1536                        mapped |= map_singles(codec, cfg->hp_outs,
1537                                              cfg->hp_pins,
1538                                              spec->multiout.hp_out_nid,
1539                                              spec->hp_paths);
1540                        mapped |= map_singles(codec, cfg->speaker_outs,
1541                                              cfg->speaker_pins,
1542                                              spec->multiout.extra_out_nid,
1543                                              spec->speaker_paths);
1544                        if (fill_mio_first && cfg->line_outs == 1 &&
1545                            cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1546                                err = fill_multi_ios(codec, cfg->line_out_pins[0], true);
1547                                if (!err)
1548                                        mapped = true;
1549                        }
1550                } while (mapped);
1551        }
1552
1553        badness += try_assign_dacs(codec, cfg->line_outs, cfg->line_out_pins,
1554                                   spec->private_dac_nids, spec->out_paths,
1555                                   spec->main_out_badness);
1556
1557        if (fill_mio_first &&
1558            cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1559                /* try to fill multi-io first */
1560                err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1561                if (err < 0)
1562                        return err;
1563                /* we don't count badness at this stage yet */
1564        }
1565
1566        if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
1567                err = try_assign_dacs(codec, cfg->hp_outs, cfg->hp_pins,
1568                                      spec->multiout.hp_out_nid,
1569                                      spec->hp_paths,
1570                                      spec->extra_out_badness);
1571                if (err < 0)
1572                        return err;
1573                badness += err;
1574        }
1575        if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1576                err = try_assign_dacs(codec, cfg->speaker_outs,
1577                                      cfg->speaker_pins,
1578                                      spec->multiout.extra_out_nid,
1579                                      spec->speaker_paths,
1580                                      spec->extra_out_badness);
1581                if (err < 0)
1582                        return err;
1583                badness += err;
1584        }
1585        if (cfg->line_outs == 1 && cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1586                err = fill_multi_ios(codec, cfg->line_out_pins[0], false);
1587                if (err < 0)
1588                        return err;
1589                badness += err;
1590        }
1591
1592        if (spec->mixer_nid) {
1593                spec->aamix_out_paths[0] =
1594                        check_aamix_out_path(codec, spec->out_paths[0]);
1595                if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1596                        spec->aamix_out_paths[1] =
1597                                check_aamix_out_path(codec, spec->hp_paths[0]);
1598                if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1599                        spec->aamix_out_paths[2] =
1600                                check_aamix_out_path(codec, spec->speaker_paths[0]);
1601        }
1602
1603        if (cfg->hp_outs && cfg->line_out_type == AUTO_PIN_SPEAKER_OUT)
1604                if (count_multiio_pins(codec, cfg->hp_pins[0]) >= 2)
1605                        spec->multi_ios = 1; /* give badness */
1606
1607        /* re-count num_dacs and squash invalid entries */
1608        spec->multiout.num_dacs = 0;
1609        for (i = 0; i < cfg->line_outs; i++) {
1610                if (spec->private_dac_nids[i])
1611                        spec->multiout.num_dacs++;
1612                else {
1613                        memmove(spec->private_dac_nids + i,
1614                                spec->private_dac_nids + i + 1,
1615                                sizeof(hda_nid_t) * (cfg->line_outs - i - 1));
1616                        spec->private_dac_nids[cfg->line_outs - 1] = 0;
1617                }
1618        }
1619
1620        spec->ext_channel_count = spec->min_channel_count =
1621                spec->multiout.num_dacs * 2;
1622
1623        if (spec->multi_ios == 2) {
1624                for (i = 0; i < 2; i++)
1625                        spec->private_dac_nids[spec->multiout.num_dacs++] =
1626                                spec->multi_io[i].dac;
1627        } else if (spec->multi_ios) {
1628                spec->multi_ios = 0;
1629                badness += BAD_MULTI_IO;
1630        }
1631
1632        if (spec->indep_hp && !indep_hp_possible(codec))
1633                badness += BAD_NO_INDEP_HP;
1634
1635        /* re-fill the shared DAC for speaker / headphone */
1636        if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1637                refill_shared_dacs(codec, cfg->hp_outs,
1638                                   spec->multiout.hp_out_nid,
1639                                   spec->hp_paths);
1640        if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
1641                refill_shared_dacs(codec, cfg->speaker_outs,
1642                                   spec->multiout.extra_out_nid,
1643                                   spec->speaker_paths);
1644
1645        return badness;
1646}
1647
1648#define DEBUG_BADNESS
1649
1650#ifdef DEBUG_BADNESS
1651#define debug_badness   snd_printdd
1652#else
1653#define debug_badness(...)
1654#endif
1655
1656#ifdef DEBUG_BADNESS
1657static inline void print_nid_path_idx(struct hda_codec *codec,
1658                                      const char *pfx, int idx)
1659{
1660        struct nid_path *path;
1661
1662        path = snd_hda_get_path_from_idx(codec, idx);
1663        if (path)
1664                print_nid_path(pfx, path);
1665}
1666
1667static void debug_show_configs(struct hda_codec *codec,
1668                               struct auto_pin_cfg *cfg)
1669{
1670        struct hda_gen_spec *spec = codec->spec;
1671        static const char * const lo_type[3] = { "LO", "SP", "HP" };
1672        int i;
1673
1674        debug_badness("multi_outs = %x/%x/%x/%x : %x/%x/%x/%x (type %s)\n",
1675                      cfg->line_out_pins[0], cfg->line_out_pins[1],
1676                      cfg->line_out_pins[2], cfg->line_out_pins[3],
1677                      spec->multiout.dac_nids[0],
1678                      spec->multiout.dac_nids[1],
1679                      spec->multiout.dac_nids[2],
1680                      spec->multiout.dac_nids[3],
1681                      lo_type[cfg->line_out_type]);
1682        for (i = 0; i < cfg->line_outs; i++)
1683                print_nid_path_idx(codec, "  out", spec->out_paths[i]);
1684        if (spec->multi_ios > 0)
1685                debug_badness("multi_ios(%d) = %x/%x : %x/%x\n",
1686                              spec->multi_ios,
1687                              spec->multi_io[0].pin, spec->multi_io[1].pin,
1688                              spec->multi_io[0].dac, spec->multi_io[1].dac);
1689        for (i = 0; i < spec->multi_ios; i++)
1690                print_nid_path_idx(codec, "  mio",
1691                                   spec->out_paths[cfg->line_outs + i]);
1692        if (cfg->hp_outs)
1693                debug_badness("hp_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1694                      cfg->hp_pins[0], cfg->hp_pins[1],
1695                      cfg->hp_pins[2], cfg->hp_pins[3],
1696                      spec->multiout.hp_out_nid[0],
1697                      spec->multiout.hp_out_nid[1],
1698                      spec->multiout.hp_out_nid[2],
1699                      spec->multiout.hp_out_nid[3]);
1700        for (i = 0; i < cfg->hp_outs; i++)
1701                print_nid_path_idx(codec, "  hp ", spec->hp_paths[i]);
1702        if (cfg->speaker_outs)
1703                debug_badness("spk_outs = %x/%x/%x/%x : %x/%x/%x/%x\n",
1704                      cfg->speaker_pins[0], cfg->speaker_pins[1],
1705                      cfg->speaker_pins[2], cfg->speaker_pins[3],
1706                      spec->multiout.extra_out_nid[0],
1707                      spec->multiout.extra_out_nid[1],
1708                      spec->multiout.extra_out_nid[2],
1709                      spec->multiout.extra_out_nid[3]);
1710        for (i = 0; i < cfg->speaker_outs; i++)
1711                print_nid_path_idx(codec, "  spk", spec->speaker_paths[i]);
1712        for (i = 0; i < 3; i++)
1713                print_nid_path_idx(codec, "  mix", spec->aamix_out_paths[i]);
1714}
1715#else
1716#define debug_show_configs(codec, cfg) /* NOP */
1717#endif
1718
1719/* find all available DACs of the codec */
1720static void fill_all_dac_nids(struct hda_codec *codec)
1721{
1722        struct hda_gen_spec *spec = codec->spec;
1723        int i;
1724        hda_nid_t nid = codec->start_nid;
1725
1726        spec->num_all_dacs = 0;
1727        memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1728        for (i = 0; i < codec->num_nodes; i++, nid++) {
1729                if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT)
1730                        continue;
1731                if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1732                        snd_printk(KERN_ERR "hda: Too many DACs!\n");
1733                        break;
1734                }
1735                spec->all_dacs[spec->num_all_dacs++] = nid;
1736        }
1737}
1738
1739static int parse_output_paths(struct hda_codec *codec)
1740{
1741        struct hda_gen_spec *spec = codec->spec;
1742        struct auto_pin_cfg *cfg = &spec->autocfg;
1743        struct auto_pin_cfg *best_cfg;
1744        unsigned int val;
1745        int best_badness = INT_MAX;
1746        int badness;
1747        bool fill_hardwired = true, fill_mio_first = true;
1748        bool best_wired = true, best_mio = true;
1749        bool hp_spk_swapped = false;
1750
1751        best_cfg = kmalloc(sizeof(*best_cfg), GFP_KERNEL);
1752        if (!best_cfg)
1753                return -ENOMEM;
1754        *best_cfg = *cfg;
1755
1756        for (;;) {
1757                badness = fill_and_eval_dacs(codec, fill_hardwired,
1758                                             fill_mio_first);
1759                if (badness < 0) {
1760                        kfree(best_cfg);
1761                        return badness;
1762                }
1763                debug_badness("==> lo_type=%d, wired=%d, mio=%d, badness=0x%x\n",
1764                              cfg->line_out_type, fill_hardwired, fill_mio_first,
1765                              badness);
1766                debug_show_configs(codec, cfg);
1767                if (badness < best_badness) {
1768                        best_badness = badness;
1769                        *best_cfg = *cfg;
1770                        best_wired = fill_hardwired;
1771                        best_mio = fill_mio_first;
1772                }
1773                if (!badness)
1774                        break;
1775                fill_mio_first = !fill_mio_first;
1776                if (!fill_mio_first)
1777                        continue;
1778                fill_hardwired = !fill_hardwired;
1779                if (!fill_hardwired)
1780                        continue;
1781                if (hp_spk_swapped)
1782                        break;
1783                hp_spk_swapped = true;
1784                if (cfg->speaker_outs > 0 &&
1785                    cfg->line_out_type == AUTO_PIN_HP_OUT) {
1786                        cfg->hp_outs = cfg->line_outs;
1787                        memcpy(cfg->hp_pins, cfg->line_out_pins,
1788                               sizeof(cfg->hp_pins));
1789                        cfg->line_outs = cfg->speaker_outs;
1790                        memcpy(cfg->line_out_pins, cfg->speaker_pins,
1791                               sizeof(cfg->speaker_pins));
1792                        cfg->speaker_outs = 0;
1793                        memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins));
1794                        cfg->line_out_type = AUTO_PIN_SPEAKER_OUT;
1795                        fill_hardwired = true;
1796                        continue;
1797                }
1798                if (cfg->hp_outs > 0 &&
1799                    cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
1800                        cfg->speaker_outs = cfg->line_outs;
1801                        memcpy(cfg->speaker_pins, cfg->line_out_pins,
1802                               sizeof(cfg->speaker_pins));
1803                        cfg->line_outs = cfg->hp_outs;
1804                        memcpy(cfg->line_out_pins, cfg->hp_pins,
1805                               sizeof(cfg->hp_pins));
1806                        cfg->hp_outs = 0;
1807                        memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
1808                        cfg->line_out_type = AUTO_PIN_HP_OUT;
1809                        fill_hardwired = true;
1810                        continue;
1811                }
1812                break;
1813        }
1814
1815        if (badness) {
1816                debug_badness("==> restoring best_cfg\n");
1817                *cfg = *best_cfg;
1818                fill_and_eval_dacs(codec, best_wired, best_mio);
1819        }
1820        debug_badness("==> Best config: lo_type=%d, wired=%d, mio=%d\n",
1821                      cfg->line_out_type, best_wired, best_mio);
1822        debug_show_configs(codec, cfg);
1823
1824        if (cfg->line_out_pins[0]) {
1825                struct nid_path *path;
1826                path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
1827                if (path)
1828                        spec->vmaster_nid = look_for_out_vol_nid(codec, path);
1829                if (spec->vmaster_nid)
1830                        snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
1831                                                HDA_OUTPUT, spec->vmaster_tlv);
1832        }
1833
1834        /* set initial pinctl targets */
1835        if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
1836                val = PIN_HP;
1837        else
1838                val = PIN_OUT;
1839        set_pin_targets(codec, cfg->line_outs, cfg->line_out_pins, val);
1840        if (cfg->line_out_type != AUTO_PIN_HP_OUT)
1841                set_pin_targets(codec, cfg->hp_outs, cfg->hp_pins, PIN_HP);
1842        if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
1843                val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
1844                set_pin_targets(codec, cfg->speaker_outs,
1845                                cfg->speaker_pins, val);
1846        }
1847
1848        /* clear indep_hp flag if not available */
1849        if (spec->indep_hp && !indep_hp_possible(codec))
1850                spec->indep_hp = 0;
1851
1852        kfree(best_cfg);
1853        return 0;
1854}
1855
1856/* add playback controls from the parsed DAC table */
1857static int create_multi_out_ctls(struct hda_codec *codec,
1858                                 const struct auto_pin_cfg *cfg)
1859{
1860        struct hda_gen_spec *spec = codec->spec;
1861        int i, err, noutputs;
1862
1863        noutputs = cfg->line_outs;
1864        if (spec->multi_ios > 0 && cfg->line_outs < 3)
1865                noutputs += spec->multi_ios;
1866
1867        for (i = 0; i < noutputs; i++) {
1868                const char *name;
1869                int index;
1870                struct nid_path *path;
1871
1872                path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1873                if (!path)
1874                        continue;
1875
1876                name = get_line_out_pfx(codec, i, &index, NID_PATH_VOL_CTL);
1877                if (!name || !strcmp(name, "CLFE")) {
1878                        /* Center/LFE */
1879                        err = add_vol_ctl(codec, "Center", 0, 1, path);
1880                        if (err < 0)
1881                                return err;
1882                        err = add_vol_ctl(codec, "LFE", 0, 2, path);
1883                        if (err < 0)
1884                                return err;
1885                } else {
1886                        err = add_stereo_vol(codec, name, index, path);
1887                        if (err < 0)
1888                                return err;
1889                }
1890
1891                name = get_line_out_pfx(codec, i, &index, NID_PATH_MUTE_CTL);
1892                if (!name || !strcmp(name, "CLFE")) {
1893                        err = add_sw_ctl(codec, "Center", 0, 1, path);
1894                        if (err < 0)
1895                                return err;
1896                        err = add_sw_ctl(codec, "LFE", 0, 2, path);
1897                        if (err < 0)
1898                                return err;
1899                } else {
1900                        err = add_stereo_sw(codec, name, index, path);
1901                        if (err < 0)
1902                                return err;
1903                }
1904        }
1905        return 0;
1906}
1907
1908static int create_extra_out(struct hda_codec *codec, int path_idx,
1909                            const char *pfx, int cidx)
1910{
1911        struct nid_path *path;
1912        int err;
1913
1914        path = snd_hda_get_path_from_idx(codec, path_idx);
1915        if (!path)
1916                return 0;
1917        err = add_stereo_vol(codec, pfx, cidx, path);
1918        if (err < 0)
1919                return err;
1920        err = add_stereo_sw(codec, pfx, cidx, path);
1921        if (err < 0)
1922                return err;
1923        return 0;
1924}
1925
1926/* add playback controls for speaker and HP outputs */
1927static int create_extra_outs(struct hda_codec *codec, int num_pins,
1928                             const int *paths, const char *pfx)
1929{
1930        int i;
1931
1932        for (i = 0; i < num_pins; i++) {
1933                const char *name;
1934                char tmp[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1935                int err, idx = 0;
1936
1937                if (num_pins == 2 && i == 1 && !strcmp(pfx, "Speaker"))
1938                        name = "Bass Speaker";
1939                else if (num_pins >= 3) {
1940                        snprintf(tmp, sizeof(tmp), "%s %s",
1941                                 pfx, channel_name[i]);
1942                        name = tmp;
1943                } else {
1944                        name = pfx;
1945                        idx = i;
1946                }
1947                err = create_extra_out(codec, paths[i], name, idx);
1948                if (err < 0)
1949                        return err;
1950        }
1951        return 0;
1952}
1953
1954static int create_hp_out_ctls(struct hda_codec *codec)
1955{
1956        struct hda_gen_spec *spec = codec->spec;
1957        return create_extra_outs(codec, spec->autocfg.hp_outs,
1958                                 spec->hp_paths,
1959                                 "Headphone");
1960}
1961
1962static int create_speaker_out_ctls(struct hda_codec *codec)
1963{
1964        struct hda_gen_spec *spec = codec->spec;
1965        return create_extra_outs(codec, spec->autocfg.speaker_outs,
1966                                 spec->speaker_paths,
1967                                 "Speaker");
1968}
1969
1970/*
1971 * independent HP controls
1972 */
1973
1974static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack);
1975static int indep_hp_info(struct snd_kcontrol *kcontrol,
1976                         struct snd_ctl_elem_info *uinfo)
1977{
1978        return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
1979}
1980
1981static int indep_hp_get(struct snd_kcontrol *kcontrol,
1982                        struct snd_ctl_elem_value *ucontrol)
1983{
1984        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1985        struct hda_gen_spec *spec = codec->spec;
1986        ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
1987        return 0;
1988}
1989
1990static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
1991                               int nomix_path_idx, int mix_path_idx,
1992                               int out_type);
1993
1994static int indep_hp_put(struct snd_kcontrol *kcontrol,
1995                        struct snd_ctl_elem_value *ucontrol)
1996{
1997        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
1998        struct hda_gen_spec *spec = codec->spec;
1999        unsigned int select = ucontrol->value.enumerated.item[0];
2000        int ret = 0;
2001
2002        mutex_lock(&spec->pcm_mutex);
2003        if (spec->active_streams) {
2004                ret = -EBUSY;
2005                goto unlock;
2006        }
2007
2008        if (spec->indep_hp_enabled != select) {
2009                hda_nid_t *dacp;
2010                if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2011                        dacp = &spec->private_dac_nids[0];
2012                else
2013                        dacp = &spec->multiout.hp_out_nid[0];
2014
2015                /* update HP aamix paths in case it conflicts with indep HP */
2016                if (spec->have_aamix_ctl) {
2017                        if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2018                                update_aamix_paths(codec, spec->aamix_mode,
2019                                                   spec->out_paths[0],
2020                                                   spec->aamix_out_paths[0],
2021                                                   spec->autocfg.line_out_type);
2022                        else
2023                                update_aamix_paths(codec, spec->aamix_mode,
2024                                                   spec->hp_paths[0],
2025                                                   spec->aamix_out_paths[1],
2026                                                   AUTO_PIN_HP_OUT);
2027                }
2028
2029                spec->indep_hp_enabled = select;
2030                if (spec->indep_hp_enabled)
2031                        *dacp = 0;
2032                else
2033                        *dacp = spec->alt_dac_nid;
2034
2035                call_hp_automute(codec, NULL);
2036                ret = 1;
2037        }
2038 unlock:
2039        mutex_unlock(&spec->pcm_mutex);
2040        return ret;
2041}
2042
2043static const struct snd_kcontrol_new indep_hp_ctl = {
2044        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2045        .name = "Independent HP",
2046        .info = indep_hp_info,
2047        .get = indep_hp_get,
2048        .put = indep_hp_put,
2049};
2050
2051
2052static int create_indep_hp_ctls(struct hda_codec *codec)
2053{
2054        struct hda_gen_spec *spec = codec->spec;
2055        hda_nid_t dac;
2056
2057        if (!spec->indep_hp)
2058                return 0;
2059        if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2060                dac = spec->multiout.dac_nids[0];
2061        else
2062                dac = spec->multiout.hp_out_nid[0];
2063        if (!dac) {
2064                spec->indep_hp = 0;
2065                return 0;
2066        }
2067
2068        spec->indep_hp_enabled = false;
2069        spec->alt_dac_nid = dac;
2070        if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2071                return -ENOMEM;
2072        return 0;
2073}
2074
2075/*
2076 * channel mode enum control
2077 */
2078
2079static int ch_mode_info(struct snd_kcontrol *kcontrol,
2080                        struct snd_ctl_elem_info *uinfo)
2081{
2082        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2083        struct hda_gen_spec *spec = codec->spec;
2084        int chs;
2085
2086        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2087        uinfo->count = 1;
2088        uinfo->value.enumerated.items = spec->multi_ios + 1;
2089        if (uinfo->value.enumerated.item > spec->multi_ios)
2090                uinfo->value.enumerated.item = spec->multi_ios;
2091        chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2092        sprintf(uinfo->value.enumerated.name, "%dch", chs);
2093        return 0;
2094}
2095
2096static int ch_mode_get(struct snd_kcontrol *kcontrol,
2097                       struct snd_ctl_elem_value *ucontrol)
2098{
2099        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2100        struct hda_gen_spec *spec = codec->spec;
2101        ucontrol->value.enumerated.item[0] =
2102                (spec->ext_channel_count - spec->min_channel_count) / 2;
2103        return 0;
2104}
2105
2106static inline struct nid_path *
2107get_multiio_path(struct hda_codec *codec, int idx)
2108{
2109        struct hda_gen_spec *spec = codec->spec;
2110        return snd_hda_get_path_from_idx(codec,
2111                spec->out_paths[spec->autocfg.line_outs + idx]);
2112}
2113
2114static void update_automute_all(struct hda_codec *codec);
2115
2116/* Default value to be passed as aamix argument for snd_hda_activate_path();
2117 * used for output paths
2118 */
2119static bool aamix_default(struct hda_gen_spec *spec)
2120{
2121        return !spec->have_aamix_ctl || spec->aamix_mode;
2122}
2123
2124static int set_multi_io(struct hda_codec *codec, int idx, bool output)
2125{
2126        struct hda_gen_spec *spec = codec->spec;
2127        hda_nid_t nid = spec->multi_io[idx].pin;
2128        struct nid_path *path;
2129
2130        path = get_multiio_path(codec, idx);
2131        if (!path)
2132                return -EINVAL;
2133
2134        if (path->active == output)
2135                return 0;
2136
2137        if (output) {
2138                set_pin_target(codec, nid, PIN_OUT, true);
2139                snd_hda_activate_path(codec, path, true, aamix_default(spec));
2140                set_pin_eapd(codec, nid, true);
2141        } else {
2142                set_pin_eapd(codec, nid, false);
2143                snd_hda_activate_path(codec, path, false, aamix_default(spec));
2144                set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2145                path_power_down_sync(codec, path);
2146        }
2147
2148        /* update jack retasking in case it modifies any of them */
2149        update_automute_all(codec);
2150
2151        return 0;
2152}
2153
2154static int ch_mode_put(struct snd_kcontrol *kcontrol,
2155                       struct snd_ctl_elem_value *ucontrol)
2156{
2157        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2158        struct hda_gen_spec *spec = codec->spec;
2159        int i, ch;
2160
2161        ch = ucontrol->value.enumerated.item[0];
2162        if (ch < 0 || ch > spec->multi_ios)
2163                return -EINVAL;
2164        if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2165                return 0;
2166        spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2167        for (i = 0; i < spec->multi_ios; i++)
2168                set_multi_io(codec, i, i < ch);
2169        spec->multiout.max_channels = max(spec->ext_channel_count,
2170                                          spec->const_channel_count);
2171        if (spec->need_dac_fix)
2172                spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2173        return 1;
2174}
2175
2176static const struct snd_kcontrol_new channel_mode_enum = {
2177        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2178        .name = "Channel Mode",
2179        .info = ch_mode_info,
2180        .get = ch_mode_get,
2181        .put = ch_mode_put,
2182};
2183
2184static int create_multi_channel_mode(struct hda_codec *codec)
2185{
2186        struct hda_gen_spec *spec = codec->spec;
2187
2188        if (spec->multi_ios > 0) {
2189                if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2190                        return -ENOMEM;
2191        }
2192        return 0;
2193}
2194
2195/*
2196 * aamix loopback enable/disable switch
2197 */
2198
2199#define loopback_mixing_info    indep_hp_info
2200
2201static int loopback_mixing_get(struct snd_kcontrol *kcontrol,
2202                               struct snd_ctl_elem_value *ucontrol)
2203{
2204        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2205        struct hda_gen_spec *spec = codec->spec;
2206        ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2207        return 0;
2208}
2209
2210static void update_aamix_paths(struct hda_codec *codec, bool do_mix,
2211                               int nomix_path_idx, int mix_path_idx,
2212                               int out_type)
2213{
2214        struct hda_gen_spec *spec = codec->spec;
2215        struct nid_path *nomix_path, *mix_path;
2216
2217        nomix_path = snd_hda_get_path_from_idx(codec, nomix_path_idx);
2218        mix_path = snd_hda_get_path_from_idx(codec, mix_path_idx);
2219        if (!nomix_path || !mix_path)
2220                return;
2221
2222        /* if HP aamix path is driven from a different DAC and the
2223         * independent HP mode is ON, can't turn on aamix path
2224         */
2225        if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2226            mix_path->path[0] != spec->alt_dac_nid)
2227                do_mix = false;
2228
2229        if (do_mix) {
2230                snd_hda_activate_path(codec, nomix_path, false, true);
2231                snd_hda_activate_path(codec, mix_path, true, true);
2232                path_power_down_sync(codec, nomix_path);
2233        } else {
2234                snd_hda_activate_path(codec, mix_path, false, false);
2235                snd_hda_activate_path(codec, nomix_path, true, false);
2236                path_power_down_sync(codec, mix_path);
2237        }
2238}
2239
2240static int loopback_mixing_put(struct snd_kcontrol *kcontrol,
2241                               struct snd_ctl_elem_value *ucontrol)
2242{
2243        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2244        struct hda_gen_spec *spec = codec->spec;
2245        unsigned int val = ucontrol->value.enumerated.item[0];
2246
2247        if (val == spec->aamix_mode)
2248                return 0;
2249        spec->aamix_mode = val;
2250        update_aamix_paths(codec, val, spec->out_paths[0],
2251                           spec->aamix_out_paths[0],
2252                           spec->autocfg.line_out_type);
2253        update_aamix_paths(codec, val, spec->hp_paths[0],
2254                           spec->aamix_out_paths[1],
2255                           AUTO_PIN_HP_OUT);
2256        update_aamix_paths(codec, val, spec->speaker_paths[0],
2257                           spec->aamix_out_paths[2],
2258                           AUTO_PIN_SPEAKER_OUT);
2259        return 1;
2260}
2261
2262static const struct snd_kcontrol_new loopback_mixing_enum = {
2263        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2264        .name = "Loopback Mixing",
2265        .info = loopback_mixing_info,
2266        .get = loopback_mixing_get,
2267        .put = loopback_mixing_put,
2268};
2269
2270static int create_loopback_mixing_ctl(struct hda_codec *codec)
2271{
2272        struct hda_gen_spec *spec = codec->spec;
2273
2274        if (!spec->mixer_nid)
2275                return 0;
2276        if (!(spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
2277              spec->aamix_out_paths[2]))
2278                return 0;
2279        if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2280                return -ENOMEM;
2281        spec->have_aamix_ctl = 1;
2282        return 0;
2283}
2284
2285/*
2286 * shared headphone/mic handling
2287 */
2288
2289static void call_update_outputs(struct hda_codec *codec);
2290
2291/* for shared I/O, change the pin-control accordingly */
2292static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force)
2293{
2294        struct hda_gen_spec *spec = codec->spec;
2295        bool as_mic;
2296        unsigned int val;
2297        hda_nid_t pin;
2298
2299        pin = spec->hp_mic_pin;
2300        as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2301
2302        if (!force) {
2303                val = snd_hda_codec_get_pin_target(codec, pin);
2304                if (as_mic) {
2305                        if (val & PIN_IN)
2306                                return;
2307                } else {
2308                        if (val & PIN_OUT)
2309                                return;
2310                }
2311        }
2312
2313        val = snd_hda_get_default_vref(codec, pin);
2314        /* if the HP pin doesn't support VREF and the codec driver gives an
2315         * alternative pin, set up the VREF on that pin instead
2316         */
2317        if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2318                const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2319                unsigned int vref_val = snd_hda_get_default_vref(codec, vref_pin);
2320                if (vref_val != AC_PINCTL_VREF_HIZ)
2321                        snd_hda_set_pin_ctl_cache(codec, vref_pin,
2322                                                  PIN_IN | (as_mic ? vref_val : 0));
2323        }
2324
2325        if (!spec->hp_mic_jack_modes) {
2326                if (as_mic)
2327                        val |= PIN_IN;
2328                else
2329                        val = PIN_HP;
2330                set_pin_target(codec, pin, val, true);
2331                call_hp_automute(codec, NULL);
2332        }
2333}
2334
2335/* create a shared input with the headphone out */
2336static int create_hp_mic(struct hda_codec *codec)
2337{
2338        struct hda_gen_spec *spec = codec->spec;
2339        struct auto_pin_cfg *cfg = &spec->autocfg;
2340        unsigned int defcfg;
2341        hda_nid_t nid;
2342
2343        if (!spec->hp_mic) {
2344                if (spec->suppress_hp_mic_detect)
2345                        return 0;
2346                /* automatic detection: only if no input or a single internal
2347                 * input pin is found, try to detect the shared hp/mic
2348                 */
2349                if (cfg->num_inputs > 1)
2350                        return 0;
2351                else if (cfg->num_inputs == 1) {
2352                        defcfg = snd_hda_codec_get_pincfg(codec, cfg->inputs[0].pin);
2353                        if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
2354                                return 0;
2355                }
2356        }
2357
2358        spec->hp_mic = 0; /* clear once */
2359        if (cfg->num_inputs >= AUTO_CFG_MAX_INS)
2360                return 0;
2361
2362        nid = 0;
2363        if (cfg->line_out_type == AUTO_PIN_HP_OUT && cfg->line_outs > 0)
2364                nid = cfg->line_out_pins[0];
2365        else if (cfg->hp_outs > 0)
2366                nid = cfg->hp_pins[0];
2367        if (!nid)
2368                return 0;
2369
2370        if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN))
2371                return 0; /* no input */
2372
2373        cfg->inputs[cfg->num_inputs].pin = nid;
2374        cfg->inputs[cfg->num_inputs].type = AUTO_PIN_MIC;
2375        cfg->inputs[cfg->num_inputs].is_headphone_mic = 1;
2376        cfg->num_inputs++;
2377        spec->hp_mic = 1;
2378        spec->hp_mic_pin = nid;
2379        /* we can't handle auto-mic together with HP-mic */
2380        spec->suppress_auto_mic = 1;
2381        snd_printdd("hda-codec: Enable shared I/O jack on NID 0x%x\n", nid);
2382        return 0;
2383}
2384
2385/*
2386 * output jack mode
2387 */
2388
2389static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin);
2390
2391static const char * const out_jack_texts[] = {
2392        "Line Out", "Headphone Out",
2393};
2394
2395static int out_jack_mode_info(struct snd_kcontrol *kcontrol,
2396                              struct snd_ctl_elem_info *uinfo)
2397{
2398        return snd_hda_enum_helper_info(kcontrol, uinfo, 2, out_jack_texts);
2399}
2400
2401static int out_jack_mode_get(struct snd_kcontrol *kcontrol,
2402                             struct snd_ctl_elem_value *ucontrol)
2403{
2404        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2405        hda_nid_t nid = kcontrol->private_value;
2406        if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP)
2407                ucontrol->value.enumerated.item[0] = 1;
2408        else
2409                ucontrol->value.enumerated.item[0] = 0;
2410        return 0;
2411}
2412
2413static int out_jack_mode_put(struct snd_kcontrol *kcontrol,
2414                             struct snd_ctl_elem_value *ucontrol)
2415{
2416        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2417        hda_nid_t nid = kcontrol->private_value;
2418        unsigned int val;
2419
2420        val = ucontrol->value.enumerated.item[0] ? PIN_HP : PIN_OUT;
2421        if (snd_hda_codec_get_pin_target(codec, nid) == val)
2422                return 0;
2423        snd_hda_set_pin_ctl_cache(codec, nid, val);
2424        return 1;
2425}
2426
2427static const struct snd_kcontrol_new out_jack_mode_enum = {
2428        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2429        .info = out_jack_mode_info,
2430        .get = out_jack_mode_get,
2431        .put = out_jack_mode_put,
2432};
2433
2434static bool find_kctl_name(struct hda_codec *codec, const char *name, int idx)
2435{
2436        struct hda_gen_spec *spec = codec->spec;
2437        int i;
2438
2439        for (i = 0; i < spec->kctls.used; i++) {
2440                struct snd_kcontrol_new *kctl = snd_array_elem(&spec->kctls, i);
2441                if (!strcmp(kctl->name, name) && kctl->index == idx)
2442                        return true;
2443        }
2444        return false;
2445}
2446
2447static void get_jack_mode_name(struct hda_codec *codec, hda_nid_t pin,
2448                               char *name, size_t name_len)
2449{
2450        struct hda_gen_spec *spec = codec->spec;
2451        int idx = 0;
2452
2453        snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2454        strlcat(name, " Jack Mode", name_len);
2455
2456        for (; find_kctl_name(codec, name, idx); idx++)
2457                ;
2458}
2459
2460static int get_out_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2461{
2462        struct hda_gen_spec *spec = codec->spec;
2463        if (spec->add_jack_modes) {
2464                unsigned int pincap = snd_hda_query_pin_caps(codec, pin);
2465                if ((pincap & AC_PINCAP_OUT) && (pincap & AC_PINCAP_HP_DRV))
2466                        return 2;
2467        }
2468        return 1;
2469}
2470
2471static int create_out_jack_modes(struct hda_codec *codec, int num_pins,
2472                                 hda_nid_t *pins)
2473{
2474        struct hda_gen_spec *spec = codec->spec;
2475        int i;
2476
2477        for (i = 0; i < num_pins; i++) {
2478                hda_nid_t pin = pins[i];
2479                if (pin == spec->hp_mic_pin) {
2480                        int ret = create_hp_mic_jack_mode(codec, pin);
2481                        if (ret < 0)
2482                                return ret;
2483                        continue;
2484                }
2485                if (get_out_jack_num_items(codec, pin) > 1) {
2486                        struct snd_kcontrol_new *knew;
2487                        char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2488                        get_jack_mode_name(codec, pin, name, sizeof(name));
2489                        knew = snd_hda_gen_add_kctl(spec, name,
2490                                                    &out_jack_mode_enum);
2491                        if (!knew)
2492                                return -ENOMEM;
2493                        knew->private_value = pin;
2494                }
2495        }
2496
2497        return 0;
2498}
2499
2500/*
2501 * input jack mode
2502 */
2503
2504/* from AC_PINCTL_VREF_HIZ to AC_PINCTL_VREF_100 */
2505#define NUM_VREFS       6
2506
2507static const char * const vref_texts[NUM_VREFS] = {
2508        "Line In", "Mic 50pc Bias", "Mic 0V Bias",
2509        "", "Mic 80pc Bias", "Mic 100pc Bias"
2510};
2511
2512static unsigned int get_vref_caps(struct hda_codec *codec, hda_nid_t pin)
2513{
2514        unsigned int pincap;
2515
2516        pincap = snd_hda_query_pin_caps(codec, pin);
2517        pincap = (pincap & AC_PINCAP_VREF) >> AC_PINCAP_VREF_SHIFT;
2518        /* filter out unusual vrefs */
2519        pincap &= ~(AC_PINCAP_VREF_GRD | AC_PINCAP_VREF_100);
2520        return pincap;
2521}
2522
2523/* convert from the enum item index to the vref ctl index (0=HIZ, 1=50%...) */
2524static int get_vref_idx(unsigned int vref_caps, unsigned int item_idx)
2525{
2526        unsigned int i, n = 0;
2527
2528        for (i = 0; i < NUM_VREFS; i++) {
2529                if (vref_caps & (1 << i)) {
2530                        if (n == item_idx)
2531                                return i;
2532                        n++;
2533                }
2534        }
2535        return 0;
2536}
2537
2538/* convert back from the vref ctl index to the enum item index */
2539static int cvt_from_vref_idx(unsigned int vref_caps, unsigned int idx)
2540{
2541        unsigned int i, n = 0;
2542
2543        for (i = 0; i < NUM_VREFS; i++) {
2544                if (i == idx)
2545                        return n;
2546                if (vref_caps & (1 << i))
2547                        n++;
2548        }
2549        return 0;
2550}
2551
2552static int in_jack_mode_info(struct snd_kcontrol *kcontrol,
2553                             struct snd_ctl_elem_info *uinfo)
2554{
2555        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2556        hda_nid_t nid = kcontrol->private_value;
2557        unsigned int vref_caps = get_vref_caps(codec, nid);
2558
2559        snd_hda_enum_helper_info(kcontrol, uinfo, hweight32(vref_caps),
2560                                 vref_texts);
2561        /* set the right text */
2562        strcpy(uinfo->value.enumerated.name,
2563               vref_texts[get_vref_idx(vref_caps, uinfo->value.enumerated.item)]);
2564        return 0;
2565}
2566
2567static int in_jack_mode_get(struct snd_kcontrol *kcontrol,
2568                            struct snd_ctl_elem_value *ucontrol)
2569{
2570        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2571        hda_nid_t nid = kcontrol->private_value;
2572        unsigned int vref_caps = get_vref_caps(codec, nid);
2573        unsigned int idx;
2574
2575        idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN;
2576        ucontrol->value.enumerated.item[0] = cvt_from_vref_idx(vref_caps, idx);
2577        return 0;
2578}
2579
2580static int in_jack_mode_put(struct snd_kcontrol *kcontrol,
2581                            struct snd_ctl_elem_value *ucontrol)
2582{
2583        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2584        hda_nid_t nid = kcontrol->private_value;
2585        unsigned int vref_caps = get_vref_caps(codec, nid);
2586        unsigned int val, idx;
2587
2588        val = snd_hda_codec_get_pin_target(codec, nid);
2589        idx = cvt_from_vref_idx(vref_caps, val & AC_PINCTL_VREFEN);
2590        if (idx == ucontrol->value.enumerated.item[0])
2591                return 0;
2592
2593        val &= ~AC_PINCTL_VREFEN;
2594        val |= get_vref_idx(vref_caps, ucontrol->value.enumerated.item[0]);
2595        snd_hda_set_pin_ctl_cache(codec, nid, val);
2596        return 1;
2597}
2598
2599static const struct snd_kcontrol_new in_jack_mode_enum = {
2600        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2601        .info = in_jack_mode_info,
2602        .get = in_jack_mode_get,
2603        .put = in_jack_mode_put,
2604};
2605
2606static int get_in_jack_num_items(struct hda_codec *codec, hda_nid_t pin)
2607{
2608        struct hda_gen_spec *spec = codec->spec;
2609        int nitems = 0;
2610        if (spec->add_jack_modes)
2611                nitems = hweight32(get_vref_caps(codec, pin));
2612        return nitems ? nitems : 1;
2613}
2614
2615static int create_in_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2616{
2617        struct hda_gen_spec *spec = codec->spec;
2618        struct snd_kcontrol_new *knew;
2619        char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2620        unsigned int defcfg;
2621
2622        if (pin == spec->hp_mic_pin)
2623                return 0; /* already done in create_out_jack_mode() */
2624
2625        /* no jack mode for fixed pins */
2626        defcfg = snd_hda_codec_get_pincfg(codec, pin);
2627        if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
2628                return 0;
2629
2630        /* no multiple vref caps? */
2631        if (get_in_jack_num_items(codec, pin) <= 1)
2632                return 0;
2633
2634        get_jack_mode_name(codec, pin, name, sizeof(name));
2635        knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
2636        if (!knew)
2637                return -ENOMEM;
2638        knew->private_value = pin;
2639        return 0;
2640}
2641
2642/*
2643 * HP/mic shared jack mode
2644 */
2645static int hp_mic_jack_mode_info(struct snd_kcontrol *kcontrol,
2646                                 struct snd_ctl_elem_info *uinfo)
2647{
2648        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2649        hda_nid_t nid = kcontrol->private_value;
2650        int out_jacks = get_out_jack_num_items(codec, nid);
2651        int in_jacks = get_in_jack_num_items(codec, nid);
2652        const char *text = NULL;
2653        int idx;
2654
2655        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
2656        uinfo->count = 1;
2657        uinfo->value.enumerated.items = out_jacks + in_jacks;
2658        if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
2659                uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
2660        idx = uinfo->value.enumerated.item;
2661        if (idx < out_jacks) {
2662                if (out_jacks > 1)
2663                        text = out_jack_texts[idx];
2664                else
2665                        text = "Headphone Out";
2666        } else {
2667                idx -= out_jacks;
2668                if (in_jacks > 1) {
2669                        unsigned int vref_caps = get_vref_caps(codec, nid);
2670                        text = vref_texts[get_vref_idx(vref_caps, idx)];
2671                } else
2672                        text = "Mic In";
2673        }
2674
2675        strcpy(uinfo->value.enumerated.name, text);
2676        return 0;
2677}
2678
2679static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid)
2680{
2681        int out_jacks = get_out_jack_num_items(codec, nid);
2682        int in_jacks = get_in_jack_num_items(codec, nid);
2683        unsigned int val = snd_hda_codec_get_pin_target(codec, nid);
2684        int idx = 0;
2685
2686        if (val & PIN_OUT) {
2687                if (out_jacks > 1 && val == PIN_HP)
2688                        idx = 1;
2689        } else if (val & PIN_IN) {
2690                idx = out_jacks;
2691                if (in_jacks > 1) {
2692                        unsigned int vref_caps = get_vref_caps(codec, nid);
2693                        val &= AC_PINCTL_VREFEN;
2694                        idx += cvt_from_vref_idx(vref_caps, val);
2695                }
2696        }
2697        return idx;
2698}
2699
2700static int hp_mic_jack_mode_get(struct snd_kcontrol *kcontrol,
2701                                struct snd_ctl_elem_value *ucontrol)
2702{
2703        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2704        hda_nid_t nid = kcontrol->private_value;
2705        ucontrol->value.enumerated.item[0] =
2706                get_cur_hp_mic_jack_mode(codec, nid);
2707        return 0;
2708}
2709
2710static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol,
2711                                struct snd_ctl_elem_value *ucontrol)
2712{
2713        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2714        hda_nid_t nid = kcontrol->private_value;
2715        int out_jacks = get_out_jack_num_items(codec, nid);
2716        int in_jacks = get_in_jack_num_items(codec, nid);
2717        unsigned int val, oldval, idx;
2718
2719        oldval = get_cur_hp_mic_jack_mode(codec, nid);
2720        idx = ucontrol->value.enumerated.item[0];
2721        if (oldval == idx)
2722                return 0;
2723
2724        if (idx < out_jacks) {
2725                if (out_jacks > 1)
2726                        val = idx ? PIN_HP : PIN_OUT;
2727                else
2728                        val = PIN_HP;
2729        } else {
2730                idx -= out_jacks;
2731                if (in_jacks > 1) {
2732                        unsigned int vref_caps = get_vref_caps(codec, nid);
2733                        val = snd_hda_codec_get_pin_target(codec, nid);
2734                        val &= ~(AC_PINCTL_VREFEN | PIN_HP);
2735                        val |= get_vref_idx(vref_caps, idx) | PIN_IN;
2736                } else
2737                        val = snd_hda_get_default_vref(codec, nid);
2738        }
2739        snd_hda_set_pin_ctl_cache(codec, nid, val);
2740        call_hp_automute(codec, NULL);
2741
2742        return 1;
2743}
2744
2745static const struct snd_kcontrol_new hp_mic_jack_mode_enum = {
2746        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2747        .info = hp_mic_jack_mode_info,
2748        .get = hp_mic_jack_mode_get,
2749        .put = hp_mic_jack_mode_put,
2750};
2751
2752static int create_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t pin)
2753{
2754        struct hda_gen_spec *spec = codec->spec;
2755        struct snd_kcontrol_new *knew;
2756
2757        if (get_out_jack_num_items(codec, pin) <= 1 &&
2758            get_in_jack_num_items(codec, pin) <= 1)
2759                return 0; /* no need */
2760        knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
2761                                    &hp_mic_jack_mode_enum);
2762        if (!knew)
2763                return -ENOMEM;
2764        knew->private_value = pin;
2765        spec->hp_mic_jack_modes = 1;
2766        return 0;
2767}
2768
2769/*
2770 * Parse input paths
2771 */
2772
2773/* add the powersave loopback-list entry */
2774static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
2775{
2776        struct hda_amp_list *list;
2777
2778        list = snd_array_new(&spec->loopback_list);
2779        if (!list)
2780                return -ENOMEM;
2781        list->nid = mix;
2782        list->dir = HDA_INPUT;
2783        list->idx = idx;
2784        spec->loopback.amplist = spec->loopback_list.list;
2785        return 0;
2786}
2787
2788/* create input playback/capture controls for the given pin */
2789static int new_analog_input(struct hda_codec *codec, int input_idx,
2790                            hda_nid_t pin, const char *ctlname, int ctlidx,
2791                            hda_nid_t mix_nid)
2792{
2793        struct hda_gen_spec *spec = codec->spec;
2794        struct nid_path *path;
2795        unsigned int val;
2796        int err, idx;
2797
2798        if (!nid_has_volume(codec, mix_nid, HDA_INPUT) &&
2799            !nid_has_mute(codec, mix_nid, HDA_INPUT))
2800                return 0; /* no need for analog loopback */
2801
2802        path = snd_hda_add_new_path(codec, pin, mix_nid, 0);
2803        if (!path)
2804                return -EINVAL;
2805        print_nid_path("loopback", path);
2806        spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
2807
2808        idx = path->idx[path->depth - 1];
2809        if (nid_has_volume(codec, mix_nid, HDA_INPUT)) {
2810                val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2811                err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, val);
2812                if (err < 0)
2813                        return err;
2814                path->ctls[NID_PATH_VOL_CTL] = val;
2815        }
2816
2817        if (nid_has_mute(codec, mix_nid, HDA_INPUT)) {
2818                val = HDA_COMPOSE_AMP_VAL(mix_nid, 3, idx, HDA_INPUT);
2819                err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, val);
2820                if (err < 0)
2821                        return err;
2822                path->ctls[NID_PATH_MUTE_CTL] = val;
2823        }
2824
2825        path->active = true;
2826        err = add_loopback_list(spec, mix_nid, idx);
2827        if (err < 0)
2828                return err;
2829
2830        if (spec->mixer_nid != spec->mixer_merge_nid &&
2831            !spec->loopback_merge_path) {
2832                path = snd_hda_add_new_path(codec, spec->mixer_nid,
2833                                            spec->mixer_merge_nid, 0);
2834                if (path) {
2835                        print_nid_path("loopback-merge", path);
2836                        path->active = true;
2837                        spec->loopback_merge_path =
2838                                snd_hda_get_path_idx(codec, path);
2839                }
2840        }
2841
2842        return 0;
2843}
2844
2845static int is_input_pin(struct hda_codec *codec, hda_nid_t nid)
2846{
2847        unsigned int pincap = snd_hda_query_pin_caps(codec, nid);
2848        return (pincap & AC_PINCAP_IN) != 0;
2849}
2850
2851/* Parse the codec tree and retrieve ADCs */
2852static int fill_adc_nids(struct hda_codec *codec)
2853{
2854        struct hda_gen_spec *spec = codec->spec;
2855        hda_nid_t nid;
2856        hda_nid_t *adc_nids = spec->adc_nids;
2857        int max_nums = ARRAY_SIZE(spec->adc_nids);
2858        int i, nums = 0;
2859
2860        nid = codec->start_nid;
2861        for (i = 0; i < codec->num_nodes; i++, nid++) {
2862                unsigned int caps = get_wcaps(codec, nid);
2863                int type = get_wcaps_type(caps);
2864
2865                if (type != AC_WID_AUD_IN || (caps & AC_WCAP_DIGITAL))
2866                        continue;
2867                adc_nids[nums] = nid;
2868                if (++nums >= max_nums)
2869                        break;
2870        }
2871        spec->num_adc_nids = nums;
2872
2873        /* copy the detected ADCs to all_adcs[] */
2874        spec->num_all_adcs = nums;
2875        memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
2876
2877        return nums;
2878}
2879
2880/* filter out invalid adc_nids that don't give all active input pins;
2881 * if needed, check whether dynamic ADC-switching is available
2882 */
2883static int check_dyn_adc_switch(struct hda_codec *codec)
2884{
2885        struct hda_gen_spec *spec = codec->spec;
2886        struct hda_input_mux *imux = &spec->input_mux;
2887        unsigned int ok_bits;
2888        int i, n, nums;
2889
2890        nums = 0;
2891        ok_bits = 0;
2892        for (n = 0; n < spec->num_adc_nids; n++) {
2893                for (i = 0; i < imux->num_items; i++) {
2894                        if (!spec->input_paths[i][n])
2895                                break;
2896                }
2897                if (i >= imux->num_items) {
2898                        ok_bits |= (1 << n);
2899                        nums++;
2900                }
2901        }
2902
2903        if (!ok_bits) {
2904                /* check whether ADC-switch is possible */
2905                for (i = 0; i < imux->num_items; i++) {
2906                        for (n = 0; n < spec->num_adc_nids; n++) {
2907                                if (spec->input_paths[i][n]) {
2908                                        spec->dyn_adc_idx[i] = n;
2909                                        break;
2910                                }
2911                        }
2912                }
2913
2914                snd_printdd("hda-codec: enabling ADC switching\n");
2915                spec->dyn_adc_switch = 1;
2916        } else if (nums != spec->num_adc_nids) {
2917                /* shrink the invalid adcs and input paths */
2918                nums = 0;
2919                for (n = 0; n < spec->num_adc_nids; n++) {
2920                        if (!(ok_bits & (1 << n)))
2921                                continue;
2922                        if (n != nums) {
2923                                spec->adc_nids[nums] = spec->adc_nids[n];
2924                                for (i = 0; i < imux->num_items; i++) {
2925                                        invalidate_nid_path(codec,
2926                                                spec->input_paths[i][nums]);
2927                                        spec->input_paths[i][nums] =
2928                                                spec->input_paths[i][n];
2929                                }
2930                        }
2931                        nums++;
2932                }
2933                spec->num_adc_nids = nums;
2934        }
2935
2936        if (imux->num_items == 1 ||
2937            (imux->num_items == 2 && spec->hp_mic)) {
2938                snd_printdd("hda-codec: reducing to a single ADC\n");
2939                spec->num_adc_nids = 1; /* reduce to a single ADC */
2940        }
2941
2942        /* single index for individual volumes ctls */
2943        if (!spec->dyn_adc_switch && spec->multi_cap_vol)
2944                spec->num_adc_nids = 1;
2945
2946        return 0;
2947}
2948
2949/* parse capture source paths from the given pin and create imux items */
2950static int parse_capture_source(struct hda_codec *codec, hda_nid_t pin,
2951                                int cfg_idx, int num_adcs,
2952                                const char *label, int anchor)
2953{
2954        struct hda_gen_spec *spec = codec->spec;
2955        struct hda_input_mux *imux = &spec->input_mux;
2956        int imux_idx = imux->num_items;
2957        bool imux_added = false;
2958        int c;
2959
2960        for (c = 0; c < num_adcs; c++) {
2961                struct nid_path *path;
2962                hda_nid_t adc = spec->adc_nids[c];
2963
2964                if (!is_reachable_path(codec, pin, adc))
2965                        continue;
2966                path = snd_hda_add_new_path(codec, pin, adc, anchor);
2967                if (!path)
2968                        continue;
2969                print_nid_path("input", path);
2970                spec->input_paths[imux_idx][c] =
2971                        snd_hda_get_path_idx(codec, path);
2972
2973                if (!imux_added) {
2974                        if (spec->hp_mic_pin == pin)
2975                                spec->hp_mic_mux_idx = imux->num_items;
2976                        spec->imux_pins[imux->num_items] = pin;
2977                        snd_hda_add_imux_item(imux, label, cfg_idx, NULL);
2978                        imux_added = true;
2979                }
2980        }
2981
2982        return 0;
2983}
2984
2985/*
2986 * create playback/capture controls for input pins
2987 */
2988
2989/* fill the label for each input at first */
2990static int fill_input_pin_labels(struct hda_codec *codec)
2991{
2992        struct hda_gen_spec *spec = codec->spec;
2993        const struct auto_pin_cfg *cfg = &spec->autocfg;
2994        int i;
2995
2996        for (i = 0; i < cfg->num_inputs; i++) {
2997                hda_nid_t pin = cfg->inputs[i].pin;
2998                const char *label;
2999                int j, idx;
3000
3001                if (!is_input_pin(codec, pin))
3002                        continue;
3003
3004                label = hda_get_autocfg_input_label(codec, cfg, i);
3005                idx = 0;
3006                for (j = i - 1; j >= 0; j--) {
3007                        if (spec->input_labels[j] &&
3008                            !strcmp(spec->input_labels[j], label)) {
3009                                idx = spec->input_label_idxs[j] + 1;
3010                                break;
3011                        }
3012                }
3013
3014                spec->input_labels[i] = label;
3015                spec->input_label_idxs[i] = idx;
3016        }
3017
3018        return 0;
3019}
3020
3021#define CFG_IDX_MIX     99      /* a dummy cfg->input idx for stereo mix */
3022
3023static int create_input_ctls(struct hda_codec *codec)
3024{
3025        struct hda_gen_spec *spec = codec->spec;
3026        const struct auto_pin_cfg *cfg = &spec->autocfg;
3027        hda_nid_t mixer = spec->mixer_nid;
3028        int num_adcs;
3029        int i, err;
3030        unsigned int val;
3031
3032        num_adcs = fill_adc_nids(codec);
3033        if (num_adcs < 0)
3034                return 0;
3035
3036        err = fill_input_pin_labels(codec);
3037        if (err < 0)
3038                return err;
3039
3040        for (i = 0; i < cfg->num_inputs; i++) {
3041                hda_nid_t pin;
3042
3043                pin = cfg->inputs[i].pin;
3044                if (!is_input_pin(codec, pin))
3045                        continue;
3046
3047                val = PIN_IN;
3048                if (cfg->inputs[i].type == AUTO_PIN_MIC)
3049                        val |= snd_hda_get_default_vref(codec, pin);
3050                if (pin != spec->hp_mic_pin)
3051                        set_pin_target(codec, pin, val, false);
3052
3053                if (mixer) {
3054                        if (is_reachable_path(codec, pin, mixer)) {
3055                                err = new_analog_input(codec, i, pin,
3056                                                       spec->input_labels[i],
3057                                                       spec->input_label_idxs[i],
3058                                                       mixer);
3059                                if (err < 0)
3060                                        return err;
3061                        }
3062                }
3063
3064                err = parse_capture_source(codec, pin, i, num_adcs,
3065                                           spec->input_labels[i], -mixer);
3066                if (err < 0)
3067                        return err;
3068
3069                if (spec->add_jack_modes) {
3070                        err = create_in_jack_mode(codec, pin);
3071                        if (err < 0)
3072                                return err;
3073                }
3074        }
3075
3076        if (mixer && spec->add_stereo_mix_input) {
3077                err = parse_capture_source(codec, mixer, CFG_IDX_MIX, num_adcs,
3078                                           "Stereo Mix", 0);
3079                if (err < 0)
3080                        return err;
3081        }
3082
3083        return 0;
3084}
3085
3086
3087/*
3088 * input source mux
3089 */
3090
3091/* get the input path specified by the given adc and imux indices */
3092static struct nid_path *get_input_path(struct hda_codec *codec, int adc_idx, int imux_idx)
3093{
3094        struct hda_gen_spec *spec = codec->spec;
3095        if (imux_idx < 0 || imux_idx >= HDA_MAX_NUM_INPUTS) {
3096                snd_BUG();
3097                return NULL;
3098        }
3099        if (spec->dyn_adc_switch)
3100                adc_idx = spec->dyn_adc_idx[imux_idx];
3101        if (adc_idx < 0 || adc_idx >= AUTO_CFG_MAX_INS) {
3102                snd_BUG();
3103                return NULL;
3104        }
3105        return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3106}
3107
3108static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3109                      unsigned int idx);
3110
3111static int mux_enum_info(struct snd_kcontrol *kcontrol,
3112                         struct snd_ctl_elem_info *uinfo)
3113{
3114        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3115        struct hda_gen_spec *spec = codec->spec;
3116        return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3117}
3118
3119static int mux_enum_get(struct snd_kcontrol *kcontrol,
3120                        struct snd_ctl_elem_value *ucontrol)
3121{
3122        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3123        struct hda_gen_spec *spec = codec->spec;
3124        /* the ctls are created at once with multiple counts */
3125        unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3126
3127        ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3128        return 0;
3129}
3130
3131static int mux_enum_put(struct snd_kcontrol *kcontrol,
3132                            struct snd_ctl_elem_value *ucontrol)
3133{
3134        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3135        unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
3136        return mux_select(codec, adc_idx,
3137                          ucontrol->value.enumerated.item[0]);
3138}
3139
3140static const struct snd_kcontrol_new cap_src_temp = {
3141        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3142        .name = "Input Source",
3143        .info = mux_enum_info,
3144        .get = mux_enum_get,
3145        .put = mux_enum_put,
3146};
3147
3148/*
3149 * capture volume and capture switch ctls
3150 */
3151
3152typedef int (*put_call_t)(struct snd_kcontrol *kcontrol,
3153                          struct snd_ctl_elem_value *ucontrol);
3154
3155/* call the given amp update function for all amps in the imux list at once */
3156static int cap_put_caller(struct snd_kcontrol *kcontrol,
3157                          struct snd_ctl_elem_value *ucontrol,
3158                          put_call_t func, int type)
3159{
3160        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3161        struct hda_gen_spec *spec = codec->spec;
3162        const struct hda_input_mux *imux;
3163        struct nid_path *path;
3164        int i, adc_idx, err = 0;
3165
3166        imux = &spec->input_mux;
3167        adc_idx = kcontrol->id.index;
3168        mutex_lock(&codec->control_mutex);
3169        /* we use the cache-only update at first since multiple input paths
3170         * may shared the same amp; by updating only caches, the redundant
3171         * writes to hardware can be reduced.
3172         */
3173        codec->cached_write = 1;
3174        for (i = 0; i < imux->num_items; i++) {
3175                path = get_input_path(codec, adc_idx, i);
3176                if (!path || !path->ctls[type])
3177                        continue;
3178                kcontrol->private_value = path->ctls[type];
3179                err = func(kcontrol, ucontrol);
3180                if (err < 0)
3181                        goto error;
3182        }
3183 error:
3184        codec->cached_write = 0;
3185        mutex_unlock(&codec->control_mutex);
3186        snd_hda_codec_flush_cache(codec); /* flush the updates */
3187        if (err >= 0 && spec->cap_sync_hook)
3188                spec->cap_sync_hook(codec, ucontrol);
3189        return err;
3190}
3191
3192/* capture volume ctl callbacks */
3193#define cap_vol_info            snd_hda_mixer_amp_volume_info
3194#define cap_vol_get             snd_hda_mixer_amp_volume_get
3195#define cap_vol_tlv             snd_hda_mixer_amp_tlv
3196
3197static int cap_vol_put(struct snd_kcontrol *kcontrol,
3198                       struct snd_ctl_elem_value *ucontrol)
3199{
3200        return cap_put_caller(kcontrol, ucontrol,
3201                              snd_hda_mixer_amp_volume_put,
3202                              NID_PATH_VOL_CTL);
3203}
3204
3205static const struct snd_kcontrol_new cap_vol_temp = {
3206        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3207        .name = "Capture Volume",
3208        .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE |
3209                   SNDRV_CTL_ELEM_ACCESS_TLV_READ |
3210                   SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK),
3211        .info = cap_vol_info,
3212        .get = cap_vol_get,
3213        .put = cap_vol_put,
3214        .tlv = { .c = cap_vol_tlv },
3215};
3216
3217/* capture switch ctl callbacks */
3218#define cap_sw_info             snd_ctl_boolean_stereo_info
3219#define cap_sw_get              snd_hda_mixer_amp_switch_get
3220
3221static int cap_sw_put(struct snd_kcontrol *kcontrol,
3222                      struct snd_ctl_elem_value *ucontrol)
3223{
3224        return cap_put_caller(kcontrol, ucontrol,
3225                              snd_hda_mixer_amp_switch_put,
3226                              NID_PATH_MUTE_CTL);
3227}
3228
3229static const struct snd_kcontrol_new cap_sw_temp = {
3230        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3231        .name = "Capture Switch",
3232        .info = cap_sw_info,
3233        .get = cap_sw_get,
3234        .put = cap_sw_put,
3235};
3236
3237static int parse_capvol_in_path(struct hda_codec *codec, struct nid_path *path)
3238{
3239        hda_nid_t nid;
3240        int i, depth;
3241
3242        path->ctls[NID_PATH_VOL_CTL] = path->ctls[NID_PATH_MUTE_CTL] = 0;
3243        for (depth = 0; depth < 3; depth++) {
3244                if (depth >= path->depth)
3245                        return -EINVAL;
3246                i = path->depth - depth - 1;
3247                nid = path->path[i];
3248                if (!path->ctls[NID_PATH_VOL_CTL]) {
3249                        if (nid_has_volume(codec, nid, HDA_OUTPUT))
3250                                path->ctls[NID_PATH_VOL_CTL] =
3251                                        HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3252                        else if (nid_has_volume(codec, nid, HDA_INPUT)) {
3253                                int idx = path->idx[i];
3254                                if (!depth && codec->single_adc_amp)
3255                                        idx = 0;
3256                                path->ctls[NID_PATH_VOL_CTL] =
3257                                        HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3258                        }
3259                }
3260                if (!path->ctls[NID_PATH_MUTE_CTL]) {
3261                        if (nid_has_mute(codec, nid, HDA_OUTPUT))
3262                                path->ctls[NID_PATH_MUTE_CTL] =
3263                                        HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3264                        else if (nid_has_mute(codec, nid, HDA_INPUT)) {
3265                                int idx = path->idx[i];
3266                                if (!depth && codec->single_adc_amp)
3267                                        idx = 0;
3268                                path->ctls[NID_PATH_MUTE_CTL] =
3269                                        HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT);
3270                        }
3271                }
3272        }
3273        return 0;
3274}
3275
3276static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid)
3277{
3278        struct hda_gen_spec *spec = codec->spec;
3279        struct auto_pin_cfg *cfg = &spec->autocfg;
3280        unsigned int val;
3281        int i;
3282
3283        if (!spec->inv_dmic_split)
3284                return false;
3285        for (i = 0; i < cfg->num_inputs; i++) {
3286                if (cfg->inputs[i].pin != nid)
3287                        continue;
3288                if (cfg->inputs[i].type != AUTO_PIN_MIC)
3289                        return false;
3290                val = snd_hda_codec_get_pincfg(codec, nid);
3291                return snd_hda_get_input_pin_attr(val) == INPUT_PIN_ATTR_INT;
3292        }
3293        return false;
3294}
3295
3296/* capture switch put callback for a single control with hook call */
3297static int cap_single_sw_put(struct snd_kcontrol *kcontrol,
3298                             struct snd_ctl_elem_value *ucontrol)
3299{
3300        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3301        struct hda_gen_spec *spec = codec->spec;
3302        int ret;
3303
3304        ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3305        if (ret < 0)
3306                return ret;
3307
3308        if (spec->cap_sync_hook)
3309                spec->cap_sync_hook(codec, ucontrol);
3310
3311        return ret;
3312}
3313
3314static int add_single_cap_ctl(struct hda_codec *codec, const char *label,
3315                              int idx, bool is_switch, unsigned int ctl,
3316                              bool inv_dmic)
3317{
3318        struct hda_gen_spec *spec = codec->spec;
3319        char tmpname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3320        int type = is_switch ? HDA_CTL_WIDGET_MUTE : HDA_CTL_WIDGET_VOL;
3321        const char *sfx = is_switch ? "Switch" : "Volume";
3322        unsigned int chs = inv_dmic ? 1 : 3;
3323        struct snd_kcontrol_new *knew;
3324
3325        if (!ctl)
3326                return 0;
3327
3328        if (label)
3329                snprintf(tmpname, sizeof(tmpname),
3330                         "%s Capture %s", label, sfx);
3331        else
3332                snprintf(tmpname, sizeof(tmpname),
3333                         "Capture %s", sfx);
3334        knew = add_control(spec, type, tmpname, idx,
3335                           amp_val_replace_channels(ctl, chs));
3336        if (!knew)
3337                return -ENOMEM;
3338        if (is_switch)
3339                knew->put = cap_single_sw_put;
3340        if (!inv_dmic)
3341                return 0;
3342
3343        /* Make independent right kcontrol */
3344        if (label)
3345                snprintf(tmpname, sizeof(tmpname),
3346                         "Inverted %s Capture %s", label, sfx);
3347        else
3348                snprintf(tmpname, sizeof(tmpname),
3349                         "Inverted Capture %s", sfx);
3350        knew = add_control(spec, type, tmpname, idx,
3351                           amp_val_replace_channels(ctl, 2));
3352        if (!knew)
3353                return -ENOMEM;
3354        if (is_switch)
3355                knew->put = cap_single_sw_put;
3356        return 0;
3357}
3358
3359/* create single (and simple) capture volume and switch controls */
3360static int create_single_cap_vol_ctl(struct hda_codec *codec, int idx,
3361                                     unsigned int vol_ctl, unsigned int sw_ctl,
3362                                     bool inv_dmic)
3363{
3364        int err;
3365        err = add_single_cap_ctl(codec, NULL, idx, false, vol_ctl, inv_dmic);
3366        if (err < 0)
3367                return err;
3368        err = add_single_cap_ctl(codec, NULL, idx, true, sw_ctl, inv_dmic);
3369        if (err < 0)
3370                return err;
3371        return 0;
3372}
3373
3374/* create bound capture volume and switch controls */
3375static int create_bind_cap_vol_ctl(struct hda_codec *codec, int idx,
3376                                   unsigned int vol_ctl, unsigned int sw_ctl)
3377{
3378        struct hda_gen_spec *spec = codec->spec;
3379        struct snd_kcontrol_new *knew;
3380
3381        if (vol_ctl) {
3382                knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3383                if (!knew)
3384                        return -ENOMEM;
3385                knew->index = idx;
3386                knew->private_value = vol_ctl;
3387                knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3388        }
3389        if (sw_ctl) {
3390                knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3391                if (!knew)
3392                        return -ENOMEM;
3393                knew->index = idx;
3394                knew->private_value = sw_ctl;
3395                knew->subdevice = HDA_SUBDEV_AMP_FLAG;
3396        }
3397        return 0;
3398}
3399
3400/* return the vol ctl when used first in the imux list */
3401static unsigned int get_first_cap_ctl(struct hda_codec *codec, int idx, int type)
3402{
3403        struct nid_path *path;
3404        unsigned int ctl;
3405        int i;
3406
3407        path = get_input_path(codec, 0, idx);
3408        if (!path)
3409                return 0;
3410        ctl = path->ctls[type];
3411        if (!ctl)
3412                return 0;
3413        for (i = 0; i < idx - 1; i++) {
3414                path = get_input_path(codec, 0, i);
3415                if (path && path->ctls[type] == ctl)
3416                        return 0;
3417        }
3418        return ctl;
3419}
3420
3421/* create individual capture volume and switch controls per input */
3422static int create_multi_cap_vol_ctl(struct hda_codec *codec)
3423{
3424        struct hda_gen_spec *spec = codec->spec;
3425        struct hda_input_mux *imux = &spec->input_mux;
3426        int i, err, type;
3427
3428        for (i = 0; i < imux->num_items; i++) {
3429                bool inv_dmic;
3430                int idx;
3431
3432                idx = imux->items[i].index;
3433                if (idx >= spec->autocfg.num_inputs)
3434                        continue;
3435                inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3436
3437                for (type = 0; type < 2; type++) {
3438                        err = add_single_cap_ctl(codec,
3439                                                 spec->input_labels[idx],
3440                                                 spec->input_label_idxs[idx],
3441                                                 type,
3442                                                 get_first_cap_ctl(codec, i, type),
3443                                                 inv_dmic);
3444                        if (err < 0)
3445                                return err;
3446                }
3447        }
3448        return 0;
3449}
3450
3451static int create_capture_mixers(struct hda_codec *codec)
3452{
3453        struct hda_gen_spec *spec = codec->spec;
3454        struct hda_input_mux *imux = &spec->input_mux;
3455        int i, n, nums, err;
3456
3457        if (spec->dyn_adc_switch)
3458                nums = 1;
3459        else
3460                nums = spec->num_adc_nids;
3461
3462        if (!spec->auto_mic && imux->num_items > 1) {
3463                struct snd_kcontrol_new *knew;
3464                const char *name;
3465                name = nums > 1 ? "Input Source" : "Capture Source";
3466                knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3467                if (!knew)
3468                        return -ENOMEM;
3469                knew->count = nums;
3470        }
3471
3472        for (n = 0; n < nums; n++) {
3473                bool multi = false;
3474                bool multi_cap_vol = spec->multi_cap_vol;
3475                bool inv_dmic = false;
3476                int vol, sw;
3477
3478                vol = sw = 0;
3479                for (i = 0; i < imux->num_items; i++) {
3480                        struct nid_path *path;
3481                        path = get_input_path(codec, n, i);
3482                        if (!path)
3483                                continue;
3484                        parse_capvol_in_path(codec, path);
3485                        if (!vol)
3486                                vol = path->ctls[NID_PATH_VOL_CTL];
3487                        else if (vol != path->ctls[NID_PATH_VOL_CTL]) {
3488                                multi = true;
3489                                if (!same_amp_caps(codec, vol,
3490                                    path->ctls[NID_PATH_VOL_CTL], HDA_INPUT))
3491                                        multi_cap_vol = true;
3492                        }
3493                        if (!sw)
3494                                sw = path->ctls[NID_PATH_MUTE_CTL];
3495                        else if (sw != path->ctls[NID_PATH_MUTE_CTL]) {
3496                                multi = true;
3497                                if (!same_amp_caps(codec, sw,
3498                                    path->ctls[NID_PATH_MUTE_CTL], HDA_INPUT))
3499                                        multi_cap_vol = true;
3500                        }
3501                        if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3502                                inv_dmic = true;
3503                }
3504
3505                if (!multi)
3506                        err = create_single_cap_vol_ctl(codec, n, vol, sw,
3507                                                        inv_dmic);
3508                else if (!multi_cap_vol)
3509                        err = create_bind_cap_vol_ctl(codec, n, vol, sw);
3510                else
3511                        err = create_multi_cap_vol_ctl(codec);
3512                if (err < 0)
3513                        return err;
3514        }
3515
3516        return 0;
3517}
3518
3519/*
3520 * add mic boosts if needed
3521 */
3522
3523/* check whether the given amp is feasible as a boost volume */
3524static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid,
3525                            int dir, int idx)
3526{
3527        unsigned int step;
3528
3529        if (!nid_has_volume(codec, nid, dir) ||
3530            is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) ||
3531            is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL))
3532                return false;
3533
3534        step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE)
3535                >> AC_AMPCAP_STEP_SIZE_SHIFT;
3536        if (step < 0x20)
3537                return false;
3538        return true;
3539}
3540
3541/* look for a boost amp in a widget close to the pin */
3542static unsigned int look_for_boost_amp(struct hda_codec *codec,
3543                                       struct nid_path *path)
3544{
3545        unsigned int val = 0;
3546        hda_nid_t nid;
3547        int depth;
3548
3549        for (depth = 0; depth < 3; depth++) {
3550                if (depth >= path->depth - 1)
3551                        break;
3552                nid = path->path[depth];
3553                if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) {
3554                        val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT);
3555                        break;
3556                } else if (check_boost_vol(codec, nid, HDA_INPUT,
3557                                           path->idx[depth])) {
3558                        val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth],
3559                                                  HDA_INPUT);
3560                        break;
3561                }
3562        }
3563
3564        return val;
3565}
3566
3567static int parse_mic_boost(struct hda_codec *codec)
3568{
3569        struct hda_gen_spec *spec = codec->spec;
3570        struct auto_pin_cfg *cfg = &spec->autocfg;
3571        struct hda_input_mux *imux = &spec->input_mux;
3572        int i;
3573
3574        if (!spec->num_adc_nids)
3575                return 0;
3576
3577        for (i = 0; i < imux->num_items; i++) {
3578                struct nid_path *path;
3579                unsigned int val;
3580                int idx;
3581                char boost_label[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3582
3583                idx = imux->items[i].index;
3584                if (idx >= imux->num_items)
3585                        continue;
3586
3587                /* check only line-in and mic pins */
3588                if (cfg->inputs[idx].type > AUTO_PIN_LINE_IN)
3589                        continue;
3590
3591                path = get_input_path(codec, 0, i);
3592                if (!path)
3593                        continue;
3594
3595                val = look_for_boost_amp(codec, path);
3596                if (!val)
3597                        continue;
3598
3599                /* create a boost control */
3600                snprintf(boost_label, sizeof(boost_label),
3601                         "%s Boost Volume", spec->input_labels[idx]);
3602                if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3603                                 spec->input_label_idxs[idx], val))
3604                        return -ENOMEM;
3605
3606                path->ctls[NID_PATH_BOOST_CTL] = val;
3607        }
3608        return 0;
3609}
3610
3611/*
3612 * parse digital I/Os and set up NIDs in BIOS auto-parse mode
3613 */
3614static void parse_digital(struct hda_codec *codec)
3615{
3616        struct hda_gen_spec *spec = codec->spec;
3617        struct nid_path *path;
3618        int i, nums;
3619        hda_nid_t dig_nid, pin;
3620
3621        /* support multiple SPDIFs; the secondary is set up as a slave */
3622        nums = 0;
3623        for (i = 0; i < spec->autocfg.dig_outs; i++) {
3624                pin = spec->autocfg.dig_out_pins[i];
3625                dig_nid = look_for_dac(codec, pin, true);
3626                if (!dig_nid)
3627                        continue;
3628                path = snd_hda_add_new_path(codec, dig_nid, pin, 0);
3629                if (!path)
3630                        continue;
3631                print_nid_path("digout", path);
3632                path->active = true;
3633                spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
3634                set_pin_target(codec, pin, PIN_OUT, false);
3635                if (!nums) {
3636                        spec->multiout.dig_out_nid = dig_nid;
3637                        spec->dig_out_type = spec->autocfg.dig_out_type[0];
3638                } else {
3639                        spec->multiout.slave_dig_outs = spec->slave_dig_outs;
3640                        if (nums >= ARRAY_SIZE(spec->slave_dig_outs) - 1)
3641                        break;
3642                        spec->slave_dig_outs[nums - 1] = dig_nid;
3643                }
3644                nums++;
3645        }
3646
3647        if (spec->autocfg.dig_in_pin) {
3648                pin = spec->autocfg.dig_in_pin;
3649                dig_nid = codec->start_nid;
3650                for (i = 0; i < codec->num_nodes; i++, dig_nid++) {
3651                        unsigned int wcaps = get_wcaps(codec, dig_nid);
3652                        if (get_wcaps_type(wcaps) != AC_WID_AUD_IN)
3653                                continue;
3654                        if (!(wcaps & AC_WCAP_DIGITAL))
3655                                continue;
3656                        path = snd_hda_add_new_path(codec, pin, dig_nid, 0);
3657                        if (path) {
3658                                print_nid_path("digin", path);
3659                                path->active = true;
3660                                spec->dig_in_nid = dig_nid;
3661                                spec->digin_path = snd_hda_get_path_idx(codec, path);
3662                                set_pin_target(codec, pin, PIN_IN, false);
3663                                break;
3664                        }
3665                }
3666        }
3667}
3668
3669
3670/*
3671 * input MUX handling
3672 */
3673
3674static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur);
3675
3676/* select the given imux item; either unmute exclusively or select the route */
3677static int mux_select(struct hda_codec *codec, unsigned int adc_idx,
3678                      unsigned int idx)
3679{
3680        struct hda_gen_spec *spec = codec->spec;
3681        const struct hda_input_mux *imux;
3682        struct nid_path *old_path, *path;
3683
3684        imux = &spec->input_mux;
3685        if (!imux->num_items)
3686                return 0;
3687
3688        if (idx >= imux->num_items)
3689                idx = imux->num_items - 1;
3690        if (spec->cur_mux[adc_idx] == idx)
3691                return 0;
3692
3693        old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
3694        if (!old_path)
3695                return 0;
3696        if (old_path->active)
3697                snd_hda_activate_path(codec, old_path, false, false);
3698
3699        spec->cur_mux[adc_idx] = idx;
3700
3701        if (spec->hp_mic)
3702                update_hp_mic(codec, adc_idx, false);
3703
3704        if (spec->dyn_adc_switch)
3705                dyn_adc_pcm_resetup(codec, idx);
3706
3707        path = get_input_path(codec, adc_idx, idx);
3708        if (!path)
3709                return 0;
3710        if (path->active)
3711                return 0;
3712        snd_hda_activate_path(codec, path, true, false);
3713        if (spec->cap_sync_hook)
3714                spec->cap_sync_hook(codec, NULL);
3715        path_power_down_sync(codec, old_path);
3716        return 1;
3717}
3718
3719
3720/*
3721 * Jack detections for HP auto-mute and mic-switch
3722 */
3723
3724/* check each pin in the given array; returns true if any of them is plugged */
3725static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
3726{
3727        int i, present = 0;
3728
3729        for (i = 0; i < num_pins; i++) {
3730                hda_nid_t nid = pins[i];
3731                if (!nid)
3732                        break;
3733                /* don't detect pins retasked as inputs */
3734                if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN)
3735                        continue;
3736                present |= snd_hda_jack_detect(codec, nid);
3737        }
3738        return present;
3739}
3740
3741/* standard HP/line-out auto-mute helper */
3742static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
3743                        bool mute)
3744{
3745        struct hda_gen_spec *spec = codec->spec;
3746        int i;
3747
3748        for (i = 0; i < num_pins; i++) {
3749                hda_nid_t nid = pins[i];
3750                unsigned int val, oldval;
3751                if (!nid)
3752                        break;
3753
3754                if (spec->auto_mute_via_amp) {
3755                        if (mute)
3756                                spec->mute_bits |= (1ULL << nid);
3757                        else
3758                                spec->mute_bits &= ~(1ULL << nid);
3759                        set_pin_eapd(codec, nid, !mute);
3760                        continue;
3761                }
3762
3763                oldval = snd_hda_codec_get_pin_target(codec, nid);
3764                if (oldval & PIN_IN)
3765                        continue; /* no mute for inputs */
3766                /* don't reset VREF value in case it's controlling
3767                 * the amp (see alc861_fixup_asus_amp_vref_0f())
3768                 */
3769                if (spec->keep_vref_in_automute)
3770                        val = oldval & ~PIN_HP;
3771                else
3772                        val = 0;
3773                if (!mute)
3774                        val |= oldval;
3775                /* here we call update_pin_ctl() so that the pinctl is changed
3776                 * without changing the pinctl target value;
3777                 * the original target value will be still referred at the
3778                 * init / resume again
3779                 */
3780                update_pin_ctl(codec, nid, val);
3781                set_pin_eapd(codec, nid, !mute);
3782        }
3783}
3784
3785/* Toggle outputs muting */
3786void snd_hda_gen_update_outputs(struct hda_codec *codec)
3787{
3788        struct hda_gen_spec *spec = codec->spec;
3789        int on;
3790
3791        /* Control HP pins/amps depending on master_mute state;
3792         * in general, HP pins/amps control should be enabled in all cases,
3793         * but currently set only for master_mute, just to be safe
3794         */
3795        do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
3796                    spec->autocfg.hp_pins, spec->master_mute);
3797
3798        if (!spec->automute_speaker)
3799                on = 0;
3800        else
3801                on = spec->hp_jack_present | spec->line_jack_present;
3802        on |= spec->master_mute;
3803        spec->speaker_muted = on;
3804        do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
3805                    spec->autocfg.speaker_pins, on);
3806
3807        /* toggle line-out mutes if needed, too */
3808        /* if LO is a copy of either HP or Speaker, don't need to handle it */
3809        if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
3810            spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
3811                return;
3812        if (!spec->automute_lo)
3813                on = 0;
3814        else
3815                on = spec->hp_jack_present;
3816        on |= spec->master_mute;
3817        spec->line_out_muted = on;
3818        do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3819                    spec->autocfg.line_out_pins, on);
3820}
3821EXPORT_SYMBOL_HDA(snd_hda_gen_update_outputs);
3822
3823static void call_update_outputs(struct hda_codec *codec)
3824{
3825        struct hda_gen_spec *spec = codec->spec;
3826        if (spec->automute_hook)
3827                spec->automute_hook(codec);
3828        else
3829                snd_hda_gen_update_outputs(codec);
3830
3831        /* sync the whole vmaster slaves to reflect the new auto-mute status */
3832        if (spec->auto_mute_via_amp && !codec->bus->shutdown)
3833                snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
3834}
3835
3836/* standard HP-automute helper */
3837void snd_hda_gen_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3838{
3839        struct hda_gen_spec *spec = codec->spec;
3840        hda_nid_t *pins = spec->autocfg.hp_pins;
3841        int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
3842
3843        /* No detection for the first HP jack during indep-HP mode */
3844        if (spec->indep_hp_enabled) {
3845                pins++;
3846                num_pins--;
3847        }
3848
3849        spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
3850        if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
3851                return;
3852        call_update_outputs(codec);
3853}
3854EXPORT_SYMBOL_HDA(snd_hda_gen_hp_automute);
3855
3856/* standard line-out-automute helper */
3857void snd_hda_gen_line_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3858{
3859        struct hda_gen_spec *spec = codec->spec;
3860
3861        if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
3862                return;
3863        /* check LO jack only when it's different from HP */
3864        if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
3865                return;
3866
3867        spec->line_jack_present =
3868                detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
3869                             spec->autocfg.line_out_pins);
3870        if (!spec->automute_speaker || !spec->detect_lo)
3871                return;
3872        call_update_outputs(codec);
3873}
3874EXPORT_SYMBOL_HDA(snd_hda_gen_line_automute);
3875
3876/* standard mic auto-switch helper */
3877void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *jack)
3878{
3879        struct hda_gen_spec *spec = codec->spec;
3880        int i;
3881
3882        if (!spec->auto_mic)
3883                return;
3884
3885        for (i = spec->am_num_entries - 1; i > 0; i--) {
3886                hda_nid_t pin = spec->am_entry[i].pin;
3887                /* don't detect pins retasked as outputs */
3888                if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
3889                        continue;
3890                if (snd_hda_jack_detect(codec, pin)) {
3891                        mux_select(codec, 0, spec->am_entry[i].idx);
3892                        return;
3893                }
3894        }
3895        mux_select(codec, 0, spec->am_entry[0].idx);
3896}
3897EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch);
3898
3899/* call appropriate hooks */
3900static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack)
3901{
3902        struct hda_gen_spec *spec = codec->spec;
3903        if (spec->hp_automute_hook)
3904                spec->hp_automute_hook(codec, jack);
3905        else
3906                snd_hda_gen_hp_automute(codec, jack);
3907}
3908
3909static void call_line_automute(struct hda_codec *codec,
3910                               struct hda_jack_tbl *jack)
3911{
3912        struct hda_gen_spec *spec = codec->spec;
3913        if (spec->line_automute_hook)
3914                spec->line_automute_hook(codec, jack);
3915        else
3916                snd_hda_gen_line_automute(codec, jack);
3917}
3918
3919static void call_mic_autoswitch(struct hda_codec *codec,
3920                                struct hda_jack_tbl *jack)
3921{
3922        struct hda_gen_spec *spec = codec->spec;
3923        if (spec->mic_autoswitch_hook)
3924                spec->mic_autoswitch_hook(codec, jack);
3925        else
3926                snd_hda_gen_mic_autoswitch(codec, jack);
3927}
3928
3929/* update jack retasking */
3930static void update_automute_all(struct hda_codec *codec)
3931{
3932        call_hp_automute(codec, NULL);
3933        call_line_automute(codec, NULL);
3934        call_mic_autoswitch(codec, NULL);
3935}
3936
3937/*
3938 * Auto-Mute mode mixer enum support
3939 */
3940static int automute_mode_info(struct snd_kcontrol *kcontrol,
3941                              struct snd_ctl_elem_info *uinfo)
3942{
3943        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3944        struct hda_gen_spec *spec = codec->spec;
3945        static const char * const texts3[] = {
3946                "Disabled", "Speaker Only", "Line Out+Speaker"
3947        };
3948
3949        if (spec->automute_speaker_possible && spec->automute_lo_possible)
3950                return snd_hda_enum_helper_info(kcontrol, uinfo, 3, texts3);
3951        return snd_hda_enum_bool_helper_info(kcontrol, uinfo);
3952}
3953
3954static int automute_mode_get(struct snd_kcontrol *kcontrol,
3955                             struct snd_ctl_elem_value *ucontrol)
3956{
3957        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3958        struct hda_gen_spec *spec = codec->spec;
3959        unsigned int val = 0;
3960        if (spec->automute_speaker)
3961                val++;
3962        if (spec->automute_lo)
3963                val++;
3964
3965        ucontrol->value.enumerated.item[0] = val;
3966        return 0;
3967}
3968
3969static int automute_mode_put(struct snd_kcontrol *kcontrol,
3970                             struct snd_ctl_elem_value *ucontrol)
3971{
3972        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3973        struct hda_gen_spec *spec = codec->spec;
3974
3975        switch (ucontrol->value.enumerated.item[0]) {
3976        case 0:
3977                if (!spec->automute_speaker && !spec->automute_lo)
3978                        return 0;
3979                spec->automute_speaker = 0;
3980                spec->automute_lo = 0;
3981                break;
3982        case 1:
3983                if (spec->automute_speaker_possible) {
3984                        if (!spec->automute_lo && spec->automute_speaker)
3985                                return 0;
3986                        spec->automute_speaker = 1;
3987                        spec->automute_lo = 0;
3988                } else if (spec->automute_lo_possible) {
3989                        if (spec->automute_lo)
3990                                return 0;
3991                        spec->automute_lo = 1;
3992                } else
3993                        return -EINVAL;
3994                break;
3995        case 2:
3996                if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
3997                        return -EINVAL;
3998                if (spec->automute_speaker && spec->automute_lo)
3999                        return 0;
4000                spec->automute_speaker = 1;
4001                spec->automute_lo = 1;
4002                break;
4003        default:
4004                return -EINVAL;
4005        }
4006        call_update_outputs(codec);
4007        return 1;
4008}
4009
4010static const struct snd_kcontrol_new automute_mode_enum = {
4011        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4012        .name = "Auto-Mute Mode",
4013        .info = automute_mode_info,
4014        .get = automute_mode_get,
4015        .put = automute_mode_put,
4016};
4017
4018static int add_automute_mode_enum(struct hda_codec *codec)
4019{
4020        struct hda_gen_spec *spec = codec->spec;
4021
4022        if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4023                return -ENOMEM;
4024        return 0;
4025}
4026
4027/*
4028 * Check the availability of HP/line-out auto-mute;
4029 * Set up appropriately if really supported
4030 */
4031static int check_auto_mute_availability(struct hda_codec *codec)
4032{
4033        struct hda_gen_spec *spec = codec->spec;
4034        struct auto_pin_cfg *cfg = &spec->autocfg;
4035        int present = 0;
4036        int i, err;
4037
4038        if (spec->suppress_auto_mute)
4039                return 0;
4040
4041        if (cfg->hp_pins[0])
4042                present++;
4043        if (cfg->line_out_pins[0])
4044                present++;
4045        if (cfg->speaker_pins[0])
4046                present++;
4047        if (present < 2) /* need two different output types */
4048                return 0;
4049
4050        if (!cfg->speaker_pins[0] &&
4051            cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) {
4052                memcpy(cfg->speaker_pins, cfg->line_out_pins,
4053                       sizeof(cfg->speaker_pins));
4054                cfg->speaker_outs = cfg->line_outs;
4055        }
4056
4057        if (!cfg->hp_pins[0] &&
4058            cfg->line_out_type == AUTO_PIN_HP_OUT) {
4059                memcpy(cfg->hp_pins, cfg->line_out_pins,
4060                       sizeof(cfg->hp_pins));
4061                cfg->hp_outs = cfg->line_outs;
4062        }
4063
4064        for (i = 0; i < cfg->hp_outs; i++) {
4065                hda_nid_t nid = cfg->hp_pins[i];
4066                if (!is_jack_detectable(codec, nid))
4067                        continue;
4068                snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n",
4069                            nid);
4070                snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT,
4071                                                    call_hp_automute);
4072                spec->detect_hp = 1;
4073        }
4074
4075        if (cfg->line_out_type == AUTO_PIN_LINE_OUT && cfg->line_outs) {
4076                if (cfg->speaker_outs)
4077                        for (i = 0; i < cfg->line_outs; i++) {
4078                                hda_nid_t nid = cfg->line_out_pins[i];
4079                                if (!is_jack_detectable(codec, nid))
4080                                        continue;
4081                                snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid);
4082                                snd_hda_jack_detect_enable_callback(codec, nid,
4083                                                                    HDA_GEN_FRONT_EVENT,
4084                                                                    call_line_automute);
4085                                spec->detect_lo = 1;
4086                        }
4087                spec->automute_lo_possible = spec->detect_hp;
4088        }
4089
4090        spec->automute_speaker_possible = cfg->speaker_outs &&
4091                (spec->detect_hp || spec->detect_lo);
4092
4093        spec->automute_lo = spec->automute_lo_possible;
4094        spec->automute_speaker = spec->automute_speaker_possible;
4095
4096        if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4097                /* create a control for automute mode */
4098                err = add_automute_mode_enum(codec);
4099                if (err < 0)
4100                        return err;
4101        }
4102        return 0;
4103}
4104
4105/* check whether all auto-mic pins are valid; setup indices if OK */
4106static bool auto_mic_check_imux(struct hda_codec *codec)
4107{
4108        struct hda_gen_spec *spec = codec->spec;
4109        const struct hda_input_mux *imux;
4110        int i;
4111
4112        imux = &spec->input_mux;
4113        for (i = 0; i < spec->am_num_entries; i++) {
4114                spec->am_entry[i].idx =
4115                        find_idx_in_nid_list(spec->am_entry[i].pin,
4116                                             spec->imux_pins, imux->num_items);
4117                if (spec->am_entry[i].idx < 0)
4118                        return false; /* no corresponding imux */
4119        }
4120
4121        /* we don't need the jack detection for the first pin */
4122        for (i = 1; i < spec->am_num_entries; i++)
4123                snd_hda_jack_detect_enable_callback(codec,
4124                                                    spec->am_entry[i].pin,
4125                                                    HDA_GEN_MIC_EVENT,
4126                                                    call_mic_autoswitch);
4127        return true;
4128}
4129
4130static int compare_attr(const void *ap, const void *bp)
4131{
4132        const struct automic_entry *a = ap;
4133        const struct automic_entry *b = bp;
4134        return (int)(a->attr - b->attr);
4135}
4136
4137/*
4138 * Check the availability of auto-mic switch;
4139 * Set up if really supported
4140 */
4141static int check_auto_mic_availability(struct hda_codec *codec)
4142{
4143        struct hda_gen_spec *spec = codec->spec;
4144        struct auto_pin_cfg *cfg = &spec->autocfg;
4145        unsigned int types;
4146        int i, num_pins;
4147
4148        if (spec->suppress_auto_mic)
4149                return 0;
4150
4151        types = 0;
4152        num_pins = 0;
4153        for (i = 0; i < cfg->num_inputs; i++) {
4154                hda_nid_t nid = cfg->inputs[i].pin;
4155                unsigned int attr;
4156                attr = snd_hda_codec_get_pincfg(codec, nid);
4157                attr = snd_hda_get_input_pin_attr(attr);
4158                if (types & (1 << attr))
4159                        return 0; /* already occupied */
4160                switch (attr) {
4161                case INPUT_PIN_ATTR_INT:
4162                        if (cfg->inputs[i].type != AUTO_PIN_MIC)
4163                                return 0; /* invalid type */
4164                        break;
4165                case INPUT_PIN_ATTR_UNUSED:
4166                        return 0; /* invalid entry */
4167                default:
4168                        if (cfg->inputs[i].type > AUTO_PIN_LINE_IN)
4169                                return 0; /* invalid type */
4170                        if (!spec->line_in_auto_switch &&
4171                            cfg->inputs[i].type != AUTO_PIN_MIC)
4172                                return 0; /* only mic is allowed */
4173                        if (!is_jack_detectable(codec, nid))
4174                                return 0; /* no unsol support */
4175                        break;
4176                }
4177                if (num_pins >= MAX_AUTO_MIC_PINS)
4178                        return 0;
4179                types |= (1 << attr);
4180                spec->am_entry[num_pins].pin = nid;
4181                spec->am_entry[num_pins].attr = attr;
4182                num_pins++;
4183        }
4184
4185        if (num_pins < 2)
4186                return 0;
4187
4188        spec->am_num_entries = num_pins;
4189        /* sort the am_entry in the order of attr so that the pin with a
4190         * higher attr will be selected when the jack is plugged.
4191         */
4192        sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4193             compare_attr, NULL);
4194
4195        if (!auto_mic_check_imux(codec))
4196                return 0;
4197
4198        spec->auto_mic = 1;
4199        spec->num_adc_nids = 1;
4200        spec->cur_mux[0] = spec->am_entry[0].idx;
4201        snd_printdd("hda-codec: Enable auto-mic switch on NID 0x%x/0x%x/0x%x\n",
4202                    spec->am_entry[0].pin,
4203                    spec->am_entry[1].pin,
4204                    spec->am_entry[2].pin);
4205
4206        return 0;
4207}
4208
4209/* power_filter hook; make inactive widgets into power down */
4210static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
4211                                                  hda_nid_t nid,
4212                                                  unsigned int power_state)
4213{
4214        if (power_state != AC_PWRST_D0)
4215                return power_state;
4216        if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER)
4217                return power_state;
4218        if (is_active_nid_for_any(codec, nid))
4219                return power_state;
4220        return AC_PWRST_D3;
4221}
4222
4223
4224/*
4225 * Parse the given BIOS configuration and set up the hda_gen_spec
4226 *
4227 * return 1 if successful, 0 if the proper config is not found,
4228 * or a negative error code
4229 */
4230int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
4231                                  struct auto_pin_cfg *cfg)
4232{
4233        struct hda_gen_spec *spec = codec->spec;
4234        int err;
4235
4236        parse_user_hints(codec);
4237
4238        if (spec->mixer_nid && !spec->mixer_merge_nid)
4239                spec->mixer_merge_nid = spec->mixer_nid;
4240
4241        if (cfg != &spec->autocfg) {
4242                spec->autocfg = *cfg;
4243                cfg = &spec->autocfg;
4244        }
4245
4246        if (!spec->main_out_badness)
4247                spec->main_out_badness = &hda_main_out_badness;
4248        if (!spec->extra_out_badness)
4249                spec->extra_out_badness = &hda_extra_out_badness;
4250
4251        fill_all_dac_nids(codec);
4252
4253        if (!cfg->line_outs) {
4254                if (cfg->dig_outs || cfg->dig_in_pin) {
4255                        spec->multiout.max_channels = 2;
4256                        spec->no_analog = 1;
4257                        goto dig_only;
4258                }
4259                return 0; /* can't find valid BIOS pin config */
4260        }
4261
4262        if (!spec->no_primary_hp &&
4263            cfg->line_out_type == AUTO_PIN_SPEAKER_OUT &&
4264            cfg->line_outs <= cfg->hp_outs) {
4265                /* use HP as primary out */
4266                cfg->speaker_outs = cfg->line_outs;
4267                memcpy(cfg->speaker_pins, cfg->line_out_pins,
4268                       sizeof(cfg->speaker_pins));
4269                cfg->line_outs = cfg->hp_outs;
4270                memcpy(cfg->line_out_pins, cfg->hp_pins, sizeof(cfg->hp_pins));
4271                cfg->hp_outs = 0;
4272                memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins));
4273                cfg->line_out_type = AUTO_PIN_HP_OUT;
4274        }
4275
4276        err = parse_output_paths(codec);
4277        if (err < 0)
4278                return err;
4279        err = create_multi_channel_mode(codec);
4280        if (err < 0)
4281                return err;
4282        err = create_multi_out_ctls(codec, cfg);
4283        if (err < 0)
4284                return err;
4285        err = create_hp_out_ctls(codec);
4286        if (err < 0)
4287                return err;
4288        err = create_speaker_out_ctls(codec);
4289        if (err < 0)
4290                return err;
4291        err = create_indep_hp_ctls(codec);
4292        if (err < 0)
4293                return err;
4294        err = create_loopback_mixing_ctl(codec);
4295        if (err < 0)
4296                return err;
4297        err = create_hp_mic(codec);
4298        if (err < 0)
4299                return err;
4300        err = create_input_ctls(codec);
4301        if (err < 0)
4302                return err;
4303
4304        spec->const_channel_count = spec->ext_channel_count;
4305        /* check the multiple speaker and headphone pins */
4306        if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT)
4307                spec->const_channel_count = max(spec->const_channel_count,
4308                                                cfg->speaker_outs * 2);
4309        if (cfg->line_out_type != AUTO_PIN_HP_OUT)
4310                spec->const_channel_count = max(spec->const_channel_count,
4311                                                cfg->hp_outs * 2);
4312        spec->multiout.max_channels = max(spec->ext_channel_count,
4313                                          spec->const_channel_count);
4314
4315        err = check_auto_mute_availability(codec);
4316        if (err < 0)
4317                return err;
4318
4319        err = check_dyn_adc_switch(codec);
4320        if (err < 0)
4321                return err;
4322
4323        err = check_auto_mic_availability(codec);
4324        if (err < 0)
4325                return err;
4326
4327        err = create_capture_mixers(codec);
4328        if (err < 0)
4329                return err;
4330
4331        err = parse_mic_boost(codec);
4332        if (err < 0)
4333                return err;
4334
4335        if (spec->add_jack_modes) {
4336                if (cfg->line_out_type != AUTO_PIN_SPEAKER_OUT) {
4337                        err = create_out_jack_modes(codec, cfg->line_outs,
4338                                                    cfg->line_out_pins);
4339                        if (err < 0)
4340                                return err;
4341                }
4342                if (cfg->line_out_type != AUTO_PIN_HP_OUT) {
4343                        err = create_out_jack_modes(codec, cfg->hp_outs,
4344                                                    cfg->hp_pins);
4345                        if (err < 0)
4346                                return err;
4347                }
4348        }
4349
4350 dig_only:
4351        parse_digital(codec);
4352
4353        if (spec->power_down_unused)
4354                codec->power_filter = snd_hda_gen_path_power_filter;
4355
4356        if (!spec->no_analog && spec->beep_nid) {
4357                err = snd_hda_attach_beep_device(codec, spec->beep_nid);
4358                if (err < 0)
4359                        return err;
4360        }
4361
4362        return 1;
4363}
4364EXPORT_SYMBOL_HDA(snd_hda_gen_parse_auto_config);
4365
4366
4367/*
4368 * Build control elements
4369 */
4370
4371/* slave controls for virtual master */
4372static const char * const slave_pfxs[] = {
4373        "Front", "Surround", "Center", "LFE", "Side",
4374        "Headphone", "Speaker", "Mono", "Line Out",
4375        "CLFE", "Bass Speaker", "PCM",
4376        "Speaker Front", "Speaker Surround", "Speaker CLFE", "Speaker Side",
4377        "Headphone Front", "Headphone Surround", "Headphone CLFE",
4378        "Headphone Side",
4379        NULL,
4380};
4381
4382int snd_hda_gen_build_controls(struct hda_codec *codec)
4383{
4384        struct hda_gen_spec *spec = codec->spec;
4385        int err;
4386
4387        if (spec->kctls.used) {
4388                err = snd_hda_add_new_ctls(codec, spec->kctls.list);
4389                if (err < 0)
4390                        return err;
4391        }
4392
4393        if (spec->multiout.dig_out_nid) {
4394                err = snd_hda_create_dig_out_ctls(codec,
4395                                                  spec->multiout.dig_out_nid,
4396                                                  spec->multiout.dig_out_nid,
4397                                                  spec->pcm_rec[1].pcm_type);
4398                if (err < 0)
4399                        return err;
4400                if (!spec->no_analog) {
4401                        err = snd_hda_create_spdif_share_sw(codec,
4402                                                            &spec->multiout);
4403                        if (err < 0)
4404                                return err;
4405                        spec->multiout.share_spdif = 1;
4406                }
4407        }
4408        if (spec->dig_in_nid) {
4409                err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
4410                if (err < 0)
4411                        return err;
4412        }
4413
4414        /* if we have no master control, let's create it */
4415        if (!spec->no_analog &&
4416            !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
4417                err = snd_hda_add_vmaster(codec, "Master Playback Volume",
4418                                          spec->vmaster_tlv, slave_pfxs,
4419                                          "Playback Volume");
4420                if (err < 0)
4421                        return err;
4422        }
4423        if (!spec->no_analog &&
4424            !snd_hda_find_mixer_ctl(codec, "Master Playback Switch")) {
4425                err = __snd_hda_add_vmaster(codec, "Master Playback Switch",
4426                                            NULL, slave_pfxs,
4427                                            "Playback Switch",
4428                                            true, &spec->vmaster_mute.sw_kctl);
4429                if (err < 0)
4430                        return err;
4431                if (spec->vmaster_mute.hook)
4432                        snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
4433                                                 spec->vmaster_mute_enum);
4434        }
4435
4436        free_kctls(spec); /* no longer needed */
4437
4438        err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
4439        if (err < 0)
4440                return err;
4441
4442        return 0;
4443}
4444EXPORT_SYMBOL_HDA(snd_hda_gen_build_controls);
4445
4446
4447/*
4448 * PCM definitions
4449 */
4450
4451static void call_pcm_playback_hook(struct hda_pcm_stream *hinfo,
4452                                   struct hda_codec *codec,
4453                                   struct snd_pcm_substream *substream,
4454                                   int action)
4455{
4456        struct hda_gen_spec *spec = codec->spec;
4457        if (spec->pcm_playback_hook)
4458                spec->pcm_playback_hook(hinfo, codec, substream, action);
4459}
4460
4461static void call_pcm_capture_hook(struct hda_pcm_stream *hinfo,
4462                                  struct hda_codec *codec,
4463                                  struct snd_pcm_substream *substream,
4464                                  int action)
4465{
4466        struct hda_gen_spec *spec = codec->spec;
4467        if (spec->pcm_capture_hook)
4468                spec->pcm_capture_hook(hinfo, codec, substream, action);
4469}
4470
4471/*
4472 * Analog playback callbacks
4473 */
4474static int playback_pcm_open(struct hda_pcm_stream *hinfo,
4475                             struct hda_codec *codec,
4476                             struct snd_pcm_substream *substream)
4477{
4478        struct hda_gen_spec *spec = codec->spec;
4479        int err;
4480
4481        mutex_lock(&spec->pcm_mutex);
4482        err = snd_hda_multi_out_analog_open(codec,
4483                                            &spec->multiout, substream,
4484                                             hinfo);
4485        if (!err) {
4486                spec->active_streams |= 1 << STREAM_MULTI_OUT;
4487                call_pcm_playback_hook(hinfo, codec, substream,
4488                                       HDA_GEN_PCM_ACT_OPEN);
4489        }
4490        mutex_unlock(&spec->pcm_mutex);
4491        return err;
4492}
4493
4494static int playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4495                                struct hda_codec *codec,
4496                                unsigned int stream_tag,
4497                                unsigned int format,
4498                                struct snd_pcm_substream *substream)
4499{
4500        struct hda_gen_spec *spec = codec->spec;
4501        int err;
4502
4503        err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
4504                                               stream_tag, format, substream);
4505        if (!err)
4506                call_pcm_playback_hook(hinfo, codec, substream,
4507                                       HDA_GEN_PCM_ACT_PREPARE);
4508        return err;
4509}
4510
4511static int playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4512                                struct hda_codec *codec,
4513                                struct snd_pcm_substream *substream)
4514{
4515        struct hda_gen_spec *spec = codec->spec;
4516        int err;
4517
4518        err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
4519        if (!err)
4520                call_pcm_playback_hook(hinfo, codec, substream,
4521                                       HDA_GEN_PCM_ACT_CLEANUP);
4522        return err;
4523}
4524
4525static int playback_pcm_close(struct hda_pcm_stream *hinfo,
4526                              struct hda_codec *codec,
4527                              struct snd_pcm_substream *substream)
4528{
4529        struct hda_gen_spec *spec = codec->spec;
4530        mutex_lock(&spec->pcm_mutex);
4531        spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
4532        call_pcm_playback_hook(hinfo, codec, substream,
4533                               HDA_GEN_PCM_ACT_CLOSE);
4534        mutex_unlock(&spec->pcm_mutex);
4535        return 0;
4536}
4537
4538static int capture_pcm_open(struct hda_pcm_stream *hinfo,
4539                            struct hda_codec *codec,
4540                            struct snd_pcm_substream *substream)
4541{
4542        call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_OPEN);
4543        return 0;
4544}
4545
4546static int capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4547                               struct hda_codec *codec,
4548                               unsigned int stream_tag,
4549                               unsigned int format,
4550                               struct snd_pcm_substream *substream)
4551{
4552        snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4553        call_pcm_capture_hook(hinfo, codec, substream,
4554                              HDA_GEN_PCM_ACT_PREPARE);
4555        return 0;
4556}
4557
4558static int capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4559                               struct hda_codec *codec,
4560                               struct snd_pcm_substream *substream)
4561{
4562        snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4563        call_pcm_capture_hook(hinfo, codec, substream,
4564                              HDA_GEN_PCM_ACT_CLEANUP);
4565        return 0;
4566}
4567
4568static int capture_pcm_close(struct hda_pcm_stream *hinfo,
4569                             struct hda_codec *codec,
4570                             struct snd_pcm_substream *substream)
4571{
4572        call_pcm_capture_hook(hinfo, codec, substream, HDA_GEN_PCM_ACT_CLOSE);
4573        return 0;
4574}
4575
4576static int alt_playback_pcm_open(struct hda_pcm_stream *hinfo,
4577                                 struct hda_codec *codec,
4578                                 struct snd_pcm_substream *substream)
4579{
4580        struct hda_gen_spec *spec = codec->spec;
4581        int err = 0;
4582
4583        mutex_lock(&spec->pcm_mutex);
4584        if (!spec->indep_hp_enabled)
4585                err = -EBUSY;
4586        else
4587                spec->active_streams |= 1 << STREAM_INDEP_HP;
4588        call_pcm_playback_hook(hinfo, codec, substream,
4589                               HDA_GEN_PCM_ACT_OPEN);
4590        mutex_unlock(&spec->pcm_mutex);
4591        return err;
4592}
4593
4594static int alt_playback_pcm_close(struct hda_pcm_stream *hinfo,
4595                                  struct hda_codec *codec,
4596                                  struct snd_pcm_substream *substream)
4597{
4598        struct hda_gen_spec *spec = codec->spec;
4599        mutex_lock(&spec->pcm_mutex);
4600        spec->active_streams &= ~(1 << STREAM_INDEP_HP);
4601        call_pcm_playback_hook(hinfo, codec, substream,
4602                               HDA_GEN_PCM_ACT_CLOSE);
4603        mutex_unlock(&spec->pcm_mutex);
4604        return 0;
4605}
4606
4607static int alt_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4608                                    struct hda_codec *codec,
4609                                    unsigned int stream_tag,
4610                                    unsigned int format,
4611                                    struct snd_pcm_substream *substream)
4612{
4613        snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
4614        call_pcm_playback_hook(hinfo, codec, substream,
4615                               HDA_GEN_PCM_ACT_PREPARE);
4616        return 0;
4617}
4618
4619static int alt_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4620                                    struct hda_codec *codec,
4621                                    struct snd_pcm_substream *substream)
4622{
4623        snd_hda_codec_cleanup_stream(codec, hinfo->nid);
4624        call_pcm_playback_hook(hinfo, codec, substream,
4625                               HDA_GEN_PCM_ACT_CLEANUP);
4626        return 0;
4627}
4628
4629/*
4630 * Digital out
4631 */
4632static int dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
4633                                 struct hda_codec *codec,
4634                                 struct snd_pcm_substream *substream)
4635{
4636        struct hda_gen_spec *spec = codec->spec;
4637        return snd_hda_multi_out_dig_open(codec, &spec->multiout);
4638}
4639
4640static int dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
4641                                    struct hda_codec *codec,
4642                                    unsigned int stream_tag,
4643                                    unsigned int format,
4644                                    struct snd_pcm_substream *substream)
4645{
4646        struct hda_gen_spec *spec = codec->spec;
4647        return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
4648                                             stream_tag, format, substream);
4649}
4650
4651static int dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
4652                                    struct hda_codec *codec,
4653                                    struct snd_pcm_substream *substream)
4654{
4655        struct hda_gen_spec *spec = codec->spec;
4656        return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
4657}
4658
4659static int dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
4660                                  struct hda_codec *codec,
4661                                  struct snd_pcm_substream *substream)
4662{
4663        struct hda_gen_spec *spec = codec->spec;
4664        return snd_hda_multi_out_dig_close(codec, &spec->multiout);
4665}
4666
4667/*
4668 * Analog capture
4669 */
4670#define alt_capture_pcm_open    capture_pcm_open
4671#define alt_capture_pcm_close   capture_pcm_close
4672
4673static int alt_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4674                                   struct hda_codec *codec,
4675                                   unsigned int stream_tag,
4676                                   unsigned int format,
4677                                   struct snd_pcm_substream *substream)
4678{
4679        struct hda_gen_spec *spec = codec->spec;
4680
4681        snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
4682                                   stream_tag, 0, format);
4683        call_pcm_capture_hook(hinfo, codec, substream,
4684                              HDA_GEN_PCM_ACT_PREPARE);
4685        return 0;
4686}
4687
4688static int alt_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4689                                   struct hda_codec *codec,
4690                                   struct snd_pcm_substream *substream)
4691{
4692        struct hda_gen_spec *spec = codec->spec;
4693
4694        snd_hda_codec_cleanup_stream(codec,
4695                                     spec->adc_nids[substream->number + 1]);
4696        call_pcm_capture_hook(hinfo, codec, substream,
4697                              HDA_GEN_PCM_ACT_CLEANUP);
4698        return 0;
4699}
4700
4701/*
4702 */
4703static const struct hda_pcm_stream pcm_analog_playback = {
4704        .substreams = 1,
4705        .channels_min = 2,
4706        .channels_max = 8,
4707        /* NID is set in build_pcms */
4708        .ops = {
4709                .open = playback_pcm_open,
4710                .close = playback_pcm_close,
4711                .prepare = playback_pcm_prepare,
4712                .cleanup = playback_pcm_cleanup
4713        },
4714};
4715
4716static const struct hda_pcm_stream pcm_analog_capture = {
4717        .substreams = 1,
4718        .channels_min = 2,
4719        .channels_max = 2,
4720        /* NID is set in build_pcms */
4721        .ops = {
4722                .open = capture_pcm_open,
4723                .close = capture_pcm_close,
4724                .prepare = capture_pcm_prepare,
4725                .cleanup = capture_pcm_cleanup
4726        },
4727};
4728
4729static const struct hda_pcm_stream pcm_analog_alt_playback = {
4730        .substreams = 1,
4731        .channels_min = 2,
4732        .channels_max = 2,
4733        /* NID is set in build_pcms */
4734        .ops = {
4735                .open = alt_playback_pcm_open,
4736                .close = alt_playback_pcm_close,
4737                .prepare = alt_playback_pcm_prepare,
4738                .cleanup = alt_playback_pcm_cleanup
4739        },
4740};
4741
4742static const struct hda_pcm_stream pcm_analog_alt_capture = {
4743        .substreams = 2, /* can be overridden */
4744        .channels_min = 2,
4745        .channels_max = 2,
4746        /* NID is set in build_pcms */
4747        .ops = {
4748                .open = alt_capture_pcm_open,
4749                .close = alt_capture_pcm_close,
4750                .prepare = alt_capture_pcm_prepare,
4751                .cleanup = alt_capture_pcm_cleanup
4752        },
4753};
4754
4755static const struct hda_pcm_stream pcm_digital_playback = {
4756        .substreams = 1,
4757        .channels_min = 2,
4758        .channels_max = 2,
4759        /* NID is set in build_pcms */
4760        .ops = {
4761                .open = dig_playback_pcm_open,
4762                .close = dig_playback_pcm_close,
4763                .prepare = dig_playback_pcm_prepare,
4764                .cleanup = dig_playback_pcm_cleanup
4765        },
4766};
4767
4768static const struct hda_pcm_stream pcm_digital_capture = {
4769        .substreams = 1,
4770        .channels_min = 2,
4771        .channels_max = 2,
4772        /* NID is set in build_pcms */
4773};
4774
4775/* Used by build_pcms to flag that a PCM has no playback stream */
4776static const struct hda_pcm_stream pcm_null_stream = {
4777        .substreams = 0,
4778        .channels_min = 0,
4779        .channels_max = 0,
4780};
4781
4782/*
4783 * dynamic changing ADC PCM streams
4784 */
4785static bool dyn_adc_pcm_resetup(struct hda_codec *codec, int cur)
4786{
4787        struct hda_gen_spec *spec = codec->spec;
4788        hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
4789
4790        if (spec->cur_adc && spec->cur_adc != new_adc) {
4791                /* stream is running, let's swap the current ADC */
4792                __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
4793                spec->cur_adc = new_adc;
4794                snd_hda_codec_setup_stream(codec, new_adc,
4795                                           spec->cur_adc_stream_tag, 0,
4796                                           spec->cur_adc_format);
4797                return true;
4798        }
4799        return false;
4800}
4801
4802/* analog capture with dynamic dual-adc changes */
4803static int dyn_adc_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
4804                                       struct hda_codec *codec,
4805                                       unsigned int stream_tag,
4806                                       unsigned int format,
4807                                       struct snd_pcm_substream *substream)
4808{
4809        struct hda_gen_spec *spec = codec->spec;
4810        spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
4811        spec->cur_adc_stream_tag = stream_tag;
4812        spec->cur_adc_format = format;
4813        snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
4814        return 0;
4815}
4816
4817static int dyn_adc_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
4818                                       struct hda_codec *codec,
4819                                       struct snd_pcm_substream *substream)
4820{
4821        struct hda_gen_spec *spec = codec->spec;
4822        snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
4823        spec->cur_adc = 0;
4824        return 0;
4825}
4826
4827static const struct hda_pcm_stream dyn_adc_pcm_analog_capture = {
4828        .substreams = 1,
4829        .channels_min = 2,
4830        .channels_max = 2,
4831        .nid = 0, /* fill later */
4832        .ops = {
4833                .prepare = dyn_adc_capture_pcm_prepare,
4834                .cleanup = dyn_adc_capture_pcm_cleanup
4835        },
4836};
4837
4838static void fill_pcm_stream_name(char *str, size_t len, const char *sfx,
4839                                 const char *chip_name)
4840{
4841        char *p;
4842
4843        if (*str)
4844                return;
4845        strlcpy(str, chip_name, len);
4846
4847        /* drop non-alnum chars after a space */
4848        for (p = strchr(str, ' '); p; p = strchr(p + 1, ' ')) {
4849                if (!isalnum(p[1])) {
4850                        *p = 0;
4851                        break;
4852                }
4853        }
4854        strlcat(str, sfx, len);
4855}
4856
4857/* build PCM streams based on the parsed results */
4858int snd_hda_gen_build_pcms(struct hda_codec *codec)
4859{
4860        struct hda_gen_spec *spec = codec->spec;
4861        struct hda_pcm *info = spec->pcm_rec;
4862        const struct hda_pcm_stream *p;
4863        bool have_multi_adcs;
4864
4865        codec->num_pcms = 1;
4866        codec->pcm_info = info;
4867
4868        if (spec->no_analog)
4869                goto skip_analog;
4870
4871        fill_pcm_stream_name(spec->stream_name_analog,
4872                             sizeof(spec->stream_name_analog),
4873                             " Analog", codec->chip_name);
4874        info->name = spec->stream_name_analog;
4875
4876        if (spec->multiout.num_dacs > 0) {
4877                p = spec->stream_analog_playback;
4878                if (!p)
4879                        p = &pcm_analog_playback;
4880                info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4881                info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dac_nids[0];
4882                info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
4883                        spec->multiout.max_channels;
4884                if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
4885                    spec->autocfg.line_outs == 2)
4886                        info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap =
4887                                snd_pcm_2_1_chmaps;
4888        }
4889        if (spec->num_adc_nids) {
4890                p = spec->stream_analog_capture;
4891                if (!p) {
4892                        if (spec->dyn_adc_switch)
4893                                p = &dyn_adc_pcm_analog_capture;
4894                        else
4895                                p = &pcm_analog_capture;
4896                }
4897                info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4898                info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0];
4899        }
4900
4901 skip_analog:
4902        /* SPDIF for stream index #1 */
4903        if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
4904                fill_pcm_stream_name(spec->stream_name_digital,
4905                                     sizeof(spec->stream_name_digital),
4906                                     " Digital", codec->chip_name);
4907                codec->num_pcms = 2;
4908                codec->slave_dig_outs = spec->multiout.slave_dig_outs;
4909                info = spec->pcm_rec + 1;
4910                info->name = spec->stream_name_digital;
4911                if (spec->dig_out_type)
4912                        info->pcm_type = spec->dig_out_type;
4913                else
4914                        info->pcm_type = HDA_PCM_TYPE_SPDIF;
4915                if (spec->multiout.dig_out_nid) {
4916                        p = spec->stream_digital_playback;
4917                        if (!p)
4918                                p = &pcm_digital_playback;
4919                        info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4920                        info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->multiout.dig_out_nid;
4921                }
4922                if (spec->dig_in_nid) {
4923                        p = spec->stream_digital_capture;
4924                        if (!p)
4925                                p = &pcm_digital_capture;
4926                        info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4927                        info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in_nid;
4928                }
4929        }
4930
4931        if (spec->no_analog)
4932                return 0;
4933
4934        /* If the use of more than one ADC is requested for the current
4935         * model, configure a second analog capture-only PCM.
4936         */
4937        have_multi_adcs = (spec->num_adc_nids > 1) &&
4938                !spec->dyn_adc_switch && !spec->auto_mic;
4939        /* Additional Analaog capture for index #2 */
4940        if (spec->alt_dac_nid || have_multi_adcs) {
4941                fill_pcm_stream_name(spec->stream_name_alt_analog,
4942                                     sizeof(spec->stream_name_alt_analog),
4943                             " Alt Analog", codec->chip_name);
4944                codec->num_pcms = 3;
4945                info = spec->pcm_rec + 2;
4946                info->name = spec->stream_name_alt_analog;
4947                if (spec->alt_dac_nid) {
4948                        p = spec->stream_analog_alt_playback;
4949                        if (!p)
4950                                p = &pcm_analog_alt_playback;
4951                        info->stream[SNDRV_PCM_STREAM_PLAYBACK] = *p;
4952                        info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
4953                                spec->alt_dac_nid;
4954                } else {
4955                        info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
4956                                pcm_null_stream;
4957                        info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
4958                }
4959                if (have_multi_adcs) {
4960                        p = spec->stream_analog_alt_capture;
4961                        if (!p)
4962                                p = &pcm_analog_alt_capture;
4963                        info->stream[SNDRV_PCM_STREAM_CAPTURE] = *p;
4964                        info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
4965                                spec->adc_nids[1];
4966                        info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
4967                                spec->num_adc_nids - 1;
4968                } else {
4969                        info->stream[SNDRV_PCM_STREAM_CAPTURE] =
4970                                pcm_null_stream;
4971                        info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = 0;
4972                }
4973        }
4974
4975        return 0;
4976}
4977EXPORT_SYMBOL_HDA(snd_hda_gen_build_pcms);
4978
4979
4980/*
4981 * Standard auto-parser initializations
4982 */
4983
4984/* configure the given path as a proper output */
4985static void set_output_and_unmute(struct hda_codec *codec, int path_idx)
4986{
4987        struct nid_path *path;
4988        hda_nid_t pin;
4989
4990        path = snd_hda_get_path_from_idx(codec, path_idx);
4991        if (!path || !path->depth)
4992                return;
4993        pin = path->path[path->depth - 1];
4994        restore_pin_ctl(codec, pin);
4995        snd_hda_activate_path(codec, path, path->active,
4996                              aamix_default(codec->spec));
4997        set_pin_eapd(codec, pin, path->active);
4998}
4999
5000/* initialize primary output paths */
5001static void init_multi_out(struct hda_codec *codec)
5002{
5003        struct hda_gen_spec *spec = codec->spec;
5004        int i;
5005
5006        for (i = 0; i < spec->autocfg.line_outs; i++)
5007                set_output_and_unmute(codec, spec->out_paths[i]);
5008}
5009
5010
5011static void __init_extra_out(struct hda_codec *codec, int num_outs, int *paths)
5012{
5013        int i;
5014
5015        for (i = 0; i < num_outs; i++)
5016                set_output_and_unmute(codec, paths[i]);
5017}
5018
5019/* initialize hp and speaker paths */
5020static void init_extra_out(struct hda_codec *codec)
5021{
5022        struct hda_gen_spec *spec = codec->spec;
5023
5024        if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5025                __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5026        if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5027                __init_extra_out(codec, spec->autocfg.speaker_outs,
5028                                 spec->speaker_paths);
5029}
5030
5031/* initialize multi-io paths */
5032static void init_multi_io(struct hda_codec *codec)
5033{
5034        struct hda_gen_spec *spec = codec->spec;
5035        int i;
5036
5037        for (i = 0; i < spec->multi_ios; i++) {
5038                hda_nid_t pin = spec->multi_io[i].pin;
5039                struct nid_path *path;
5040                path = get_multiio_path(codec, i);
5041                if (!path)
5042                        continue;
5043                if (!spec->multi_io[i].ctl_in)
5044                        spec->multi_io[i].ctl_in =
5045                                snd_hda_codec_get_pin_target(codec, pin);
5046                snd_hda_activate_path(codec, path, path->active,
5047                                      aamix_default(spec));
5048        }
5049}
5050
5051/* set up input pins and loopback paths */
5052static void init_analog_input(struct hda_codec *codec)
5053{
5054        struct hda_gen_spec *spec = codec->spec;
5055        struct auto_pin_cfg *cfg = &spec->autocfg;
5056        int i;
5057
5058        for (i = 0; i < cfg->num_inputs; i++) {
5059                hda_nid_t nid = cfg->inputs[i].pin;
5060                if (is_input_pin(codec, nid))
5061                        restore_pin_ctl(codec, nid);
5062
5063                /* init loopback inputs */
5064                if (spec->mixer_nid) {
5065                        resume_path_from_idx(codec, spec->loopback_paths[i]);
5066                        resume_path_from_idx(codec, spec->loopback_merge_path);
5067                }
5068        }
5069}
5070
5071/* initialize ADC paths */
5072static void init_input_src(struct hda_codec *codec)
5073{
5074        struct hda_gen_spec *spec = codec->spec;
5075        struct hda_input_mux *imux = &spec->input_mux;
5076        struct nid_path *path;
5077        int i, c, nums;
5078
5079        if (spec->dyn_adc_switch)
5080                nums = 1;
5081        else
5082                nums = spec->num_adc_nids;
5083
5084        for (c = 0; c < nums; c++) {
5085                for (i = 0; i < imux->num_items; i++) {
5086                        path = get_input_path(codec, c, i);
5087                        if (path) {
5088                                bool active = path->active;
5089                                if (i == spec->cur_mux[c])
5090                                        active = true;
5091                                snd_hda_activate_path(codec, path, active, false);
5092                        }
5093                }
5094                if (spec->hp_mic)
5095                        update_hp_mic(codec, c, true);
5096        }
5097
5098        if (spec->cap_sync_hook)
5099                spec->cap_sync_hook(codec, NULL);
5100}
5101
5102/* set right pin controls for digital I/O */
5103static void init_digital(struct hda_codec *codec)
5104{
5105        struct hda_gen_spec *spec = codec->spec;
5106        int i;
5107        hda_nid_t pin;
5108
5109        for (i = 0; i < spec->autocfg.dig_outs; i++)
5110                set_output_and_unmute(codec, spec->digout_paths[i]);
5111        pin = spec->autocfg.dig_in_pin;
5112        if (pin) {
5113                restore_pin_ctl(codec, pin);
5114                resume_path_from_idx(codec, spec->digin_path);
5115        }
5116}
5117
5118/* clear unsol-event tags on unused pins; Conexant codecs seem to leave
5119 * invalid unsol tags by some reason
5120 */
5121static void clear_unsol_on_unused_pins(struct hda_codec *codec)
5122{
5123        int i;
5124
5125        for (i = 0; i < codec->init_pins.used; i++) {
5126                struct hda_pincfg *pin = snd_array_elem(&codec->init_pins, i);
5127                hda_nid_t nid = pin->nid;
5128                if (is_jack_detectable(codec, nid) &&
5129                    !snd_hda_jack_tbl_get(codec, nid))
5130                        snd_hda_codec_update_cache(codec, nid, 0,
5131                                        AC_VERB_SET_UNSOLICITED_ENABLE, 0);
5132        }
5133}
5134
5135/*
5136 * initialize the generic spec;
5137 * this can be put as patch_ops.init function
5138 */
5139int snd_hda_gen_init(struct hda_codec *codec)
5140{
5141        struct hda_gen_spec *spec = codec->spec;
5142
5143        if (spec->init_hook)
5144                spec->init_hook(codec);
5145
5146        snd_hda_apply_verbs(codec);
5147
5148        codec->cached_write = 1;
5149
5150        init_multi_out(codec);
5151        init_extra_out(codec);
5152        init_multi_io(codec);
5153        init_analog_input(codec);
5154        init_input_src(codec);
5155        init_digital(codec);
5156
5157        clear_unsol_on_unused_pins(codec);
5158
5159        /* call init functions of standard auto-mute helpers */
5160        update_automute_all(codec);
5161
5162        snd_hda_codec_flush_cache(codec);
5163
5164        if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
5165                snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5166
5167        hda_call_check_power_status(codec, 0x01);
5168        return 0;
5169}
5170EXPORT_SYMBOL_HDA(snd_hda_gen_init);
5171
5172/*
5173 * free the generic spec;
5174 * this can be put as patch_ops.free function
5175 */
5176void snd_hda_gen_free(struct hda_codec *codec)
5177{
5178        snd_hda_detach_beep_device(codec);
5179        snd_hda_gen_spec_free(codec->spec);
5180        kfree(codec->spec);
5181        codec->spec = NULL;
5182}
5183EXPORT_SYMBOL_HDA(snd_hda_gen_free);
5184
5185#ifdef CONFIG_PM
5186/*
5187 * check the loopback power save state;
5188 * this can be put as patch_ops.check_power_status function
5189 */
5190int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid)
5191{
5192        struct hda_gen_spec *spec = codec->spec;
5193        return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
5194}
5195EXPORT_SYMBOL_HDA(snd_hda_gen_check_power_status);
5196#endif
5197
5198
5199/*
5200 * the generic codec support
5201 */
5202
5203static const struct hda_codec_ops generic_patch_ops = {
5204        .build_controls = snd_hda_gen_build_controls,
5205        .build_pcms = snd_hda_gen_build_pcms,
5206        .init = snd_hda_gen_init,
5207        .free = snd_hda_gen_free,
5208        .unsol_event = snd_hda_jack_unsol_event,
5209#ifdef CONFIG_PM
5210        .check_power_status = snd_hda_gen_check_power_status,
5211#endif
5212};
5213
5214int snd_hda_parse_generic_codec(struct hda_codec *codec)
5215{
5216        struct hda_gen_spec *spec;
5217        int err;
5218
5219        spec = kzalloc(sizeof(*spec), GFP_KERNEL);
5220        if (!spec)
5221                return -ENOMEM;
5222        snd_hda_gen_spec_init(spec);
5223        codec->spec = spec;
5224
5225        err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
5226        if (err < 0)
5227                return err;
5228
5229        err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
5230        if (err < 0)
5231                goto error;
5232
5233        codec->patch_ops = generic_patch_ops;
5234        return 0;
5235
5236error:
5237        snd_hda_gen_free(codec);
5238        return err;
5239}
5240EXPORT_SYMBOL_HDA(snd_hda_parse_generic_codec);
5241