mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
imx: ventana: make number of digital I/O's dynamic
Replace the static list of board-specific digital I/O's with a dynamic list. Signed-off-by: Tim Harvey <tharvey@gateworks.com>
This commit is contained in:
parent
e49621b357
commit
1800ffa83e
3 changed files with 199 additions and 210 deletions
|
@ -338,60 +338,8 @@ static iomux_v3_cfg_t const gw553x_gpio_pads[] = {
|
|||
IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Board Specific GPIO
|
||||
*/
|
||||
struct ventana gpio_cfg[GW_UNKNOWN] = {
|
||||
/* GW5400proto */
|
||||
{
|
||||
.gpio_pads = gw54xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
|
||||
IMX_GPIO_NR(1, 9),
|
||||
{ IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
|
||||
1
|
||||
},
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
|
||||
IMX_GPIO_NR(1, 19),
|
||||
{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
|
||||
2
|
||||
},
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
|
||||
IMX_GPIO_NR(2, 9),
|
||||
{ IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
|
||||
3
|
||||
},
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
|
||||
IMX_GPIO_NR(2, 10),
|
||||
{ IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
|
||||
4
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 10),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(4, 7),
|
||||
.mezz_irq = IMX_GPIO_NR(4, 9),
|
||||
.rs485en = IMX_GPIO_NR(3, 24),
|
||||
.dioi2c_en = IMX_GPIO_NR(4, 5),
|
||||
.pcie_sson = IMX_GPIO_NR(1, 20),
|
||||
},
|
||||
|
||||
/* GW51xx */
|
||||
{
|
||||
.gpio_pads = gw51xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
/* Digital I/O */
|
||||
struct dio_cfg gw51xx_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
|
||||
IMX_GPIO_NR(1, 16),
|
||||
|
@ -416,25 +364,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
|
||||
4
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 10),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 0),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 2),
|
||||
.vidin_en = IMX_GPIO_NR(5, 20),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
},
|
||||
};
|
||||
|
||||
/* GW52xx */
|
||||
{
|
||||
.gpio_pads = gw52xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw52xx_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
|
||||
IMX_GPIO_NR(1, 16),
|
||||
|
@ -459,29 +391,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ 0, 0 },
|
||||
0
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 27),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.usb_sel = IMX_GPIO_NR(1, 2),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
};
|
||||
|
||||
/* GW53xx */
|
||||
{
|
||||
.gpio_pads = gw53xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw53xx_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
|
||||
IMX_GPIO_NR(1, 16),
|
||||
|
@ -506,28 +418,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ 0, 0 },
|
||||
0
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 27),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
};
|
||||
|
||||
/* GW54xx */
|
||||
{
|
||||
.gpio_pads = gw54xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw54xx_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
|
||||
IMX_GPIO_NR(1, 9),
|
||||
|
@ -552,30 +445,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
|
||||
4
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.rs485en = IMX_GPIO_NR(7, 1),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.dioi2c_en = IMX_GPIO_NR(4, 5),
|
||||
.pcie_sson = IMX_GPIO_NR(1, 20),
|
||||
.wdis = IMX_GPIO_NR(5, 17),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
};
|
||||
|
||||
/* GW551x */
|
||||
{
|
||||
.gpio_pads = gw551x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw551x_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
|
||||
IMX_GPIO_NR(1, 19),
|
||||
|
@ -588,20 +460,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
|
||||
3
|
||||
},
|
||||
},
|
||||
.num_gpios = 2,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 7),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 0),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
},
|
||||
};
|
||||
|
||||
/* GW552x */
|
||||
{
|
||||
.gpio_pads = gw552x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw552x_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
|
||||
IMX_GPIO_NR(1, 16),
|
||||
|
@ -626,24 +487,9 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ 0, 0 },
|
||||
0
|
||||
},
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.usb_sel = IMX_GPIO_NR(1, 7),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
},
|
||||
};
|
||||
|
||||
/* GW553x */
|
||||
{
|
||||
.gpio_pads = gw553x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
|
||||
.dio_cfg = {
|
||||
struct dio_cfg gw553x_dio[] = {
|
||||
{
|
||||
{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
|
||||
IMX_GPIO_NR(1, 16),
|
||||
|
@ -668,8 +514,151 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
{ IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
|
||||
4
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Board Specific GPIO
|
||||
*/
|
||||
struct ventana gpio_cfg[GW_UNKNOWN] = {
|
||||
/* GW5400proto */
|
||||
{
|
||||
.gpio_pads = gw54xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
|
||||
.dio_cfg = gw54xx_dio,
|
||||
.dio_num = ARRAY_SIZE(gw54xx_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 10),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.num_gpios = 4,
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(4, 7),
|
||||
.mezz_irq = IMX_GPIO_NR(4, 9),
|
||||
.rs485en = IMX_GPIO_NR(3, 24),
|
||||
.dioi2c_en = IMX_GPIO_NR(4, 5),
|
||||
.pcie_sson = IMX_GPIO_NR(1, 20),
|
||||
},
|
||||
|
||||
/* GW51xx */
|
||||
{
|
||||
.gpio_pads = gw51xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
|
||||
.dio_cfg = gw51xx_dio,
|
||||
.dio_num = ARRAY_SIZE(gw51xx_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 10),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 0),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 2),
|
||||
.vidin_en = IMX_GPIO_NR(5, 20),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
},
|
||||
|
||||
/* GW52xx */
|
||||
{
|
||||
.gpio_pads = gw52xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
|
||||
.dio_cfg = gw52xx_dio,
|
||||
.dio_num = ARRAY_SIZE(gw52xx_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 27),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.usb_sel = IMX_GPIO_NR(1, 2),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
|
||||
/* GW53xx */
|
||||
{
|
||||
.gpio_pads = gw53xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
|
||||
.dio_cfg = gw53xx_dio,
|
||||
.dio_num = ARRAY_SIZE(gw53xx_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.gps_shdn = IMX_GPIO_NR(1, 27),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
|
||||
/* GW54xx */
|
||||
{
|
||||
.gpio_pads = gw54xx_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
|
||||
.dio_cfg = gw54xx_dio,
|
||||
.dio_num = ARRAY_SIZE(gw54xx_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.mezz_pwren = IMX_GPIO_NR(2, 19),
|
||||
.mezz_irq = IMX_GPIO_NR(2, 18),
|
||||
.rs485en = IMX_GPIO_NR(7, 1),
|
||||
.vidin_en = IMX_GPIO_NR(3, 31),
|
||||
.dioi2c_en = IMX_GPIO_NR(4, 5),
|
||||
.pcie_sson = IMX_GPIO_NR(1, 20),
|
||||
.wdis = IMX_GPIO_NR(5, 17),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
.rs232_en = GP_RS232_EN,
|
||||
},
|
||||
|
||||
/* GW551x */
|
||||
{
|
||||
.gpio_pads = gw551x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
|
||||
.dio_cfg = gw551x_dio,
|
||||
.dio_num = ARRAY_SIZE(gw551x_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 7),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 0),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
},
|
||||
|
||||
/* GW552x */
|
||||
{
|
||||
.gpio_pads = gw552x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
|
||||
.dio_cfg = gw552x_dio,
|
||||
.dio_num = ARRAY_SIZE(gw552x_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 6),
|
||||
IMX_GPIO_NR(4, 7),
|
||||
IMX_GPIO_NR(4, 15),
|
||||
},
|
||||
.pcie_rst = IMX_GPIO_NR(1, 29),
|
||||
.usb_sel = IMX_GPIO_NR(1, 7),
|
||||
.wdis = IMX_GPIO_NR(7, 12),
|
||||
.msata_en = GP_MSATA_SEL,
|
||||
},
|
||||
|
||||
/* GW553x */
|
||||
{
|
||||
.gpio_pads = gw553x_gpio_pads,
|
||||
.num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
|
||||
.dio_cfg = gw553x_dio,
|
||||
.dio_num = ARRAY_SIZE(gw553x_dio),
|
||||
.leds = {
|
||||
IMX_GPIO_NR(4, 10),
|
||||
IMX_GPIO_NR(4, 11),
|
||||
|
@ -820,7 +809,7 @@ void setup_board_gpio(int board, struct ventana_board_info *info)
|
|||
* Configure DIO pinmux/padctl registers
|
||||
* see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
|
||||
*/
|
||||
for (i = 0; i < gpio_cfg[board].num_gpios; i++) {
|
||||
for (i = 0; i < gpio_cfg[board].dio_num; i++) {
|
||||
struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
|
||||
iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
|
||||
unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
|
||||
|
|
|
@ -48,8 +48,8 @@
|
|||
#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
|
||||
|
||||
/*
|
||||
* each baseboard has 4 user configurable Digital IO lines which can
|
||||
* be pinmuxed as a GPIO or in some cases a PWM
|
||||
* each baseboard has an optional set user configurable Digital IO lines which
|
||||
* can be pinmuxed as a GPIO or in some cases a PWM
|
||||
*/
|
||||
struct dio_cfg {
|
||||
iomux_v3_cfg_t gpio_padmux[2];
|
||||
|
@ -63,8 +63,8 @@ struct ventana {
|
|||
iomux_v3_cfg_t const *gpio_pads;
|
||||
int num_pads;
|
||||
/* DIO pinmux/val */
|
||||
struct dio_cfg dio_cfg[4];
|
||||
int num_gpios;
|
||||
struct dio_cfg *dio_cfg;
|
||||
int dio_num;
|
||||
/* various gpios (0 if non-existent) */
|
||||
int leds[3];
|
||||
int pcie_rst;
|
||||
|
|
|
@ -1209,7 +1209,7 @@ int ft_board_setup(void *blob, bd_t *bd)
|
|||
}
|
||||
|
||||
/* Configure DIO */
|
||||
for (i = 0; i < gpio_cfg[board_type].num_gpios; i++) {
|
||||
for (i = 0; i < gpio_cfg[board_type].dio_num; i++) {
|
||||
struct dio_cfg *cfg = &gpio_cfg[board_type].dio_cfg[i];
|
||||
char arg[10];
|
||||
|
||||
|
|
Loading…
Reference in a new issue