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