diff options
author | Subhransu S. Prusty <subhransu.s.prusty@intel.com> | 2017-04-25 02:48:22 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-04-26 10:47:45 -0400 |
commit | 89b0d8a5bae91cb8ef23b1834c97d1db367f2db6 (patch) | |
tree | 0d618b3d39e888b60977f20b48c9cc24bf6e1bba | |
parent | 4e0277d226b578be99cf8899fd1442bf11873d12 (diff) |
ASoC: Intel: Skylake: Register dsp_fw_ops for kabylake
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>
-rw-r--r-- | sound/soc/intel/skylake/skl-messages.c | 2 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-sst-dsp.h | 3 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-sst.c | 30 |
3 files changed, 34 insertions, 1 deletions
diff --git a/sound/soc/intel/skylake/skl-messages.c b/sound/soc/intel/skylake/skl-messages.c index 09730dd8e6a3..ab1adc0c9cc3 100644 --- a/sound/soc/intel/skylake/skl-messages.c +++ b/sound/soc/intel/skylake/skl-messages.c | |||
@@ -209,7 +209,7 @@ static const struct skl_dsp_ops dsp_ops[] = { | |||
209 | { | 209 | { |
210 | .id = 0x9d71, | 210 | .id = 0x9d71, |
211 | .loader_ops = skl_get_loader_ops, | 211 | .loader_ops = skl_get_loader_ops, |
212 | .init = skl_sst_dsp_init, | 212 | .init = kbl_sst_dsp_init, |
213 | .init_fw = skl_sst_init_fw, | 213 | .init_fw = skl_sst_init_fw, |
214 | .cleanup = skl_sst_dsp_cleanup | 214 | .cleanup = skl_sst_dsp_cleanup |
215 | }, | 215 | }, |
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h index 6d9aed23d5cd..eba20d37ba8c 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h | |||
@@ -230,6 +230,9 @@ int skl_dsp_boot(struct sst_dsp *ctx); | |||
230 | int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | 230 | int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, |
231 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, | 231 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, |
232 | struct skl_sst **dsp); | 232 | struct skl_sst **dsp); |
233 | int kbl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | ||
234 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, | ||
235 | struct skl_sst **dsp); | ||
233 | int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | 236 | int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, |
234 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, | 237 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, |
235 | struct skl_sst **dsp); | 238 | struct skl_sst **dsp); |
diff --git a/sound/soc/intel/skylake/skl-sst.c b/sound/soc/intel/skylake/skl-sst.c index b4c3b5c63115..20968e5ec86d 100644 --- a/sound/soc/intel/skylake/skl-sst.c +++ b/sound/soc/intel/skylake/skl-sst.c | |||
@@ -470,6 +470,15 @@ static struct skl_dsp_fw_ops skl_fw_ops = { | |||
470 | .unload_mod = skl_unload_module, | 470 | .unload_mod = skl_unload_module, |
471 | }; | 471 | }; |
472 | 472 | ||
473 | static struct skl_dsp_fw_ops kbl_fw_ops = { | ||
474 | .set_state_D0 = skl_set_dsp_D0, | ||
475 | .set_state_D3 = skl_set_dsp_D3, | ||
476 | .load_fw = skl_load_base_firmware, | ||
477 | .get_fw_errcode = skl_get_errorcode, | ||
478 | .load_mod = skl_load_module, | ||
479 | .unload_mod = skl_unload_module, | ||
480 | }; | ||
481 | |||
473 | static struct sst_ops skl_ops = { | 482 | static struct sst_ops skl_ops = { |
474 | .irq_handler = skl_dsp_sst_interrupt, | 483 | .irq_handler = skl_dsp_sst_interrupt, |
475 | .write = sst_shim32_write, | 484 | .write = sst_shim32_write, |
@@ -512,6 +521,27 @@ int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | |||
512 | } | 521 | } |
513 | EXPORT_SYMBOL_GPL(skl_sst_dsp_init); | 522 | EXPORT_SYMBOL_GPL(skl_sst_dsp_init); |
514 | 523 | ||
524 | int kbl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | ||
525 | const char *fw_name, struct skl_dsp_loader_ops dsp_ops, | ||
526 | struct skl_sst **dsp) | ||
527 | { | ||
528 | struct sst_dsp *sst; | ||
529 | int ret; | ||
530 | |||
531 | ret = skl_sst_dsp_init(dev, mmio_base, irq, fw_name, dsp_ops, dsp); | ||
532 | if (ret < 0) { | ||
533 | dev_err(dev, "%s: Init failed %d\n", __func__, ret); | ||
534 | return ret; | ||
535 | } | ||
536 | |||
537 | sst = (*dsp)->dsp; | ||
538 | sst->fw_ops = kbl_fw_ops; | ||
539 | |||
540 | return 0; | ||
541 | |||
542 | } | ||
543 | EXPORT_SYMBOL_GPL(kbl_sst_dsp_init); | ||
544 | |||
515 | int skl_sst_init_fw(struct device *dev, struct skl_sst *ctx) | 545 | int skl_sst_init_fw(struct device *dev, struct skl_sst *ctx) |
516 | { | 546 | { |
517 | int ret; | 547 | int ret; |