[alsa-devel] [RFC PATCH v2 1/2] ASoC: refine ASoC hdmi audio suspend/resume

Takashi Iwai tiwai at suse.de
Wed Jan 9 09:29:36 CET 2019


On Wed, 09 Jan 2019 09:16:34 +0100,
Yang, Libin wrote:
> 
> >-
> >-static void hdmi_codec_complete(struct device *dev)
> >+#ifdef CONFIG_PM_SLEEP
> >+static int hdmi_codec_resume(struct device *dev)
> > {
> > 	struct hdac_device *hdev = dev_to_hdac_dev(dev);
> > 	struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdev);
> >+	int ret;
> >
> >-	/* Power up afg */
> >-	snd_hdac_codec_read(hdev, hdev->afg, 0,
> >	AC_VERB_SET_POWER_STATE,
> >-							AC_PWRST_D0);
> >-
> >-	hdac_hdmi_skl_enable_all_pins(hdev);
> >-	hdac_hdmi_skl_enable_dp12(hdev);
> >-
> >+	ret = pm_runtime_force_resume(dev);
> 
> The code hopes to call hdmi pm_runtime() whenever this resume()
> is called? If so, I'm afraid it will not work. pm_runtime_force_resume()
> calls pm_runtime with conditions. Sometimes pm_runtime will not
> be called. In my suspend/resume test, it shows that pm_runtime() is
> not called. This may cause the following function
> hdac_hdmi_present_sense_all_pins() not work well as there is no
> power on.

Hm, right, maybe we should move hdac_hdmi_present_sense_all_pins()
into runtime resume.  It may be called unconditionally, but safer to
call it conditionally only after S3 or so...


thanks,

Takashi


More information about the Alsa-devel mailing list