Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15ecaba9 authored by Kranthi G's avatar Kranthi G Committed by Mark Brown
Browse files

ASoC: Intel: Skylake: add support for tplg manifest load



Topology manifest gives information about the libraries to be
loaded. Implement the topology manifest load callback to get
this.

Signed-off-by: default avatarKranthi G <gudishax.kranthikumar@intel.com>
Signed-off-by: default avatarSenthilnathan Veppur <senthilnathanx.veppur@intel.com>
Signed-off-by: default avatarRamesh Babu <ramesh.babu@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 78cdbbda
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -80,6 +80,9 @@ struct skl_sst {

	/* multi-core */
	struct skl_dsp_cores cores;

	/* tplg manifest */
	struct skl_dfw_manifest manifest;
};

struct skl_ipc_init_instance_msg {
+22 −0
Original line number Diff line number Diff line
@@ -1789,11 +1789,33 @@ static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
	return 0;
}

static int skl_manifest_load(struct snd_soc_component *cmpnt,
				struct snd_soc_tplg_manifest *manifest)
{
	struct skl_dfw_manifest *minfo;
	struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt);
	struct hdac_bus *bus = ebus_to_hbus(ebus);
	struct skl *skl = ebus_to_skl(ebus);
	int ret = 0;

	minfo = &skl->skl_sst->manifest;
	memcpy(minfo, manifest->priv.data, sizeof(struct skl_dfw_manifest));

	if (minfo->lib_count > HDA_MAX_LIB) {
		dev_err(bus->dev, "Exceeding max Library count. Got:%d\n",
					minfo->lib_count);
		ret = -EINVAL;
	}

	return ret;
}

static struct snd_soc_tplg_ops skl_tplg_ops  = {
	.widget_load = skl_tplg_widget_load,
	.control_load = skl_tplg_control_load,
	.bytes_ext_ops = skl_tlv_ops,
	.bytes_ext_ops_count = ARRAY_SIZE(skl_tlv_ops),
	.manifest = skl_manifest_load,
};

/*
+12 −0
Original line number Diff line number Diff line
@@ -228,4 +228,16 @@ struct skl_dfw_algo_data {
	char params[0];
} __packed;

#define LIB_NAME_LENGTH	128
#define HDA_MAX_LIB	16

struct lib_info {
	char name[LIB_NAME_LENGTH];
} __packed;

struct skl_dfw_manifest {
	u32 lib_count;
	struct lib_info lib[HDA_MAX_LIB];
} __packed;

#endif