|
@@ -25,6 +25,7 @@
|
|
|
#include <sound/pcm_params.h>
|
|
|
#include <sound/soc.h>
|
|
|
#include <sound/hdaudio_ext.h>
|
|
|
+#include <sound/hda_i915.h>
|
|
|
#include "../../hda/local.h"
|
|
|
|
|
|
#define AMP_OUT_MUTE 0xb080
|
|
@@ -559,14 +560,26 @@ static int hdac_hdmi_runtime_suspend(struct device *dev)
|
|
|
{
|
|
|
struct hdac_ext_device *edev = to_hda_ext_device(dev);
|
|
|
struct hdac_device *hdac = &edev->hdac;
|
|
|
+ struct hdac_bus *bus = hdac->bus;
|
|
|
+ int err;
|
|
|
|
|
|
dev_dbg(dev, "Enter: %s\n", __func__);
|
|
|
|
|
|
+ /* controller may not have been initialized for the first time */
|
|
|
+ if (!bus)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* Power down afg */
|
|
|
if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D3))
|
|
|
snd_hdac_codec_write(hdac, hdac->afg, 0,
|
|
|
AC_VERB_SET_POWER_STATE, AC_PWRST_D3);
|
|
|
|
|
|
+ err = snd_hdac_display_power(bus, false);
|
|
|
+ if (err < 0) {
|
|
|
+ dev_err(bus->dev, "Cannot turn on display power on i915\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -574,9 +587,21 @@ static int hdac_hdmi_runtime_resume(struct device *dev)
|
|
|
{
|
|
|
struct hdac_ext_device *edev = to_hda_ext_device(dev);
|
|
|
struct hdac_device *hdac = &edev->hdac;
|
|
|
+ struct hdac_bus *bus = hdac->bus;
|
|
|
+ int err;
|
|
|
|
|
|
dev_dbg(dev, "Enter: %s\n", __func__);
|
|
|
|
|
|
+ /* controller may not have been initialized for the first time */
|
|
|
+ if (!bus)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ err = snd_hdac_display_power(bus, true);
|
|
|
+ if (err < 0) {
|
|
|
+ dev_err(bus->dev, "Cannot turn on display power on i915\n");
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
/* Power up afg */
|
|
|
if (!snd_hdac_check_power_state(hdac, hdac->afg, AC_PWRST_D0))
|
|
|
snd_hdac_codec_write(hdac, hdac->afg, 0,
|