ASoC: SOF: Intel: byt: Add PM callbacks
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Tue, 26 May 2020 20:36:33 +0000 (15:36 -0500)
committerMark Brown <broonie@kernel.org>
Wed, 27 May 2020 13:06:53 +0000 (14:06 +0100)
Add the PM callbacks for BYT/CHT platforms.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Link: https://lore.kernel.org/r/20200526203640.25980-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/byt.c

index 3747f2c..457da8f 100644 (file)
@@ -428,6 +428,34 @@ static void byt_set_mach_params(const struct snd_soc_acpi_mach *mach,
        mach_params->platform = dev_name(dev);
 }
 
+static void byt_reset_dsp_disable_int(struct snd_sof_dev *sdev)
+{
+       /* Disable Interrupt from both sides */
+       snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRX, 0x3, 0x3);
+       snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRD, 0x3, 0x3);
+
+       /* Put DSP into reset, set reset vector */
+       snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_CSR,
+                                 SHIM_BYT_CSR_RST | SHIM_BYT_CSR_VECTOR_SEL,
+                                 SHIM_BYT_CSR_RST | SHIM_BYT_CSR_VECTOR_SEL);
+}
+
+static int byt_suspend(struct snd_sof_dev *sdev, u32 target_state)
+{
+       byt_reset_dsp_disable_int(sdev);
+
+       return 0;
+}
+
+static int byt_resume(struct snd_sof_dev *sdev)
+{
+       /* Enable Interrupt from both sides */
+       snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRX, 0x3, 0x0);
+       snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRD, 0x3, 0x0);
+
+       return 0;
+}
+
 /* Baytrail DAIs */
 static struct snd_soc_dai_driver byt_dai[] = {
 {
@@ -832,6 +860,10 @@ const struct snd_sof_dsp_ops sof_byt_ops = {
        /*Firmware loading */
        .load_firmware  = snd_sof_load_firmware_memcpy,
 
+       /* PM */
+       .suspend = byt_suspend,
+       .resume = byt_resume,
+
        /* DAI drivers */
        .drv = byt_dai,
        .num_drv = 3, /* we have only 3 SSPs on byt*/
@@ -906,6 +938,10 @@ const struct snd_sof_dsp_ops sof_cht_ops = {
        /*Firmware loading */
        .load_firmware  = snd_sof_load_firmware_memcpy,
 
+       /* PM */
+       .suspend = byt_suspend,
+       .resume = byt_resume,
+
        /* DAI drivers */
        .drv = byt_dai,
        /* all 6 SSPs may be available for cherrytrail */