mirror of https://gitee.com/openkylin/linux.git
ALSA: hda/realtek - Don't create extra controls with channel suffix
The multiple headphone or speaker pins are usually provided to output the same stream unlike line-out jacks (which are supposed to be multi-channel surrounds). Thus giving a mixer name like "Headphone Surround" is rather confusing. Instead, when multiple headphone volumes are available, use index with the same "Headphone" name. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
6c39d6aca1
commit
766ddee68b
|
@ -3173,7 +3173,8 @@ static int alc_auto_create_multi_out_ctls(struct hda_codec *codec,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin,
|
static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin,
|
||||||
hda_nid_t dac, const char *pfx)
|
hda_nid_t dac, const char *pfx,
|
||||||
|
int cidx)
|
||||||
{
|
{
|
||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
hda_nid_t sw, vol;
|
hda_nid_t sw, vol;
|
||||||
|
@ -3189,15 +3190,15 @@ static int alc_auto_create_extra_out(struct hda_codec *codec, hda_nid_t pin,
|
||||||
if (is_ctl_used(spec->sw_ctls, val))
|
if (is_ctl_used(spec->sw_ctls, val))
|
||||||
return 0; /* already created */
|
return 0; /* already created */
|
||||||
mark_ctl_usage(spec->sw_ctls, val);
|
mark_ctl_usage(spec->sw_ctls, val);
|
||||||
return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, val);
|
return __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, cidx, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
sw = alc_look_for_out_mute_nid(codec, pin, dac);
|
sw = alc_look_for_out_mute_nid(codec, pin, dac);
|
||||||
vol = alc_look_for_out_vol_nid(codec, pin, dac);
|
vol = alc_look_for_out_vol_nid(codec, pin, dac);
|
||||||
err = alc_auto_add_stereo_vol(codec, pfx, 0, vol);
|
err = alc_auto_add_stereo_vol(codec, pfx, cidx, vol);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
err = alc_auto_add_stereo_sw(codec, pfx, 0, sw);
|
err = alc_auto_add_stereo_sw(codec, pfx, cidx, sw);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3238,16 +3239,21 @@ static int alc_auto_create_extra_outs(struct hda_codec *codec, int num_pins,
|
||||||
hda_nid_t dac = *dacs;
|
hda_nid_t dac = *dacs;
|
||||||
if (!dac)
|
if (!dac)
|
||||||
dac = spec->multiout.dac_nids[0];
|
dac = spec->multiout.dac_nids[0];
|
||||||
return alc_auto_create_extra_out(codec, *pins, dac, pfx);
|
return alc_auto_create_extra_out(codec, *pins, dac, pfx, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dacs[num_pins - 1]) {
|
if (dacs[num_pins - 1]) {
|
||||||
/* OK, we have a multi-output system with individual volumes */
|
/* OK, we have a multi-output system with individual volumes */
|
||||||
for (i = 0; i < num_pins; i++) {
|
for (i = 0; i < num_pins; i++) {
|
||||||
|
if (num_pins >= 3) {
|
||||||
snprintf(name, sizeof(name), "%s %s",
|
snprintf(name, sizeof(name), "%s %s",
|
||||||
pfx, channel_name[i]);
|
pfx, channel_name[i]);
|
||||||
err = alc_auto_create_extra_out(codec, pins[i], dacs[i],
|
err = alc_auto_create_extra_out(codec, pins[i], dacs[i],
|
||||||
name);
|
name, 0);
|
||||||
|
} else {
|
||||||
|
err = alc_auto_create_extra_out(codec, pins[i], dacs[i],
|
||||||
|
pfx, i);
|
||||||
|
}
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue