Hello Peter,
Very useful infos.
And Now I'm working on the i.mx6 solo.
What I want to do with uart4 is to configure
CSI0_DAT13 to UART4_TXD
CSI0_DAT12 to UART4_RXD
I've already done sth about it, but it seems not working as expected, Could you tell me how to do this?
And FYI as a comparation,
configure
CSI0_DAT13 to UART4_RXD
CSI0_DAT12 to UART4_TXD,
and just crossing the hardware wiring TXD/RXD between imx6 solo and the device works as expected.
Following is what I've already done to configure CSI0_DAT13 to UART4_TXD and CSI0_DAT12 to UART4_RXD.
With the two pinmux in my board header file
MX6DL_PAD_CSI0_DAT12__UART4_RXD,
MX6DL_PAD_CSI0_DAT13__UART4_TXD,
And their definitions are
#define MX6DL_PAD_CSI0_DAT12__UART4_RXD \
IOMUX_PAD(0x0368, 0x0054, 3, 0x0914, 0, MX6DL_UART_PAD_CTRL)
#define MX6DL_PAD_CSI0_DAT13__UART4_TXD \
IOMUX_PAD(0x036C, 0x0058, 3, 0x0000, 0, MX6DL_UART_PAD_CTRL)
the log for running the function mxc_iomux_v3_setup_pad() in iomux-v3.c
/*
* configures a single pad in the iomuxer
*/
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
{
u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT;
u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT;
u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT;
u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT;
u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
if (mux_ctrl_ofs)
__raw_writel(mux_mode, base + mux_ctrl_ofs);
if (sel_input_ofs)
__raw_writel(sel_input, base + sel_input_ofs);
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
__raw_writel(pad_ctrl, base + pad_ctrl_ofs);
// dat12
if ((pad_ctrl_ofs == 0x0368) || (pad_ctrl_ofs == 0x036C) || (pad_ctrl_ofs == 0x0378) ||(pad_ctrl_ofs == 0x037C))
{
if (mux_ctrl_ofs)
printk("\n mux_ctrl_ofs(0x%x) mux_mode (0x%x) \n", mux_ctrl_ofs, mux_mode);
if (sel_input_ofs)
printk(" sel_input_ofs(0x%x) sel_input (0x%x) \n", sel_input_ofs, sel_input);
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
printk(" pad_ctrl_ofs(0x%x) pad_ctrl (0x%x) \n", pad_ctrl_ofs, pad_ctrl);
}
return 0;
}
are as follows:
mux_ctrl_ofs(0x54) mux_mode (0x3)
sel_input_ofs(0x914) sel_input (0x0)
pad_ctrl_ofs(0x368) pad_ctrl (0x1b0b1)
mux_ctrl_ofs(0x58) mux_mode (0x3)
pad_ctrl_ofs(0x36c) pad_ctrl (0x1b0b1)
Looking forward to your reply, thank you so much