ALSA: hda - Don't give over 0dB volume for AD1984A HP laptops
authorTakashi Iwai <tiwai@suse.de>
Mon, 23 Feb 2009 10:33:34 +0000 (11:33 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Feb 2009 10:33:34 +0000 (11:33 +0100)
Set the upper limit 0dB to the volume of mixer amp 0x20 for
AD1984A HP laptops.  The overloaded volume may damage the internal
speaker.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_analog.c

index 2c58d7b05aba3d8bd2f751f1a940ffdd14bc9301..b168028414686718e715c5fc3bd4f0a898e6671b 100644 (file)
@@ -3986,6 +3986,14 @@ static int patch_ad1884a(struct hda_codec *codec)
                spec->multiout.dig_out_nid = 0;
                codec->patch_ops.unsol_event = ad1884a_hp_unsol_event;
                codec->patch_ops.init = ad1884a_hp_init;
+               /* set the upper-limit for mixer amp to 0dB for avoiding the
+                * possible damage by overloading
+                */
+               snd_hda_override_amp_caps(codec, 0x20, HDA_INPUT,
+                                         (0x17 << AC_AMPCAP_OFFSET_SHIFT) |
+                                         (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) |
+                                         (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) |
+                                         (1 << AC_AMPCAP_MUTE_SHIFT));
                break;
        case AD1884A_THINKPAD:
                spec->mixers[0] = ad1984a_thinkpad_mixers;