mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
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: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Amadeusz Sławiński <amade@asmblr.net> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20251115180627.3589520-3-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
dd9896d41f
commit
d5c8b7902a
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -210,9 +210,11 @@ int avs_path_set_constraint(struct avs_dev *adev, struct avs_tplg_path_template
|
|||
continue;
|
||||
}
|
||||
|
||||
blob = avs_nhlt_config_or_default(adev, module_template);
|
||||
if (IS_ERR(blob))
|
||||
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,7 +384,10 @@ static int avs_fill_gtw_config(struct avs_dev *adev, struct avs_copier_gtw_cfg *
|
|||
struct acpi_nhlt_config *blob;
|
||||
size_t gtw_size;
|
||||
|
||||
blob = avs_nhlt_config_or_default(adev, t);
|
||||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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[] = {
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user