From 8f56fdf3d8cb9f1dbdc93bf9ac816698aa6f70b7 Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Wed, 7 Oct 2026 15:44:43 +0100 Subject: [PATCH] phy: tegra: Add support for Tegra238 XUSB pad controller Add support for the Tegra238 XUSB pad controller by populating the Tegra238 specific SoC data for the controller. The Tegra238 has three USB2 and USB3 ports, uses the same port ops as Tegra186 and has the same supplies as Tegra194. Due to the dependencies the Tegra238 device has on the Tegra186 port ops and Tegra194 supplies, drop the compile time guards around these structures. Signed-off-by: Jon Hunter Reviewed-by: Manivannan Sadhasivam Link: https://patch.msgid.link/20261007-tegra-phy-v3-3-d501de414710@nvidia.com Signed-off-by: Vinod Koul --- drivers/phy/tegra/Makefile | 1 + drivers/phy/tegra/xusb-tegra186.c | 29 +++++++++++++++++++++++------ drivers/phy/tegra/xusb.c | 6 ++++++ drivers/phy/tegra/xusb.h | 3 +++ 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/drivers/phy/tegra/Makefile b/drivers/phy/tegra/Makefile index f5ed9582d80b..018a4cab2b40 100644 --- a/drivers/phy/tegra/Makefile +++ b/drivers/phy/tegra/Makefile @@ -8,6 +8,7 @@ phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_210_SOC) += xusb-tegra210.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_186_SOC) += xusb-tegra186.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_194_SOC) += xusb-tegra186.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_234_SOC) += xusb-tegra186.o +phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_238_SOC) += xusb-tegra186.o phy-tegra-xusb-$(CONFIG_ARCH_TEGRA_264_SOC) += xusb-tegra186.o obj-$(CONFIG_PHY_TEGRA194_P2U) += phy-tegra194-p2u.o obj-$(CONFIG_PHY_TEGRA_MPHY) += phy-tegra-mphy.o diff --git a/drivers/phy/tegra/xusb-tegra186.c b/drivers/phy/tegra/xusb-tegra186.c index 322efdea0d80..aa8ab94fad4c 100644 --- a/drivers/phy/tegra/xusb-tegra186.c +++ b/drivers/phy/tegra/xusb-tegra186.c @@ -1599,7 +1599,6 @@ static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = { .utmi_pad_power_down = tegra186_utmi_pad_power_down, }; -#if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC) static const char * const tegra186_xusb_padctl_supply_names[] = { "avdd-pll-erefeut", "avdd-usb", @@ -1665,11 +1664,7 @@ const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = { .num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names), }; EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc); -#endif -#if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) || \ - IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) || \ - IS_ENABLED(CONFIG_ARCH_TEGRA_264_SOC) static const char * const tegra194_xusb_padctl_supply_names[] = { "avdd-usb", "vclamp-usb", @@ -1755,6 +1750,29 @@ const struct tegra_xusb_padctl_soc tegra234_xusb_padctl_soc = { }; EXPORT_SYMBOL_GPL(tegra234_xusb_padctl_soc); +const struct tegra_xusb_padctl_soc tegra238_xusb_padctl_soc = { + .num_pads = ARRAY_SIZE(tegra186_pads), + .pads = tegra186_pads, + .ports = { + .usb2 = { + .ops = &tegra186_usb2_port_ops, + .count = 3, + }, + .usb3 = { + .ops = &tegra186_usb3_port_ops, + .count = 3, + }, + }, + .ops = &tegra186_xusb_padctl_ops, + .supply_names = tegra194_xusb_padctl_supply_names, + .num_supplies = ARRAY_SIZE(tegra194_xusb_padctl_supply_names), + .supports_gen2 = true, + .poll_trk_completed = true, + .trk_hw_mode = false, + .supports_lp_cfg_en = true, +}; +EXPORT_SYMBOL_GPL(tegra238_xusb_padctl_soc); + const struct tegra_xusb_padctl_soc tegra264_xusb_padctl_soc = { .num_pads = ARRAY_SIZE(tegra194_pads), .pads = tegra194_pads, @@ -1778,7 +1796,6 @@ const struct tegra_xusb_padctl_soc tegra264_xusb_padctl_soc = { .has_per_pad_term = true, }; EXPORT_SYMBOL_GPL(tegra264_xusb_padctl_soc); -#endif MODULE_AUTHOR("JC Kuo "); MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver"); diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c index 0635f0d82c96..89ce9ac87300 100644 --- a/drivers/phy/tegra/xusb.c +++ b/drivers/phy/tegra/xusb.c @@ -78,6 +78,12 @@ static const struct of_device_id tegra_xusb_padctl_of_match[] = { .data = &tegra234_xusb_padctl_soc, }, #endif +#if defined(CONFIG_ARCH_TEGRA_238_SOC) + { + .compatible = "nvidia,tegra238-xusb-padctl", + .data = &tegra238_xusb_padctl_soc, + }, +#endif #if defined(CONFIG_ARCH_TEGRA_264_SOC) { .compatible = "nvidia,tegra264-xusb-padctl", diff --git a/drivers/phy/tegra/xusb.h b/drivers/phy/tegra/xusb.h index d8d799d9e752..b9de4f3b5781 100644 --- a/drivers/phy/tegra/xusb.h +++ b/drivers/phy/tegra/xusb.h @@ -514,6 +514,9 @@ extern const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc; #if defined(CONFIG_ARCH_TEGRA_234_SOC) extern const struct tegra_xusb_padctl_soc tegra234_xusb_padctl_soc; #endif +#if defined(CONFIG_ARCH_TEGRA_238_SOC) +extern const struct tegra_xusb_padctl_soc tegra238_xusb_padctl_soc; +#endif #if defined(CONFIG_ARCH_TEGRA_264_SOC) extern const struct tegra_xusb_padctl_soc tegra264_xusb_padctl_soc; #endif