diff options
author | Max Krummenacher <max.krummenacher@toradex.com> | 2014-05-28 17:16:00 +0200 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2014-07-15 16:42:39 +0200 |
commit | d85e2f7e59605836d899a289c58d8bce60e2b41d (patch) | |
tree | c0b24a985dd30ff4e12eee0a35f81bd87726a300 /board | |
parent | 2f185d43fffb8201b925f4cdb36ebfb0ca529697 (diff) |
apalis-imx6: use UARTs in DCE mode
The Apalis standart uses the UART in DTE mode.
This commit uses UART1 in DTE mode for the U-Boot console and
configures all used UARTs to start in DTE mode.
Note that for this to work module version V1.0A requires TXD/RXD to be crossed
between the Apalis iMX6 and the RS232 transceiver.
Diffstat (limited to 'board')
-rw-r--r-- | board/toradex/apalis_imx6/apalis_imx6.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/board/toradex/apalis_imx6/apalis_imx6.c b/board/toradex/apalis_imx6/apalis_imx6.c index c4afd9fea26..305783badc6 100644 --- a/board/toradex/apalis_imx6/apalis_imx6.c +++ b/board/toradex/apalis_imx6/apalis_imx6.c @@ -83,14 +83,13 @@ int dram_init(void) /* Apalis UART1 */ iomux_v3_cfg_t const uart1_pads[] = { +#ifndef CONFIG_MXC_UART_DTE MX6_PAD_CSI0_DAT10__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), MX6_PAD_CSI0_DAT11__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), -}; - -/* Apalis UART2 */ -iomux_v3_cfg_t const uart2_pads[] = { - MX6_PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), - MX6_PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), +#else + MX6_PAD_CSI0_DAT10__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), + MX6_PAD_CSI0_DAT11__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), +#endif }; #define PC MUX_PAD_CTRL(I2C_PAD_CTRL) @@ -258,10 +257,27 @@ iomux_v3_cfg_t const usb_pads[] = { MX6_PAD_EIM_D28__GPIO3_IO28 | MUX_PAD_CTRL(NO_PAD_CTRL), }; +/* if UARTs are used in DTE mode, so switch the mode on all UARTs before + * any pinmuxing connects a (DCE) output to a transceiver output. + */ +#define UFCR 0x90 /* FIFO Control Register */ +#define UFCR_DCEDTE (1<<6) /* DCE=0 */ +#define SET_DCEDTE(p) (writel( (readl((u32 *) (p)) | UFCR_DCEDTE), (u32 *) (p))) + +static void setup_dtemode_uart(void) +{ + SET_DCEDTE(UART1_BASE + UFCR); + SET_DCEDTE(UART2_BASE + UFCR); + SET_DCEDTE(UART4_BASE + UFCR); + SET_DCEDTE(UART5_BASE + UFCR); +} + static void setup_iomux_uart(void) { +#ifdef CONFIG_MXC_UART_DTE + setup_dtemode_uart(); +#endif imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); - imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); } #ifdef CONFIG_USB_EHCI_MX6 |