ALSA: hda - Rework on patch_sigmatel.c for HP HDX16/HDX18
authorChristoph Plattner <christoph.plattner@gmx.at>
Mon, 9 Mar 2009 23:05:56 +0000 (00:05 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 10 Mar 2009 06:36:19 +0000 (07:36 +0100)
Code rework, comments of mail tiwai@suse.de (2009-03-09) incorporated.
Code tested on HP HDX16 (not tested on HDX18 yet).

Signed-off-by: Christoph Plattner <christoph.plattner@gmx.at>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_sigmatel.c

index fb9f4ccba885d5fb6c112d797418aa978bae93ec..d119feed42c93fb68a55a5c39b7504832dd01401 100644 (file)
@@ -4489,14 +4489,10 @@ static int stac92xx_resume(struct hda_codec *codec)
  */
 
 #ifdef CONFIG_SND_HDA_POWER_SAVE
-static int stac92xx_check_power_status (struct hda_codec * codec, hda_nid_t nid)
+static int stac92xx_hp_hdx_check_power_status (struct hda_codec * codec, hda_nid_t nid)
 {
        struct sigmatel_spec *spec = codec->spec;
        
-       /* only handle on HP HDX */
-       if (spec->board_config != STAC_HP_HDX)
-               return 0;
-       
        if (nid == 0x10)
        {
                if (snd_hda_codec_amp_read(codec, nid, 0, HDA_OUTPUT, 0)  & 
@@ -4535,9 +4531,6 @@ static struct hda_codec_ops stac92xx_patch_ops = {
        .suspend = stac92xx_suspend,
        .resume = stac92xx_resume,
 #endif
-#ifdef CONFIG_SND_HDA_POWER_SAVE
-       .check_power_status = stac92xx_check_power_status,
-#endif
 };
 
 static int patch_stac9200(struct hda_codec *codec)
@@ -5134,13 +5127,6 @@ again:
                /* no output amps */
                spec->num_pwrs = 0;
                /* fallthru */
-       case 0x111d76b2: /* Codec of HP HDX16/HDX18 */
-
-               /* orange/white mute led on GPIO3, orange=0, white=1 */
-               spec->gpio_mask |= 0x08;
-               spec->gpio_dir  |= 0x08;
-               spec->gpio_data |= 0x08;  /* set to white */
-               /* fallthru */
        default:
                memcpy(&spec->private_dimux, &stac92hd71bxx_dmux_amixer,
                       sizeof(stac92hd71bxx_dmux_amixer));
@@ -5199,6 +5185,20 @@ again:
                spec->num_dmics = 1;
                spec->num_dmuxes = 1;
                spec->num_smuxes = 1;
+               /* 
+                * For controlling MUTE LED on HP HDX16/HDX18 notebooks,
+                * the CONFIG_SND_HDA_POWER_SAVE is needed to be set.
+                */
+#ifdef CONFIG_SND_HDA_POWER_SAVE
+               /* orange/white mute led on GPIO3, orange=0, white=1 */
+               spec->gpio_mask |= 0x08;
+               spec->gpio_dir  |= 0x08;
+               spec->gpio_data |= 0x08;  /* set to white */
+
+               /* register check_power_status callback. */
+               codec->patch_ops.check_power_status = 
+                   stac92xx_hp_hdx_check_power_status;
+#endif 
                break;
        };