#define MAX_NID_PATH_DEPTH 5
+enum {
+ NID_PATH_VOL_CTL,
+ NID_PATH_MUTE_CTL,
+ NID_PATH_BOOST_CTL,
+ NID_PATH_NUM_CTLS
+};
+
/* Widget connection path
*
* For output, stored in the order of DAC -> ... -> pin,
hda_nid_t path[MAX_NID_PATH_DEPTH];
unsigned char idx[MAX_NID_PATH_DEPTH];
unsigned char multi[MAX_NID_PATH_DEPTH];
- unsigned int ctls[2]; /* 0 = volume, 1 = mute */
+ unsigned int ctls[NID_PATH_NUM_CTLS]; /* NID_PATH_XXX_CTL */
bool active;
};
-enum { NID_PATH_VOL_CTL = 0, NID_PATH_MUTE_CTL = 1 };
-
struct alc_spec {
struct hda_gen_spec gen;
struct nid_path *p = snd_array_elem(&spec->paths, i);
if (p->depth <= 0)
continue;
- for (type = 0; type < 2; type++) {
+ for (type = 0; type < NID_PATH_NUM_CTLS; type++) {
unsigned int val = p->ctls[type];
if (get_amp_nid_(val) == nid &&
get_amp_direction_(val) == dir &&
if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
const char *label;
char boost_label[32];
+ struct nid_path *path;
+ unsigned int val;
label = hda_get_autocfg_input_label(codec, cfg, i);
if (spec->shared_mic_hp && !strcmp(label, "Misc"))
snprintf(boost_label, sizeof(boost_label),
"%s Boost Volume", label);
+ val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT);
err = add_control(spec, ALC_CTL_WIDGET_VOL,
- boost_label, type_idx,
- HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
+ boost_label, type_idx, val);
if (err < 0)
return err;
+
+ path = get_nid_path(codec, nid, 0);
+ if (path)
+ path->ctls[NID_PATH_BOOST_CTL] = val;
}
}
return 0;