diff options
-rw-r--r-- | sound/soc/intel/skylake/skl-sst-ipc.h | 3 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-topology.c | 22 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-tplg-interface.h | 12 |
3 files changed, 37 insertions, 0 deletions
diff --git a/sound/soc/intel/skylake/skl-sst-ipc.h b/sound/soc/intel/skylake/skl-sst-ipc.h index 0a0d09cde99d..31e5bc356aa2 100644 --- a/sound/soc/intel/skylake/skl-sst-ipc.h +++ b/sound/soc/intel/skylake/skl-sst-ipc.h | |||
@@ -80,6 +80,9 @@ struct skl_sst { | |||
80 | 80 | ||
81 | /* multi-core */ | 81 | /* multi-core */ |
82 | struct skl_dsp_cores cores; | 82 | struct skl_dsp_cores cores; |
83 | |||
84 | /* tplg manifest */ | ||
85 | struct skl_dfw_manifest manifest; | ||
83 | }; | 86 | }; |
84 | 87 | ||
85 | struct skl_ipc_init_instance_msg { | 88 | struct skl_ipc_init_instance_msg { |
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 904103056d62..a1d9f84d9674 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c | |||
@@ -1789,11 +1789,33 @@ static int skl_tplg_control_load(struct snd_soc_component *cmpnt, | |||
1789 | return 0; | 1789 | return 0; |
1790 | } | 1790 | } |
1791 | 1791 | ||
1792 | static int skl_manifest_load(struct snd_soc_component *cmpnt, | ||
1793 | struct snd_soc_tplg_manifest *manifest) | ||
1794 | { | ||
1795 | struct skl_dfw_manifest *minfo; | ||
1796 | struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt); | ||
1797 | struct hdac_bus *bus = ebus_to_hbus(ebus); | ||
1798 | struct skl *skl = ebus_to_skl(ebus); | ||
1799 | int ret = 0; | ||
1800 | |||
1801 | minfo = &skl->skl_sst->manifest; | ||
1802 | memcpy(minfo, manifest->priv.data, sizeof(struct skl_dfw_manifest)); | ||
1803 | |||
1804 | if (minfo->lib_count > HDA_MAX_LIB) { | ||
1805 | dev_err(bus->dev, "Exceeding max Library count. Got:%d\n", | ||
1806 | minfo->lib_count); | ||
1807 | ret = -EINVAL; | ||
1808 | } | ||
1809 | |||
1810 | return ret; | ||
1811 | } | ||
1812 | |||
1792 | static struct snd_soc_tplg_ops skl_tplg_ops = { | 1813 | static struct snd_soc_tplg_ops skl_tplg_ops = { |
1793 | .widget_load = skl_tplg_widget_load, | 1814 | .widget_load = skl_tplg_widget_load, |
1794 | .control_load = skl_tplg_control_load, | 1815 | .control_load = skl_tplg_control_load, |
1795 | .bytes_ext_ops = skl_tlv_ops, | 1816 | .bytes_ext_ops = skl_tlv_ops, |
1796 | .bytes_ext_ops_count = ARRAY_SIZE(skl_tlv_ops), | 1817 | .bytes_ext_ops_count = ARRAY_SIZE(skl_tlv_ops), |
1818 | .manifest = skl_manifest_load, | ||
1797 | }; | 1819 | }; |
1798 | 1820 | ||
1799 | /* | 1821 | /* |
diff --git a/sound/soc/intel/skylake/skl-tplg-interface.h b/sound/soc/intel/skylake/skl-tplg-interface.h index a32e5e9cc530..1b531c165a91 100644 --- a/sound/soc/intel/skylake/skl-tplg-interface.h +++ b/sound/soc/intel/skylake/skl-tplg-interface.h | |||
@@ -228,4 +228,16 @@ struct skl_dfw_algo_data { | |||
228 | char params[0]; | 228 | char params[0]; |
229 | } __packed; | 229 | } __packed; |
230 | 230 | ||
231 | #define LIB_NAME_LENGTH 128 | ||
232 | #define HDA_MAX_LIB 16 | ||
233 | |||
234 | struct lib_info { | ||
235 | char name[LIB_NAME_LENGTH]; | ||
236 | } __packed; | ||
237 | |||
238 | struct skl_dfw_manifest { | ||
239 | u32 lib_count; | ||
240 | struct lib_info lib[HDA_MAX_LIB]; | ||
241 | } __packed; | ||
242 | |||
231 | #endif | 243 | #endif |