summaryrefslogtreecommitdiffstats
path: root/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch')
-rw-r--r--patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch101
1 files changed, 101 insertions, 0 deletions
diff --git a/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch b/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch
new file mode 100644
index 0000000..e6dc7f6
--- /dev/null
+++ b/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch
@@ -0,0 +1,101 @@
+From 278fb30cf0ce864e15505330238e891d88b3f965 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 31 Mar 2013 12:27:43 +0200
+Subject: [PATCH 5/8] WIP: GPIO for am33xx
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/mach-omap/am33xx_generic.c | 28 ++++++++++++++++++++++++++++
+ arch/arm/mach-omap/am33xx_mux.c | 11 +++++++++++
+ arch/arm/mach-omap/include/mach/am33xx-mux.h | 1 +
+ 3 files changed, 40 insertions(+)
+
+diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
+index d3014c2..bf03fcd 100644
+--- a/arch/arm/mach-omap/am33xx_generic.c
++++ b/arch/arm/mach-omap/am33xx_generic.c
+@@ -19,8 +19,10 @@
+ */
+
+ #include <common.h>
++#include <init.h>
+ #include <io.h>
+ #include <net.h>
++#include <driver.h>
+ #include <mach/am33xx-silicon.h>
+ #include <mach/am33xx-clock.h>
+ #include <mach/sys_info.h>
+@@ -122,3 +124,29 @@ int am33xx_register_ethaddr(int eth_id, int mac_id)
+
+ return -ENODEV;
+ }
++
++static int am33xx_gpio_init(void)
++{
++ /* GPIO 1-3 */
++#define PRCM_MOD_EN 0x2
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO1_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO1_CLKCTRL) != PRCM_MOD_EN);
++
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO2_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO2_CLKCTRL) != PRCM_MOD_EN);
++
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO3_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO3_CLKCTRL) != PRCM_MOD_EN);
++
++ add_generic_device("omap-gpio", 0, NULL, AM33XX_GPIO0_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 1, NULL, AM33XX_GPIO1_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 2, NULL, AM33XX_GPIO2_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 3, NULL, AM33XX_GPIO3_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++
++ return 0;
++}
++coredevice_initcall(am33xx_gpio_init);
+diff --git a/arch/arm/mach-omap/am33xx_mux.c b/arch/arm/mach-omap/am33xx_mux.c
+index 3d7f245..e3a700d 100644
+--- a/arch/arm/mach-omap/am33xx_mux.c
++++ b/arch/arm/mach-omap/am33xx_mux.c
+@@ -291,6 +291,12 @@ static const __maybe_unused struct module_pin_mux i2c0_pin_mux[] = {
+ {-1},
+ };
+
++static const __maybe_unused struct module_pin_mux i2c0_pin_mux_gpio[] = {
++ {OFFSET(i2c0_sda), (MODE(7) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
++ {OFFSET(i2c0_scl), (MODE(7) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
++ {-1},
++};
++
+ static const __maybe_unused struct module_pin_mux i2c1_pin_mux[] = {
+ {OFFSET(spi0_d1), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
+ {OFFSET(spi0_cs0), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
+@@ -490,6 +496,11 @@ void enable_i2c0_pin_mux(void)
+ configure_module_pin_mux(i2c0_pin_mux);
+ }
+
++void enable_i2c0_pin_mux_gpio(void)
++{
++ configure_module_pin_mux(i2c0_pin_mux_gpio);
++}
++
+ void enable_i2c1_pin_mux(void)
+ {
+ configure_module_pin_mux(i2c1_pin_mux);
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-mux.h b/arch/arm/mach-omap/include/mach/am33xx-mux.h
+index 6078b3a..f4318c2 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-mux.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-mux.h
+@@ -15,6 +15,7 @@
+
+ extern void enable_mii1_pin_mux(void);
+ extern void enable_i2c0_pin_mux(void);
++extern void enable_i2c0_pin_mux_gpio(void);
+ extern void enable_i2c1_pin_mux(void);
+ extern void enable_i2c2_pin_mux(void);
+ extern void enable_uart0_pin_mux(void);
+--
+1.8.2.rc2
+