Some VIA codecs have no multiple source selection for headphone pins,
thus it's useless (and wrong) to create "Independent HP" control on them.
This patch adds the check of connections to skip the control in such a
case.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-static int via_hp_build(struct via_spec *spec)
+static int via_hp_build(struct hda_codec *codec)
+ struct via_spec *spec = codec->spec;
struct snd_kcontrol_new *knew;
hda_nid_t nid;
struct snd_kcontrol_new *knew;
hda_nid_t nid;
-
- knew = via_clone_control(spec, &via_hp_mixer[0]);
- if (knew == NULL)
- return -ENOMEM;
+ int nums;
+ hda_nid_t conn[HDA_MAX_CONNECTIONS];
switch (spec->codec_type) {
case VT1718S:
switch (spec->codec_type) {
case VT1718S:
+ nums = snd_hda_get_connections(codec, nid, conn, HDA_MAX_CONNECTIONS);
+ if (nums <= 1)
+ return 0;
+
+ knew = via_clone_control(spec, &via_hp_mixer[0]);
+ if (knew == NULL)
+ return -ENOMEM;
+
knew->subdevice = HDA_SUBDEV_NID_FLAG | nid;
knew->private_value = nid;
knew->subdevice = HDA_SUBDEV_NID_FLAG | nid;
knew->private_value = nid;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
via_smart51_build(spec);
return 1;
via_smart51_build(spec);
return 1;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
via_smart51_build(spec);
return 1;
via_smart51_build(spec);
return 1;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
via_smart51_build(spec);
return 1;
via_smart51_build(spec);
return 1;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
via_smart51_build(spec);
return 1;
via_smart51_build(spec);
return 1;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
/* Line-Out: PortE */
err = via_add_control(spec, VIA_CTL_WIDGET_VOL,
/* Line-Out: PortE */
err = via_add_control(spec, VIA_CTL_WIDGET_VOL,
- "Master Front Playback Volume",
+ "Front Playback Volume",
HDA_COMPOSE_AMP_VAL(0x8, 3, 0, HDA_OUTPUT));
if (err < 0)
return err;
err = via_add_control(spec, VIA_CTL_WIDGET_BIND_PIN_MUTE,
HDA_COMPOSE_AMP_VAL(0x8, 3, 0, HDA_OUTPUT));
if (err < 0)
return err;
err = via_add_control(spec, VIA_CTL_WIDGET_BIND_PIN_MUTE,
- "Master Front Playback Switch",
+ "Front Playback Switch",
HDA_COMPOSE_AMP_VAL(0x28, 3, 0, HDA_OUTPUT));
if (err < 0)
return err;
HDA_COMPOSE_AMP_VAL(0x28, 3, 0, HDA_OUTPUT));
if (err < 0)
return err;
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)
spec->input_mux = &spec->private_imux[0];
if (spec->hp_mux)