Merge tag 'sound-6.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[sfrench/cifs-2.6.git] / sound / soc / sof / amd / acp.c
index 0c272573df979281cb268a551c2edeb5b72a6d86..c40d2900dd36d33cb05ce51d91f87942e1c77116 100644 (file)
@@ -413,10 +413,46 @@ static int acp_init(struct snd_sof_dev *sdev)
                dev_err(sdev->dev, "ACP power on failed\n");
                return ret;
        }
+
+       snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_CONTROL, 0x01);
        /* Reset */
        return acp_reset(sdev);
 }
 
+int amd_sof_acp_suspend(struct snd_sof_dev *sdev, u32 target_state)
+{
+       int ret;
+
+       ret = acp_reset(sdev);
+       if (ret) {
+               dev_err(sdev->dev, "ACP Reset failed\n");
+               return ret;
+       }
+
+       snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_CONTROL, 0x00);
+
+       return 0;
+}
+EXPORT_SYMBOL_NS(amd_sof_acp_suspend, SND_SOC_SOF_AMD_COMMON);
+
+int amd_sof_acp_resume(struct snd_sof_dev *sdev)
+{
+       int ret;
+
+       ret = acp_init(sdev);
+       if (ret) {
+               dev_err(sdev->dev, "ACP Init failed\n");
+               return ret;
+       }
+
+       snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_CLKMUX_SEL, 0x03);
+
+       ret = acp_memory_init(sdev);
+
+       return ret;
+}
+EXPORT_SYMBOL_NS(amd_sof_acp_resume, SND_SOC_SOF_AMD_COMMON);
+
 int amd_sof_acp_probe(struct snd_sof_dev *sdev)
 {
        struct pci_dev *pci = to_pci_dev(sdev->dev);