[U-Boot] [PATCH] OMAP3: pandora: pin mux updates for DM3730 board variant

DM3730 needs some additional pin mux configuration for GPIOs 126-129 to work, add it.
Signed-off-by: Grazvydas Ignotas notasas@gmail.com --- arch/arm/include/asm/arch-omap3/mux.h | 6 ++++++ board/pandora/pandora.c | 3 +++ board/pandora/pandora.h | 6 ++++++ 3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-omap3/mux.h b/arch/arm/include/asm/arch-omap3/mux.h index 6daef49..71f183d 100644 --- a/arch/arm/include/asm/arch-omap3/mux.h +++ b/arch/arm/include/asm/arch-omap3/mux.h @@ -445,6 +445,12 @@ #define CONTROL_PADCONF_STRBEN_DLY1 0x0224 #define CONTROL_PADCONF_SYS_BOOT8 0x0226
+/* AM/DM37xx specific */ +#define CONTROL_PADCONF_GPIO127 0x0A54 +#define CONTROL_PADCONF_GPIO126 0x0A56 +#define CONTROL_PADCONF_GPIO128 0x0A58 +#define CONTROL_PADCONF_GPIO129 0x0A5A + #define MUX_VAL(OFFSET,VALUE)\ writew((VALUE), OMAP34XX_CTRL_BASE + (OFFSET));
diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c index 58a676d..70d2d82 100644 --- a/board/pandora/pandora.c +++ b/board/pandora/pandora.c @@ -103,6 +103,9 @@ int misc_init_r(void) void set_muxconf_regs(void) { MUX_PANDORA(); + if (get_cpu_family() == CPU_OMAP36XX) { + MUX_PANDORA_3730(); + } }
#ifdef CONFIG_GENERIC_MMC diff --git a/board/pandora/pandora.h b/board/pandora/pandora.h index f0ad16b..fea8bf2 100644 --- a/board/pandora/pandora.h +++ b/board/pandora/pandora.h @@ -399,4 +399,10 @@ const omap3_sysinfo sysinfo = { MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\ MUX_VAL(CP(SDRC_CKE1), (IDIS | PTU | EN | M0)) /*sdrc_cke1*/
+#define MUX_PANDORA_3730() \ + MUX_VAL(CP(GPIO126), (IEN | PTD | DIS | M4)) /*GPIO_126 - MMC1_WP*/\ + MUX_VAL(CP(GPIO127), (IEN | PTD | DIS | M4)) /*GPIO_127 - MMC2_WP*/\ + MUX_VAL(CP(GPIO128), (IDIS | PTD | DIS | M4)) /*GPIO_128 - LED_MMC1*/\ + MUX_VAL(CP(GPIO129), (IDIS | PTD | DIS | M4)) /*GPIO_129 - LED_MMC2*/ + #endif

Update pandora's GPIO setup code with these changes: - convert to gpiolib - set up dual voltage GPIOs to match supply of 1.8V by clearing VMODE1 - add GPIO_IO_PWRDNZ configuration for DM3730 variation of pandora (required to enable GPIO 126, 127, and 129 I/O cells in DM3730) - add wifi reset pulse as recommended by wifi chip's manufacturer - drop configuration of GPIOs that u-boot doesn't need
Signed-off-by: Grazvydas Ignotas notasas@gmail.com --- board/pandora/pandora.c | 54 +++++++++++++++++++++++++++++++++++----------- 1 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c index 70d2d82..4702612 100644 --- a/board/pandora/pandora.c +++ b/board/pandora/pandora.c @@ -32,6 +32,7 @@ #include <common.h> #include <twl4030.h> #include <asm/io.h> +#include <asm/gpio.h> #include <asm/arch/mmc_host_def.h> #include <asm/arch/mux.h> #include <asm/arch/gpio.h> @@ -45,6 +46,10 @@ DECLARE_GLOBAL_DATA_PTR; #define TWL4030_BB_CFG_BBSEL_3200MV (3 << 2) #define TWL4030_BB_CFG_BBISEL_500UA 2
+#define CONTROL_WKUP_CTRL 0x48002a5c +#define GPIO_IO_PWRDNZ (1 << 6) +#define PBIASLITEVMODE1 (1 << 8) + /* * Routine: board_init * Description: Early hardware init. @@ -60,29 +65,52 @@ int board_init(void) return 0; }
+static void set_output_gpio(unsigned int gpio, int value) +{ + int ret; + + ret = gpio_request(gpio, ""); + if (ret != 0) { + printf("could not request GPIO %u\n", gpio); + return; + } + ret = gpio_direction_output(gpio, value); + if (ret != 0) + printf("could not set GPIO %u to %d\n", gpio, value); +} + /* * Routine: misc_init_r * Description: Configure board specific parts */ int misc_init_r(void) { - struct gpio *gpio1_base = (struct gpio *)OMAP34XX_GPIO1_BASE; - struct gpio *gpio4_base = (struct gpio *)OMAP34XX_GPIO4_BASE; - struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE; - struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE; + t2_t *t2_base = (t2_t *)T2_BASE; + u32 pbias_lite;
twl4030_led_init(TWL4030_LED_LEDEN_LEDBON);
- /* Configure GPIOs to output */ - writel(~(GPIO14 | GPIO15 | GPIO16 | GPIO23), &gpio1_base->oe); - writel(~GPIO22, &gpio4_base->oe); /* 118 */ - writel(~(GPIO0 | GPIO1 | GPIO28 | GPIO29 | GPIO30 | GPIO31), - &gpio5_base->oe); /* 128, 129, 156-159 */ - writel(~GPIO4, &gpio6_base->oe); /* 164 */ + /* set up dual-voltage GPIOs to 1.8V */ + pbias_lite = readl(&t2_base->pbias_lite); + pbias_lite &= ~PBIASLITEVMODE1; + pbias_lite |= PBIASLITEPWRDNZ1; + writel(pbias_lite, &t2_base->pbias_lite); + if (get_cpu_family() == CPU_OMAP36XX) + writel(readl(CONTROL_WKUP_CTRL) | GPIO_IO_PWRDNZ, + CONTROL_WKUP_CTRL); + + /* make sure audio and BT chips are in powerdown state */ + set_output_gpio(14, 0); + set_output_gpio(15, 0); + set_output_gpio(118, 0); + + /* enable USB supply */ + set_output_gpio(164, 1);
- /* Set GPIOs */ - writel(GPIO28, &gpio5_base->setdataout); - writel(GPIO4, &gpio6_base->setdataout); + /* wifi needs a short pulse to enter powersave state */ + set_output_gpio(23, 1); + udelay(5000); + gpio_direction_output(23, 0);
/* Enable battery backup capacitor (3.2V, 0.5mA charge current) */ twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER,

As ttyS0 is no longer valid for newer OMAP kernels, and pandora serial cables are not widespread, simply drop console argument. This should allow booting old and new kernels with default arguments, and those who need serial can use a boot script on SD card.
Signed-off-by: Grazvydas Ignotas notasas@gmail.com --- include/configs/omap3_pandora.h | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h index 4df5f5d..d02f338 100644 --- a/include/configs/omap3_pandora.h +++ b/include/configs/omap3_pandora.h @@ -174,8 +174,7 @@ "usbtty=cdc_acm\0" \ "loadaddr=0x82000000\0" \ "bootargs=ubi.mtd=4 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs " \ - "rw rootflags=bulk_read console=ttyS0,115200n8 " \ - "vram=6272K omapfb.vram=0:3000K\0" \ + "rw rootflags=bulk_read vram=6272K omapfb.vram=0:3000K\0" \ "mtdparts=" MTDPARTS_DEFAULT "\0" \
#define CONFIG_BOOTCOMMAND \
participants (1)
-
Grazvydas Ignotas