diff options
Diffstat (limited to 'arch/arm/cpu')
-rw-r--r-- | arch/arm/cpu/armv7/tegra2/funcmux.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c index 0878f51..140f8a7 100644 --- a/arch/arm/cpu/armv7/tegra2/funcmux.c +++ b/arch/arm/cpu/armv7/tegra2/funcmux.c @@ -37,6 +37,18 @@ int funcmux_select(enum periph_id id, int config) pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA); pinmux_tristate_disable(PINGRP_IRRX); pinmux_tristate_disable(PINGRP_IRTX); + /* + * Tegra appears to boot with function UARTA pre-selected on + * mux group SDB. If two mux groups are both set to the same + * function, it's unclear which group's pins drive the RX + * signals into the HW module. For UARTA, SDB certainly + * overrides group IRTX in practice. To solve this, configure + * some alternative function on SDB to avoid the conflict. Also, + * tri-state the group to avoid driving any signal onto it until + * we know what's connected. + */ + pinmux_tristate_enable(PINGRP_SDB); + pinmux_set_func(PINGRP_SDB, PMUX_FUNC_SDIO3); break; case PERIPH_ID_UART2: |