ASoC: Intel: Power down links before turning off display audio power
On certain platforms, Display HDMI HDA codec was not going to sleep state after the use when links are powered down after turning off the display power. As per the HW recommendation, links are powered down before turning off the display power to ensure that the codec goes to sleep state. This patch was updated from an earlier version submitted upstream [1] which conflicted with the changes merged for HDaudio codec support with the Intel DSP. [1] https://patchwork.kernel.org/patch/10540213/ Signed-off-by: Sriram Periyasamy <sriramx.periyasamy@intel.com> Signed-off-by: Sanyog Kale <sanyog.r.kale@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
20e00db2f5
commit
4c10473d6d
|
@ -2187,11 +2187,6 @@ static int hdac_hdmi_runtime_suspend(struct device *dev)
|
||||||
*/
|
*/
|
||||||
snd_hdac_codec_read(hdev, hdev->afg, 0, AC_VERB_SET_POWER_STATE,
|
snd_hdac_codec_read(hdev, hdev->afg, 0, AC_VERB_SET_POWER_STATE,
|
||||||
AC_PWRST_D3);
|
AC_PWRST_D3);
|
||||||
err = snd_hdac_display_power(bus, false);
|
|
||||||
if (err < 0) {
|
|
||||||
dev_err(dev, "Cannot turn on display power on i915\n");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
hlink = snd_hdac_ext_bus_get_link(bus, dev_name(dev));
|
hlink = snd_hdac_ext_bus_get_link(bus, dev_name(dev));
|
||||||
if (!hlink) {
|
if (!hlink) {
|
||||||
|
@ -2201,7 +2196,11 @@ static int hdac_hdmi_runtime_suspend(struct device *dev)
|
||||||
|
|
||||||
snd_hdac_ext_bus_link_put(bus, hlink);
|
snd_hdac_ext_bus_link_put(bus, hlink);
|
||||||
|
|
||||||
return 0;
|
err = snd_hdac_display_power(bus, false);
|
||||||
|
if (err < 0)
|
||||||
|
dev_err(dev, "Cannot turn off display power on i915\n");
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hdac_hdmi_runtime_resume(struct device *dev)
|
static int hdac_hdmi_runtime_resume(struct device *dev)
|
||||||
|
|
|
@ -815,6 +815,12 @@ static void skl_probe_work(struct work_struct *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* we are done probing so decrement link counts
|
||||||
|
*/
|
||||||
|
list_for_each_entry(hlink, &bus->hlink_list, list)
|
||||||
|
snd_hdac_ext_bus_link_put(bus, hlink);
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI)) {
|
if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI)) {
|
||||||
err = snd_hdac_display_power(bus, false);
|
err = snd_hdac_display_power(bus, false);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
@ -824,12 +830,6 @@ static void skl_probe_work(struct work_struct *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* we are done probing so decrement link counts
|
|
||||||
*/
|
|
||||||
list_for_each_entry(hlink, &bus->hlink_list, list)
|
|
||||||
snd_hdac_ext_bus_link_put(bus, hlink);
|
|
||||||
|
|
||||||
/* configure PM */
|
/* configure PM */
|
||||||
pm_runtime_put_noidle(bus->dev);
|
pm_runtime_put_noidle(bus->dev);
|
||||||
pm_runtime_allow(bus->dev);
|
pm_runtime_allow(bus->dev);
|
||||||
|
|
Loading…
Reference in New Issue