clear-pkgs-linux-iot-lts2018/0304-ASoC-Intel-Skylake-Add...

103 lines
3.6 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Leoni Prodduvaka <leoni.prodduvaka@intel.com>
Date: Wed, 15 Feb 2017 17:04:40 +0530
Subject: [PATCH] ASoC: Intel: Skylake: Add D0i3 support for Icelake platform
The driver needs two DSP callback, one to set D0i0 (active) and D0i3
(low-power) states.
Add these callbacks in icelake dsp ops.
Change-Id: Ibd077dd4bef1a617a9d86f2c2e639f47ce6b5f25
Signed-off-by: Leoni Prodduvaka
Reviewed-on:
Reviewed-by: Koul, Vinod <vinod.koul@intel.com>
Reviewed-by: Babu, Ramesh <ramesh.babu@intel.com>
Reviewed-by: R, Dharageswari <dharageswari.r@intel.com>
Reviewed-by: Diwakar, Praveen <praveen.diwakar@intel.com>
Reviewed-by: Kp, Jeeja <jeeja.kp@intel.com>
Tested-by: Sm, Bhadur A <bhadur.a.sm@intel.com>
---
sound/soc/intel/skylake/bxt-sst.c | 6 +++---
sound/soc/intel/skylake/cnl-sst.c | 7 +++++++
sound/soc/intel/skylake/skl-sst-dsp.h | 6 ++++++
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c
index 6f9b24c8c211..c1f6d8b6ab79 100644
--- a/sound/soc/intel/skylake/bxt-sst.c
+++ b/sound/soc/intel/skylake/bxt-sst.c
@@ -302,7 +302,7 @@ static int bxt_d0i3_target_state(struct sst_dsp *ctx)
return SKL_DSP_D0I3_NONE;
}
-static void bxt_set_dsp_D0i3(struct work_struct *work)
+void bxt_set_dsp_D0i3(struct work_struct *work)
{
int ret;
struct skl_ipc_d0ix_msg msg;
@@ -347,7 +347,7 @@ static void bxt_set_dsp_D0i3(struct work_struct *work)
skl->cores.state[SKL_DSP_CORE0_ID] = SKL_DSP_RUNNING_D0I3;
}
-static int bxt_schedule_dsp_D0i3(struct sst_dsp *ctx)
+int bxt_schedule_dsp_D0i3(struct sst_dsp *ctx)
{
struct skl_sst *skl = ctx->thread_context;
struct skl_d0i3_data *d0i3 = &skl->d0i3;
@@ -364,7 +364,7 @@ static int bxt_schedule_dsp_D0i3(struct sst_dsp *ctx)
return 0;
}
-static int bxt_set_dsp_D0i0(struct sst_dsp *ctx)
+int bxt_set_dsp_D0i0(struct sst_dsp *ctx)
{
int ret;
struct skl_ipc_d0ix_msg msg;
diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c
index bdbbf3d63f86..e4f7a643252b 100644
--- a/sound/soc/intel/skylake/cnl-sst.c
+++ b/sound/soc/intel/skylake/cnl-sst.c
@@ -390,6 +390,8 @@ static unsigned int cnl_get_errno(struct sst_dsp *ctx)
static const struct skl_dsp_fw_ops cnl_fw_ops = {
.set_state_D0 = cnl_set_dsp_D0,
.set_state_D3 = cnl_set_dsp_D3,
+ .set_state_D0i3 = bxt_schedule_dsp_D0i3,
+ .set_state_D0i0 = bxt_set_dsp_D0i0,
.load_fw = cnl_load_base_firmware,
.get_fw_errcode = cnl_get_errno,
.load_library = bxt_load_library,
@@ -744,9 +746,14 @@ int cnl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
return ret;
}
+ /* set the D0i3 check */
+ cnl->ipc.ops.check_dsp_lp_on = skl_ipc_check_D0i0;
cnl->boot_complete = false;
init_waitqueue_head(&cnl->boot_wait);
+ INIT_DELAYED_WORK(&cnl->d0i3.work, bxt_set_dsp_D0i3);
+ cnl->d0i3.state = SKL_DSP_D0I3_NONE;
+
ret = skl_dsp_acquire_irq(sst);
if (ret < 0)
return ret;
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h
index df37765858c4..58c0c13c15aa 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.h
+++ b/sound/soc/intel/skylake/skl-sst-dsp.h
@@ -295,4 +295,10 @@ int skl_prepare_lib_load(struct skl_sst *skl, struct skl_lib_info *linfo,
void skl_release_library(struct skl_lib_info *linfo, int lib_count);
int skl_get_firmware_configuration(struct sst_dsp *ctx);
+
+int bxt_set_dsp_D0i0(struct sst_dsp *ctx);
+
+int bxt_schedule_dsp_D0i3(struct sst_dsp *ctx);
+
+void bxt_set_dsp_D0i3(struct work_struct *work);
#endif /*__SKL_SST_DSP_H__*/
--
https://clearlinux.org