Commit a60ed3b7 authored by Charles Keepax's avatar Charles Keepax Committed by Mark Brown

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: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20230731214257.444605-24-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent a386162e
...@@ -1291,7 +1291,7 @@ static int set_codec_init_func(struct snd_soc_card *card, ...@@ -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, 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, struct device *dev, int *cpu_dai_id, int *cpu_dai_num,
int *codec_num, unsigned int *group_id, 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_adr_device *adr_d;
const struct snd_soc_acpi_link_adr *adr_next; 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, ...@@ -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; *cpu_dai_num = index;
return 0; return 0;
...@@ -1379,8 +1374,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index, ...@@ -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, int sdw_be_num, int sdw_cpu_dai_num,
struct snd_soc_dai_link_component *cpus, struct snd_soc_dai_link_component *cpus,
const struct snd_soc_acpi_link_adr *adr_link, const struct snd_soc_acpi_link_adr *adr_link,
int *cpu_id, bool *group_generated, int *cpu_id, struct snd_soc_codec_conf *codec_conf,
struct snd_soc_codec_conf *codec_conf,
int codec_count, int *be_id, int codec_count, int *be_id,
int *codec_conf_index, int *codec_conf_index,
bool *ignore_pch_dmic, bool *ignore_pch_dmic,
...@@ -1404,7 +1398,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index, ...@@ -1404,7 +1398,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index,
int k; int k;
ret = get_slave_info(adr_link, dev, cpu_dai_id, &cpu_dai_num, &codec_num, 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) if (ret)
return ret; return ret;
...@@ -1559,13 +1553,14 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) ...@@ -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_dai_link_component *ssp_components;
struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params; struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params;
const struct snd_soc_acpi_link_adr *adr_link = mach_params->links; 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_dai_link_component *cpus;
struct snd_soc_codec_conf *codec_conf; struct snd_soc_codec_conf *codec_conf;
bool append_dai_type = false; bool append_dai_type = false;
bool ignore_pch_dmic = false; bool ignore_pch_dmic = false;
int codec_conf_num = 0; int codec_conf_num = 0;
int codec_conf_index = 0; int codec_conf_index = 0;
bool group_generated[SDW_MAX_GROUPS]; bool group_generated[SDW_MAX_GROUPS] = { };
int ssp_codec_index, ssp_mask; int ssp_codec_index, ssp_mask;
struct snd_soc_dai_link *dai_links; struct snd_soc_dai_link *dai_links;
int num_links, link_index = 0; int num_links, link_index = 0;
...@@ -1641,14 +1636,6 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) ...@@ -1641,14 +1636,6 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
if (!adr_link) if (!adr_link)
return -EINVAL; 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++) for (i = 0; i < SDW_MAX_LINKS; i++)
sdw_pin_index[i] = SDW_INTEL_BIDIR_PDI_BASE; sdw_pin_index[i] = SDW_INTEL_BIDIR_PDI_BASE;
...@@ -1706,7 +1693,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) ...@@ -1706,7 +1693,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
for (j = 0; j < codec_info_list[codec_index].dai_num ; j++) { for (j = 0; j < codec_info_list[codec_index].dai_num ; j++) {
ret = create_sdw_dailink(card, &link_index, dai_links, ret = create_sdw_dailink(card, &link_index, dai_links,
sdw_be_num, sdw_cpu_dai_num, cpus, sdw_be_num, sdw_cpu_dai_num, cpus,
adr_link, &cpu_id, group_generated, adr_link, &cpu_id,
codec_conf, codec_conf_num, codec_conf, codec_conf_num,
&be_id, &codec_conf_index, &be_id, &codec_conf_index,
&ignore_pch_dmic, append_dai_type, i, j); &ignore_pch_dmic, append_dai_type, i, j);
...@@ -1715,6 +1702,9 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) ...@@ -1715,6 +1702,9 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
return ret; return ret;
} }
} }
if (aggregation && endpoint->aggregated)
group_generated[endpoint->group_id] = true;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment