HI3520D在内核中复用UART2,UART3管脚
在linux-3.0.y/arch/arm/mach-hi3520d/core.c文件中合适的位置假如
#define GK_HW_WEG(gkval,gkaddr) writel(gkval,gkaddr)
#define GK_IOCFG_BASE_ADDR 0x200F0000 /* IO口复用寄存器地址空间映射 */
#define GK_GPIO0_BASE_ADDR 0x20150000 /* GPIO0的地址空间映射 */
#define GK_GPIO1_BASE_ADDR 0x20160000 /* GPIO1的地址空间映射 */
#define GK_GPIO2_BASE_ADDR 0x20170000 /* GPIO2的地址空间映射 */
#define GK_GPIO3_BASE_ADDR 0x20180000 /* GPIO3的地址空间映射 */
#define GK_GPIO4_BASE_ADDR 0x20190000 /* GPIO4的地址空间映射 */
#define GK_GPIO5_BASE_ADDR 0x201A0000 /* GPIO5的地址空间映射 */
#define GK_GPIO6_BASE_ADDR 0x201B0000 /* GPIO6的地址空间映射 */
#define GK_GPIO7_BASE_ADDR 0x201C0000 /* GPIO7的地址空间映射 */
#define GK_GPIO8_BASE_ADDR 0x201D0000 /* GPIO7的地址空间映射 */
#define GK_REG_UART1RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x050) /* UART1_RXD偏移寄存器 */
#define GK_REG_UART1TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x058) /* UART1_TXD偏移寄存器 */
#define GK_REG_UART2RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x05C) /* UART2_RXD偏移寄存器 */
#define GK_REG_UART2TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x060) /* UART2_TXD偏移寄存器 */
#define GK_REG_UART3RXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x0BC) /* UART3_RXD偏移寄存器 */
#define GK_REG_UART3TXD_OFFSET IO_ADDRESS(GK_IOCFG_BASE_ADDR + 0x0B8) /* UART3_TXD偏移寄存器 */
#define gk_cfg_uart_pin()({\
GK_HW_WEG(0x01,GK_REG_UART1RXD_OFFSET);\
GK_HW_WEG(0x01,GK_REG_UART1TXD_OFFSET);\
GK_HW_WEG(0x01,GK_REG_UART2RXD_OFFSET);\
GK_HW_WEG(0x01,GK_REG_UART2TXD_OFFSET);\
GK_HW_WEG(0x01,GK_REG_UART3RXD_OFFSET);\
GK_HW_WEG(0x01,GK_REG_UART3TXD_OFFSET);\
})
static void uart_clk_init(unsigned long clk)
{
uart_clk.rate = clk;
lookups[0].dev_id = "uart:0";
lookups[0].clk = &uart_clk;
lookups[1].dev_id = "uart:1";
lookups[1].clk = &uart_clk;
lookups[2].dev_id = "uart:2";
lookups[2].clk = &uart_clk;
lookups[3].dev_id = "uart:3";
lookups[3].clk = &uart_clk;
gk_cfg_uart_pin();
}