}
 
 /*
- * GPIO device
- */
-static struct resource adm5120_gpio_resource[] __initdata = {
-       {
-               .start  = 0x3fffff,
-       },
-};
-
-void __init adm5120_add_device_gpio(u32 disable_mask)
-{
-       if (adm5120_package_pqfp())
-               disable_mask |= 0xf0;
-
-       adm5120_gpio_resource[0].start &= ~disable_mask;
-       platform_device_register_simple("GPIODEV", -1,
-                       adm5120_gpio_resource,
-                       ARRAY_SIZE(adm5120_gpio_resource));
-}
-
-/*
  * NAND flash
  */
 struct resource adm5120_nand_resources[] = {
 
 
 #include <asm/mach-adm5120/prom/myloader.h>
 
-#define COMPEX_GPIO_DEV_MASK   (1 << ADM5120_GPIO_PIN5)
-
 static void switch_bank_gpio5(unsigned bank)
 {
        switch (bank) {
        adm5120_add_device_uart(0);
        adm5120_add_device_uart(1);
 
-       adm5120_add_device_gpio(COMPEX_GPIO_DEV_MASK);
-
        compex_mac_setup();
 }
 
 
 #include <prom/admboot.h>
 
-#define BR61XX_GPIO_DEV_MASK   0
-
 #define BR61XX_CONFIG_OFFSET   0x8000
 #define BR61XX_CONFIG_SIZE             0x1000
 
        adm5120_flash0_data.parts = br61xx_partitions;
        adm5120_add_device_flash(0);
 
-       adm5120_add_device_gpio(BR61XX_GPIO_DEV_MASK);
-
        adm5120_add_device_uart(0);
        adm5120_add_device_uart(1);
 
 
 #include <asm/mach-adm5120/adm5120_defs.h>
 
 
-#define EB214A_GPIO_DEV_MASK   0
 #define EB214A_CONFIG_OFFSET   0x4000
 
 #define EB214A_KEYS_POLL_INTERVAL      20
        adm5120_flash0_data.parts = eb214a_partitions;
        adm5120_add_device_flash(0);
 
-       adm5120_add_device_gpio(EB214A_GPIO_DEV_MASK);
-
        adm5120_add_device_uart(0);
        /* adm5120_add_device_uart(1); */
 
 
        rb1xx_add_device_nand();
 
        adm5120_add_device_switch(1, rb11x_vlans);
-       adm5120_add_device_gpio(0);
        adm5120_add_device_gpio_leds(ARRAY_SIZE(rb11x_gpio_leds),
                                        rb11x_gpio_leds);
 }
 
        rb1xx_add_device_nand();
 
        adm5120_add_device_switch(3, rb133_vlans);
-       adm5120_add_device_gpio(0);
        adm5120_add_device_gpio_leds(ARRAY_SIZE(rb133_gpio_leds),
                                        rb133_gpio_leds);
 }
 
        rb1xx_add_device_nand();
 
        adm5120_add_device_switch(1, rb133c_vlans);
-       adm5120_add_device_gpio(0);
        adm5120_add_device_gpio_leds(ARRAY_SIZE(rb133c_gpio_leds),
                                        rb133c_gpio_leds);
 }
 
 #define RB150_GPIO_NAND_ALE    ADM5120_GPIO_P3L2
 #define RB150_GPIO_RESET_BUTTON        ADM5120_GPIO_PIN1 /* FIXME */
 
-#define RB150_GPIO_DEV_MASK    (1 << RB150_GPIO_NAND_READY     \
-                               | 1 << RB150_GPIO_NAND_NCE      \
-                               | 1 << RB150_GPIO_NAND_CLE      \
-                               | 1 << RB150_GPIO_NAND_ALE)
-
 #define RB150_NAND_DELAY       100
 
 #define RB150_NAND_WRITE(v) \
        rb1xx_generic_setup();
        rb150_add_device_nand();
 
-       adm5120_add_device_gpio(RB150_GPIO_DEV_MASK);
        adm5120_add_device_gpio_leds(ARRAY_SIZE(rb150_gpio_leds),
                                        rb150_gpio_leds);
        adm5120_add_device_switch(5, rb150_vlans);
 
 
 #include "rb-1xx.h"
 
-#define RB153_GPIO_DEV_MASK    (1 << ADM5120_GPIO_PIN0 \
-                               | 1 << ADM5120_GPIO_PIN3 \
-                               | 1 << ADM5120_GPIO_PIN4)
-
 static struct resource rb153_cf_resources[] __initdata = {
        {
                .name   = "cf_membase",
        rb1xx_add_device_nand();
        rb153_add_device_cf();
 
-       adm5120_add_device_gpio(RB153_GPIO_DEV_MASK);
        adm5120_add_device_gpio_leds(ARRAY_SIZE(rb153_gpio_leds),
                                        rb153_gpio_leds);
        adm5120_add_device_switch(5, rb153_vlans);
 
        rb1xx_generic_setup();
        rb1xx_add_device_nand();
 
-       adm5120_add_device_gpio(0);
        adm5120_add_device_switch(6, rb192_vlans);
 }
 
 
 #include <prom/zynos.h>
 
 #define P33X_GPIO_FLASH_A20    ADM5120_GPIO_PIN5
-#define P33X_GPIO_DEV_MASK     (1 << P33X_GPIO_FLASH_A20)
-
 static struct mtd_partition p33x_partitions[] = {
        {
                .name   = "bootbase",
        adm5120_add_device_uart(0);
        adm5120_add_device_uart(1);
 
-       adm5120_add_device_gpio(P33X_GPIO_DEV_MASK);
-
        adm5120_setup_eth_macs(bootbase_info.mac);
        adm5120_add_device_switch(6, p33x_vlans);
 
 
 extern void adm5120_add_device_uart(unsigned id) __init;
 extern void adm5120_add_device_nand(struct platform_nand_data *pdata) __init;
 extern void adm5120_add_device_switch(unsigned num_ports, u8 *vlan_map) __init;
-extern void adm5120_add_device_gpio(u32 disable_mask) __init;
 extern void adm5120_register_gpio_buttons(int id,
                                          unsigned poll_interval,
                                          unsigned nbuttons,
 
 +#endif
 --- /dev/null
 +++ b/arch/mips/ar231x/devices.c
-@@ -0,0 +1,173 @@
+@@ -0,0 +1,168 @@
 +#include <linux/kernel.h>
 +#include <linux/init.h>
 +#include <linux/serial.h>
 +
 +static int __init ar231x_register_devices(void)
 +{
-+      static struct resource res = {
-+              .start = 0xFFFFFFFF,
-+      };
-+
-+      platform_device_register_simple("GPIODEV", 0, &res, 1);
 +      ar5312_init_devices();
 +      ar2315_init_devices();
 +
 
 +      return NULL;
 +}
 +EXPORT_SYMBOL(nvram_get);
---- a/arch/mips/bcm47xx/setup.c
-+++ b/arch/mips/bcm47xx/setup.c
-@@ -381,3 +381,20 @@ static int __init bcm47xx_register_flash
-       return -1;
- }
- fs_initcall(bcm47xx_register_flash);
-+
-+static int __init bcm47xx_register_gpiodev(void)
-+{
-+      static struct resource res = {
-+              .start = 0xFFFFFFFF,
-+      };
-+      struct platform_device *pdev;
-+
-+      pdev = platform_device_register_simple("GPIODEV", 0, &res, 1);
-+      if (!pdev) {
-+              printk(KERN_ERR "bcm47xx: GPIODEV init failed\n");
-+              return -ENODEV;
-+      }
-+
-+      return 0;
-+}
-+device_initcall(bcm47xx_register_gpiodev);
 
 --- /dev/null
 +++ b/arch/arm/mach-cns3xxx/laguna.c
-@@ -0,0 +1,936 @@
+@@ -0,0 +1,931 @@
 +/*
 + * Gateworks Corporation Laguna Platform
 + *
 +/*
 + * GPIO
 + */
-+static struct platform_device laguna_gpio_dev = {
-+      .name = "GPIODEV",
-+      .id = -1,
-+};
 +
 +static struct gpio laguna_gpio_gw2391[] = {
 +      {   0, GPIOF_IN           , "*GPS_PPS" },
 +                      laguna_gpio_leds_data.num_leds = 2;
 +              }
 +              platform_device_register(&laguna_gpio_leds_device);
-+              platform_device_register(&laguna_gpio_dev);
 +      } else {
 +              // Do some defaults here, not sure what yet
 +      }
 
 +subsys_initcall(cambria_pci_init);
 --- /dev/null
 +++ b/arch/arm/mach-ixp4xx/cambria-setup.c
-@@ -0,0 +1,1006 @@
+@@ -0,0 +1,992 @@
 +/*
 + * arch/arm/mach-ixp4xx/cambria-setup.c
 + *
 +      {131, GPIOF_IN,            "DIO4" },
 +};
 +
-+static struct platform_device cambria_gpio = {
-+      .name     = "GPIODEV",
-+      .id     = -1,
-+      .num_resources    = ARRAY_SIZE(cambria_gpio_resources),
-+      .resource   = cambria_gpio_resources,
-+};
-+
 +static struct latch_led cambria_latch_leds[] = {
 +      {
 +              .name   = "ledA",  /* green led */
 +                                                                                                                                              (1 << 5) | (1 << 8) | (1 << 9) | (1 << 12);
 +      cambria_gpio_resources[0].end = cambria_gpio_resources[0].start;
 +
-+      platform_device_register(&cambria_gpio);
 +      platform_device_register(&cambria_npec_device);
 +      platform_device_register(&cambria_npea_device);
 +}
 +                                                                                                                                              (1 << 5) | (1 << 8) | (1 << 9) | (1 << 12);
 +      cambria_gpio_resources[0].end = cambria_gpio_resources[0].start;
 +
-+      platform_device_register(&cambria_gpio);
 +      platform_device_register(&cambria_optional_uart);
 +      platform_device_register(&cambria_npec_device);
 +      platform_device_register(&cambria_npea_device);
 +                                                                                                                                              (1 << 19) | (1 << 20) | (1 << 24) | (1 << 25);
 +      cambria_gpio_resources[0].end = cambria_gpio_resources[0].start;
 +
-+      platform_device_register(&cambria_gpio);
 +      platform_device_register(&cambria_optional_uart);
 +
 +      platform_device_register(&cambria_npec_device);
 +
 +static void __init cambria_gw2359_setup(void)
 +{
-+      platform_device_register(&cambria_gpio);
-+
 +#if defined(CONFIG_MVSWITCH_PHY) || defined(CONFIG_MVSWITCH_PHY_MODULE)
 +      /* The mvswitch driver has some hard-coded values which could
 +       * easily be turned into a platform resource if needed.  For now they
 +      cambria_optional_uart.num_resources   = 7,
 +      platform_device_register(&cambria_optional_uart);
 +
-+      platform_device_register(&cambria_gpio);
-+
 +#if defined(CONFIG_MVSWITCH_PHY) || defined(CONFIG_MVSWITCH_PHY_MODULE)
 +      /* The mvswitch driver has some hard-coded values which could
 +       * easily be turned into a platform resource if needed.  For now they
 
                .name   = "intrq",
                .start  = IRQ_IXP4XX_GPIO12,
                .end    = IRQ_IXP4XX_GPIO12,
-@@ -133,21 +210,280 @@ static struct platform_device avila_pata
+@@ -133,21 +210,275 @@ static struct platform_device avila_pata
        .resource               = avila_pata_resources,
  };
  
  };
  
 -static void __init avila_init(void)
-+static struct platform_device avila_gpio_dev = {
-+      .name     = "GPIODEV",
-+      .id     = -1,
-+};
-+
 +/*
 + * Audio Devices
 + */
  
        avila_pata_resources[0].start = IXP4XX_EXP_BUS_BASE(1);
        avila_pata_resources[0].end = IXP4XX_EXP_BUS_END(1);
-@@ -159,8 +495,274 @@ static void __init avila_init(void)
+@@ -159,8 +495,272 @@ static void __init avila_init(void)
        avila_pata_data.cs1_cfg = IXP4XX_EXP_CS2;
  
        platform_device_register(&avila_pata);
 +
 +      i2c_register_board_info(0, avila_i2c_board_info,
 +                      ARRAY_SIZE(avila_i2c_board_info));
-+
-+      platform_device_register(&avila_gpio_dev);
 +}
 +
 +static int __init avila_model_setup(void)
 
 +subsys_initcall(tw2662_pci_init);
 --- /dev/null
 +++ b/arch/arm/mach-ixp4xx/tw2662-setup.c
-@@ -0,0 +1,213 @@
+@@ -0,0 +1,205 @@
 +/*
 + * arch/arm/mach-ixp4xx/tw2662-setup.c
 + *
 +        },
 +};
 +
-+static struct platform_device tw2662_gpio = {
-+      .name                   = "GPIODEV",
-+      .id                     = -1,
-+      .num_resources          = ARRAY_SIZE(tw2662_gpio_resources),
-+      .resource               = tw2662_gpio_resources,
-+};
-+
 +static struct resource tw2662_uart_resources[] = {
 +      {
 +              .start          = IXP4XX_UART1_BASE_PHYS,
 +static struct platform_device *tw2662_devices[] __initdata = {
 +      &tw2662_flash,
 +      &tw2662_uart,
-+      &tw2662_gpio,
 +      &tw2662_eth[0],
 +      &tw2662_eth[1],
 +};
 
        .name = "ifxmips_gpio",
 };
 
-static struct platform_device ltq_gpiodev = {
-       .name = "GPIODEV",
-};
-
 void __init svip_register_gpio(void)
 {
        platform_device_register(<q_gpio);
-       platform_device_register(<q_gpiodev);
 }
 
 /* MUX */