ASoC: SOF: set disable_function_topology if override_tplg_filename is set
authorBard Liao <yung-chuan.liao@linux.intel.com>
Tue, 6 May 2025 11:33:09 +0000 (19:33 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 6 May 2025 13:48:04 +0000 (22:48 +0900)
User will expect the specified topology is used when
override_tplg_filename is set. However, the using function topologies
feature may use the function topologies instead of the specified
topology.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://patch.msgid.link/20250506113311.45487-3-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/core.c

index aed834d03e1086ba83980d77382e207863ed35c3..b11f408f13664663e88f4793b0ca5844820c28c1 100644 (file)
@@ -607,7 +607,8 @@ static void sof_probe_work(struct work_struct *work)
 }
 
 static void
-sof_apply_profile_override(struct sof_loadable_file_profile *path_override)
+sof_apply_profile_override(struct sof_loadable_file_profile *path_override,
+                          struct snd_sof_pdata *plat_data)
 {
        if (override_ipc_type >= 0 && override_ipc_type < SOF_IPC_TYPE_COUNT)
                path_override->ipc_type = override_ipc_type;
@@ -619,8 +620,11 @@ sof_apply_profile_override(struct sof_loadable_file_profile *path_override)
                path_override->fw_lib_path = override_lib_path;
        if (override_tplg_path)
                path_override->tplg_path = override_tplg_path;
-       if (override_tplg_filename)
+       if (override_tplg_filename) {
                path_override->tplg_name = override_tplg_filename;
+               /* User requested a specific topology file and expect it to be loaded */
+               plat_data->disable_function_topology = true;
+       }
 }
 
 int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
@@ -654,7 +658,7 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
                }
        }
 
-       sof_apply_profile_override(&plat_data->ipc_file_profile_base);
+       sof_apply_profile_override(&plat_data->ipc_file_profile_base, plat_data);
 
        /* Initialize sof_ops based on the initial selected IPC version */
        ret = sof_init_sof_ops(sdev);