diff --git a/arch/arm/cpu/armv7/omap-common/Makefile b/arch/arm/cpu/armv7/omap-common/Makefile
index 1394c3f0f3aa5fea80a76e529bff3edb7cf3c750..d37b22d98a8dc1dc9fa4937a4932ffa303b23dab 100644
--- a/arch/arm/cpu/armv7/omap-common/Makefile
+++ b/arch/arm/cpu/armv7/omap-common/Makefile
@@ -29,9 +29,6 @@ SOBJS	:= reset.o
 
 COBJS	:= timer.o
 COBJS	+= utils.o
-ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP),)
-COBJS	+= gpio.o
-endif
 
 ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
 COBJS	+= hwinit-common.o
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 106549dc2cab701414e20a2dca0b0b9f12beb01f..c77c631be77e9affff969d9dfbd131b6dcd7ac9a 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -41,6 +41,7 @@ COBJS-$(CONFIG_DA8XX_GPIO)	+= da8xx_gpio.o
 COBJS-$(CONFIG_ALTERA_PIO)	+= altera_pio.o
 COBJS-$(CONFIG_MPC83XX_GPIO)	+= mpc83xx_gpio.o
 COBJS-$(CONFIG_SH_GPIO_PFC)	+= sh_pfc.o
+COBJS-$(CONFIG_OMAP_GPIO)	+= omap_gpio.o
 
 COBJS	:= $(COBJS-y)
 SRCS 	:= $(COBJS:.o=.c)
diff --git a/arch/arm/cpu/armv7/omap-common/gpio.c b/drivers/gpio/omap_gpio.c
similarity index 100%
rename from arch/arm/cpu/armv7/omap-common/gpio.c
rename to drivers/gpio/omap_gpio.c
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index 41a3032897634880e724c2ad66884d30c11cd6f1..69ab076df9cb442cd76476ba0450ed9cb586bfb3 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -167,6 +167,8 @@
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	2
 #define CONFIG_SYS_I2C_MULTI_EEPROMS
 
+#define CONFIG_OMAP_GPIO
+
 #define CONFIG_BAUDRATE		115200
 #define CONFIG_SYS_BAUDRATE_TABLE	{ 110, 300, 600, 1200, 2400, \
 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200 }
diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
index ee4bce5d341d76bfb1535314323005296ae97978..6eeb2d3b7d1530c8881dd5157ca030f070ddce9c 100644
--- a/include/configs/cm_t35.h
+++ b/include/configs/cm_t35.h
@@ -37,6 +37,7 @@
  */
 #define CONFIG_OMAP	/* in a TI OMAP core */
 #define CONFIG_OMAP34XX	/* which is a 34XX */
+#define CONFIG_OMAP_GPIO
 #define CONFIG_CM_T3X	/* working with CM-T35 and CM-T3730 */
 
 #define CONFIG_SYS_TEXT_BASE	0x80008000
diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h
index 5df946bf6a237157102a1c9717962916e343a24d..1f44a428104e104899330ad0e2c5fea38c0ac137 100644
--- a/include/configs/devkit8000.h
+++ b/include/configs/devkit8000.h
@@ -36,6 +36,8 @@
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
 #define CONFIG_OMAP3_DEVKIT8000	1	/* working with DevKit8000 */
 #define CONFIG_MACH_TYPE	MACH_TYPE_DEVKIT8000
+#define CONFIG_OMAP_GPIO
+
 /*
  * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM
  * 64 bytes before this address should be set aside for u-boot.img's
diff --git a/include/configs/dig297.h b/include/configs/dig297.h
index 4845d5198a5961c2c57ea9a94d15bd4b9aa676d7..f123675aada0e5fe965c9c5a77c319cce0cebad2 100644
--- a/include/configs/dig297.h
+++ b/include/configs/dig297.h
@@ -45,6 +45,7 @@
  */
 #define CONFIG_OMAP		/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		/* which is a 34XX */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SYS_TEXT_BASE	0x80008000
 
diff --git a/include/configs/igep00x0.h b/include/configs/igep00x0.h
index 91e5de65d19759a4440cfde36fbe4285c026165d..af793e199b9342e56b5a921469009e750f4324a1 100644
--- a/include/configs/igep00x0.h
+++ b/include/configs/igep00x0.h
@@ -30,6 +30,7 @@
  */
 #define CONFIG_OMAP		1	/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC	/* The chip has SDRC controller */
 
diff --git a/include/configs/mcx.h b/include/configs/mcx.h
index ad7078c0f538ca9ce087416262f43b8138e3391b..c14cb851c59dd3dff896b8c308f98a52c4d860f2 100644
--- a/include/configs/mcx.h
+++ b/include/configs/mcx.h
@@ -27,6 +27,7 @@
 #define CONFIG_OMAP			/* in a TI OMAP core */
 #define CONFIG_OMAP34XX			/* which is a 34XX */
 #define CONFIG_OMAP3_MCX		/* working with mcx */
+#define CONFIG_OMAP_GPIO
 
 #define MACH_TYPE_MCX			3656
 #define CONFIG_MACH_TYPE	MACH_TYPE_MCX
diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
index 6e2a4ec6ce4db504a0766c8f75abd90999eccccb..e974824191112a08b3a06080b32c54ae8e11cb2c 100644
--- a/include/configs/omap3_beagle.h
+++ b/include/configs/omap3_beagle.h
@@ -34,6 +34,7 @@
 #define CONFIG_OMAP		1	/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
 #define CONFIG_OMAP3_BEAGLE	1	/* working with BEAGLE */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC	/* The chip has SDRC controller */
 
diff --git a/include/configs/omap3_evm_common.h b/include/configs/omap3_evm_common.h
index 20192a90a7c7ff741892a7f8fb5725c1bfd5704e..b12ce2e4d99a8e37971360d52f95521c70cf0a58 100644
--- a/include/configs/omap3_evm_common.h
+++ b/include/configs/omap3_evm_common.h
@@ -22,6 +22,7 @@
  */
 #define CONFIG_OMAP			/* This is TI OMAP core */
 #define CONFIG_OMAP34XX			/* belonging to 34XX family */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC			/* The chip has SDRC controller */
 
diff --git a/include/configs/omap3_logic.h b/include/configs/omap3_logic.h
index 2e1e6b901dc66f2353853e625bb9b57f7deeaf80..6d4faed08536a6001f3a1d7028d328d3ca2d83f1 100644
--- a/include/configs/omap3_logic.h
+++ b/include/configs/omap3_logic.h
@@ -33,6 +33,7 @@
 #define CONFIG_OMAP			/* in a TI OMAP core */
 #define CONFIG_OMAP34XX			/* which is a 34XX */
 #define CONFIG_OMAP3_LOGIC		/* working with Logic OMAP boards */
+#define CONFIG_OMAP_GPIO
 
 #undef CONFIG_USE_IRQ			/* no support for IRQs */
 
diff --git a/include/configs/omap3_mvblx.h b/include/configs/omap3_mvblx.h
index 6a1304681af1f434818ceed59c9fb755bbc311f3..30ca312931606edb1cf3464760365727719f5dd3 100644
--- a/include/configs/omap3_mvblx.h
+++ b/include/configs/omap3_mvblx.h
@@ -39,6 +39,7 @@
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
 #define CONFIG_MVBLX		1	/* working with mvBlueLYNX-X */
 #define CONFIG_MACH_TYPE	MACH_TYPE_MVBLX
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC	/* The chip has SDRC controller */
 
diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
index 15f67fcafd7a71f780bc82eaaaf0898c7735cbac..92bd8fcafcc007779eb1a685299dc7d0e44e4c6a 100644
--- a/include/configs/omap3_overo.h
+++ b/include/configs/omap3_overo.h
@@ -25,6 +25,7 @@
 #define CONFIG_OMAP				/* in a TI OMAP core */
 #define CONFIG_OMAP34XX				/* which is a 34XX */
 #define CONFIG_OMAP3_OVERO			/* working with overo */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC				/* The chip has SDRC controller */
 
diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
index 604b53d3cb4ef76687b6b8994937d013cf19df99..28f8a3ee426cbc9ec898b8aa0a182a5868b75365 100644
--- a/include/configs/omap3_pandora.h
+++ b/include/configs/omap3_pandora.h
@@ -29,6 +29,7 @@
 #define CONFIG_OMAP		1	/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
 #define CONFIG_OMAP3_PANDORA	1	/* working with pandora */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC	/* The chip has SDRC controller */
 
diff --git a/include/configs/omap3_zoom2.h b/include/configs/omap3_zoom2.h
index b60ece3c537caeed813a822e3181e28fae480d51..98b93f8c765ff42b7ce6ff605240b49dcf6be6c3 100644
--- a/include/configs/omap3_zoom2.h
+++ b/include/configs/omap3_zoom2.h
@@ -36,6 +36,7 @@
 #define CONFIG_OMAP		1	/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		1	/* which is a 34XX */
 #define CONFIG_OMAP3_ZOOM2	1	/* working with Zoom II */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SDRC	/* The chip has SDRC controller */
 
diff --git a/include/configs/omap4_common.h b/include/configs/omap4_common.h
index b2e5cc6b72afdefdb35d294ffcb288eaf41dc4a4..6f298a1f7d016695966ebd9716ff0bef72a915aa 100644
--- a/include/configs/omap4_common.h
+++ b/include/configs/omap4_common.h
@@ -35,6 +35,7 @@
 #define CONFIG_OMAP		1	/* in a TI OMAP core */
 #define CONFIG_OMAP44XX		1	/* which is a 44XX */
 #define CONFIG_OMAP4430		1	/* which is in a 4430 */
+#define CONFIG_OMAP_GPIO
 
 /* Get CPU defs */
 #include <asm/arch/cpu.h>
diff --git a/include/configs/omap5_evm.h b/include/configs/omap5_evm.h
index c5874bbf67b6d6d077df2697c5a7788292268726..088428035dbebe3445b9d442a06d9ec64f0f6182 100644
--- a/include/configs/omap5_evm.h
+++ b/include/configs/omap5_evm.h
@@ -38,6 +38,7 @@
 #define CONFIG_OMAP54XX	/* which is a 54XX */
 #define CONFIG_OMAP5430	/* which is in a 5430 */
 #define CONFIG_5430EVM	/* working with EVM */
+#define CONFIG_OMAP_GPIO
 
 /* Get CPU defs */
 #include <asm/arch/cpu.h>
diff --git a/include/configs/tam3517-common.h b/include/configs/tam3517-common.h
index 0751a9cbca5d09cf15b2d28cc7a3f81268d936ca..24f6f7e952379cbab894afb4a0de65c288beb0fd 100644
--- a/include/configs/tam3517-common.h
+++ b/include/configs/tam3517-common.h
@@ -27,6 +27,7 @@
  */
 #define CONFIG_OMAP		/* in a TI OMAP core */
 #define CONFIG_OMAP34XX		/* which is a 34XX */
+#define CONFIG_OMAP_GPIO
 
 #define CONFIG_SYS_TEXT_BASE 0x80008000