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 <sheetal@nvidia.com>
This commit is contained in:
Sheetal
2024-05-22 07:12:05 +00:00
committed by Jon Hunter
parent 1dfa6285d3
commit ecb8c0bb89
4 changed files with 123 additions and 108 deletions

View File

@@ -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 */

View File

@@ -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 <nvidia/conftest.h>
@@ -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);

View File

@@ -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,7 +81,7 @@ 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(

View File

@@ -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));
}