Unverified Commit d5c8b790 authored by Cezary Rojewski's avatar Cezary Rojewski Committed by Mark Brown
Browse files

ASoC: Intel: avs: Honor NHLT override when setting up a path



In case topology provides NHLT configuration, use it instead of relying
on the table in ACPI tree. Only gateway-related modules e.g.: Copier
care about the process. For those the order of fetching for hardware
configuration becomes:

1) check if NHLT override is set,
2) check if NHLT descriptor override is set,
3) use NHLT from ACPI directly

Such approach ensures no conflicts exist between 1) and 2) and that 1)
always takes precedence.

Co-developed-by: default avatarAmadeusz Sławiński <amade@asmblr.net>
Signed-off-by: default avatarAmadeusz Sławiński <amade@asmblr.net>
Signed-off-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Link: https://patch.msgid.link/20251115180627.3589520-3-cezary.rojewski@intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent dd9896d4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ enum avs_tplg_token {
	AVS_TKN_MOD_KCONTROL_ID_U32			= 1707,
	AVS_TKN_MOD_INIT_CONFIG_NUM_IDS_U32		= 1708,
	AVS_TKN_MOD_INIT_CONFIG_ID_U32			= 1709,
	AVS_TKN_MOD_NHLT_CONFIG_ID_U32			= 1710,

	/* struct avs_tplg_path_template */
	AVS_TKN_PATH_TMPL_ID_U32			= 1801,
+9 −4
Original line number Diff line number Diff line
@@ -210,9 +210,11 @@ int avs_path_set_constraint(struct avs_dev *adev, struct avs_tplg_path_template
					continue;
				}

				if (!module_template->nhlt_config) {
					blob = avs_nhlt_config_or_default(adev, module_template);
					if (IS_ERR(blob))
						continue;
				}

				rlist[i] = path_template->fe_fmt->sampling_freq;
				clist[i] = path_template->fe_fmt->num_channels;
@@ -382,6 +384,9 @@ static int avs_fill_gtw_config(struct avs_dev *adev, struct avs_copier_gtw_cfg *
	struct acpi_nhlt_config *blob;
	size_t gtw_size;

	if (t->nhlt_config)
		blob = t->nhlt_config->blob;
	else
		blob = avs_nhlt_config_or_default(adev, t);
	if (IS_ERR(blob))
		return PTR_ERR(blob);
+7 −0
Original line number Diff line number Diff line
@@ -350,6 +350,7 @@ AVS_DEFINE_PTR_PARSER(modcfg_base, struct avs_tplg_modcfg_base, modcfgs_base);
AVS_DEFINE_PTR_PARSER(modcfg_ext, struct avs_tplg_modcfg_ext, modcfgs_ext);
AVS_DEFINE_PTR_PARSER(pplcfg, struct avs_tplg_pplcfg, pplcfgs);
AVS_DEFINE_PTR_PARSER(binding, struct avs_tplg_binding, bindings);
AVS_DEFINE_PTR_PARSER(nhlt_config, struct avs_tplg_nhlt_config, nhlt_configs);

static int
parse_audio_format_bitfield(struct snd_soc_component *comp, void *elem, void *object, u32 offset)
@@ -1200,6 +1201,12 @@ static const struct avs_tplg_token_parser module_parsers[] = {
		.offset = offsetof(struct avs_tplg_module, num_config_ids),
		.parse = avs_parse_byte_token,
	},
	{
		.token = AVS_TKN_MOD_NHLT_CONFIG_ID_U32,
		.type = SND_SOC_TPLG_TUPLE_TYPE_WORD,
		.offset = offsetof(struct avs_tplg_module, nhlt_config),
		.parse = avs_parse_nhlt_config_ptr,
	},
};

static const struct avs_tplg_token_parser init_config_parsers[] = {
+1 −0
Original line number Diff line number Diff line
@@ -223,6 +223,7 @@ struct avs_tplg_module {
	u32 ctl_id;
	u32 num_config_ids;
	u32 *config_ids;
	struct avs_tplg_nhlt_config *nhlt_config;

	struct avs_tplg_pipeline *owner;
	/* Pipeline modules management. */