]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/soc/intel/skylake/skl.c
Merge remote-tracking branch 'sound-asoc/for-next'
[karo-tx-linux.git] / sound / soc / intel / skylake / skl.c
index 5319529aedf7ae5030dbf47ce9b6056512f05c2d..9b94a8cdf9bd4141b367fc5f9fa6237eb02c2f1a 100644 (file)
@@ -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 */
 
@@ -434,8 +444,7 @@ static int skl_first_init(struct hdac_ext_bus *ebus)
 
        /* codec detection */
        if (!bus->codec_mask) {
-               dev_err(bus->dev, "no codecs found!\n");
-               return -ENODEV;
+               dev_info(bus->dev, "no hda codecs found!\n");
        }
 
        return 0;