From ecb8c0bb890db95ac54c91158e8d8d29e7f65133 Mon Sep 17 00:00:00 2001 From: Sheetal Date: Wed, 22 May 2024 07:12:05 +0000 Subject: [PATCH] tegra-virt-alt: T264 support for machine driver - Defined the 32 dai-links for T264. - Add T264 soc_data to fetch the number of channels based on soc. Jira TAS-2331 Change-Id: I75b331ef34b8015b30ec48c72e6adceded10924b Signed-off-by: Sheetal --- .../tegra-virt-alt/tegra210_virt_alt_admaif.h | 16 +- .../tegra_asoc_machine_virt_alt.c | 199 +++++++++--------- .../tegra_asoc_machine_virt_alt.h | 6 +- sound/soc/tegra-virt-alt/tegra_virt_ref_alt.c | 10 +- 4 files changed, 123 insertions(+), 108 deletions(-) diff --git a/sound/soc/tegra-virt-alt/tegra210_virt_alt_admaif.h b/sound/soc/tegra-virt-alt/tegra210_virt_alt_admaif.h index 93a902de..cd61362d 100644 --- a/sound/soc/tegra-virt-alt/tegra210_virt_alt_admaif.h +++ b/sound/soc/tegra-virt-alt/tegra210_virt_alt_admaif.h @@ -72,7 +72,21 @@ enum { ADMAIF_ID_19, MAX_ADMAIF_T186_IDS, TEGRA186_ADMAIF_CHANNEL_COUNT = MAX_ADMAIF_T186_IDS, - MAX_ADMAIF_IDS = MAX_ADMAIF_T186_IDS, + ADMAIF_ID_20 = MAX_ADMAIF_T186_IDS, + ADMAIF_ID_21, + ADMAIF_ID_22, + ADMAIF_ID_23, + ADMAIF_ID_24, + ADMAIF_ID_25, + ADMAIF_ID_26, + ADMAIF_ID_27, + ADMAIF_ID_28, + ADMAIF_ID_29, + ADMAIF_ID_30, + ADMAIF_ID_31, + MAX_ADMAIF_T264_IDS, + TEGRA264_ADMAIF_CHANNEL_COUNT = MAX_ADMAIF_T264_IDS, + MAX_ADMAIF_IDS = MAX_ADMAIF_T264_IDS, }; /* Audio cif definition */ diff --git a/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.c b/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.c index f3e1e6b9..829bf308 100644 --- a/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.c +++ b/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #include @@ -46,106 +46,44 @@ static const struct snd_soc_pcm_stream adsp_default_params = { static struct snd_soc_pcm_stream adsp_admaif_params[MAX_ADMAIF_IDS]; -SND_SOC_DAILINK_DEFS(audio1, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(1))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF1 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio2, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(2))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF2 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio3, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(3))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF3 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio4, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(4))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF4 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio5, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(5))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF5 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio6, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(6))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF6 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio7, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(7))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF7 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio8, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(8))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF8 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio9, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(9))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF9 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio10, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(10))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF10 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio11, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(11))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF11 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio12, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(12))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF12 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio13, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(13))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF13 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio14, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(14))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF14 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio15, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(15))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF15 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio16, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(16))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF16 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio17, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(17))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF17 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio18, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(18))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF18 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio19, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(19))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF19 CIF")), - DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); - -SND_SOC_DAILINK_DEFS(audio20, - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(20))), - DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF20 CIF")), +#define TEGRA_SND_SOC_DAILINK_DEFS(id, name) \ + SND_SOC_DAILINK_DEFS(audio##id, \ + DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, CPU_DAI_NAME(id))), \ + DAILINK_COMP_ARRAY(COMP_CODEC(LINK_CPU_NAME, "ADMAIF" name " CIF")), \ DAILINK_COMP_ARRAY(COMP_PLATFORM(PLATFORM_NAME))); +TEGRA_SND_SOC_DAILINK_DEFS(1, "1") +TEGRA_SND_SOC_DAILINK_DEFS(2, "2") +TEGRA_SND_SOC_DAILINK_DEFS(3, "3") +TEGRA_SND_SOC_DAILINK_DEFS(4, "4") +TEGRA_SND_SOC_DAILINK_DEFS(5, "5") +TEGRA_SND_SOC_DAILINK_DEFS(6, "6") +TEGRA_SND_SOC_DAILINK_DEFS(7, "7") +TEGRA_SND_SOC_DAILINK_DEFS(8, "8") +TEGRA_SND_SOC_DAILINK_DEFS(9, "9") +TEGRA_SND_SOC_DAILINK_DEFS(10, "10") +TEGRA_SND_SOC_DAILINK_DEFS(11, "11") +TEGRA_SND_SOC_DAILINK_DEFS(12, "12") +TEGRA_SND_SOC_DAILINK_DEFS(13, "13") +TEGRA_SND_SOC_DAILINK_DEFS(14, "14") +TEGRA_SND_SOC_DAILINK_DEFS(15, "15") +TEGRA_SND_SOC_DAILINK_DEFS(16, "16") +TEGRA_SND_SOC_DAILINK_DEFS(17, "17") +TEGRA_SND_SOC_DAILINK_DEFS(18, "18") +TEGRA_SND_SOC_DAILINK_DEFS(19, "19") +TEGRA_SND_SOC_DAILINK_DEFS(20, "20") +TEGRA_SND_SOC_DAILINK_DEFS(21, "21") +TEGRA_SND_SOC_DAILINK_DEFS(22, "22") +TEGRA_SND_SOC_DAILINK_DEFS(23, "23") +TEGRA_SND_SOC_DAILINK_DEFS(24, "24") +TEGRA_SND_SOC_DAILINK_DEFS(25, "25") +TEGRA_SND_SOC_DAILINK_DEFS(26, "26") +TEGRA_SND_SOC_DAILINK_DEFS(27, "27") +TEGRA_SND_SOC_DAILINK_DEFS(28, "28") +TEGRA_SND_SOC_DAILINK_DEFS(29, "29") +TEGRA_SND_SOC_DAILINK_DEFS(30, "30") +TEGRA_SND_SOC_DAILINK_DEFS(31, "31") +TEGRA_SND_SOC_DAILINK_DEFS(32, "32") SND_SOC_DAILINK_DEFS(adsp_admaif1, DAILINK_COMP_ARRAY(COMP_CODEC("tegra210-adsp-virt","ADSP-ADMAIF1")), @@ -303,6 +241,63 @@ SND_SOC_DAILINK_DEFS(adsp_pcm15, DAILINK_COMP_ARRAY(COMP_CODEC("tegra210-adsp-virt", "ADSP-FE15")), DAILINK_COMP_ARRAY(COMP_PLATFORM("tegra210-adsp-virt"))); +#if defined(NV_SND_SOC_DAI_LINK_STRUCT_HAS_C2C_PARAMS_ARG) /* Linux v6.4 */ +#define TEGRA_DAI_LINK(id) \ + { \ + .name = DAI_NAME(id), \ + .stream_name = STREAM_NAME, \ + .c2c_params = &default_params, \ + .ignore_pmdown_time = 1, \ + .ignore_suspend = 0, \ + SND_SOC_DAILINK_REG(audio##id), \ + }, +#else +#define TEGRA_DAI_LINK(id) \ + { \ + .name = DAI_NAME(id), \ + .stream_name = STREAM_NAME, \ + .params = &default_params, \ + .ignore_pmdown_time = 1, \ + .ignore_suspend = 0, \ + SND_SOC_DAILINK_REG(audio##id), \ + }, +#endif + +static struct snd_soc_dai_link tegra_virt_t264ref_pcm_links[] = { + TEGRA_DAI_LINK(1) + TEGRA_DAI_LINK(2) + TEGRA_DAI_LINK(3) + TEGRA_DAI_LINK(4) + TEGRA_DAI_LINK(5) + TEGRA_DAI_LINK(6) + TEGRA_DAI_LINK(7) + TEGRA_DAI_LINK(8) + TEGRA_DAI_LINK(9) + TEGRA_DAI_LINK(10) + TEGRA_DAI_LINK(11) + TEGRA_DAI_LINK(12) + TEGRA_DAI_LINK(13) + TEGRA_DAI_LINK(14) + TEGRA_DAI_LINK(15) + TEGRA_DAI_LINK(16) + TEGRA_DAI_LINK(17) + TEGRA_DAI_LINK(18) + TEGRA_DAI_LINK(19) + TEGRA_DAI_LINK(20) + TEGRA_DAI_LINK(21) + TEGRA_DAI_LINK(22) + TEGRA_DAI_LINK(23) + TEGRA_DAI_LINK(24) + TEGRA_DAI_LINK(25) + TEGRA_DAI_LINK(26) + TEGRA_DAI_LINK(27) + TEGRA_DAI_LINK(28) + TEGRA_DAI_LINK(29) + TEGRA_DAI_LINK(30) + TEGRA_DAI_LINK(31) + TEGRA_DAI_LINK(32) +}; + static struct snd_soc_dai_link tegra_virt_t186ref_pcm_links[] = { { /* 0 */ @@ -1058,7 +1053,7 @@ unsigned int tegra_virt_machine_get_num_dai_links(void) } EXPORT_SYMBOL(tegra_virt_machine_get_num_dai_links); -struct snd_soc_dai_link *tegra_virt_machine_get_dai_link(void) +struct snd_soc_dai_link *tegra_virt_machine_get_dai_link(struct device *dev) { struct snd_soc_dai_link *link = tegra_virt_t186ref_pcm_links; unsigned int size = TEGRA186_XBAR_DAI_LINKS; @@ -1066,6 +1061,10 @@ struct snd_soc_dai_link *tegra_virt_machine_get_dai_link(void) if (of_machine_is_compatible("nvidia,tegra210")) { link = tegra_virt_t210ref_pcm_links; size = TEGRA210_XBAR_DAI_LINKS; + } else if (of_device_is_compatible(dev->of_node, + "nvidia,tegra264-virt-pcm-oot")) { + link = tegra_virt_t264ref_pcm_links; + size = ARRAY_SIZE(tegra_virt_t264ref_pcm_links); } tegra_virt_machine_set_num_dai_links(size); diff --git a/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.h b/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.h index fdd23a1f..b8a16663 100644 --- a/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.h +++ b/sound/soc/tegra-virt-alt/tegra_asoc_machine_virt_alt.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #ifndef __TEGRA_ASOC_MACHINE_VIRT_ALT_H__ @@ -81,9 +81,9 @@ enum tegra186_xbar_dai_link { TEGRA186_XBAR_DAI_LINKS, /* Total number of xbar dai links */ }; -struct snd_soc_dai_link *tegra_virt_machine_get_dai_link(void); +struct snd_soc_dai_link *tegra_virt_machine_get_dai_link(struct device *dev); unsigned int tegra_virt_machine_get_num_dai_links(void); void tegra_virt_machine_set_num_dai_links(unsigned int val); void tegra_virt_machine_set_adsp_admaif_dai_params( uint32_t id, struct snd_soc_pcm_stream *params); -#endif \ No newline at end of file +#endif diff --git a/sound/soc/tegra-virt-alt/tegra_virt_ref_alt.c b/sound/soc/tegra-virt-alt/tegra_virt_ref_alt.c index 1e14fb06..2f684b2d 100644 --- a/sound/soc/tegra-virt-alt/tegra_virt_ref_alt.c +++ b/sound/soc/tegra-virt-alt/tegra_virt_ref_alt.c @@ -48,6 +48,9 @@ static struct tegra_virt_admaif_soc_data soc_data_tegra186 = { .num_ch = TEGRA186_ADMAIF_CHANNEL_COUNT, }; +static struct tegra_virt_admaif_soc_data soc_data_tegra264 = { + .num_ch = TEGRA264_ADMAIF_CHANNEL_COUNT, +}; static const struct of_device_id tegra_virt_machine_of_match[] = { { .compatible = "nvidia,tegra186-virt-pcm", @@ -55,8 +58,7 @@ static const struct of_device_id tegra_virt_machine_of_match[] = { { .compatible = "nvidia,tegra234-virt-pcm-oot", .data = &soc_data_tegra186}, { .compatible = "nvidia,tegra264-virt-pcm-oot", - /* TODO: Update soc_data for t264 while adding full Thor support */ - .data = &soc_data_tegra186}, + .data = &soc_data_tegra264}, {}, }; @@ -102,7 +104,7 @@ static int tegra_virt_machine_driver_probe(struct platform_device *pdev) } card->dev = &pdev->dev; - card->dai_link = tegra_virt_machine_get_dai_link(); + card->dai_link = tegra_virt_machine_get_dai_link(&pdev->dev); card->num_links = tegra_virt_machine_get_num_dai_links(); adsp_enabled = of_property_read_bool(pdev->dev.of_node, "adsp_enabled"); @@ -200,7 +202,7 @@ static int tegra_virt_machine_driver_probe(struct platform_device *pdev) } for (i = 0; i < admaif_ch_num; i++) { tegra_virt_set_dai_params( - tegra_virt_machine_get_dai_link(), + tegra_virt_machine_get_dai_link(&pdev->dev), NULL, (admaif_ch_list[i] - 1)); }