Skip to content

Commit

Permalink
ASoC: Intel: Power down links before turning off display audio power
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Sanyog Kale <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
  • Loading branch information
plbossart committed Nov 9, 2018
1 parent 4badf19 commit 7b47adf
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
13 changes: 7 additions & 6 deletions sound/soc/codecs/hdac_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
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));
if (!hlink) {
Expand All @@ -2201,7 +2196,13 @@ static int hdac_hdmi_runtime_suspend(struct device *dev)

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;
}

return err;
}

static int hdac_hdmi_runtime_resume(struct device *dev)
Expand Down
12 changes: 6 additions & 6 deletions sound/soc/intel/skylake/skl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
err = snd_hdac_display_power(bus, false);
if (err < 0) {
Expand All @@ -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 */
pm_runtime_put_noidle(bus->dev);
pm_runtime_allow(bus->dev);
Expand Down

0 comments on commit 7b47adf

Please sign in to comment.