ALSA: hda - Rework on patch_sigmatel.c for HP HDX16/HDX18

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>
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index fb9f4cc..d119fee 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -4489,14 +4489,10 @@
  */
 
 #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 @@
 	.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 @@
 		/* 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 @@
 		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;
 	};