ALSA: hda - Detect HP mute-LED GPIO setup from GPIO counts
authorTakashi Iwai <tiwai@suse.de>
Mon, 8 Feb 2010 14:06:13 +0000 (15:06 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 8 Feb 2010 14:06:13 +0000 (15:06 +0100)
The GPIO pin number for the mute LED control on HP laptops can be
determined more easily by checking the number of available GPIO pins
of the codec chip.  On a small package with up to 3 GPIOs, GPIO 0 is
used while GPIO 3 is used for others.

This fixes the missing mute GPIO for some HP laptops with new codecs.

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

index 834c5980fe5de61165f55ebcedd89c7f01a1723e..39961879c4148c7e13898439aaa36fcbb917a631 100644 (file)
@@ -4754,19 +4754,14 @@ static int hp_blike_system(u32 subsystem_id);
 static void set_hp_led_gpio(struct hda_codec *codec)
 {
        struct sigmatel_spec *spec = codec->spec;
-       switch (codec->vendor_id) {
-       case 0x111d7608:
-               /* GPIO 0 */
-               spec->gpio_led = 0x01;
-               break;
-       case 0x111d7600:
-       case 0x111d7601:
-       case 0x111d7602:
-       case 0x111d7603:
-               /* GPIO 3 */
-               spec->gpio_led = 0x08;
-               break;
-       }
+       unsigned int gpio;
+
+       gpio = snd_hda_param_read(codec, codec->afg, AC_PAR_GPIO_CAP);
+       gpio &= AC_GPIO_IO_COUNT;
+       if (gpio > 3)
+               spec->gpio_led = 0x08; /* GPIO 3 */
+       else
+               spec->gpio_led = 0x01; /* GPIO 0 */
 }
 
 /*