|
@@ -129,6 +129,37 @@ static int skl_acquire_irq(struct hdac_ext_bus *ebus, int do_disconnect)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_PM
|
|
|
+static int _skl_suspend(struct hdac_ext_bus *ebus)
|
|
|
+{
|
|
|
+ struct skl *skl = ebus_to_skl(ebus);
|
|
|
+ struct hdac_bus *bus = ebus_to_hbus(ebus);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ snd_hdac_ext_bus_link_power_down_all(ebus);
|
|
|
+
|
|
|
+ ret = skl_suspend_dsp(skl);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ snd_hdac_bus_stop_chip(bus);
|
|
|
+ snd_hdac_bus_enter_link_reset(bus);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int _skl_resume(struct hdac_ext_bus *ebus)
|
|
|
+{
|
|
|
+ struct skl *skl = ebus_to_skl(ebus);
|
|
|
+ struct hdac_bus *bus = ebus_to_hbus(ebus);
|
|
|
+
|
|
|
+ skl_init_pci(skl);
|
|
|
+ snd_hdac_bus_init_chip(bus, true);
|
|
|
+
|
|
|
+ return skl_resume_dsp(skl);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
/*
|
|
|
* power management
|
|
@@ -137,26 +168,16 @@ static int skl_suspend(struct device *dev)
|
|
|
{
|
|
|
struct pci_dev *pci = to_pci_dev(dev);
|
|
|
struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
|
|
|
- struct hdac_bus *bus = ebus_to_hbus(ebus);
|
|
|
-
|
|
|
- snd_hdac_bus_stop_chip(bus);
|
|
|
- snd_hdac_bus_enter_link_reset(bus);
|
|
|
|
|
|
- return 0;
|
|
|
+ return _skl_suspend(ebus);
|
|
|
}
|
|
|
|
|
|
static int skl_resume(struct device *dev)
|
|
|
{
|
|
|
struct pci_dev *pci = to_pci_dev(dev);
|
|
|
struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
|
|
|
- struct hdac_bus *bus = ebus_to_hbus(ebus);
|
|
|
- struct skl *hda = ebus_to_skl(ebus);
|
|
|
-
|
|
|
- skl_init_pci(hda);
|
|
|
|
|
|
- snd_hdac_bus_init_chip(bus, 1);
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return _skl_resume(ebus);
|
|
|
}
|
|
|
#endif /* CONFIG_PM_SLEEP */
|
|
|
|
|
@@ -166,24 +187,13 @@ static int skl_runtime_suspend(struct device *dev)
|
|
|
struct pci_dev *pci = to_pci_dev(dev);
|
|
|
struct hdac_ext_bus *ebus = pci_get_drvdata(pci);
|
|
|
struct hdac_bus *bus = ebus_to_hbus(ebus);
|
|
|
- struct skl *skl = ebus_to_skl(ebus);
|
|
|
- int ret;
|
|
|
|
|
|
dev_dbg(bus->dev, "in %s\n", __func__);
|
|
|
|
|
|
/* enable controller wake up event */
|
|
|
snd_hdac_chip_updatew(bus, WAKEEN, 0, STATESTS_INT_MASK);
|
|
|
|
|
|
- snd_hdac_ext_bus_link_power_down_all(ebus);
|
|
|
-
|
|
|
- ret = skl_suspend_dsp(skl);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
- snd_hdac_bus_stop_chip(bus);
|
|
|
- snd_hdac_bus_enter_link_reset(bus);
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return _skl_suspend(ebus);
|
|
|
}
|
|
|
|
|
|
static int skl_runtime_resume(struct device *dev)
|
|
@@ -204,7 +214,7 @@ static int skl_runtime_resume(struct device *dev)
|
|
|
/* disable controller Wake Up event */
|
|
|
snd_hdac_chip_updatew(bus, WAKEEN, STATESTS_INT_MASK, 0);
|
|
|
|
|
|
- return skl_resume_dsp(skl);
|
|
|
+ return _skl_resume(ebus);
|
|
|
}
|
|
|
#endif /* CONFIG_PM */
|
|
|
|