nt9856x/BSP/linux-kernel/drivers/pinctrl/novatek/na51068/top.c
2023-03-28 15:07:53 +08:00

4370 lines
154 KiB
C
Executable File

/*
TOP Configuration module
@file top.c
@ingroup mIDrvSys_TOP
@note Nothing
Copyright Novatek Microelectronics Corp. 2019. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
*/
#define TOP_CTRL0_REG_OFS 0x20
#define TOP_CTRL1_REG_OFS 0x24
#define TOP_CTRL2_REG_OFS 0x28
#define TOP_CTRL3_REG_OFS 0x2C
#define TOP_CTRL4_REG_OFS 0x30
#define TOP_CTRL5_REG_OFS 0x40
#define TOP_CTRL6_REG_OFS 0x44
#define TOP_CTRL7_REG_OFS 0x50
#define TOP_CTRL8_REG_OFS 0x54
#define TOP_CTRL9_REG_OFS 0x58
#define TOP_CTRL10_REG_OFS 0x5C
#define TOP_CTRL11_REG_OFS 0x60
#define TOP_CTRL12_REG_OFS 0x70
#define TOP_CTRL13_REG_OFS 0x74
#define TOP_CTRL14_REG_OFS 0x80
#define TOP_VCAP_MUX_REG_OFS 0xC0
#define TOP_ETH_MUX_REG_OFS 0xC8
#define TOP_LCD_MUX_REG_OFS 0xCC
#if defined(__FREERTOS)
/* rtos */
#include <stdio.h>
#include <kwrap/error_no.h>
#include <kwrap/spinlock.h>
#include "top.h"
#include "top_int.h"
#include <rcw_macro.h>
#include <io_address.h>
#define __MODULE__ rtos_top
#include <kwrap/debug.h>
unsigned int rtos_top_debug_level = NVT_DBG_WRN;
static VK_DEFINE_SPINLOCK(my_lock);
#define loc_cpu(flags) vk_spin_lock_irqsave(&my_lock, flags)
#define unl_cpu(flags) vk_spin_unlock_irqrestore(&my_lock, flags)
#define TOP_SETREG(ofs,value) OUTW((IOADDR_TOP_REG_BASE+(ofs)),(value))
#define TOP_GETREG(ofs) INW(IOADDR_TOP_REG_BASE+(ofs))
#define TOP_DBG(fmt, args...) DBG_DUMP(fmt, ##args)
#define TOP_DBG_ERR(fmt, args...) DBG_ERR(fmt, ##args)
#define HW_TOP_SETREG(ofs,value) OUTW((IOADDR_TOP_REG_BASE+(ofs)),(value))
#define HW_TOP_GETREG(ofs) INW(IOADDR_TOP_REG_BASE+(ofs))
#else
/* linux kernel */
#include <linux/spinlock.h>
#include <plat/top.h>
#include "top_int.h"
#include "na51068_pinmux.h"
#include <mach/rcw_macro.h>
static DEFINE_SPINLOCK(top_lock);
#define loc_cpu(flags) spin_lock_irqsave(&top_lock, flags);
#define unl_cpu(flags) spin_unlock_irqrestore(&top_lock, flags);
#define TOP_DBG(fmt, ...) pr_info(fmt, ##__VA_ARGS__)
#define TOP_DBG_ERR(fmt, ...) pr_err(fmt, ##__VA_ARGS__)
static struct sw_top_reg sw_top_reg_arr[] = {
{TOP_CTRL0_REG_OFS, 0},
{TOP_CTRL1_REG_OFS, 0},
{TOP_CTRL2_REG_OFS, 0},
{TOP_CTRL3_REG_OFS, 0},
{TOP_CTRL4_REG_OFS, 0},
{TOP_CTRL5_REG_OFS, 0},
{TOP_CTRL6_REG_OFS, 0},
{TOP_CTRL7_REG_OFS, 0},
{TOP_CTRL8_REG_OFS, 0},
{TOP_CTRL9_REG_OFS, 0},
{TOP_CTRL10_REG_OFS, 0},
{TOP_CTRL11_REG_OFS, 0},
{TOP_CTRL12_REG_OFS, 0},
{TOP_CTRL13_REG_OFS, 0},
{TOP_CTRL14_REG_OFS, 0},
{TOP_VCAP_MUX_REG_OFS, 0},
{TOP_ETH_MUX_REG_OFS, 0},
{TOP_LCD_MUX_REG_OFS, 0},
};
static int sw_top_reg_size = sizeof(sw_top_reg_arr)/sizeof(sw_top_reg_arr[0]);
ER sw_top_reg_set(uint32_t ofs, uint32_t val)
{
UINT i;
for (i = 0; i < sw_top_reg_size; i++) {
if (sw_top_reg_arr[i].offset == ofs) {
sw_top_reg_arr[i].value = val;
return E_OK;
}
}
TOP_DBG_ERR("unhandled offset when doing %s\n", __FUNCTION__);
return E_PAR;
}
uint32_t sw_top_reg_get(uint32_t ofs)
{
UINT i;
for (i = 0; i < sw_top_reg_size; i++) {
if (sw_top_reg_arr[i].offset == ofs) {
return sw_top_reg_arr[i].value;
}
}
TOP_DBG_ERR("unhandled offset when doing %s\n", __FUNCTION__);
return 0;
}
void sw_top_reg_dump(void)
{
UINT i;
for (i = 0; i < sw_top_reg_size; i++) {
TOP_DBG("offset=0x%x, value=0x%x\n", sw_top_reg_arr[i].offset, sw_top_reg_arr[i].value);
}
TOP_DBG("\n");
}
#define TOP_SETREG(ofs,value) sw_top_reg_set(ofs, value)
#define TOP_GETREG(ofs) sw_top_reg_get(ofs)
void __iomem *top_vaddr;
#define HW_TOP_SETREG(ofs,value) OUTW((top_vaddr+(ofs)),(value))
#define HW_TOP_GETREG(ofs) INW(top_vaddr+(ofs))
void pinmux_preset(struct nvt_pinctrl_info *info)
{
top_vaddr = info->top_base;
}
static void gpio_info_show(struct nvt_pinctrl_info *info, u32 start_offset, u32 end_offset)
{
u32 target_ofs, target_bit;
u32 BIT_MASK = 0x7;
u32 reg_value;
for (target_ofs = start_offset; target_ofs <= end_offset; target_ofs+= 0x4) {
reg_value = HW_TOP_GETREG(target_ofs);
for (target_bit = 0; target_bit < 32; target_bit += 4)
pr_info(" 0x%x %-2d 0x%x\n", target_ofs, target_bit, \
(reg_value >> target_bit) & BIT_MASK);
}
}
void pinmux_gpio_parsing(struct nvt_pinctrl_info *info)
{
pr_info("\nOFFSET BIT VALUE\n");
gpio_info_show(info, TOP_REGGPIO_START_OFS, TOP_REGGPIO_END_OFS);
}
#endif
static uint32_t pin_config[PIN_FUNC_MAX];
#define ETH_MAC0 0x1
#define ETH_MAC1 0x2
UINT8 eth_mac_record = 0;
UINT32 eth_phy_record = 0;
UINT32 vcap_int_record[4] = {0, 0, 0, 0};
UINT32 vcap_bt1120_record[2] = {0, 0};
UINT32 vcap_bt1120_record_backup[2] = {0, 0};
#define uart_pinno 2
#define uart0_pincnt 1
#define uart0rts_pincnt 1
#define uart1_pincnt 3
#define uart2_pincnt 1
#define uart3_pincnt 6
#define uartceva_pincnt 1
UINT32 uart0[uart0_pincnt][1+uart_pinno] = {
{1, PCTRL_X_UART0_SOUT, PCTRL_X_UART0_SIN}
};
UINT32 uart0rts[uart0rts_pincnt][1+uart_pinno] = {
{1, PCTRL_X_UART0_RTS, PCTRL_X_UART0_CTS}
};
UINT32 uart1[uart1_pincnt][1+uart_pinno] = {
{1, PCTRL_X_UART1_SOUT, PCTRL_X_UART1_SIN},
{2, PCTRL_X_I2C1_SCL, PCTRL_X_I2C1_SDA},
{2, PCTRL_X_GPIO_0, PCTRL_X_GPIO_1}
};
UINT32 uart2[uart2_pincnt][1+uart_pinno] = {
{1, PCTRL_X_UART2_SOUT, PCTRL_X_UART2_SIN}
};
UINT32 uart3[uart3_pincnt][1+uart_pinno] = {
{2, PCTRL_X_CPU_TCK, PCTRL_X_CPU_TDO},
{2, PCTRL_X_I2C0_SCL, PCTRL_X_I2C0_SDA},
{2, PCTRL_X_I2C2_SCL, PCTRL_X_I2C2_SDA},
{2, PCTRL_X_I2S1_SCLK, PCTRL_X_I2S1_FS},
{2, PCTRL_X_GPIO_2, PCTRL_X_GPIO_3},
{2, PCTRL_X_GPIO_7, PCTRL_X_GPIO_8}
};
UINT32 uartceva[uartceva_pincnt][1+uart_pinno] = {
{2, PCTRL_X_UART1_SOUT, PCTRL_X_UART1_SIN}
};
#define i2c_pinno 2
#define i2c0_pincnt 2
#define i2c1_pincnt 5
#define i2c2_pincnt 2
#define i2c3_pincnt 1
UINT32 i2c0[i2c0_pincnt][1+i2c_pinno] = {
{1, PCTRL_X_I2C0_SCL, PCTRL_X_I2C0_SDA},
{1, PCTRL_X_GPIO_0, PCTRL_X_GPIO_1}
};
UINT32 i2c1[i2c1_pincnt][1+i2c_pinno] = {
{1, PCTRL_X_I2C1_SCL, PCTRL_X_I2C1_SDA},
{1, PCTRL_X_GPIO_2, PCTRL_X_GPIO_3},
{2, PCTRL_X_GPIO_5, PCTRL_X_GPIO_6},
{3, PCTRL_X_UART1_SOUT, PCTRL_X_UART1_SIN},
{2, PCTRL_X_CPU_TDI, PCTRL_X_CPU_TMS}
};
UINT32 i2c2[i2c2_pincnt][1+i2c_pinno] = {
{1, PCTRL_X_I2C2_SCL, PCTRL_X_I2C2_SDA},
{3, PCTRL_X_I2S1_SCLK, PCTRL_X_I2S1_FS}
};
UINT32 i2c3[i2c3_pincnt][1+i2c_pinno] = {
{1, PCTRL_X_HDMI0_I2C_SCL, PCTRL_X_HDMI0_I2C_SDA}
};
#define sdio_pinno 5
#define sdio_pinno2 2
#define sdio_pincnt 2
UINT32 sdio0[sdio_pincnt][1+sdio_pinno] = {
{5, PCTRL_X_I2S1_SCLK, PCTRL_X_I2S1_FS, PCTRL_X_I2S1_RXD, PCTRL_X_I2S1_TXD, PCTRL_X_I2C1_SCL},
{6, PCTRL_X_GPIO_5, PCTRL_X_GPIO_6, PCTRL_X_GPIO_7, PCTRL_X_GPIO_8, PCTRL_X_GPIO_9}
};
UINT32 sdio0_2[sdio_pincnt][1+sdio_pinno2] = {
{5, PCTRL_X_I2C1_SDA, PCTRL_X_EXT1_CLK},
{5, PCTRL_X_I2C2_SCL, PCTRL_X_I2C2_SDA}
};
#define spi_pinno 7
#define spi_pincnt 3
UINT32 spi[spi_pincnt][1+spi_pinno] = {
{1, PCTRL_X_SPI_SCK,PCTRL_X_SPI_CSN0,PCTRL_X_SPI_TX,PCTRL_X_SPI_RX,PCTRL_X_SPI_WPN,PCTRL_X_SPI_HOLDN,PCTRL_X_SPI_CSN1},
{2, PCTRL_X_SPI_SCK,PCTRL_X_SPI_CSN0,PCTRL_X_SPI_TX,PCTRL_X_SPI_RX,PCTRL_X_SPI_WPN,PCTRL_X_SPI_HOLDN,PCTRL_X_SPI_CSN1},
{3, PCTRL_X_SPI_SCK,PCTRL_X_SPI_CSN0,PCTRL_X_SPI_TX,PCTRL_X_SPI_RX,PCTRL_X_SPI_WPN,PCTRL_X_SPI_HOLDN,PCTRL_X_SPI_CSN1}
};
#define extclk_pinno 1
#define extclk_pincnt 3
UINT32 extclk0[extclk_pincnt][1+extclk_pinno] = {
{1, PCTRL_X_EXT0_CLK},
{6, PCTRL_X_EXT1_CLK},
{3, PCTRL_X_CAP2_CLK}
};
UINT32 extclk1[extclk_pincnt][1+extclk_pinno] = {
{1, PCTRL_X_EXT1_CLK},
{6, PCTRL_X_EXT0_CLK},
{4, PCTRL_X_CAP1_CLK}
};
#define ssp_pinno 4
#define ssp0_pincnt 2
#define ssp1_pincnt 1
#define ssp2_pincnt 2
#define ssp2_2_pinno 2
#define ssp2_2_pincnt 2
#define ssp2_3_pinno 1
#define ssp2_3_pincnt 2
#define sspmclk_pinno 1
#define sspmclk0_pincnt 1
#define sspmclk1_pincnt 1
#define sspmclk2_pincnt 2
UINT32 ssp0[ssp0_pincnt][1+ssp_pinno] = {
{1, PCTRL_X_I2S0_SCLK,PCTRL_X_I2S0_FS,PCTRL_X_I2S0_RXD,PCTRL_X_I2S0_TXD},
{6, PCTRL_X_I2S1_SCLK,PCTRL_X_I2S1_FS,PCTRL_X_I2S1_RXD,PCTRL_X_I2S1_TXD}
};
UINT32 ssp1[ssp1_pincnt][1+ssp_pinno] = {
{1, PCTRL_X_I2S1_SCLK,PCTRL_X_I2S1_FS,PCTRL_X_I2S1_RXD,PCTRL_X_I2S1_TXD}
};
UINT32 ssp2[ssp2_pincnt][1+ssp_pinno] = {
{3, PCTRL_X_CPU_TDI,PCTRL_X_CPU_TMS,PCTRL_X_CPU_TCK,PCTRL_X_CPU_TDO},
{1, PCTRL_X_GPIO_6,PCTRL_X_GPIO_7,PCTRL_X_GPIO_8,PCTRL_X_GPIO_9}
};
UINT32 ssp2_2[ssp2_2_pincnt][1+ssp2_2_pinno] = {
{3, PCTRL_X_I2C0_SCL,PCTRL_X_I2C0_SDA},
{3, PCTRL_X_I2C1_SCL,PCTRL_X_I2C1_SDA}
};
UINT32 ssp2_3[ssp2_3_pincnt][1+ssp2_3_pinno] = {
{2, PCTRL_X_I2S0_TXD},
{2, PCTRL_X_I2S1_TXD}
};
UINT32 sspmclk0[sspmclk0_pincnt][1+sspmclk_pinno] = {
{2, PCTRL_X_EXT0_CLK}
};
UINT32 sspmclk1[sspmclk1_pincnt][1+sspmclk_pinno] = {
{2, PCTRL_X_EXT1_CLK}
};
UINT32 sspmclk2[sspmclk2_pincnt][1+sspmclk_pinno] = {
{1, PCTRL_X_GPIO_5},
{3, PCTRL_X_CPU_NTRST}
};
#define lcd_pinno 16
#define lcd_2_pinno 1
#define lcd_pincnt 4
#define lcd888_pincnt 1
#define lcd888_pinno 18
#define lcd888_2_pinno 9
UINT32 lcd[lcd_pincnt][1+lcd_pinno] = {
{3,PCTRL_X_EPHY0_REFCLK,PCTRL_X_EPHY0_RESET,PCTRL_X_RGMII0_RX_CLK,PCTRL_X_RGMII0_RX_CTL,PCTRL_X_RGMII0_RXD0,PCTRL_X_RGMII0_RXD1,PCTRL_X_RGMII0_RXD2,PCTRL_X_RGMII0_RXD3,
PCTRL_X_RGMII0_TX_CLK,PCTRL_X_RGMII0_TX_CTL,PCTRL_X_RGMII0_TXD0,PCTRL_X_RGMII0_TXD1,PCTRL_X_RGMII0_TXD2,PCTRL_X_RGMII0_TXD3,PCTRL_X_RGMII0_MDC,PCTRL_X_RGMII0_MDIO},
{3,PCTRL_X_CAP0_CLK,PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,
PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6},
{4,PCTRL_X_EPHY0_REFCLK,PCTRL_X_EPHY0_RESET,PCTRL_X_RGMII0_RX_CLK,PCTRL_X_RGMII0_RX_CTL,PCTRL_X_RGMII0_RXD0,PCTRL_X_RGMII0_RXD1,PCTRL_X_RGMII0_RXD2,PCTRL_X_RGMII0_RXD3,
PCTRL_X_RGMII0_TX_CLK,PCTRL_X_RGMII0_TX_CTL,PCTRL_X_RGMII0_TXD0,PCTRL_X_RGMII0_TXD1,PCTRL_X_RGMII0_TXD2,PCTRL_X_RGMII0_TXD3,PCTRL_X_RGMII0_MDC,PCTRL_X_RGMII0_MDIO},
{4,PCTRL_X_CAP0_CLK,PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,
PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6},
};
UINT32 lcd_2[lcd_pincnt][1+lcd_2_pinno] = {
{3,PCTRL_X_GPIO_5},
{3,PCTRL_X_CAP1_DATA7},
{4,PCTRL_X_GPIO_5},
{4,PCTRL_X_CAP1_DATA7},
};
UINT32 lcd888[lcd888_pincnt][1+lcd888_pinno] = {
{5,PCTRL_X_CAP0_CLK,PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,
PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_CLK, PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,
PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7}
};
UINT32 lcd888_2[lcd888_pincnt][1+lcd888_2_pinno] = {
{4,PCTRL_X_I2C1_SCL,PCTRL_X_I2C1_SDA,PCTRL_X_I2S0_SCLK,PCTRL_X_I2S0_FS,PCTRL_X_I2S0_RXD,PCTRL_X_I2S1_SCLK,PCTRL_X_I2S1_FS,PCTRL_X_I2S1_RXD,PCTRL_X_EXT1_CLK}
};
#define remote_pinno 1
#define remote_pincnt 11
UINT32 remote[remote_pincnt][1+remote_pinno] = {
{6, PCTRL_X_CPU_TDI},
{6, PCTRL_X_CPU_TMS},
{6, PCTRL_X_CPU_TCK},
{6, PCTRL_X_CPU_TDO},
{6, PCTRL_X_UART1_SOUT},
{6, PCTRL_X_UART1_SIN},
{6, PCTRL_X_GPIO_0},
{6, PCTRL_X_GPIO_1},
{6, PCTRL_X_GPIO_2},
{6, PCTRL_X_GPIO_3},
{6, PCTRL_X_GPIO_4},
};
#define vcap_pinno 8
#define vcapclk_pinno 1
#define bt1120_pinno 16
#define bt1120clk_pinno 1
#define vcap0_pincnt 3
#define vcap1_pincnt 2
#define vcap2_pincnt 3
#define vcap3_pincnt 4
#define bt1120_0_pincnt 3
#define bt1120_1_pincnt 5
#define ts_pinno 2
#define ts_pincnt 1
UINT32 vcap0[vcap0_pincnt][1+vcap_pinno] = {
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7},
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7},
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7},
};
UINT32 ts0[ts_pincnt][1+ts_pinno] = {
{7, PCTRL_X_I2S1_SCLK,PCTRL_X_I2S1_FS},
};
UINT32 vcap1[vcap1_pincnt][1+vcap_pinno] = {
{1, PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7},
{1, PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7}
};
UINT32 ts1[ts_pincnt][1+ts_pinno] = {
{7, PCTRL_X_I2S1_RXD,PCTRL_X_I2S1_TXD},
};
UINT32 vcap2[vcap2_pincnt][1+vcap_pinno] = {
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7}
};
UINT32 ts2[ts_pincnt][1+ts_pinno] = {
{7, PCTRL_X_I2S0_SCLK,PCTRL_X_I2S0_FS},
};
UINT32 vcap3[vcap3_pincnt][1+vcap_pinno] = {
{1, PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7}
};
UINT32 ts3[ts_pincnt][1+ts_pinno] = {
{7, PCTRL_X_I2S0_RXD,PCTRL_X_I2S0_TXD},
};
UINT32 vcap0clk[vcap0_pincnt][1+vcapclk_pinno] = {
{1, PCTRL_X_CAP0_CLK},
{3, PCTRL_X_EXT1_CLK},
{1, PCTRL_X_CAP0_CLK},
};
UINT32 vcap1clk[vcap1_pincnt][1+vcapclk_pinno] = {
{1, PCTRL_X_CAP1_CLK},
{1, PCTRL_X_CAP1_CLK}
};
UINT32 vcap2clk[vcap2_pincnt][1+vcapclk_pinno] = {
{1, PCTRL_X_CAP2_CLK},
{3, PCTRL_X_CAP1_CLK},
{1, PCTRL_X_CAP2_CLK}
};
UINT32 vcap3clk[vcap3_pincnt][1+vcapclk_pinno] = {
{1, PCTRL_X_CAP3_CLK},
{6, PCTRL_X_I2C1_SCL},
{2, PCTRL_X_CAP2_CLK},
{1, PCTRL_X_CAP3_CLK}
};
UINT32 bt1120_0[bt1120_0_pincnt][1+bt1120_pinno] = {
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7},
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7},
{1, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5,PCTRL_X_CAP1_DATA6,PCTRL_X_CAP1_DATA7}
};
UINT32 bt1120_1[bt1120_1_pincnt][1+bt1120_pinno] = {
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7,PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7,PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7,PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7,PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7},
{1, PCTRL_X_CAP2_DATA0,PCTRL_X_CAP2_DATA1,PCTRL_X_CAP2_DATA2,PCTRL_X_CAP2_DATA3,PCTRL_X_CAP2_DATA4,PCTRL_X_CAP2_DATA5,PCTRL_X_CAP2_DATA6,PCTRL_X_CAP2_DATA7,PCTRL_X_CAP3_DATA0,PCTRL_X_CAP3_DATA1,PCTRL_X_CAP3_DATA2,PCTRL_X_CAP3_DATA3,PCTRL_X_CAP3_DATA4,PCTRL_X_CAP3_DATA5,PCTRL_X_CAP3_DATA6,PCTRL_X_CAP3_DATA7}
};
UINT32 bt1120clk_0[bt1120_0_pincnt][1+bt1120clk_pinno] = {
{1, PCTRL_X_CAP0_CLK},
{1, PCTRL_X_CAP1_CLK},
{3, PCTRL_X_EXT1_CLK}
};
UINT32 bt1120clk_1[bt1120_1_pincnt][1+bt1120clk_pinno] = {
{1, PCTRL_X_CAP2_CLK},
{1, PCTRL_X_CAP3_CLK},
{3, PCTRL_X_CAP1_CLK},
{6, PCTRL_X_I2C1_SCL},
{2, PCTRL_X_CAP2_CLK}
};
#define rgmii_pinno 15
#define rmii_pinno 10
#define eth_pincnt 2
UINT32 rgmii[eth_pincnt][1+rgmii_pinno] = {
{1, PCTRL_X_EPHY0_RESET,PCTRL_X_RGMII0_RX_CLK,PCTRL_X_RGMII0_RX_CTL,PCTRL_X_RGMII0_RXD0,PCTRL_X_RGMII0_RXD1,PCTRL_X_RGMII0_RXD2,PCTRL_X_RGMII0_RXD3,
PCTRL_X_RGMII0_TX_CLK,PCTRL_X_RGMII0_TX_CTL,PCTRL_X_RGMII0_TXD0,PCTRL_X_RGMII0_TXD1,PCTRL_X_RGMII0_TXD2,PCTRL_X_RGMII0_TXD3,PCTRL_X_RGMII0_MDC,PCTRL_X_RGMII0_MDIO},
{6, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,PCTRL_X_CAP0_DATA5,PCTRL_X_CAP0_DATA6,
PCTRL_X_CAP0_DATA7,PCTRL_X_CAP1_CLK,PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA2,PCTRL_X_CAP1_DATA3,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5}
};
UINT32 rmii[eth_pincnt][1+rmii_pinno] = {
{2, PCTRL_X_EPHY0_RESET,PCTRL_X_RGMII0_RX_CLK,PCTRL_X_RGMII0_RX_CTL,PCTRL_X_RGMII0_RXD0,PCTRL_X_RGMII0_RXD1,
PCTRL_X_RGMII0_TX_CTL,PCTRL_X_RGMII0_TXD0,PCTRL_X_RGMII0_TXD1,PCTRL_X_RGMII0_MDC,PCTRL_X_RGMII0_MDIO},
{2, PCTRL_X_CAP0_DATA0,PCTRL_X_CAP0_DATA1,PCTRL_X_CAP0_DATA2,PCTRL_X_CAP0_DATA3,PCTRL_X_CAP0_DATA4,
PCTRL_X_CAP1_CLK, PCTRL_X_CAP1_DATA0,PCTRL_X_CAP1_DATA1,PCTRL_X_CAP1_DATA4,PCTRL_X_CAP1_DATA5}
};
const UINT32 phy_clk_out[eth_pincnt][eth_pincnt][3] = {
// 1st pinmux
{
// RGMII
{PIN_ETH_CFG_RGMII_1ST_PINMUX, 1, PCTRL_X_EPHY0_REFCLK},
// RMII
{PIN_ETH_CFG_RMII_1ST_PINMUX, 2, PCTRL_X_EPHY0_REFCLK},
},
// 2nd pinmux
{
// RGMII
{PIN_ETH_CFG_RGMII_2ND_PINMUX, 6, PCTRL_X_CAP0_CLK},
// RMII
{PIN_ETH_CFG_RMII_2ND_PINMUX, 2, PCTRL_X_CAP0_CLK},
},
};
#define cpuice_pinno 5
#define cpuice_pincnt 1
#define vgahs_pinno 1
#define vgahs_pincnt 1
#define vgavs_pinno 1
#define vgavs_pincnt 1
#define bmc_pinno 4
#define bmc_pincnt 1
#define rtccal_pinno 1
#define rtccal_pincnt 1
#define dacramp_pinno 1
#define dacramp_pincnt 1
#define hdmiplg_pinno 1
#define hdmiplg_pincnt 1
#define dspice_pinno 4
#define dspice_pincnt 2
#define ethled_pinno 2
#define ethled_pincnt 2
#define sataled_pinno 2
#define sataled_pincnt 2
UINT32 cpuice[cpuice_pincnt][1+cpuice_pinno] = {
{1, PCTRL_X_CPU_NTRST, PCTRL_X_CPU_TDI, PCTRL_X_CPU_TMS, PCTRL_X_CPU_TCK, PCTRL_X_CPU_TDO}
};
UINT32 vgahs[vgahs_pincnt][1+vgahs_pinno] = {
{1, PCTRL_X_VGA_HS}
};
UINT32 vgavs[vgavs_pincnt][1+vgavs_pinno] = {
{1, PCTRL_X_VGA_VS}
};
UINT32 bmc[bmc_pincnt][1+bmc_pinno] = {
{5, PCTRL_X_GPIO_5, PCTRL_X_GPIO_6, PCTRL_X_GPIO_7, PCTRL_X_GPIO_8}
};
UINT32 rtccal[rtccal_pincnt][1+rtccal_pinno] = {
{2, PCTRL_X_UART0_RTS}
};
UINT32 dacramp[dacramp_pincnt][1+dacramp_pinno] = {
{4, PCTRL_X_UART1_SIN}
};
UINT32 hdmiplg[hdmiplg_pincnt][1+hdmiplg_pinno] = {
{1, PCTRL_X_HDMI0_HPD}
};
UINT32 dspice[dspice_pincnt][1+dspice_pinno] = {
{4, PCTRL_X_CPU_TDI, PCTRL_X_CPU_TMS, PCTRL_X_CPU_TCK, PCTRL_X_CPU_TDO},
{3, PCTRL_X_I2S0_SCLK, PCTRL_X_I2S0_FS, PCTRL_X_I2S0_RXD, PCTRL_X_I2S0_TXD}
};
UINT32 ethled[ethled_pincnt][1+ethled_pinno] = {
{5, PCTRL_X_CPU_TDI, PCTRL_X_CPU_TMS},
{3, PCTRL_X_GPIO_8, PCTRL_X_GPIO_9}
};
UINT32 sataled[sataled_pincnt][1+sataled_pinno] = {
{5, PCTRL_X_CPU_TCK, PCTRL_X_CPU_TDO},
{3, PCTRL_X_GPIO_3, PCTRL_X_GPIO_4}
};
#define pwm_pinno 1
#define pwm0_pincnt 1
#define pwm1_pincnt 1
#define pwm2_pincnt 1
UINT32 pwm0[pwm0_pincnt][1+pwm_pinno] = {
{1, PCTRL_X_PWM0_OUT}
};
UINT32 pwm1[pwm1_pincnt][1+pwm_pinno] = {
{1, PCTRL_X_PWM1_OUT}
};
UINT32 pwm2[pwm2_pincnt][1+pwm_pinno] = {
{3, PCTRL_X_I2S1_TXD}
};
static struct pinmux_pad_table uart_pad_mapping[] = {
{PCTRL_X_UART0_SOUT, PAD_X_UART0_SOUT, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART0_SIN, PAD_X_UART0_SIN, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART0_RTS, PAD_X_UART0_RTS, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART0_CTS, PAD_X_UART0_CTS, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART1_SOUT, PAD_X_UART1_SOUT, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_UART1_SIN, PAD_X_UART1_SIN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_UART2_SOUT, PAD_X_UART2_SOUT, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART2_SIN, PAD_X_UART2_SIN, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C0_SCL, PAD_X_I2C0_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C0_SDA, PAD_X_I2C0_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2C1_SDA, PAD_X_I2C1_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C2_SCL, PAD_X_I2C2_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C2_SDA, PAD_X_I2C2_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_GPIO_0, PAD_X_GPIO_0, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_1, PAD_X_GPIO_1, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TCK, PAD_X_CPU_TCK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TDO, PAD_X_CPU_TDO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_GPIO_2, PAD_X_GPIO_2, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_3, PAD_X_GPIO_3, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_7, PAD_X_GPIO_7, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_8, PAD_X_GPIO_8, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
};
static struct pinmux_pad_table i2c_pad_mapping[] = {
{PCTRL_X_I2C0_SCL, PAD_X_I2C0_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C0_SDA, PAD_X_I2C0_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2C1_SDA, PAD_X_I2C1_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C2_SCL, PAD_X_I2C2_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C2_SDA, PAD_X_I2C2_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_GPIO_0, PAD_X_GPIO_0, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_1, PAD_X_GPIO_1, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_2, PAD_X_GPIO_2, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_3, PAD_X_GPIO_3, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_5, PAD_X_GPIO_5, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_6, PAD_X_GPIO_6, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_UART1_SOUT, PAD_X_UART1_SOUT, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_UART1_SIN, PAD_X_UART1_SIN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TDI, PAD_X_CPU_TDI, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TMS, PAD_X_CPU_TMS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_HDMI0_I2C_SCL, PAD_X_HDMI0_I2C_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_HDMI0_I2C_SDA, PAD_X_HDMI0_I2C_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
};
static struct pinmux_pad_table sdio_pad_mapping[] = {
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_RXD, PAD_X_I2S1_RXD, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_TXD, PAD_X_I2S1_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2C1_SDA, PAD_X_I2C1_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_EXT1_CLK, PAD_X_EXT1_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_5, PAD_X_GPIO_5, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_6, PAD_X_GPIO_6, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_7, PAD_X_GPIO_7, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_8, PAD_X_GPIO_8, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_9, PAD_X_GPIO_9, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_I2C2_SCL, PAD_X_I2C2_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C2_SDA, PAD_X_I2C2_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
};
static struct pinmux_pad_table spi_pad_mapping[] = {
{PCTRL_X_SPI_SCK, PAD_X_SPI_SCK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_CSN0, PAD_X_SPI_CSN0, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_TX, PAD_X_SPI_TX, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_RX, PAD_X_SPI_RX, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_WPN, PAD_X_SPI_WPN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_HOLDN, PAD_X_SPI_HOLDN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_SPI_CSN1, PAD_X_SPI_CSN1, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
};
static struct pinmux_pad_table extclk_pad_mapping[] = {
{PCTRL_X_EXT0_CLK, PAD_X_EXT0_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_EXT1_CLK, PAD_X_EXT1_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP2_CLK, PAD_X_CAP2_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_CLK, PAD_X_CAP1_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE},},
};
static struct pinmux_pad_table ssp_pad_mapping[] = {
{PCTRL_X_I2S0_SCLK, PAD_X_I2S0_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_FS, PAD_X_I2S0_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_RXD, PAD_X_I2S0_RXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_TXD, PAD_X_I2S0_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_RXD, PAD_X_I2S1_RXD, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_TXD, PAD_X_I2S1_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_CPU_TDI, PAD_X_CPU_TDI, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TMS, PAD_X_CPU_TMS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TCK, PAD_X_CPU_TCK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TDO, PAD_X_CPU_TDO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_6, PAD_X_GPIO_6, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_7, PAD_X_GPIO_7, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_8, PAD_X_GPIO_8, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_9, PAD_X_GPIO_9, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_I2C0_SCL, PAD_X_I2C0_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C0_SDA, PAD_X_I2C0_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2C1_SDA, PAD_X_I2C1_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_EXT0_CLK, PAD_X_EXT0_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_EXT1_CLK, PAD_X_EXT1_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_5, PAD_X_GPIO_5, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CPU_NTRST, PAD_X_CPU_NTRST, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
};
static struct pinmux_pad_table lcd_pad_mapping[] = {
{PCTRL_X_EPHY0_REFCLK, PAD_X_EPHY0_REFCLK, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_EPHY0_RESET, PAD_X_EPHY0_RESET, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RX_CLK, PAD_X_RGMII0_RX_CLK, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RX_CTL, PAD_X_RGMII0_RX_CTL, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD0, PAD_X_RGMII0_RXD0, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD1, PAD_X_RGMII0_RXD1, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD2, PAD_X_RGMII0_RXD2, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD3, PAD_X_RGMII0_RXD3, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TX_CLK, PAD_X_RGMII0_TX_CLK, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TX_CTL, PAD_X_RGMII0_TX_CTL, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD0, PAD_X_RGMII0_TXD0, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD1, PAD_X_RGMII0_TXD1, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD2, PAD_X_RGMII0_TXD2, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD3, PAD_X_RGMII0_TXD3, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_MDC, PAD_X_RGMII0_MDC, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_MDIO, PAD_X_RGMII0_MDIO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_CLK, PAD_X_CAP0_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA0, PAD_X_CAP0_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP0_DATA1, PAD_X_CAP0_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA2, PAD_X_CAP0_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP0_DATA3, PAD_X_CAP0_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA4, PAD_X_CAP0_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA5, PAD_X_CAP0_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA6, PAD_X_CAP0_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA7, PAD_X_CAP0_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_CLK, PAD_X_CAP1_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA0, PAD_X_CAP1_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA1, PAD_X_CAP1_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA2, PAD_X_CAP1_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP1_DATA3, PAD_X_CAP1_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA4, PAD_X_CAP1_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP1_DATA5, PAD_X_CAP1_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP1_DATA6, PAD_X_CAP1_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN},},
{PCTRL_X_CAP1_DATA7, PAD_X_CAP1_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN},},
{PCTRL_X_GPIO_5, PAD_X_GPIO_5, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2C1_SDA, PAD_X_I2C1_SDA, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2S0_SCLK, PAD_X_I2S0_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_FS, PAD_X_I2S0_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_RXD, PAD_X_I2S0_RXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_RXD, PAD_X_I2S1_RXD, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_EXT1_CLK, PAD_X_EXT1_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
};
static struct pinmux_pad_table remote_pad_mapping[] = {
{PCTRL_X_CPU_TDI, PAD_X_CPU_TDI, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TMS, PAD_X_CPU_TMS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TCK, PAD_X_CPU_TCK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TDO, PAD_X_CPU_TDO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_UART1_SOUT, PAD_X_UART1_SOUT, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_UART1_SIN, PAD_X_UART1_SIN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_0, PAD_X_GPIO_0, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_1, PAD_X_GPIO_1, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_2, PAD_X_GPIO_2, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_3, PAD_X_GPIO_3, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_4, PAD_X_GPIO_4, {PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
};
static struct pinmux_pad_table vcap_pad_mapping[] = {
{PCTRL_X_CAP0_CLK, PAD_X_CAP0_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA0, PAD_X_CAP0_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP0_DATA1, PAD_X_CAP0_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA2, PAD_X_CAP0_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP0_DATA3, PAD_X_CAP0_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA4, PAD_X_CAP0_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA5, PAD_X_CAP0_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA6, PAD_X_CAP0_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA7, PAD_X_CAP0_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_CLK, PAD_X_CAP1_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA0, PAD_X_CAP1_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA1, PAD_X_CAP1_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA2, PAD_X_CAP1_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP1_DATA3, PAD_X_CAP1_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA4, PAD_X_CAP1_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP1_DATA5, PAD_X_CAP1_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP1_DATA6, PAD_X_CAP1_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN},},
{PCTRL_X_CAP1_DATA7, PAD_X_CAP1_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN},},
{PCTRL_X_CAP2_CLK, PAD_X_CAP2_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA0, PAD_X_CAP2_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA1, PAD_X_CAP2_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA2, PAD_X_CAP2_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA3, PAD_X_CAP2_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA4, PAD_X_CAP2_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA5, PAD_X_CAP2_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA6, PAD_X_CAP2_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP2_DATA7, PAD_X_CAP2_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_CLK, PAD_X_CAP3_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA0, PAD_X_CAP3_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA1, PAD_X_CAP3_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA2, PAD_X_CAP3_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA3, PAD_X_CAP3_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA4, PAD_X_CAP3_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA5, PAD_X_CAP3_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA6, PAD_X_CAP3_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP3_DATA7, PAD_X_CAP3_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2S0_SCLK, PAD_X_I2S0_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_FS, PAD_X_I2S0_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_RXD, PAD_X_I2S0_RXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_TXD, PAD_X_I2S0_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S1_SCLK, PAD_X_I2S1_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_FS, PAD_X_I2S1_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_RXD, PAD_X_I2S1_RXD, {PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_I2S1_TXD, PAD_X_I2S1_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
{PCTRL_X_EXT1_CLK, PAD_X_EXT1_CLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_I2C1_SCL, PAD_X_I2C1_SCL, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
};
static struct pinmux_pad_table eth_pad_mapping[] = {
{PCTRL_X_EPHY0_REFCLK, PAD_X_EPHY0_REFCLK, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_EPHY0_RESET, PAD_X_EPHY0_RESET, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RX_CLK, PAD_X_RGMII0_RX_CLK, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RX_CTL, PAD_X_RGMII0_RX_CTL, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD0, PAD_X_RGMII0_RXD0, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD1, PAD_X_RGMII0_RXD1, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD2, PAD_X_RGMII0_RXD2, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_RXD3, PAD_X_RGMII0_RXD3, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TX_CLK, PAD_X_RGMII0_TX_CLK, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TX_CTL, PAD_X_RGMII0_TX_CTL, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD0, PAD_X_RGMII0_TXD0, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD1, PAD_X_RGMII0_TXD1, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD2, PAD_X_RGMII0_TXD2, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_TXD3, PAD_X_RGMII0_TXD3, {PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_MDC, PAD_X_RGMII0_MDC, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_RGMII0_MDIO, PAD_X_RGMII0_MDIO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_CLK, PAD_X_CAP0_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA0, PAD_X_CAP0_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP0_DATA1, PAD_X_CAP0_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA2, PAD_X_CAP0_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP0_DATA3, PAD_X_CAP0_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA4, PAD_X_CAP0_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA5, PAD_X_CAP0_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA6, PAD_X_CAP0_DATA6, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP0_DATA7, PAD_X_CAP0_DATA7, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_CLK, PAD_X_CAP1_CLK, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA0, PAD_X_CAP1_DATA0, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA1, PAD_X_CAP1_DATA1, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA2, PAD_X_CAP1_DATA2, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CAP1_DATA3, PAD_X_CAP1_DATA3, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CAP1_DATA4, PAD_X_CAP1_DATA4, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_CAP1_DATA5, PAD_X_CAP1_DATA5, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
};
static struct pinmux_pad_table misc_pad_mapping[] = {
{PCTRL_X_CPU_NTRST, PAD_X_CPU_NTRST, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_CPU_TDI, PAD_X_CPU_TDI, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TMS, PAD_X_CPU_TMS, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TCK, PAD_X_CPU_TCK, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_CPU_TDO, PAD_X_CPU_TDO, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_VGA_HS, PAD_X_VGA_HS, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_VGA_VS, PAD_X_VGA_VS, {PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_GPIO_3, PAD_X_GPIO_3, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_4, PAD_X_GPIO_4, {PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_GPIO_5, PAD_X_GPIO_5, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_6, PAD_X_GPIO_6, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_7, PAD_X_GPIO_7, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_8, PAD_X_GPIO_8, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_GPIO_9, PAD_X_GPIO_9, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_PULLUP, PAD_NONE},},
{PCTRL_X_UART0_RTS, PAD_X_UART0_RTS, {PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_UART1_SIN, PAD_X_UART1_SIN, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_HDMI0_HPD, PAD_X_HDMI0_HPD, {PAD_PULLDOWN, PAD_PULLDOWN, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_I2S0_SCLK, PAD_X_I2S0_SCLK, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_FS, PAD_X_I2S0_FS, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_RXD, PAD_X_I2S0_RXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
{PCTRL_X_I2S0_TXD, PAD_X_I2S0_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLUP},},
};
static struct pinmux_pad_table pwm_pad_mapping[] = {
{PCTRL_X_PWM0_OUT, PAD_X_PWM0_OUT, {PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE},},
{PCTRL_X_PWM1_OUT, PAD_X_PWM1_OUT, {PAD_PULLUP, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_NONE, PAD_PULLDOWN, PAD_NONE},},
{PCTRL_X_I2S1_TXD, PAD_X_I2S1_TXD, {PAD_PULLDOWN, PAD_PULLUP, PAD_PULLUP, PAD_PULLUP, PAD_NONE, PAD_PULLUP, PAD_PULLUP, PAD_PULLDOWN},},
};
#ifndef __FREERTOS
static u32 pinmux_config_decode(u32 reg_order)
{
REGVALUE reg_value;
UINT32 offset, bitmask, bitoffset;
unsigned long flags = 0;
offset = (reg_order >> 3)<<2;
bitoffset = (reg_order & 0x7)<<2;
bitmask = ~(0x7 << bitoffset);
loc_cpu(flags);
reg_value = HW_TOP_GETREG(TOP_CTRL0_REG_OFS + offset);
unl_cpu(flags);
return (reg_value & ~bitmask) >> bitoffset;
}
void pinmux_parsing(struct nvt_pinctrl_info *info)
{
u32 config, i, j;
u8 config_fail_check;
REGVALUE reg_value;
unsigned long flags = 0;
/*uart*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_UART].pin_function = PIN_FUNC_UART;
info->top_pinmux[PIN_FUNC_UART].config = 0x0;
for (i = 0; i < uart0_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uart0[i][j+1]);
if (config != uart0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < uart0rts_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uart0rts[i][j+1]);
if (config != uart0rts[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CH0_CTSRTS << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < uart1_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uart1[i][j+1]);
if (config != uart1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < uart2_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uart2[i][j+1]);
if (config != uart2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < uart3_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uart3[i][j+1]);
if (config != uart3[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CH3_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < uartceva_pincnt; i++) {
for (j = 0; j < uart_pinno; j++) {
config = pinmux_config_decode(uartceva[i][j+1]);
if (config != uartceva[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_UART].config |= (PIN_UART_CFG_CEVA_1ST_PINMUX << i);
config_fail_check = 0;
}
/*i2c*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_I2C].pin_function = PIN_FUNC_I2C;
info->top_pinmux[PIN_FUNC_I2C].config = 0x0;
for (i = 0; i < i2c0_pincnt; i++) {
for (j = 0; j < i2c_pinno; j++) {
config = pinmux_config_decode(i2c0[i][j+1]);
if (config != i2c0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_I2C].config |= (PIN_I2C_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < i2c1_pincnt; i++) {
for (j = 0; j < i2c_pinno; j++) {
config = pinmux_config_decode(i2c1[i][j+1]);
if (config != i2c1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_I2C].config |= (PIN_I2C_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < i2c2_pincnt; i++) {
for (j = 0; j < i2c_pinno; j++) {
config = pinmux_config_decode(i2c2[i][j+1]);
if (config != i2c2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_I2C].config |= (PIN_I2C_CFG_CH2_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < i2c3_pincnt; i++) {
for (j = 0; j < i2c_pinno; j++) {
config = pinmux_config_decode(i2c3[i][j+1]);
if (config != i2c3[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_I2C].config |= (PIN_I2C_CFG_HDMI_1ST_PINMUX << i);
config_fail_check = 0;
}
/*sdio*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_SDIO].pin_function = PIN_FUNC_SDIO;
info->top_pinmux[PIN_FUNC_SDIO].config = 0x0;
for (i = 0; i < sdio_pincnt; i++) {
for (j = 0; j < sdio_pinno; j++) {
config = pinmux_config_decode(sdio0[i][j+1]);
if (config != sdio0[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < sdio_pinno2; j++) {
config = pinmux_config_decode(sdio0_2[i][j+1]);
if (config != sdio0_2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SDIO].config |= (PIN_SDIO_CFG_1ST_PINMUX << i);
config_fail_check = 0;
}
/*spi*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_SPI].pin_function = PIN_FUNC_SPI;
info->top_pinmux[PIN_FUNC_SPI].config = 0x0;
for (i = 0; i < spi_pincnt; i++) {
for (j = 0; j < spi_pinno; j++) {
config = pinmux_config_decode(spi[i][j+1]);
if (config != spi[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SPI].config |= (PIN_SPI_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
/*extclk*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_EXTCLK].pin_function = PIN_FUNC_EXTCLK;
info->top_pinmux[PIN_FUNC_EXTCLK].config = 0x0;
for (i = 0; i < extclk_pincnt; i++) {
for (j = 0; j < extclk_pinno; j++) {
config = pinmux_config_decode(extclk0[i][j+1]);
if (config != extclk0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_EXTCLK].config |= (PIN_EXTCLK_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < extclk_pincnt; i++) {
for (j = 0; j < extclk_pinno; j++) {
config = pinmux_config_decode(extclk1[i][j+1]);
if (config != extclk1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_EXTCLK].config |= (PIN_EXTCLK_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
/*ssp*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_SSP].pin_function = PIN_FUNC_SSP;
info->top_pinmux[PIN_FUNC_SSP].config = 0x0;
for (i = 0; i < ssp0_pincnt; i++) {
for (j = 0; j < ssp_pinno; j++) {
config = pinmux_config_decode(ssp0[i][j+1]);
if (config != ssp0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < ssp1_pincnt; i++) {
for (j = 0; j < ssp_pinno; j++) {
config = pinmux_config_decode(ssp1[i][j+1]);
if (config != ssp1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < ssp2_pincnt; i++) {
for (j = 0; j < ssp_pinno; j++) {
config = pinmux_config_decode(ssp2[i][j+1]);
if (config != ssp2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_CH2_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < 1; i++) {
for (j = 0; j < ssp2_2_pinno; j++) {
config = pinmux_config_decode(ssp2_2[i][j+1]);
if (config != ssp2_2[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < ssp2_3_pinno; j++) {
config = pinmux_config_decode(ssp2_3[i][j+1]);
if (config != ssp2_3[i][0]) {
config_fail_check = 1;
break;
}
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= PIN_SSP_CFG_CH2_3RD_PINMUX;
config_fail_check = 0;
for (i = 1; i < ssp2_2_pincnt; i++) {
for (j = 0; j < ssp2_2_pinno; j++) {
config = pinmux_config_decode(ssp2_2[i][j+1]);
if (config != ssp2_2[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < ssp2_3_pinno; j++) {
config = pinmux_config_decode(ssp2_3[i][j+1]);
if (config != ssp2_3[i][0]) {
config_fail_check = 1;
break;
}
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= PIN_SSP_CFG_CH2_3RD_PINMUX;
config_fail_check = 0;
for (i = 0; i < sspmclk0_pincnt; i++) {
for (j = 0; j < sspmclk_pinno; j++) {
config = pinmux_config_decode(sspmclk0[i][j+1]);
if (config != sspmclk0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_MCLK0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < sspmclk1_pincnt; i++) {
for (j = 0; j < sspmclk_pinno; j++) {
config = pinmux_config_decode(sspmclk1[i][j+1]);
if (config != sspmclk1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_MCLK1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < sspmclk2_pincnt; i++) {
for (j = 0; j < sspmclk_pinno; j++) {
config = pinmux_config_decode(sspmclk2[i][j+1]);
if (config != sspmclk2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_SSP].config |= (PIN_SSP_CFG_MCLK2_1ST_PINMUX << i);
config_fail_check = 0;
}
/*lcd*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_LCD].pin_function = PIN_FUNC_LCD;
info->top_pinmux[PIN_FUNC_LCD].config = 0x0;
for (i = 0; i < lcd_pincnt; i++) {
for (j = 0; j < lcd_pinno; j++) {
config = pinmux_config_decode(lcd[i][j+1]);
if (config != lcd[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < lcd_2_pinno; j++) {
config = pinmux_config_decode(lcd_2[i][j+1]);
if (config != lcd_2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_LCD].config |= (PIN_LCD_CFG_LCD310_BT1120_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < lcd888_pincnt; i++) {
for (j = 0; j < lcd_pinno; j++) {
config = pinmux_config_decode(lcd888[i][j+1]);
if (config != lcd888[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < lcd888_2_pinno; j++) {
config = pinmux_config_decode(lcd888_2[i][j+1]);
if (config != lcd888_2[i][0]) {
config_fail_check = 1;
break;
}
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_LCD].config |= PIN_LCD_CFG_LCD310_RGB888_1ST_PINMUX;
/*remote*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_REMOTE].pin_function = PIN_FUNC_REMOTE;
info->top_pinmux[PIN_FUNC_REMOTE].config = 0x0;
for (i = 0; i < remote_pincnt; i++) {
for (j = 0; j < remote_pinno; j++) {
config = pinmux_config_decode(remote[i][j+1]);
if (config != remote[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_REMOTE].config |= (PIN_REMOTE_CFG_1ST_PINMUX << i);
config_fail_check = 0;
}
/*vcap*/
info->top_pinmux[PIN_FUNC_VCAP].pin_function = PIN_FUNC_VCAP;
info->top_pinmux[PIN_FUNC_VCAP].config = 0x0;
//bt1120_0
config_fail_check = 0;
for (i = 0; i < bt1120_0_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < bt1120_pinno; j++) {
config = pinmux_config_decode(bt1120_0[i][j+1]);
if (config != bt1120_0[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < bt1120clk_pinno; j++) {
config = pinmux_config_decode(bt1120clk_0[i][j+1]);
if (config != bt1120clk_0[i][0]) {
config_fail_check = 1;
break;
}
}
if ((config_fail_check == 0) && (vcap_bt1120_record[0] & (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX << i))) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX << i);
break;
} else {
config_fail_check = 1;
}
}
if (config_fail_check == 1) {
//ts0
config_fail_check = 0;
for (i = 0; i < ts_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < ts_pinno; j++) {
config = pinmux_config_decode(ts0[i][j+1]);
if (config != ts0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap0[vcap0_pincnt-1][j+1]);
if (config != vcap0[vcap0_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap0clk[vcap0_pincnt-1][j+1]);
if (config != vcap0clk[vcap0_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= PIN_VCAP_CFG_TSI0_1ST_PINMUX;
break;
}
}
}
if (config_fail_check == 1) {
//vcap0
config_fail_check = 0;
for (i = 0; i < vcap0_pincnt-1; i++) {
config_fail_check = 0;
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap0[i][j+1]);
if (config != vcap0[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap0clk[i][j+1]);
if (config != vcap0clk[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_CH0_1ST_PINMUX << i);
break;
}
}
}
//ts1
config_fail_check = 0;
for (i = 0; i < ts_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < ts_pinno; j++) {
config = pinmux_config_decode(ts1[i][j+1]);
if (config != ts1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap1[vcap1_pincnt-1][j+1]);
if (config != vcap1[vcap1_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap1clk[vcap1_pincnt-1][j+1]);
if (config != vcap1clk[vcap1_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= PIN_VCAP_CFG_TSI1_1ST_PINMUX;
break;
}
}
}
if (config_fail_check == 1) {
//vcap1
config_fail_check = 0;
for (i = 0; i < vcap1_pincnt-1; i++) {
config_fail_check = 0;
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap1[i][j+1]);
if (config != vcap1[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap1clk[i][j+1]);
if (config != vcap1clk[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_CH1_1ST_PINMUX << i);
break;
}
}
}
}
//bt1120_1
config_fail_check = 0;
for (i = 0; i < bt1120_1_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < bt1120_pinno; j++) {
config = pinmux_config_decode(bt1120_1[i][j+1]);
if (config != bt1120_1[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < bt1120clk_pinno; j++) {
config = pinmux_config_decode(bt1120clk_1[i][j+1]);
if (config != bt1120clk_1[i][0]) {
config_fail_check = 1;
break;
}
}
if ((config_fail_check == 0) && (vcap_bt1120_record[1] & (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX << i))) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX << i);
break;
} else {
config_fail_check = 1;
}
}
if (config_fail_check == 1) {
//ts2
config_fail_check = 0;
for (i = 0; i < ts_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < ts_pinno; j++) {
config = pinmux_config_decode(ts2[i][j+1]);
if (config != ts2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap2[vcap2_pincnt-1][j+1]);
if (config != vcap2[vcap2_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap2clk[vcap2_pincnt-1][j+1]);
if (config != vcap2clk[vcap2_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= PIN_VCAP_CFG_TSI2_1ST_PINMUX;
break;
}
}
}
if (config_fail_check == 1) {
//vcap2
config_fail_check = 0;
for (i = 0; i < vcap2_pincnt-1; i++) {
config_fail_check = 0;
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap2[i][j+1]);
if (config != vcap2[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap2clk[i][j+1]);
if (config != vcap2clk[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_CH2_1ST_PINMUX << i);
break;
}
}
}
//ts3
config_fail_check = 0;
for (i = 0; i < ts_pincnt; i++) {
config_fail_check = 0;
for (j = 0; j < ts_pinno; j++) {
config = pinmux_config_decode(ts3[i][j+1]);
if (config != ts3[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap3[vcap3_pincnt-1][j+1]);
if (config != vcap3[vcap3_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap3clk[vcap3_pincnt-1][j+1]);
if (config != vcap3clk[vcap3_pincnt-1][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= PIN_VCAP_CFG_TSI3_1ST_PINMUX;
break;
}
}
}
if (config_fail_check == 1) {
//vcap3
config_fail_check = 0;
for (i = 0; i < vcap3_pincnt-1; i++) {
config_fail_check = 0;
for (j = 0; j < vcap_pinno; j++) {
config = pinmux_config_decode(vcap3[i][j+1]);
if (config != vcap3[i][0]) {
config_fail_check = 1;
break;
}
}
for (j = 0; j < vcapclk_pinno; j++) {
config = pinmux_config_decode(vcap3clk[i][j+1]);
if (config != vcap3clk[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0) {
info->top_pinmux[PIN_FUNC_VCAP].config |= (PIN_VCAP_CFG_CH3_1ST_PINMUX << i);
break;
}
}
}
}
/*eth*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_ETH].pin_function = PIN_FUNC_ETH;
info->top_pinmux[PIN_FUNC_ETH].config = 0x0;
for (i = 0; i < eth_pincnt; i++) {
for (j = 0; j < rgmii_pinno; j++) {
config = pinmux_config_decode(rgmii[i][j+1]);
if (config != rgmii[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_ETH].config |= (PIN_ETH_CFG_RGMII_1ST_PINMUX << i);
config_fail_check = 0;
for (j = 0; j < rmii_pinno; j++) {
config = pinmux_config_decode(rmii[i][j+1]);
if (config != rmii[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_ETH].config |= (PIN_ETH_CFG_RMII_1ST_PINMUX << i);
config_fail_check = 0;
}
for (i = 0; i < eth_pincnt; i++) {
for (j = 0; j < eth_pincnt; j++) {
if (eth_phy_record & (PIN_ETH_CFG_EXTPHYCLK_1ST_PINMUX << i)) {
info->top_pinmux[PIN_FUNC_ETH].config |= (PIN_ETH_CFG_EXTPHYCLK_1ST_PINMUX << i);
break;
} else {
config = pinmux_config_decode(phy_clk_out[i][j][2]);
if ((config == phy_clk_out[i][j][1])
&& (info->top_pinmux[PIN_FUNC_ETH].config & phy_clk_out[i][j][0])) {
info->top_pinmux[PIN_FUNC_ETH].config |= (PIN_ETH_CFG_EXTPHYCLK_1ST_PINMUX << i);
break;
}
}
}
}
if (HW_TOP_GETREG(TOP_ETH_MUX_REG_OFS) & 0x1)
info->top_pinmux[PIN_FUNC_ETH].config |= PIN_ETH_CFG_PHY_ROUTE_ETH0;
else if (eth_mac_record == ETH_MAC1)
info->top_pinmux[PIN_FUNC_ETH].config |= PIN_ETH_CFG_PHY_ROUTE_ETH1;
/*misc*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_MISC].pin_function = PIN_FUNC_MISC;
info->top_pinmux[PIN_FUNC_MISC].config = 0x0;
for (i = 0; i < cpuice_pincnt; i++) {
for (j = 0; j < cpuice_pinno; j++) {
config = pinmux_config_decode(cpuice[i][j+1]);
if (config != cpuice[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_CPU_ICE << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < vgahs_pincnt; i++) {
for (j = 0; j < vgahs_pinno; j++) {
config = pinmux_config_decode(vgahs[i][j+1]);
if (config != vgahs[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_VGA_HS << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < vgavs_pincnt; i++) {
for (j = 0; j < vgavs_pinno; j++) {
config = pinmux_config_decode(vgavs[i][j+1]);
if (config != vgavs[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_VGA_VS << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < bmc_pincnt; i++) {
for (j = 0; j < bmc_pinno; j++) {
config = pinmux_config_decode(bmc[i][j+1]);
if (config != bmc[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_BMC << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < rtccal_pincnt; i++) {
for (j = 0; j < rtccal_pinno; j++) {
config = pinmux_config_decode(rtccal[i][j+1]);
if (config != rtccal[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_RTC_CAL_OUT << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < dacramp_pincnt; i++) {
for (j = 0; j < dacramp_pinno; j++) {
config = pinmux_config_decode(dacramp[i][j+1]);
if (config != dacramp[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_DAC_RAMP_TP << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < hdmiplg_pincnt; i++) {
for (j = 0; j < hdmiplg_pinno; j++) {
config = pinmux_config_decode(hdmiplg[i][j+1]);
if (config != hdmiplg[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_HDMI_HOTPLUG << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < dspice_pincnt; i++) {
for (j = 0; j < dspice_pinno; j++) {
config = pinmux_config_decode(dspice[i][j+1]);
if (config != dspice[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_DSP_ICE_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < ethled_pincnt; i++) {
for (j = 0; j < ethled_pinno; j++) {
config = pinmux_config_decode(ethled[i][j+1]);
if (config != ethled[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_ETH_LED_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < sataled_pincnt; i++) {
for (j = 0; j < sataled_pinno; j++) {
config = pinmux_config_decode(sataled[i][j+1]);
if (config != sataled[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_MISC].config |= (PIN_MISC_CFG_SATA_LED_1ST_PINMUX << i);
config_fail_check = 0;
}
/*pwm*/
config_fail_check = 0;
info->top_pinmux[PIN_FUNC_PWM].pin_function = PIN_FUNC_PWM;
info->top_pinmux[PIN_FUNC_PWM].config = 0x0;
for (i = 0; i < pwm0_pincnt; i++) {
for (j = 0; j < pwm_pinno; j++) {
config = pinmux_config_decode(pwm0[i][j+1]);
if (config != pwm0[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_PWM].config |= (PIN_PWM_CFG_CH0_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < pwm1_pincnt; i++) {
for (j = 0; j < pwm_pinno; j++) {
config = pinmux_config_decode(pwm1[i][j+1]);
if (config != pwm1[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_PWM].config |= (PIN_PWM_CFG_CH1_1ST_PINMUX << i);
config_fail_check = 0;
}
config_fail_check = 0;
for (i = 0; i < pwm2_pincnt; i++) {
for (j = 0; j < pwm_pinno; j++) {
config = pinmux_config_decode(pwm2[i][j+1]);
if (config != pwm2[i][0]) {
config_fail_check = 1;
break;
}
}
if (config_fail_check == 0)
info->top_pinmux[PIN_FUNC_PWM].config |= (PIN_PWM_CFG_CH2_1ST_PINMUX << i);
config_fail_check = 0;
}
/*vcap_int*/
loc_cpu(flags);
reg_value = HW_TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
unl_cpu(flags);
info->top_pinmux[PIN_FUNC_VCAPINT].pin_function = PIN_FUNC_VCAPINT;
info->top_pinmux[PIN_FUNC_VCAPINT].config = 0x0;
switch (reg_value & 0xF) {
case 0x0:
if (vcap_int_record[0] == PIN_VCAPINT_CFG_CAP0_CFG_0)
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP0_CFG_0;
break;
case 0x2:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP0_CFG_2;
break;
case 0x3:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP0_CFG_3;
break;
case 0x4:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP0_CFG_4;
break;
default:
break;
}
switch ((reg_value >> 4) & 0xF) {
case 0x0:
if (vcap_int_record[1] == PIN_VCAPINT_CFG_CAP1_CFG_0)
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP1_CFG_0;
break;
case 0x2:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP1_CFG_2;
break;
case 0x3:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP1_CFG_3;
break;
case 0x4:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP1_CFG_4;
break;
default:
break;
}
switch ((reg_value >> 8) & 0xF) {
case 0x0:
if (vcap_int_record[2] == PIN_VCAPINT_CFG_CAP2_CFG_0)
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP2_CFG_0;
break;
case 0x1:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP2_CFG_1;
break;
case 0x2:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP2_CFG_2;
break;
case 0x3:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP2_CFG_3;
break;
case 0x4:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP2_CFG_4;
break;
default:
break;
}
switch ((reg_value >> 12) & 0xF) {
case 0x0:
if (vcap_int_record[3] == PIN_VCAPINT_CFG_CAP3_CFG_0)
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP3_CFG_0;
break;
case 0x1:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP3_CFG_1;
break;
case 0x2:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP3_CFG_2;
break;
case 0x3:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP3_CFG_3;
break;
case 0x4:
info->top_pinmux[PIN_FUNC_VCAPINT].config |= PIN_VCAPINT_CFG_CAP3_CFG_4;
break;
default:
break;
}
}
#endif
uint32_t pinmux_get_config(PIN_FUNC pinfunc)
{
uint32_t ret = 0;
if(pinfunc < PIN_FUNC_MAX) {
ret = pin_config[pinfunc];
}
return ret;
}
ER pinmux_config_uart(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* UART0 */
for(i=0; i<uart0_pincnt; i++) {
if(config & (PIN_UART_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uart0[i][j+1]>>3)<<2;
bitoffset = (uart0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uart0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uart0[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uart0[i][0]]);
break;
}
}
}
break;
}
}
/* UART0 RTSCTS */
for(i=0; i<uart0rts_pincnt; i++) {
if(config & (PIN_UART_CFG_CH0_CTSRTS<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uart0rts[i][j+1]>>3)<<2;
bitoffset = (uart0rts[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART0 RTSCTS conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uart0rts[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uart0rts[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uart0rts[i][0]]);
break;
}
}
}
break;
}
}
/* UART1 */
for(i=0; i<uart1_pincnt; i++) {
if(config & (PIN_UART_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uart1[i][j+1]>>3)<<2;
bitoffset = (uart1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uart1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uart1[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uart1[i][0]]);
break;
}
}
}
break;
}
}
/* UART2 */
for(i=0; i<uart2_pincnt; i++) {
if(config & (PIN_UART_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uart2[i][j+1]>>3)<<2;
bitoffset = (uart2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uart2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uart2[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uart2[i][0]]);
break;
}
}
}
break;
}
}
/* UART3 */
for(i=0; i<uart3_pincnt; i++) {
if(config & (PIN_UART_CFG_CH3_1ST_PINMUX<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uart3[i][j+1]>>3)<<2;
bitoffset = (uart3[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART3 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uart3[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uart3[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uart3[i][0]]);
break;
}
}
}
break;
}
}
/* UART CEVA */
for(i=0; i<uartceva_pincnt; i++) {
if(config & (PIN_UART_CFG_CEVA_1ST_PINMUX<<i)) {
for(j=0;j<uart_pinno;j++) {
offset = (uartceva[i][j+1]>>3)<<2;
bitoffset = (uartceva[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: UART CEVA conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((uartceva[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(uart_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (uart_pad_mapping[k].pinmux_pin == uartceva[i][j+1]) {
pad_set_pull_updown(uart_pad_mapping[k].pad_pin, uart_pad_mapping[k].pad_value[uartceva[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_UART] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_i2c(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* I2C0 */
for(i=0; i<i2c0_pincnt; i++) {
if(config & (PIN_I2C_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<i2c_pinno;j++) {
offset = (i2c0[i][j+1]>>3)<<2;
bitoffset = (i2c0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: I2C0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((i2c0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(i2c_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (i2c_pad_mapping[k].pinmux_pin == i2c0[i][j+1]) {
pad_set_pull_updown(i2c_pad_mapping[k].pad_pin, i2c_pad_mapping[k].pad_value[i2c0[i][0]]);
break;
}
}
}
break;
}
}
/* I2C1 */
for(i=0; i<i2c1_pincnt; i++) {
if(config & (PIN_I2C_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<i2c_pinno;j++) {
offset = (i2c1[i][j+1]>>3)<<2;
bitoffset = (i2c1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: I2C1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((i2c1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(i2c_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (i2c_pad_mapping[k].pinmux_pin == i2c1[i][j+1]) {
pad_set_pull_updown(i2c_pad_mapping[k].pad_pin, i2c_pad_mapping[k].pad_value[i2c1[i][0]]);
break;
}
}
}
break;
}
}
/* I2C2 */
for(i=0; i<i2c2_pincnt; i++) {
if(config & (PIN_I2C_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<i2c_pinno;j++) {
offset = (i2c2[i][j+1]>>3)<<2;
bitoffset = (i2c2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: I2C2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((i2c2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(i2c_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (i2c_pad_mapping[k].pinmux_pin == i2c2[i][j+1]) {
pad_set_pull_updown(i2c_pad_mapping[k].pad_pin, i2c_pad_mapping[k].pad_value[i2c2[i][0]]);
break;
}
}
}
break;
}
}
/* I2C3 */
for(i=0; i<i2c3_pincnt; i++) {
if(config & (PIN_I2C_CFG_HDMI_1ST_PINMUX<<i)) {
for(j=0;j<i2c_pinno;j++) {
offset = (i2c3[i][j+1]>>3)<<2;
bitoffset = (i2c3[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: I2C3 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((i2c3[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(i2c_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (i2c_pad_mapping[k].pinmux_pin == i2c3[i][j+1]) {
pad_set_pull_updown(i2c_pad_mapping[k].pad_pin, i2c_pad_mapping[k].pad_value[i2c3[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_I2C] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_sdio(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* SDIO0 */
for(i=0; i<sdio_pincnt; i++) {
if(config & (PIN_SDIO_CFG_1ST_PINMUX<<i)) {
for(j=0;j<sdio_pinno;j++) {
offset = (sdio0[i][j+1]>>3)<<2;
bitoffset = (sdio0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SDIO0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sdio0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(sdio_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (sdio_pad_mapping[k].pinmux_pin == sdio0[i][j+1]) {
pad_set_pull_updown(sdio_pad_mapping[k].pad_pin, sdio_pad_mapping[k].pad_value[sdio0[i][0]]);
break;
}
}
}
break;
}
}
/* SDIO0_2 */
for(i=0; i<sdio_pincnt; i++) {
if(config & (PIN_SDIO_CFG_1ST_PINMUX<<i)) {
for(j=0;j<sdio_pinno2;j++) {
offset = (sdio0_2[i][j+1]>>3)<<2;
bitoffset = (sdio0_2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SDIO0_2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sdio0_2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(sdio_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (sdio_pad_mapping[k].pinmux_pin == sdio0_2[i][j+1]) {
pad_set_pull_updown(sdio_pad_mapping[k].pad_pin, sdio_pad_mapping[k].pad_value[sdio0_2[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_SDIO] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_spi(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* SPI */
for(i=0; i<spi_pincnt; i++) {
if(config & (PIN_SPI_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<spi_pinno;j++) {
offset = (spi[i][j+1]>>3)<<2;
bitoffset = (spi[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SPI conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((spi[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(spi_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (spi_pad_mapping[k].pinmux_pin == spi[i][j+1]) {
pad_set_pull_updown(spi_pad_mapping[k].pad_pin, spi_pad_mapping[k].pad_value[spi[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_SPI] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_extclk(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* EXTCLK0 */
for(i=0; i<extclk_pincnt; i++) {
if(config & (PIN_EXTCLK_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<extclk_pinno;j++) {
offset = (extclk0[i][j+1]>>3)<<2;
bitoffset = (extclk0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: EXTCLK0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((extclk0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(extclk_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (extclk_pad_mapping[k].pinmux_pin == extclk0[i][j+1]) {
pad_set_pull_updown(extclk_pad_mapping[k].pad_pin, extclk_pad_mapping[k].pad_value[extclk0[i][0]]);
break;
}
}
}
/* break; EXT CLK allow to output multiple path */
}
}
/* EXTCLK1 */
for(i=0; i<extclk_pincnt; i++) {
if(config & (PIN_EXTCLK_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<extclk_pinno;j++) {
offset = (extclk1[i][j+1]>>3)<<2;
bitoffset = (extclk1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: EXTCLK1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((extclk1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(extclk_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (extclk_pad_mapping[k].pinmux_pin == extclk1[i][j+1]) {
pad_set_pull_updown(extclk_pad_mapping[k].pad_pin, extclk_pad_mapping[k].pad_value[extclk1[i][0]]);
break;
}
}
}
/* break; EXT CLK allow to output multiple path */
}
}
pin_config[PIN_FUNC_EXTCLK] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_ssp(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* SSP0 */
for(i=0; i<ssp0_pincnt; i++) {
if(config & (PIN_SSP_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<ssp_pinno;j++) {
offset = (ssp0[i][j+1]>>3)<<2;
bitoffset = (ssp0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSP0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ssp0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == ssp0[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[ssp0[i][0]]);
break;
}
}
}
break;
}
}
/* SSP1 */
for(i=0; i<ssp1_pincnt; i++) {
if(config & (PIN_SSP_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<ssp_pinno;j++) {
offset = (ssp1[i][j+1]>>3)<<2;
bitoffset = (ssp1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSP1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ssp1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == ssp1[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[ssp1[i][0]]);
break;
}
}
}
break;
}
}
/* SSP2 */
for(i=0; i<ssp2_pincnt; i++) {
if(config & (PIN_SSP_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<ssp_pinno;j++) {
offset = (ssp2[i][j+1]>>3)<<2;
bitoffset = (ssp2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSP2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ssp2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == ssp2[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[ssp2[i][0]]);
break;
}
}
}
break;
}
}
/* SSP2_2 */
for(i=0; i<ssp2_2_pincnt; i++) {
if(config & (PIN_SSP_CFG_CH2_3RD_PINMUX<<i)) {
for(j=0;j<ssp2_2_pinno;j++) {
offset = (ssp2_2[i][j+1]>>3)<<2;
bitoffset = (ssp2_2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSP2_2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ssp2_2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == ssp2_2[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[ssp2_2[i][0]]);
break;
}
}
}
break;
}
}
/* SSP2_3 */
for(i=0; i<ssp2_3_pincnt; i++) {
if(config & (PIN_SSP_CFG_CH2_3RD_PINMUX<<i)) {
for(j=0;j<ssp2_3_pinno;j++) {
offset = (ssp2_3[i][j+1]>>3)<<2;
bitoffset = (ssp2_3[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSP2_3 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ssp2_3[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == ssp2_3[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[ssp2_3[i][0]]);
break;
}
}
}
break;
}
}
/* SSPMCLK0 */
for(i=0; i<sspmclk0_pincnt; i++) {
if(config & (PIN_SSP_CFG_MCLK0_1ST_PINMUX<<i)) {
for(j=0;j<sspmclk_pinno;j++) {
offset = (sspmclk0[i][j+1]>>3)<<2;
bitoffset = (sspmclk0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSPMCLK0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sspmclk0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == sspmclk0[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[sspmclk0[i][0]]);
break;
}
}
}
break;
}
}
/* SSPMCLK1 */
for(i=0; i<sspmclk1_pincnt; i++) {
if(config & (PIN_SSP_CFG_MCLK1_1ST_PINMUX<<i)) {
for(j=0;j<sspmclk_pinno;j++) {
offset = (sspmclk1[i][j+1]>>3)<<2;
bitoffset = (sspmclk1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSPMCLK1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sspmclk1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == sspmclk1[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[sspmclk1[i][0]]);
break;
}
}
}
break;
}
}
/* SSPMCLK2 */
for(i=0; i<sspmclk2_pincnt; i++) {
if(config & (PIN_SSP_CFG_MCLK2_1ST_PINMUX<<i)) {
for(j=0;j<sspmclk_pinno;j++) {
offset = (sspmclk2[i][j+1]>>3)<<2;
bitoffset = (sspmclk2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SSPMCLK2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sspmclk2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(ssp_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (ssp_pad_mapping[k].pinmux_pin == sspmclk2[i][j+1]) {
pad_set_pull_updown(ssp_pad_mapping[k].pad_pin, ssp_pad_mapping[k].pad_value[sspmclk2[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_SSP] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_lcd(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* LCD */
for(i=0; i<lcd_pincnt; i++) {
if(config & (PIN_LCD_CFG_LCD310_BT1120_1ST_PINMUX<<i)) {
for(j=0;j<lcd_pinno;j++) {
offset = (lcd[i][j+1]>>3)<<2;
bitoffset = (lcd[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: LCD conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((lcd[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(lcd_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (lcd_pad_mapping[k].pinmux_pin == lcd[i][j+1]) {
pad_set_pull_updown(lcd_pad_mapping[k].pad_pin, lcd_pad_mapping[k].pad_value[lcd[i][0]]);
break;
}
}
}
break;
}
}
/* LCD_2 */
for(i=0; i<lcd_pincnt; i++) {
if(config & (PIN_LCD_CFG_LCD310_BT1120_1ST_PINMUX<<i)) {
for(j=0;j<lcd_2_pinno;j++) {
offset = (lcd_2[i][j+1]>>3)<<2;
bitoffset = (lcd_2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: LCD_2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((lcd_2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(lcd_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (lcd_pad_mapping[k].pinmux_pin == lcd_2[i][j+1]) {
pad_set_pull_updown(lcd_pad_mapping[k].pad_pin, lcd_pad_mapping[k].pad_value[lcd_2[i][0]]);
break;
}
}
}
break;
}
}
/* LCD888 */
for(i=0; i<lcd888_pincnt; i++) {
if(config & (PIN_LCD_CFG_LCD310_RGB888_1ST_PINMUX<<i)) {
for(j=0;j<lcd888_pinno;j++) {
offset = (lcd888[i][j+1]>>3)<<2;
bitoffset = (lcd888[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: LCD888 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((lcd888[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(lcd_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (lcd_pad_mapping[k].pinmux_pin == lcd888[i][j+1]) {
pad_set_pull_updown(lcd_pad_mapping[k].pad_pin, lcd_pad_mapping[k].pad_value[lcd888[i][0]]);
break;
}
}
}
break;
}
}
/* LCD888_2 */
for(i=0; i<lcd888_pincnt; i++) {
if(config & (PIN_LCD_CFG_LCD310_RGB888_1ST_PINMUX<<i)) {
for(j=0;j<lcd888_2_pinno;j++) {
offset = (lcd888_2[i][j+1]>>3)<<2;
bitoffset = (lcd888_2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: LCD888_2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((lcd888_2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(lcd_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (lcd_pad_mapping[k].pinmux_pin == lcd888_2[i][j+1]) {
pad_set_pull_updown(lcd_pad_mapping[k].pad_pin, lcd_pad_mapping[k].pad_value[lcd888_2[i][0]]);
break;
}
}
}
break;
}
}
if (config & PIN_LCD_CFG_LCD310_RGB888_1ST_PINMUX) {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value |= 0x3;
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
} else if (config & PIN_LCD_CFG_LCD310_BT1120_2ND_PINMUX) {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~0x3;
reg_value |= 0x1;
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
} else if (config & PIN_LCD_CFG_LCD210_BT1120_2ND_PINMUX) {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~0x3;
reg_value |= 0x2;
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
} else {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~0x3;
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
}
if (config & PIN_LCD_CFG_LCD310_BT1120_1ST_PINMUX) {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~(0x3<<4);
reg_value |= (0x1<<4);
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
} else if (config & PIN_LCD_CFG_LCD210_BT1120_1ST_PINMUX) {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~(0x3<<4);
reg_value |= (0x2<<4);
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
} else {
reg_value = TOP_GETREG(TOP_LCD_MUX_REG_OFS);
reg_value &= ~(0x3<<4);
TOP_SETREG(TOP_LCD_MUX_REG_OFS, reg_value);
}
pin_config[PIN_FUNC_LCD] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_remote(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* REMOTE */
for(i=0; i<remote_pincnt; i++) {
if(config & (PIN_REMOTE_CFG_1ST_PINMUX<<i)) {
for(j=0;j<remote_pinno;j++) {
offset = (remote[i][j+1]>>3)<<2;
bitoffset = (remote[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: REMOTE conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((remote[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(remote_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (remote_pad_mapping[k].pinmux_pin == remote[i][j+1]) {
pad_set_pull_updown(remote_pad_mapping[k].pad_pin, remote_pad_mapping[k].pad_value[remote[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_REMOTE] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_vcap(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* VCAP0 */
for(i=0; i<vcap0_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<vcap_pinno;j++) {
offset = (vcap0[i][j+1]>>3)<<2;
bitoffset = (vcap0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP0 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap0[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap0[i][0]]);
break;
}
}
}
break;
}
}
for(i=0; i<ts_pincnt; i++) {
if(config & (PIN_VCAP_CFG_TSI0_1ST_PINMUX<<i)) {
for(j=0;j<ts_pinno;j++) {
offset = (ts0[i][j+1]>>3)<<2;
bitoffset = (ts0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: TS0 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ts0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == ts0[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[ts0[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP0-CLK */
for(i=0; i<vcap0_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<vcapclk_pinno;j++) {
offset = (vcap0clk[i][j+1]>>3)<<2;
bitoffset = (vcap0clk[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP0-CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap0clk[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap0clk[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap0clk[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP1 */
for(i=0; i<vcap1_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<vcap_pinno;j++) {
offset = (vcap1[i][j+1]>>3)<<2;
bitoffset = (vcap1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP1 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap1[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap1[i][0]]);
break;
}
}
}
break;
}
}
for(i=0; i<ts_pincnt; i++) {
if(config & (PIN_VCAP_CFG_TSI1_1ST_PINMUX<<i)) {
for(j=0;j<ts_pinno;j++) {
offset = (ts1[i][j+1]>>3)<<2;
bitoffset = (ts1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: TS1 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ts1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == ts1[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[ts1[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP1-CLK */
for(i=0; i<vcap1_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<vcapclk_pinno;j++) {
offset = (vcap1clk[i][j+1]>>3)<<2;
bitoffset = (vcap1clk[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP1-CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap1clk[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap1clk[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap1clk[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP2 */
for(i=0; i<vcap2_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<vcap_pinno;j++) {
offset = (vcap2[i][j+1]>>3)<<2;
bitoffset = (vcap2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP2 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap2[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap2[i][0]]);
break;
}
}
}
break;
}
}
for(i=0; i<ts_pincnt; i++) {
if(config & (PIN_VCAP_CFG_TSI2_1ST_PINMUX<<i)) {
for(j=0;j<ts_pinno;j++) {
offset = (ts2[i][j+1]>>3)<<2;
bitoffset = (ts2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: TS2 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ts2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == ts2[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[ts2[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP2-CLK */
for(i=0; i<vcap2_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<vcapclk_pinno;j++) {
offset = (vcap2clk[i][j+1]>>3)<<2;
bitoffset = (vcap2clk[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP2-CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap2clk[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap2clk[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap2clk[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP3 */
for(i=0; i<vcap3_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH3_1ST_PINMUX<<i)) {
for(j=0;j<vcap_pinno;j++) {
offset = (vcap3[i][j+1]>>3)<<2;
bitoffset = (vcap3[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP3 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap3[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap3[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap3[i][0]]);
break;
}
}
}
break;
}
}
for(i=0; i<ts_pincnt; i++) {
if(config & (PIN_VCAP_CFG_TSI3_1ST_PINMUX<<i)) {
for(j=0;j<ts_pinno;j++) {
offset = (ts3[i][j+1]>>3)<<2;
bitoffset = (ts3[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: TS3 conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ts3[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == ts3[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[ts3[i][0]]);
break;
}
}
}
break;
}
}
/* VCAP3-CLK */
for(i=0; i<vcap3_pincnt; i++) {
if(config & (PIN_VCAP_CFG_CH3_1ST_PINMUX<<i)) {
for(j=0;j<vcapclk_pinno;j++) {
offset = (vcap3clk[i][j+1]>>3)<<2;
bitoffset = (vcap3clk[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VCAP3-CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vcap3clk[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == vcap3clk[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[vcap3clk[i][0]]);
break;
}
}
}
break;
}
}
/* BT1120_0 DATA */
for(i=0; i<bt1120_0_pincnt; i++) {
if(config & (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX<<i)) {
for(j=0;j<bt1120_pinno;j++) {
offset = (bt1120_0[i][j+1]>>3)<<2;
bitoffset = (bt1120_0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: BT1120_0 DATA conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((bt1120_0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
vcap_bt1120_record[0] |= (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX<<i);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == bt1120_0[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[bt1120_0[i][0]]);
break;
}
}
}
break;
}
}
/* BT1120_0 CLK */
for(i=0; i<bt1120_0_pincnt; i++) {
if(config & (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX<<i)) {
for(j=0;j<bt1120clk_pinno;j++) {
offset = (bt1120clk_0[i][j+1]>>3)<<2;
bitoffset = (bt1120clk_0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: BT1120_0 CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((bt1120clk_0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
vcap_bt1120_record[0] |= (PIN_VCAP_CFG_BT1120_0_1ST_PINMUX<<i);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == bt1120clk_0[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[bt1120clk_0[i][0]]);
break;
}
}
}
break;
}
}
/* BT1120_1 DATA */
for(i=0; i<bt1120_1_pincnt; i++) {
if(config & (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX<<i)) {
for(j=0;j<bt1120_pinno;j++) {
offset = (bt1120_1[i][j+1]>>3)<<2;
bitoffset = (bt1120_1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: BT1120_1 DATA conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((bt1120_1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
vcap_bt1120_record[1] |= (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX<<i);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == bt1120_1[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[bt1120_1[i][0]]);
break;
}
}
}
break;
}
}
/* BT1120_1 CLK */
for(i=0; i<bt1120_1_pincnt; i++) {
if(config & (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX<<i)) {
for(j=0;j<bt1120clk_pinno;j++) {
offset = (bt1120clk_1[i][j+1]>>3)<<2;
bitoffset = (bt1120clk_1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: BT1120_1 CLK conflict\n", __FUNCTION__);
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record[i] = vcap_bt1120_record_backup[i];
}
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((bt1120clk_1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
vcap_bt1120_record[1] |= (PIN_VCAP_CFG_BT1120_1_1ST_PINMUX<<i);
for (k=0; k < sizeof(vcap_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (vcap_pad_mapping[k].pinmux_pin == bt1120clk_1[i][j+1]) {
pad_set_pull_updown(vcap_pad_mapping[k].pad_pin, vcap_pad_mapping[k].pad_value[bt1120clk_1[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_VCAP] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_eth(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* RGMII */
for(i=0; i<eth_pincnt; i++) {
if(config & (PIN_ETH_CFG_RGMII_1ST_PINMUX<<i)) {
for(j=0;j<rgmii_pinno;j++) {
offset = (rgmii[i][j+1]>>3)<<2;
bitoffset = (rgmii[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: RGMII conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((rgmii[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(eth_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (eth_pad_mapping[k].pinmux_pin == rgmii[i][j+1]) {
pad_set_pull_updown(eth_pad_mapping[k].pad_pin, eth_pad_mapping[k].pad_value[rgmii[i][0]]);
break;
}
}
}
break;
}
}
/* RMII */
for(i=0; i<eth_pincnt; i++) {
if(config & (PIN_ETH_CFG_RMII_1ST_PINMUX<<i)) {
for(j=0;j<rmii_pinno;j++) {
offset = (rmii[i][j+1]>>3)<<2;
bitoffset = (rmii[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: RMII conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((rmii[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(eth_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (eth_pad_mapping[k].pinmux_pin == rmii[i][j+1]) {
pad_set_pull_updown(eth_pad_mapping[k].pad_pin, eth_pad_mapping[k].pad_value[rmii[i][0]]);
break;
}
}
}
break;
}
}
/* EXT_PHY_CLK (25 MHz output) */
for(i=0; i<eth_pincnt; i++) {
if (config & (PIN_ETH_CFG_EXTPHYCLK_1ST_PINMUX<<i)) {
eth_phy_record |= (PIN_ETH_CFG_EXTPHYCLK_1ST_PINMUX<<i);
for(j=0; j<eth_pincnt; j++) {
if (config & phy_clk_out[i][j][0]) {
offset = (phy_clk_out[i][j][2]>>3)<<2;
bitoffset = (phy_clk_out[i][j][2]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: EXT_PHY_CLK conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((phy_clk_out[i][j][1])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(eth_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (eth_pad_mapping[k].pinmux_pin == phy_clk_out[i][j][2]) {
pad_set_pull_updown(eth_pad_mapping[k].pad_pin, eth_pad_mapping[k].pad_value[phy_clk_out[i][j][1]]);
break;
}
}
break;
}
}
}
}
if (config & PIN_ETH_CFG_RGMII_1ST_PINMUX) {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x1<<4);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
} else if (config & PIN_ETH_CFG_RMII_1ST_PINMUX) {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x4<<4);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
} else {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
}
if (config & PIN_ETH_CFG_RGMII_2ND_PINMUX) {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x1<<8);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
} else if (config & PIN_ETH_CFG_RMII_2ND_PINMUX) {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x4<<8);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
} else {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
}
if (config & PIN_ETH_CFG_PHY_ROUTE_ETH0) {
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value |= 0x1;
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
eth_mac_record = ETH_MAC0;
} else if (config & PIN_ETH_CFG_PHY_ROUTE_ETH1){
reg_value = TOP_GETREG(TOP_ETH_MUX_REG_OFS);
reg_value &= ~0x1;
TOP_SETREG(TOP_ETH_MUX_REG_OFS, reg_value);
eth_mac_record = ETH_MAC1;
}
pin_config[PIN_FUNC_ETH] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_misc(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* CPU ICE */
for(i=0; i<cpuice_pincnt; i++) {
if(config & (PIN_MISC_CFG_CPU_ICE<<i)) {
for(j=0;j<cpuice_pinno;j++) {
offset = (cpuice[i][j+1]>>3)<<2;
bitoffset = (cpuice[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: CPU ICE conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((cpuice[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == cpuice[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[cpuice[i][0]]);
break;
}
}
}
break;
}
}
/* VGA HS */
for(i=0; i<vgahs_pincnt; i++) {
if(config & (PIN_MISC_CFG_VGA_HS<<i)) {
for(j=0;j<vgahs_pinno;j++) {
offset = (vgahs[i][j+1]>>3)<<2;
bitoffset = (vgahs[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VGA HS conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vgahs[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == vgahs[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[vgahs[i][0]]);
break;
}
}
}
break;
}
}
/* VGA VS */
for(i=0; i<vgavs_pincnt; i++) {
if(config & (PIN_MISC_CFG_VGA_VS<<i)) {
for(j=0;j<vgavs_pinno;j++) {
offset = (vgavs[i][j+1]>>3)<<2;
bitoffset = (vgavs[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: VGA VS conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((vgavs[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == vgavs[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[vgavs[i][0]]);
break;
}
}
}
break;
}
}
/* BMC */
for(i=0; i<bmc_pincnt; i++) {
if(config & (PIN_MISC_CFG_BMC<<i)) {
for(j=0;j<bmc_pinno;j++) {
offset = (bmc[i][j+1]>>3)<<2;
bitoffset = (bmc[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: BMC conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((bmc[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == bmc[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[bmc[i][0]]);
break;
}
}
}
break;
}
}
/* RTC CAL OUT */
for(i=0; i<rtccal_pincnt; i++) {
if(config & (PIN_MISC_CFG_RTC_CAL_OUT<<i)) {
for(j=0;j<rtccal_pinno;j++) {
offset = (rtccal[i][j+1]>>3)<<2;
bitoffset = (rtccal[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: RTC CAL conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((rtccal[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == rtccal[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[rtccal[i][0]]);
break;
}
}
}
break;
}
}
/* DAC RAMP TP */
for(i=0; i<dacramp_pincnt; i++) {
if(config & (PIN_MISC_CFG_DAC_RAMP_TP<<i)) {
for(j=0;j<dacramp_pinno;j++) {
offset = (dacramp[i][j+1]>>3)<<2;
bitoffset = (dacramp[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: DAC RAMP conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((dacramp[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == dacramp[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[dacramp[i][0]]);
break;
}
}
}
break;
}
}
/* HDMI HOTPLUG */
for(i=0; i<hdmiplg_pincnt; i++) {
if(config & (PIN_MISC_CFG_HDMI_HOTPLUG<<i)) {
for(j=0;j<hdmiplg_pinno;j++) {
offset = (hdmiplg[i][j+1]>>3)<<2;
bitoffset = (hdmiplg[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: HDMI HOTPLUG conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((hdmiplg[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == hdmiplg[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[hdmiplg[i][0]]);
break;
}
}
}
break;
}
}
/* DSP ICE */
for(i=0; i<dspice_pincnt; i++) {
if(config & (PIN_MISC_CFG_DSP_ICE_1ST_PINMUX<<i)) {
for(j=0;j<dspice_pinno;j++) {
offset = (dspice[i][j+1]>>3)<<2;
bitoffset = (dspice[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: DSP ICE conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((dspice[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == dspice[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[dspice[i][0]]);
break;
}
}
}
break;
}
}
/* ETH LED */
for(i=0; i<ethled_pincnt; i++) {
if(config & (PIN_MISC_CFG_ETH_LED_1ST_PINMUX<<i)) {
for(j=0;j<ethled_pinno;j++) {
offset = (ethled[i][j+1]>>3)<<2;
bitoffset = (ethled[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: ETH LED conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((ethled[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == ethled[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[ethled[i][0]]);
break;
}
}
}
break;
}
}
/* SATA LED */
for(i=0; i<sataled_pincnt; i++) {
if(config & (PIN_MISC_CFG_SATA_LED_1ST_PINMUX<<i)) {
for(j=0;j<sataled_pinno;j++) {
offset = (sataled[i][j+1]>>3)<<2;
bitoffset = (sataled[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: SATA LED conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((sataled[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(misc_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (misc_pad_mapping[k].pinmux_pin == sataled[i][j+1]) {
pad_set_pull_updown(misc_pad_mapping[k].pad_pin, misc_pad_mapping[k].pad_value[sataled[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_MISC] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_pwm(uint32_t config)
{
REGVALUE reg_value;
UINT32 offset,bitmask,bitoffset;
UINT32 i,j,k;
unsigned long flags = 0;
loc_cpu(flags);
/* PWM0 */
for(i=0; i<pwm0_pincnt; i++) {
if(config & (PIN_PWM_CFG_CH0_1ST_PINMUX<<i)) {
for(j=0;j<pwm_pinno;j++) {
offset = (pwm0[i][j+1]>>3)<<2;
bitoffset = (pwm0[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: PWM0 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((pwm0[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(pwm_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (pwm_pad_mapping[k].pinmux_pin == pwm0[i][j+1]) {
pad_set_pull_updown(pwm_pad_mapping[k].pad_pin, pwm_pad_mapping[k].pad_value[pwm0[i][0]]);
break;
}
}
}
break;
}
}
/* PWM1 */
for(i=0; i<pwm1_pincnt; i++) {
if(config & (PIN_PWM_CFG_CH1_1ST_PINMUX<<i)) {
for(j=0;j<pwm_pinno;j++) {
offset = (pwm1[i][j+1]>>3)<<2;
bitoffset = (pwm1[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: PWM1 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((pwm1[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(pwm_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (pwm_pad_mapping[k].pinmux_pin == pwm1[i][j+1]) {
pad_set_pull_updown(pwm_pad_mapping[k].pad_pin, pwm_pad_mapping[k].pad_value[pwm1[i][0]]);
break;
}
}
}
break;
}
}
/* PWM2 */
for(i=0; i<pwm2_pincnt; i++) {
if(config & (PIN_PWM_CFG_CH2_1ST_PINMUX<<i)) {
for(j=0;j<pwm_pinno;j++) {
offset = (pwm2[i][j+1]>>3)<<2;
bitoffset = (pwm2[i][j+1]&0x7)<<2;
bitmask = ~(0x7 << bitoffset);
reg_value = TOP_GETREG(TOP_CTRL0_REG_OFS+offset);
#ifndef __FREERTOS
if (reg_value & ~bitmask) {
TOP_DBG_ERR("%s: PWM2 conflict\n", __FUNCTION__);
unl_cpu(flags);
return E_PAR;
}
#endif
reg_value &= bitmask;
reg_value |= ((pwm2[i][0])<<bitoffset);
TOP_SETREG(TOP_CTRL0_REG_OFS+offset, reg_value);
for (k=0; k < sizeof(pwm_pad_mapping)/sizeof(struct pinmux_pad_table); k++) {
if (pwm_pad_mapping[k].pinmux_pin == pwm2[i][j+1]) {
pad_set_pull_updown(pwm_pad_mapping[k].pad_pin, pwm_pad_mapping[k].pad_value[pwm2[i][0]]);
break;
}
}
}
break;
}
}
pin_config[PIN_FUNC_PWM] = config;
unl_cpu(flags);
return E_OK;
}
ER pinmux_config_vcap_interal(uint32_t config)
{
REGVALUE reg_value;
unsigned long flags = 0;
loc_cpu(flags);
if (config & PIN_VCAPINT_CFG_CAP0_CFG_0) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<0);
reg_value |= (0x0<<0);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
vcap_int_record[0] = PIN_VCAPINT_CFG_CAP0_CFG_0;
} else if (config & PIN_VCAPINT_CFG_CAP0_CFG_2) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<0);
reg_value |= (0x2<<0);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP0_CFG_3) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<0);
reg_value |= (0x3<<0);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP0_CFG_4) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<0);
reg_value |= (0x4<<0);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
}
if (config & PIN_VCAPINT_CFG_CAP1_CFG_0) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x0<<4);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
vcap_int_record[1] = PIN_VCAPINT_CFG_CAP1_CFG_0;
} else if (config & PIN_VCAPINT_CFG_CAP1_CFG_2) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x2<<4);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP1_CFG_3) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x3<<4);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP1_CFG_4) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<4);
reg_value |= (0x4<<4);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
}
if (config & PIN_VCAPINT_CFG_CAP2_CFG_0) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x0<<8);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
vcap_int_record[2] = PIN_VCAPINT_CFG_CAP2_CFG_0;
} else if (config & PIN_VCAPINT_CFG_CAP2_CFG_1) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x1<<8);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP2_CFG_2) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x2<<8);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP2_CFG_3) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x3<<8);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP2_CFG_4) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<8);
reg_value |= (0x4<<8);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
}
if (config & PIN_VCAPINT_CFG_CAP3_CFG_0) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<12);
reg_value |= (0x0<<12);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
vcap_int_record[3] = PIN_VCAPINT_CFG_CAP3_CFG_0;
} else if (config & PIN_VCAPINT_CFG_CAP3_CFG_1) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<12);
reg_value |= (0x1<<12);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP3_CFG_2) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<12);
reg_value |= (0x2<<12);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP3_CFG_3) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<12);
reg_value |= (0x3<<12);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
} else if (config & PIN_VCAPINT_CFG_CAP3_CFG_4) {
reg_value = TOP_GETREG(TOP_VCAP_MUX_REG_OFS);
reg_value &= ~(0xF<<12);
reg_value |= (0x4<<12);
TOP_SETREG(TOP_VCAP_MUX_REG_OFS, reg_value);
}
pin_config[PIN_FUNC_VCAPINT] = config;
unl_cpu(flags);
return E_OK;
}
typedef ER (*PINMUX_CONFIG_HDL)(uint32_t);
static PINMUX_CONFIG_HDL pinmux_config_hdl[] =
{
pinmux_config_uart,
pinmux_config_i2c,
pinmux_config_sdio,
pinmux_config_spi,
pinmux_config_extclk,
pinmux_config_ssp,
pinmux_config_lcd,
pinmux_config_remote,
pinmux_config_vcap,
pinmux_config_eth,
pinmux_config_misc,
pinmux_config_pwm,
pinmux_config_vcap_interal
};
/**
Configure pinmux controller
Configure pinmux controller by upper layer
@param[in] info nvt_pinctrl_info
@return void
*/
ER pinmux_init(struct nvt_pinctrl_info *info)
{
uint32_t i;
int err;
#ifndef __FREERTOS
unsigned long flags = 0;
for (i = 0; i < sw_top_reg_size; i++)
sw_top_reg_arr[i].value = 0;
#endif
eth_mac_record = 0;
eth_phy_record = 0;
for (i = 0; i < sizeof(vcap_int_record)/sizeof(vcap_int_record[0]); i++)
vcap_int_record[i] = 0;
for (i = 0; i < sizeof(vcap_bt1120_record)/sizeof(vcap_bt1120_record[0]); i++) {
vcap_bt1120_record_backup[i] = vcap_bt1120_record[i];
vcap_bt1120_record[i] = 0;
}
for (i = 0; i < PIN_FUNC_MAX; i++) {
if (info->top_pinmux[i].pin_function != i) {
TOP_DBG_ERR("top_config[%d].pinFunction context error\n", i);
return E_CTX;
}
err = pinmux_config_hdl[i](info->top_pinmux[i].config);
if (err != E_OK) {
TOP_DBG_ERR("top_config[%d].config config error\n", i);
return err;
}
}
#ifndef __FREERTOS
loc_cpu(flags);
for (i = 0; i < sw_top_reg_size; i++) {
HW_TOP_SETREG(sw_top_reg_arr[i].offset, sw_top_reg_arr[i].value);
}
unl_cpu(flags);
#endif
return E_OK;
}