ARM: tegra20: add funcmux for exposing UART over uSD slot on Tegra 20

UART-A can be exposed through uSD, this was tested on Transformer T20
but should work on all Ventana-based boards.

TX is exported on SDD pingroup corresponding to uSD CLK pin
RX is exported on SDB which is CMD pin in uSD slot

Signed-off-by: Artur Kowalski <arturkow2000@gmail.com>
Reviewed-by: Svyatoslav Ryhel <clamor95@gmail.com>
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
This commit is contained in:
Artur Kowalski
2025-03-30 21:26:39 +02:00
committed by Svyatoslav Ryhel
parent b12931d7de
commit 427dd4dd27
4 changed files with 14 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ enum {
FUNCMUX_UART1_UAA_UAB,
FUNCMUX_UART1_GPU,
FUNCMUX_UART1_SDIO1,
FUNCMUX_UART1_SDB_SDD,
FUNCMUX_UART2_UAD = 0,
FUNCMUX_UART4_GMC = 0,

View File

@@ -169,6 +169,8 @@ static int uart_configs[] = {
FUNCMUX_UART1_GPU,
#elif defined(CONFIG_TEGRA_UARTA_SDIO1)
FUNCMUX_UART1_SDIO1,
#elif defined(CONFIG_TEGRA_UARTA_SDB_SDD)
FUNCMUX_UART1_SDB_SDD,
#else
FUNCMUX_UART1_IRRX_IRTX,
#endif

View File

@@ -17,6 +17,9 @@ config TEGRA_UARTA_GPU
config TEGRA_UARTA_SDIO1
bool
config TEGRA_UARTA_SDB_SDD
bool
choice
prompt "Tegra20 board select"
optional

View File

@@ -62,8 +62,15 @@ int funcmux_select(enum periph_id id, int config)
pinmux_tristate_disable(PMUX_PINGRP_SDIO1);
bad_config = 0;
break;
case FUNCMUX_UART1_SDB_SDD:
pinmux_set_func(PMUX_PINGRP_SDB, PMUX_FUNC_UARTA);
pinmux_set_func(PMUX_PINGRP_SDD, PMUX_FUNC_UARTA);
pinmux_tristate_disable(PMUX_PINGRP_SDB);
pinmux_tristate_disable(PMUX_PINGRP_SDD);
bad_config = 0;
break;
}
if (!bad_config) {
if (!bad_config && config != FUNCMUX_UART1_SDB_SDD) {
/*
* Tegra appears to boot with function UARTA pre-
* selected on mux group SDB. If two mux groups are