Skip to contentSkip to conversation

hda: EAPD mute on suspend

PATCH Applied Matthew Ranostay 2 participants 2 messages Nov 19, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 hda: EAPD mute on suspend

Moved support for EAPD mute on suspend from stac92hd71xx_suspend to the generic stac92xx_suspend function.

---

pci/hda/patch_sigmatel.c +14 -9
index e0298df..900d99f 100644
@@ -4077,7 +4077,17 @@ static int stac92xx_resume(struct hda_codec *codec)
 		codec->patch_ops.unsol_event(codec, STAC_HP_EVENT << 26);
 	return 0;
 }
-#endif
+
+static int stac92xx_suspend(struct hda_codec *codec, pm_message_t state)
+{
+	struct sigmatel_spec *spec = codec->spec;
+	if (spec->eapd_mask)
+		stac_gpio_set(codec, spec->gpio_mask,
+				spec->gpio_dir, spec->gpio_data &
+				~spec->eapd_mask);
+	return 0;
+}
+#endif
 
 static struct hda_codec_ops stac92xx_patch_ops = {
 	.build_controls = stac92xx_build_controls,
@@ -4087,6 +4097,7 @@ static struct hda_codec_ops stac92xx_patch_ops = {
 	.unsol_event = stac92xx_unsol_event,
 #ifdef SND_HDA_NEEDS_RESUME
 	.resume = stac92xx_resume,
+	.suspend = stac92xx_suspend,
 #endif
 };
 
@@ -4498,14 +4509,8 @@ static int stac92hd71xx_resume(struct hda_codec *codec)
 
 static int stac92hd71xx_suspend(struct hda_codec *codec, pm_message_t state)
 {
-	struct sigmatel_spec *spec = codec->spec;
-
-	stac92hd71xx_set_power_state(codec, AC_PWRST_D3);
-	if (spec->eapd_mask)
-		stac_gpio_set(codec, spec->gpio_mask,
-				spec->gpio_dir, spec->gpio_data &
-				~spec->eapd_mask);
-	return 0;
+	stac92hd71xx_set_power_state(codec, AC_PWRST_D3);	
+	return stac92xx_suspend(codec, state);
 };
 
 #endif
Applied
#1 lore raw

At Tue, 18 Nov 2008 20:54:17 -0500,

Quoted 5 lines · Matthew Ranostay

Moved support for EAPD mute on suspend from stac92hd71xx_suspend to the generic stac92xx_suspend function.

Thanks, applied now with a minor modification (re-ordered suspend and resume callbacks).

One concern is that the order of stac92hd71xx_set_power_state() in suspend. D3 is set before GPIO EAPD down.

I guess it works, but maybe better to put power D3 after EAPD down? Or maybe I'm too nervous about it.

thanks,

Takashi

Quoted 50 lines
pci/hda/patch_sigmatel.c +14 -9
index e0298df..900d99f 100644
@@ -4077,7 +4077,17 @@ static int stac92xx_resume(struct hda_codec *codec)
 		codec->patch_ops.unsol_event(codec, STAC_HP_EVENT << 26);
 	return 0;
 }
-#endif
+
+static int stac92xx_suspend(struct hda_codec *codec, pm_message_t state)
+{
+	struct sigmatel_spec *spec = codec->spec;
+	if (spec->eapd_mask)
+		stac_gpio_set(codec, spec->gpio_mask,
+				spec->gpio_dir, spec->gpio_data &
+				~spec->eapd_mask);
+	return 0;
+}
+#endif
 
 static struct hda_codec_ops stac92xx_patch_ops = {
 	.build_controls = stac92xx_build_controls,
@@ -4087,6 +4097,7 @@ static struct hda_codec_ops stac92xx_patch_ops = {
 	.unsol_event = stac92xx_unsol_event,
 #ifdef SND_HDA_NEEDS_RESUME
 	.resume = stac92xx_resume,
+	.suspend = stac92xx_suspend,
 #endif
 };
 
@@ -4498,14 +4509,8 @@ static int stac92hd71xx_resume(struct hda_codec *codec)
 
 static int stac92hd71xx_suspend(struct hda_codec *codec, pm_message_t state)
 {
-	struct sigmatel_spec *spec = codec->spec;
-
-	stac92hd71xx_set_power_state(codec, AC_PWRST_D3);
-	if (spec->eapd_mask)
-		stac_gpio_set(codec, spec->gpio_mask,
-				spec->gpio_dir, spec->gpio_data &
-				~spec->eapd_mask);
-	return 0;
+	stac92hd71xx_set_power_state(codec, AC_PWRST_D3);	
+	return stac92xx_suspend(codec, state);
 };
 
 #endif