ALSA: hda - Add expose_enum_ctl flag to snd_hda_add_vmaster_hook()
[deliverable/linux.git] / sound / pci / hda / patch_conexant.c
index a21a485a413ce395ce50c0c90dc6dbdbbec11b94..e6eafb18c8f54871265c142c61e14ea939cacc64 100644 (file)
@@ -71,6 +71,7 @@ struct conexant_spec {
        int num_mixers;
        hda_nid_t vmaster_nid;
        struct hda_vmaster_mute_hook vmaster_mute;
+       bool vmaster_mute_led;
 
        const struct hda_verb *init_verbs[5];   /* initialization verbs
                                                 * don't forget NULL
@@ -4346,8 +4347,10 @@ static int cx_auto_build_controls(struct hda_codec *codec)
        err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
        if (err < 0)
                return err;
-       if (spec->vmaster_mute.hook && spec->vmaster_mute.sw_kctl) {
-               err = snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute);
+       if (spec->vmaster_mute.sw_kctl) {
+               spec->vmaster_mute.hook = cx_auto_vmaster_hook;
+               err = snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
+                                              spec->vmaster_mute_led);
                if (err < 0)
                        return err;
        }
@@ -4476,11 +4479,17 @@ static int patch_conexant_auto(struct hda_codec *codec)
 
        apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);
 
-       /* add EAPD vmaster hook to all HP machines */
-       /* NOTE: this should be applied via fixup once when the generic
-        *       fixup code is merged to hda_codec.c
+       /* Show mute-led control only on HP laptops
+        * This is a sort of white-list: on HP laptops, EAPD corresponds
+        * only to the mute-LED without actualy amp function.  Meanwhile,
+        * others may use EAPD really as an amp switch, so it might be
+        * not good to expose it blindly.
         */
-       spec->vmaster_mute.hook = cx_auto_vmaster_hook;
+       switch (codec->subsystem_id >> 16) {
+       case 0x103c:
+               spec->vmaster_mute_led = 1;
+               break;
+       }
 
        err = cx_auto_search_adcs(codec);
        if (err < 0)
This page took 0.024927 seconds and 5 git commands to generate.