ASoC: Intel: Skylake: Register dsp_fw_ops for kabylake
authorSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Tue, 25 Apr 2017 06:48:22 +0000 (12:18 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 26 Apr 2017 14:47:45 +0000 (15:47 +0100)
For audio kabylake is same as skylake except the module load approach.
This patch registers different dsp_fw_ops for kabylake and next patch
adds the module load support for kabylake.

Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-messages.c
sound/soc/intel/skylake/skl-sst-dsp.h
sound/soc/intel/skylake/skl-sst.c

index 09730dd8e6a3b8490a0c0535a52d5278f37a4ef4..ab1adc0c9cc3296e1f6d28d270916f36f8b41dd8 100644 (file)
@@ -209,7 +209,7 @@ static const struct skl_dsp_ops dsp_ops[] = {
        {
                .id = 0x9d71,
                .loader_ops = skl_get_loader_ops,
-               .init = skl_sst_dsp_init,
+               .init = kbl_sst_dsp_init,
                .init_fw = skl_sst_init_fw,
                .cleanup = skl_sst_dsp_cleanup
        },
index 6d9aed23d5cd5f858dbe5a8369c5374638938969..eba20d37ba8c077d483fce9b673831f3ff832f30 100644 (file)
@@ -230,6 +230,9 @@ int skl_dsp_boot(struct sst_dsp *ctx);
 int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
                const char *fw_name, struct skl_dsp_loader_ops dsp_ops,
                struct skl_sst **dsp);
+int kbl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
+               const char *fw_name, struct skl_dsp_loader_ops dsp_ops,
+               struct skl_sst **dsp);
 int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
                const char *fw_name, struct skl_dsp_loader_ops dsp_ops,
                struct skl_sst **dsp);
index b4c3b5c631153296179d1ffd69099d2f4337f403..20968e5ec86d9f90a0962e6911803b3b4b9058e3 100644 (file)
@@ -470,6 +470,15 @@ static struct skl_dsp_fw_ops skl_fw_ops = {
        .unload_mod = skl_unload_module,
 };
 
+static struct skl_dsp_fw_ops kbl_fw_ops = {
+       .set_state_D0 = skl_set_dsp_D0,
+       .set_state_D3 = skl_set_dsp_D3,
+       .load_fw = skl_load_base_firmware,
+       .get_fw_errcode = skl_get_errorcode,
+       .load_mod = skl_load_module,
+       .unload_mod = skl_unload_module,
+};
+
 static struct sst_ops skl_ops = {
        .irq_handler = skl_dsp_sst_interrupt,
        .write = sst_shim32_write,
@@ -512,6 +521,27 @@ int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
 }
 EXPORT_SYMBOL_GPL(skl_sst_dsp_init);
 
+int kbl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq,
+               const char *fw_name, struct skl_dsp_loader_ops dsp_ops,
+               struct skl_sst **dsp)
+{
+       struct sst_dsp *sst;
+       int ret;
+
+       ret = skl_sst_dsp_init(dev, mmio_base, irq, fw_name, dsp_ops, dsp);
+       if (ret < 0) {
+               dev_err(dev, "%s: Init failed %d\n", __func__, ret);
+               return ret;
+       }
+
+       sst = (*dsp)->dsp;
+       sst->fw_ops = kbl_fw_ops;
+
+       return 0;
+
+}
+EXPORT_SYMBOL_GPL(kbl_sst_dsp_init);
+
 int skl_sst_init_fw(struct device *dev, struct skl_sst *ctx)
 {
        int ret;