diff options
author | Takashi Iwai <tiwai@suse.de> | 2022-08-01 08:11:19 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2022-08-01 08:11:19 +0200 |
commit | 9769e44d41a1359b9000ff8458f0f2f66080ebf4 (patch) | |
tree | e91d2d71fd469c2fa9289fed87f0bb4fded196a5 /sound/soc/intel/avs/topology.c | |
parent | f38e6458e16df7bac3871f4e69f9681c0b3c58bd (diff) | |
parent | be561ffad708f0cee18aee4231f80ffafaf7a419 (diff) |
Merge branch 'for-next' into for-linus
Diffstat (limited to 'sound/soc/intel/avs/topology.c')
-rw-r--r-- | sound/soc/intel/avs/topology.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sound/soc/intel/avs/topology.c b/sound/soc/intel/avs/topology.c index 6a06fe387d13..8a9f9fc48938 100644 --- a/sound/soc/intel/avs/topology.c +++ b/sound/soc/intel/avs/topology.c @@ -808,6 +808,30 @@ static const struct avs_tplg_token_parser pin_format_parsers[] = { }, }; +static void +assign_copier_gtw_instance(struct snd_soc_component *comp, struct avs_tplg_modcfg_ext *cfg) +{ + struct snd_soc_acpi_mach *mach; + + if (!guid_equal(&cfg->type, &AVS_COPIER_MOD_UUID)) + return; + + /* Only I2S boards assign port instance in ->i2s_link_mask. */ + switch (cfg->copier.dma_type) { + case AVS_DMA_I2S_LINK_OUTPUT: + case AVS_DMA_I2S_LINK_INPUT: + break; + default: + return; + } + + mach = dev_get_platdata(comp->card->dev); + + /* Automatic assignment only when board describes single SSP. */ + if (hweight_long(mach->mach_params.i2s_link_mask) == 1 && !cfg->copier.vindex.i2s.instance) + cfg->copier.vindex.i2s.instance = __ffs(mach->mach_params.i2s_link_mask); +} + static int avs_tplg_parse_modcfg_ext(struct snd_soc_component *comp, struct avs_tplg_modcfg_ext *cfg, struct snd_soc_tplg_vendor_array *tuples, @@ -827,6 +851,9 @@ static int avs_tplg_parse_modcfg_ext(struct snd_soc_component *comp, if (ret) return ret; + /* Update copier gateway based on board's i2s_link_mask. */ + assign_copier_gtw_instance(comp, cfg); + block_size -= esize; /* Parse trailing in/out pin formats if any. */ if (block_size) { |