ASoC: intel: sof_sdw: Move group_generated logic
Hoist the handling logic for group_generated up to the sof_card_dai_links_create level. This avoids the need to pass the array through multiple levels of functions. Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20230731214257.444605-24-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a386162e7d
commit
a60ed3b738
@ -1291,7 +1291,7 @@ static int set_codec_init_func(struct snd_soc_card *card,
|
||||
static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link,
|
||||
struct device *dev, int *cpu_dai_id, int *cpu_dai_num,
|
||||
int *codec_num, unsigned int *group_id,
|
||||
bool *group_generated, int adr_index)
|
||||
int adr_index)
|
||||
{
|
||||
const struct snd_soc_acpi_adr_device *adr_d;
|
||||
const struct snd_soc_acpi_link_adr *adr_next;
|
||||
@ -1351,11 +1351,6 @@ static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* indicate CPU DAIs for this group have been generated
|
||||
* to avoid generating CPU DAIs for this group again.
|
||||
*/
|
||||
group_generated[*group_id] = true;
|
||||
*cpu_dai_num = index;
|
||||
|
||||
return 0;
|
||||
@ -1379,8 +1374,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index,
|
||||
int sdw_be_num, int sdw_cpu_dai_num,
|
||||
struct snd_soc_dai_link_component *cpus,
|
||||
const struct snd_soc_acpi_link_adr *adr_link,
|
||||
int *cpu_id, bool *group_generated,
|
||||
struct snd_soc_codec_conf *codec_conf,
|
||||
int *cpu_id, struct snd_soc_codec_conf *codec_conf,
|
||||
int codec_count, int *be_id,
|
||||
int *codec_conf_index,
|
||||
bool *ignore_pch_dmic,
|
||||
@ -1404,7 +1398,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index,
|
||||
int k;
|
||||
|
||||
ret = get_slave_info(adr_link, dev, cpu_dai_id, &cpu_dai_num, &codec_num,
|
||||
&group_id, group_generated, adr_index);
|
||||
&group_id, adr_index);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -1559,13 +1553,14 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
|
||||
struct snd_soc_dai_link_component *ssp_components;
|
||||
struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params;
|
||||
const struct snd_soc_acpi_link_adr *adr_link = mach_params->links;
|
||||
bool aggregation = !(sof_sdw_quirk & SOF_SDW_NO_AGGREGATION);
|
||||
struct snd_soc_dai_link_component *cpus;
|
||||
struct snd_soc_codec_conf *codec_conf;
|
||||
bool append_dai_type = false;
|
||||
bool ignore_pch_dmic = false;
|
||||
int codec_conf_num = 0;
|
||||
int codec_conf_index = 0;
|
||||
bool group_generated[SDW_MAX_GROUPS];
|
||||
bool group_generated[SDW_MAX_GROUPS] = { };
|
||||
int ssp_codec_index, ssp_mask;
|
||||
struct snd_soc_dai_link *dai_links;
|
||||
int num_links, link_index = 0;
|
||||
@ -1641,14 +1636,6 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
|
||||
if (!adr_link)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* SoundWire Slaves aggregated in the same group may be
|
||||
* located on different hardware links. Clear array to indicate
|
||||
* CPU DAIs for this group have not been generated.
|
||||
*/
|
||||
for (i = 0; i < SDW_MAX_GROUPS; i++)
|
||||
group_generated[i] = false;
|
||||
|
||||
for (i = 0; i < SDW_MAX_LINKS; i++)
|
||||
sdw_pin_index[i] = SDW_INTEL_BIDIR_PDI_BASE;
|
||||
|
||||
@ -1706,7 +1693,7 @@ out:
|
||||
for (j = 0; j < codec_info_list[codec_index].dai_num ; j++) {
|
||||
ret = create_sdw_dailink(card, &link_index, dai_links,
|
||||
sdw_be_num, sdw_cpu_dai_num, cpus,
|
||||
adr_link, &cpu_id, group_generated,
|
||||
adr_link, &cpu_id,
|
||||
codec_conf, codec_conf_num,
|
||||
&be_id, &codec_conf_index,
|
||||
&ignore_pch_dmic, append_dai_type, i, j);
|
||||
@ -1715,6 +1702,9 @@ out:
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (aggregation && endpoint->aggregated)
|
||||
group_generated[endpoint->group_id] = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user