diff options
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.patch | 101 |
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 + |