ARMv7: De-uboot-ify Exynos5250 GPIO code

The Exynos GPIO code has three different APIs that, unfortunately,
were widely used throughout the code base. This patch is cleaning
up the mess.

Change-Id: I09ccc7819fb892dbace9693c786dacc62f3f8eac
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Signed-off-by: Gabe Black <gabeblack@chromium.org>
Reviewed-on: http://review.coreboot.org/3643
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Stefan Reinauer
2013-05-15 14:54:07 -07:00
committed by Stefan Reinauer
parent 08dc357146
commit dc006c1db4
7 changed files with 110 additions and 351 deletions

View File

@@ -48,17 +48,17 @@ int exynos_pinmux_config(enum periph_id peripheral, int flags)
break;
}
for (i = start; i < start + count; i++) {
gpio_set_pull(i, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(i, EXYNOS_GPIO_FUNC(0x2));
gpio_set_pull(i, GPIO_PULL_NONE);
gpio_cfg_pin(i, GPIO_FUNC(0x2));
}
break;
case PERIPH_ID_SDMMC0:
case PERIPH_ID_SDMMC1:
case PERIPH_ID_SDMMC2:
case PERIPH_ID_SDMMC3:
pin = EXYNOS_GPIO_FUNC(0x2);
pin_ext = EXYNOS_GPIO_FUNC(0x2);
drv = EXYNOS_GPIO_DRV_4X;
pin = GPIO_FUNC(0x2);
pin_ext = GPIO_FUNC(0x2);
drv = GPIO_DRV_4X;
switch (peripheral) {
default:
case PERIPH_ID_SDMMC0:
@@ -96,18 +96,18 @@ int exynos_pinmux_config(enum periph_id peripheral, int flags)
for (i = 0; i <= 3; i++) {
gpio_cfg_pin(start_ext + i, pin_ext);
gpio_set_pull(start_ext + i,
EXYNOS_GPIO_PULL_UP);
GPIO_PULL_UP);
gpio_set_drv(start_ext + i, drv);
}
}
for (i = 0; i < 2; i++) {
gpio_cfg_pin(start + i, pin);
gpio_set_pull(start + i, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(start + i, GPIO_PULL_NONE);
gpio_set_drv(start + i, drv);
}
for (i = 2; i <= 6; i++) {
gpio_cfg_pin(start + i, pin);
gpio_set_pull(start + i, EXYNOS_GPIO_PULL_UP);
gpio_set_pull(start + i, GPIO_PULL_UP);
gpio_set_drv(start + i, drv);
}
break;
@@ -128,12 +128,12 @@ int exynos_pinmux_config(enum periph_id peripheral, int flags)
* GPY1[3] EBI_DATA_RDn(2)
*/
gpio_cfg_pin(GPIO_Y00 + (flags & PINMUX_FLAG_BANK),
EXYNOS_GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y04, EXYNOS_GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y05, EXYNOS_GPIO_FUNC(2));
GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y04, GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y05, GPIO_FUNC(2));
for (i = 2; i < 4; i++)
gpio_cfg_pin(GPIO_Y10 + i, EXYNOS_GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y10 + i, GPIO_FUNC(2));
/*
* EBI: 8 Addrss Lines
@@ -168,16 +168,16 @@ int exynos_pinmux_config(enum periph_id peripheral, int flags)
* GPY6[7] EBI_DATA[15](2)
*/
for (i = 0; i < 8; i++) {
gpio_cfg_pin(GPIO_Y30 + i, EXYNOS_GPIO_FUNC(2));
gpio_set_pull(GPIO_Y30 + i, EXYNOS_GPIO_PULL_UP);
gpio_cfg_pin(GPIO_Y30 + i, GPIO_FUNC(2));
gpio_set_pull(GPIO_Y30 + i, GPIO_PULL_UP);
gpio_cfg_pin(GPIO_Y50 + i, EXYNOS_GPIO_FUNC(2));
gpio_set_pull(GPIO_Y50 + i, EXYNOS_GPIO_PULL_UP);
gpio_cfg_pin(GPIO_Y50 + i, GPIO_FUNC(2));
gpio_set_pull(GPIO_Y50 + i, GPIO_PULL_UP);
if (flags & PINMUX_FLAG_16BIT) {
gpio_cfg_pin(GPIO_Y60 + i, EXYNOS_GPIO_FUNC(2));
gpio_cfg_pin(GPIO_Y60 + i, GPIO_FUNC(2));
gpio_set_pull(GPIO_Y60 + i,
EXYNOS_GPIO_PULL_UP);
GPIO_PULL_UP);
}
}
break;
@@ -208,86 +208,86 @@ int exynos_pinmux_config(enum periph_id peripheral, int flags)
}
for (i = 0; i < 4; i++)
gpio_cfg_pin(start + i, EXYNOS_GPIO_FUNC(cfg));
gpio_cfg_pin(start + i, GPIO_FUNC(cfg));
break;
}
case PERIPH_ID_SPI4:
for (i = 0; i < 2; i++)
gpio_cfg_pin(GPIO_F02 + i, EXYNOS_GPIO_FUNC(0x4));
gpio_cfg_pin(GPIO_F02 + i, GPIO_FUNC(0x4));
for (i = 2; i < 4; i++)
gpio_cfg_pin(GPIO_E02 + i, EXYNOS_GPIO_FUNC(0x4));
gpio_cfg_pin(GPIO_E02 + i, GPIO_FUNC(0x4));
break;
case PERIPH_ID_BACKLIGHT:
gpio_cfg_pin(GPIO_B20, EXYNOS_GPIO_OUTPUT);
gpio_cfg_pin(GPIO_B20, GPIO_OUTPUT);
gpio_set_value(GPIO_B20, 1);
break;
case PERIPH_ID_LCD:
gpio_cfg_pin(GPIO_Y25, EXYNOS_GPIO_OUTPUT);
gpio_cfg_pin(GPIO_Y25, GPIO_OUTPUT);
gpio_set_value(GPIO_Y25, 1);
gpio_cfg_pin(GPIO_X15, EXYNOS_GPIO_OUTPUT);
gpio_cfg_pin(GPIO_X15, GPIO_OUTPUT);
gpio_set_value(GPIO_X15, 1);
gpio_cfg_pin(GPIO_X30, EXYNOS_GPIO_OUTPUT);
gpio_cfg_pin(GPIO_X30, GPIO_OUTPUT);
gpio_set_value(GPIO_X30, 1);
break;
case PERIPH_ID_I2C0:
gpio_cfg_pin(GPIO_B30, EXYNOS_GPIO_FUNC(0x2));
gpio_cfg_pin(GPIO_B31, EXYNOS_GPIO_FUNC(0x2));
gpio_set_pull(GPIO_B30, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_B31, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_B30, GPIO_FUNC(0x2));
gpio_cfg_pin(GPIO_B31, GPIO_FUNC(0x2));
gpio_set_pull(GPIO_B30, GPIO_PULL_NONE);
gpio_set_pull(GPIO_B31, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C1:
gpio_cfg_pin(GPIO_B32, EXYNOS_GPIO_FUNC(0x2));
gpio_cfg_pin(GPIO_B33, EXYNOS_GPIO_FUNC(0x2));
gpio_set_pull(GPIO_B32, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_B33, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_B32, GPIO_FUNC(0x2));
gpio_cfg_pin(GPIO_B33, GPIO_FUNC(0x2));
gpio_set_pull(GPIO_B32, GPIO_PULL_NONE);
gpio_set_pull(GPIO_B33, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C2:
gpio_cfg_pin(GPIO_A06, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A07, EXYNOS_GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A06, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_A07, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_A06, GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A07, GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A06, GPIO_PULL_NONE);
gpio_set_pull(GPIO_A07, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C3:
gpio_cfg_pin(GPIO_A12, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A13, EXYNOS_GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A12, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_A13, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_A12, GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A13, GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A12, GPIO_PULL_NONE);
gpio_set_pull(GPIO_A13, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C4:
gpio_cfg_pin(GPIO_A20, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A21, EXYNOS_GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A20, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_A21, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_A20, GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A21, GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A20, GPIO_PULL_NONE);
gpio_set_pull(GPIO_A21, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C5:
gpio_cfg_pin(GPIO_A22, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A23, EXYNOS_GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A22, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_A23, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_A22, GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_A23, GPIO_FUNC(0x3));
gpio_set_pull(GPIO_A22, GPIO_PULL_NONE);
gpio_set_pull(GPIO_A23, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2C6:
gpio_cfg_pin(GPIO_B13, EXYNOS_GPIO_FUNC(0x4));
gpio_cfg_pin(GPIO_B14, EXYNOS_GPIO_FUNC(0x4));
gpio_cfg_pin(GPIO_B13, GPIO_FUNC(0x4));
gpio_cfg_pin(GPIO_B14, GPIO_FUNC(0x4));
break;
case PERIPH_ID_I2C7:
gpio_cfg_pin(GPIO_B22, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_B23, EXYNOS_GPIO_FUNC(0x3));
gpio_set_pull(GPIO_B22, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_B23, EXYNOS_GPIO_PULL_NONE);
gpio_cfg_pin(GPIO_B22, GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_B23, GPIO_FUNC(0x3));
gpio_set_pull(GPIO_B22, GPIO_PULL_NONE);
gpio_set_pull(GPIO_B23, GPIO_PULL_NONE);
break;
case PERIPH_ID_DPHPD:
/* Set Hotplug detect for DP */
gpio_cfg_pin(GPIO_X07, EXYNOS_GPIO_FUNC(0x3));
gpio_cfg_pin(GPIO_X07, GPIO_FUNC(0x3));
/*
* Hotplug detect should have an external pullup; disable the
* internal pulldown so they don't fight.
*/
gpio_set_pull(GPIO_X07, EXYNOS_GPIO_PULL_NONE);
gpio_set_pull(GPIO_X07, GPIO_PULL_NONE);
break;
case PERIPH_ID_I2S1:
for (i = 0; i < 5; i++)
gpio_cfg_pin(GPIO_B00 + i, EXYNOS_GPIO_FUNC(0x02));
gpio_cfg_pin(GPIO_B00 + i, GPIO_FUNC(0x02));
break;
default:
printk(BIOS_DEBUG, "%s: invalid peripheral %d", __func__, peripheral);