Commit 89b0d8a5 authored by Subhransu S. Prusty's avatar Subhransu S. Prusty Committed by Mark Brown
Browse files

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: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4e0277d2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
	},
+3 −0
Original line number Diff line number Diff line
@@ -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);
+30 −0
Original line number Diff line number Diff line
@@ -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;