MIPS: Alchemy: devboards: wire up new PCMCIA driver.
authorManuel Lauss <manuel.lauss@googlemail.com>
Sun, 4 Oct 2009 12:55:28 +0000 (14:55 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 27 Feb 2010 11:52:51 +0000 (12:52 +0100)
Register the PCMCIA driver on all boards supported by it,
get rid of now-unused pcmcia macros in the board headers
(and subsequently empty pb1100/pb1500 ones).

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
22 files changed:
arch/mips/alchemy/devboards/Makefile
arch/mips/alchemy/devboards/db1x00/Makefile
arch/mips/alchemy/devboards/db1x00/board_setup.c
arch/mips/alchemy/devboards/db1x00/platform.c [new file with mode: 0644]
arch/mips/alchemy/devboards/pb1100/Makefile
arch/mips/alchemy/devboards/pb1100/board_setup.c
arch/mips/alchemy/devboards/pb1100/platform.c [new file with mode: 0644]
arch/mips/alchemy/devboards/pb1200/platform.c
arch/mips/alchemy/devboards/pb1500/Makefile
arch/mips/alchemy/devboards/pb1500/board_setup.c
arch/mips/alchemy/devboards/pb1500/platform.c [new file with mode: 0644]
arch/mips/alchemy/devboards/pb1550/Makefile
arch/mips/alchemy/devboards/pb1550/board_setup.c
arch/mips/alchemy/devboards/pb1550/platform.c [new file with mode: 0644]
arch/mips/alchemy/devboards/platform.c [new file with mode: 0644]
arch/mips/alchemy/devboards/platform.h [new file with mode: 0644]
arch/mips/include/asm/mach-db1x00/db1200.h
arch/mips/include/asm/mach-db1x00/db1x00.h
arch/mips/include/asm/mach-pb1x00/pb1100.h [deleted file]
arch/mips/include/asm/mach-pb1x00/pb1200.h
arch/mips/include/asm/mach-pb1x00/pb1500.h [deleted file]
arch/mips/include/asm/mach-pb1x00/pb1550.h

index adc6717..cfda972 100644 (file)
@@ -2,7 +2,7 @@
 # Alchemy Develboards
 #
 
-obj-y += prom.o bcsr.o
+obj-y += prom.o bcsr.o platform.o
 obj-$(CONFIG_PM)               += pm.o
 obj-$(CONFIG_MIPS_PB1000)      += pb1000/
 obj-$(CONFIG_MIPS_PB1100)      += pb1100/
index ce48d58..613c0c0 100644 (file)
@@ -5,4 +5,4 @@
 # Makefile for the Alchemy Semiconductor DBAu1xx0 boards.
 #
 
-obj-y := board_setup.o
+obj-y := board_setup.o platform.o
index 9a619ae..3b228a2 100644 (file)
@@ -187,8 +187,12 @@ static int __init db1x00_init_irq(void)
 #if defined(CONFIG_MIPS_MIRAGE)
        set_irq_type(AU1000_GPIO_7, IRQF_TRIGGER_RISING); /* TS pendown */
 #elif defined(CONFIG_MIPS_DB1550)
+       set_irq_type(AU1000_GPIO_0, IRQF_TRIGGER_LOW);  /* CD0# */
+       set_irq_type(AU1000_GPIO_1, IRQF_TRIGGER_LOW);  /* CD1# */
        set_irq_type(AU1000_GPIO_3, IRQF_TRIGGER_LOW);  /* CARD0# */
        set_irq_type(AU1000_GPIO_5, IRQF_TRIGGER_LOW);  /* CARD1# */
+       set_irq_type(AU1000_GPIO_21, IRQF_TRIGGER_LOW); /* STSCHG0# */
+       set_irq_type(AU1000_GPIO_22, IRQF_TRIGGER_LOW); /* STSCHG1# */
 #else
        set_irq_type(AU1000_GPIO_0, IRQF_TRIGGER_LOW);  /* CD0# */
        set_irq_type(AU1000_GPIO_3, IRQF_TRIGGER_LOW);  /* CD1# */
diff --git a/arch/mips/alchemy/devboards/db1x00/platform.c b/arch/mips/alchemy/devboards/db1x00/platform.c
new file mode 100644 (file)
index 0000000..b762b79
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * DBAu1xxx board platform device registration
+ *
+ * Copyright (C) 2009 Manuel Lauss
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-au1x00/au1xxx.h>
+#include "../platform.h"
+
+#if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100) || \
+    defined(CONFIG_MIPS_DB1500) || defined(CONFIG_MIPS_DB1550)
+#define DB1XXX_HAS_PCMCIA
+#endif
+
+/* DB1xxx PCMCIA interrupt sources:
+ * CD0/1       GPIO0/3
+ * STSCHG0/1   GPIO1/4
+ * CARD0/1     GPIO2/5
+ * Db1550:     0/1, 21/22, 3/5
+ */
+#ifndef CONFIG_MIPS_DB1550
+/* Db1000, Db1100, Db1500 */
+#define DB1XXX_PCMCIA_CD0      AU1000_GPIO_0
+#define DB1XXX_PCMCIA_STSCHG0  AU1000_GPIO_1
+#define DB1XXX_PCMCIA_CARD0    AU1000_GPIO_2
+#define DB1XXX_PCMCIA_CD1      AU1000_GPIO_3
+#define DB1XXX_PCMCIA_STSCHG1  AU1000_GPIO_4
+#define DB1XXX_PCMCIA_CARD1    AU1000_GPIO_5
+#else
+#define DB1XXX_PCMCIA_CD0      AU1000_GPIO_0
+#define DB1XXX_PCMCIA_STSCHG0  AU1500_GPIO_21
+#define DB1XXX_PCMCIA_CARD0    AU1000_GPIO_3
+#define DB1XXX_PCMCIA_CD1      AU1000_GPIO_1
+#define DB1XXX_PCMCIA_STSCHG1  AU1500_GPIO_22
+#define DB1XXX_PCMCIA_CARD1    AU1000_GPIO_5
+#endif
+
+static int __init db1xxx_dev_init(void)
+{
+#ifdef DB1XXX_HAS_PCMCIA
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   DB1XXX_PCMCIA_CARD0,
+                                   DB1XXX_PCMCIA_CD0,
+                                   /*DB1XXX_PCMCIA_STSCHG0*/0,
+                                   0,
+                                   0);
+
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00400000,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00440000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00400000,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00401000 - 1,
+                                   DB1XXX_PCMCIA_CARD1,
+                                   DB1XXX_PCMCIA_CD1,
+                                   /*DB1XXX_PCMCIA_STSCHG1*/0,
+                                   0,
+                                   1);
+#endif
+       return 0;
+}
+device_initcall(db1xxx_dev_init);
index c586dd7..7e3756c 100644 (file)
@@ -5,4 +5,4 @@
 # Makefile for the Alchemy Semiconductor Pb1100 board.
 #
 
-obj-y := board_setup.o
+obj-y := board_setup.o platform.o
index aad424a..b282d93 100644 (file)
@@ -29,7 +29,6 @@
 #include <linux/interrupt.h>
 
 #include <asm/mach-au1x00/au1000.h>
-#include <asm/mach-pb1x00/pb1100.h>
 #include <asm/mach-db1x00/bcsr.h>
 
 #include <prom.h>
diff --git a/arch/mips/alchemy/devboards/pb1100/platform.c b/arch/mips/alchemy/devboards/pb1100/platform.c
new file mode 100644 (file)
index 0000000..8487da5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Pb1100 board platform device registration
+ *
+ * Copyright (C) 2009 Manuel Lauss
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/init.h>
+
+#include <asm/mach-au1x00/au1000.h>
+
+#include "../platform.h"
+
+static int __init pb1100_dev_init(void)
+{
+       /* PCMCIA. single socket, identical to Pb1500 */
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   AU1000_GPIO_11,      /* card */
+                                   AU1000_GPIO_9,       /* insert */
+                                   /*AU1000_GPIO_10*/0, /* stschg */
+                                   0,                   /* eject */
+                                   0);                  /* id */
+       return 0;
+}
+device_initcall(pb1100_dev_init);
index dfdaabf..c8b7ae3 100644 (file)
@@ -28,6 +28,8 @@
 #include <asm/mach-au1x00/au1100_mmc.h>
 #include <asm/mach-db1x00/bcsr.h>
 
+#include "../platform.h"
+
 static int mmc_activity;
 
 static void pb1200mmc0_set_power(void *mmc_host, int state)
@@ -170,8 +172,57 @@ static struct platform_device *board_platform_devices[] __initdata = {
 
 static int __init board_register_devices(void)
 {
+#ifdef CONFIG_MIPS_PB1200
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   PB1200_PC0_INT,
+                                   PB1200_PC0_INSERT_INT,
+                                   /*PB1200_PC0_STSCHG_INT*/0,
+                                   PB1200_PC0_EJECT_INT,
+                                   0);
+
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00800000,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00840000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00800000,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00801000 - 1,
+                                   PB1200_PC1_INT,
+                                   PB1200_PC1_INSERT_INT,
+                                   /*PB1200_PC1_STSCHG_INT*/0,
+                                   PB1200_PC1_EJECT_INT,
+                                   1);
+#else
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   DB1200_PC0_INT,
+                                   DB1200_PC0_INSERT_INT,
+                                   /*DB1200_PC0_STSCHG_INT*/0,
+                                   DB1200_PC0_EJECT_INT,
+                                   0);
+
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00400000,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00440000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00400000,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00440000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00400000,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00401000 - 1,
+                                   DB1200_PC1_INT,
+                                   DB1200_PC1_INSERT_INT,
+                                   /*DB1200_PC1_STSCHG_INT*/0,
+                                   DB1200_PC1_EJECT_INT,
+                                   1);
+#endif
+
        return platform_add_devices(board_platform_devices,
                                    ARRAY_SIZE(board_platform_devices));
 }
-
-arch_initcall(board_register_devices);
+device_initcall(board_register_devices);
index 173b419..e83b151 100644 (file)
@@ -5,4 +5,4 @@
 # Makefile for the Alchemy Semiconductor Pb1500 board.
 #
 
-obj-y := board_setup.o
+obj-y := board_setup.o platform.o
index bf8e149..a148802 100644 (file)
@@ -29,7 +29,6 @@
 #include <linux/interrupt.h>
 
 #include <asm/mach-au1x00/au1000.h>
-#include <asm/mach-pb1x00/pb1500.h>
 #include <asm/mach-db1x00/bcsr.h>
 
 #include <prom.h>
@@ -156,6 +155,9 @@ void __init board_setup(void)
 
 static int __init pb1500_init_irq(void)
 {
+       set_irq_type(AU1000_GPIO_9, IRQF_TRIGGER_LOW);  /* CD0# */
+       set_irq_type(AU1000_GPIO_10, IRQF_TRIGGER_LOW); /* CARD0 */
+       set_irq_type(AU1000_GPIO_11, IRQF_TRIGGER_LOW); /* STSCHG0# */
        set_irq_type(AU1500_GPIO_204, IRQF_TRIGGER_HIGH);
        set_irq_type(AU1500_GPIO_201, IRQF_TRIGGER_LOW);
        set_irq_type(AU1500_GPIO_202, IRQF_TRIGGER_LOW);
diff --git a/arch/mips/alchemy/devboards/pb1500/platform.c b/arch/mips/alchemy/devboards/pb1500/platform.c
new file mode 100644 (file)
index 0000000..6c00cbe
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Pb1500 board platform device registration
+ *
+ * Copyright (C) 2009 Manuel Lauss
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/init.h>
+#include <asm/mach-au1x00/au1000.h>
+
+#include "../platform.h"
+
+static int __init pb1500_dev_init(void)
+{
+       /* PCMCIA. single socket, identical to Pb1500 */
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   AU1000_GPIO_11,      /* card */
+                                   AU1000_GPIO_9,       /* insert */
+                                   /*AU1000_GPIO_10*/0, /* stschg */
+                                   0,                   /* eject */
+                                   0);                  /* id */
+       return 0;
+}
+device_initcall(pb1500_dev_init);
index cff95bc..9661b6e 100644 (file)
@@ -5,4 +5,4 @@
 # Makefile for the Alchemy Semiconductor Pb1550 board.
 #
 
-obj-y := board_setup.o
+obj-y := board_setup.o platform.o
index 64f1ff9..64a6fc4 100644 (file)
@@ -33,6 +33,7 @@
 #include <asm/mach-au1x00/au1000.h>
 #include <asm/mach-pb1x00/pb1550.h>
 #include <asm/mach-db1x00/bcsr.h>
+#include <asm/mach-au1x00/gpio.h>
 
 #include <prom.h>
 
@@ -70,6 +71,8 @@ void __init board_setup(void)
        }
 #endif
 
+       alchemy_gpio2_enable();
+
        /*
         * Enable PSC1 SYNC for AC'97.  Normaly done in audio driver,
         * but it is board specific code, so put it here.
@@ -88,6 +91,11 @@ static int __init pb1550_init_irq(void)
 {
        set_irq_type(AU1000_GPIO_0, IRQF_TRIGGER_LOW);
        set_irq_type(AU1000_GPIO_1, IRQF_TRIGGER_LOW);
+       set_irq_type(AU1500_GPIO_201_205, IRQF_TRIGGER_HIGH);
+
+       /* enable both PCMCIA card irqs in the shared line */
+       alchemy_gpio2_enable_int(201);
+       alchemy_gpio2_enable_int(202);
 
        return 0;
 }
diff --git a/arch/mips/alchemy/devboards/pb1550/platform.c b/arch/mips/alchemy/devboards/pb1550/platform.c
new file mode 100644 (file)
index 0000000..aa5016c
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Pb1550 board platform device registration
+ *
+ * Copyright (C) 2009 Manuel Lauss
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <linux/init.h>
+
+#include <asm/mach-au1x00/au1000.h>
+#include <asm/mach-pb1x00/pb1550.h>
+
+#include "../platform.h"
+
+static int __init pb1550_dev_init(void)
+{
+       /* Pb1550, like all others, also has statuschange irqs; however they're
+       * wired up on one of the Au1550's shared GPIO201_205 line, which also
+       * services the PCMCIA card interrupts.  So we ignore statuschange and
+       * use the GPIO201_205 exclusively for card interrupts, since a) pcmcia
+       * drivers are used to shared irqs and b) statuschange isn't really use-
+       * ful anyway.
+       */
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00040000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00040000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00001000 - 1,
+                                   AU1500_GPIO_201_205,
+                                   AU1000_GPIO_0,
+                                   0,
+                                   0,
+                                   0);
+
+       db1x_register_pcmcia_socket(PCMCIA_ATTR_PSEUDO_PHYS + 0x00800000,
+                                   PCMCIA_ATTR_PSEUDO_PHYS + 0x00840000 - 1,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00800000,
+                                   PCMCIA_MEM_PSEUDO_PHYS  + 0x00840000 - 1,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00800000,
+                                   PCMCIA_IO_PSEUDO_PHYS   + 0x00801000 - 1,
+                                   AU1500_GPIO_201_205,
+                                   AU1000_GPIO_1,
+                                   0,
+                                   0,
+                                   1);
+
+       return 0;
+}
+device_initcall(pb1550_dev_init);
diff --git a/arch/mips/alchemy/devboards/platform.c b/arch/mips/alchemy/devboards/platform.c
new file mode 100644 (file)
index 0000000..48c537c
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * devoard misc stuff.
+ */
+
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/platform_device.h>
+
+/* register a pcmcia socket */
+int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
+                                      unsigned long pseudo_attr_end,
+                                      unsigned long pseudo_mem_start,
+                                      unsigned long pseudo_mem_end,
+                                      unsigned long pseudo_io_start,
+                                      unsigned long pseudo_io_end,
+                                      int card_irq,
+                                      int cd_irq,
+                                      int stschg_irq,
+                                      int eject_irq,
+                                      int id)
+{
+       int cnt, i, ret;
+       struct resource *sr;
+       struct platform_device *pd;
+
+       cnt = 5;
+       if (eject_irq)
+               cnt++;
+       if (stschg_irq)
+               cnt++;
+
+       sr = kzalloc(sizeof(struct resource) * cnt, GFP_KERNEL);
+       if (!sr)
+               return -ENOMEM;
+
+       pd = platform_device_alloc("db1xxx_pcmcia", id);
+       if (!pd) {
+               ret = -ENOMEM;
+               goto out;
+       }
+
+       sr[0].name      = "pseudo-attr";
+       sr[0].flags     = IORESOURCE_MEM;
+       sr[0].start     = pseudo_attr_start;
+       sr[0].end       = pseudo_attr_end;
+
+       sr[1].name      = "pseudo-mem";
+       sr[1].flags     = IORESOURCE_MEM;
+       sr[1].start     = pseudo_mem_start;
+       sr[1].end       = pseudo_mem_end;
+
+       sr[2].name      = "pseudo-io";
+       sr[2].flags     = IORESOURCE_MEM;
+       sr[2].start     = pseudo_io_start;
+       sr[2].end       = pseudo_io_end;
+
+       sr[3].name      = "insert";
+       sr[3].flags     = IORESOURCE_IRQ;
+       sr[3].start = sr[3].end = cd_irq;
+
+       sr[4].name      = "card";
+       sr[4].flags     = IORESOURCE_IRQ;
+       sr[4].start = sr[4].end = card_irq;
+
+       i = 5;
+       if (stschg_irq) {
+               sr[i].name      = "insert";
+               sr[i].flags     = IORESOURCE_IRQ;
+               sr[i].start = sr[i].end = cd_irq;
+               i++;
+       }
+       if (eject_irq) {
+               sr[i].name      = "eject";
+               sr[i].flags     = IORESOURCE_IRQ;
+               sr[i].start = sr[i].end = eject_irq;
+       }
+
+       pd->resource = sr;
+       pd->num_resources = cnt;
+
+       ret = platform_device_add(pd);
+       if (!ret)
+               return 0;
+
+       platform_device_put(pd);
+out:
+       kfree(sr);
+       return ret;
+}
diff --git a/arch/mips/alchemy/devboards/platform.h b/arch/mips/alchemy/devboards/platform.h
new file mode 100644 (file)
index 0000000..55ecf7e
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _DEVBOARD_PLATFORM_H_
+#define _DEVBOARD_PLATFORM_H_
+
+#include <linux/init.h>
+
+int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start,
+                                      unsigned long pseudo_attr_len,
+                                      unsigned long pseudo_mem_start,
+                                      unsigned long pseudo_mem_end,
+                                      unsigned long pseudo_io_start,
+                                      unsigned long pseudo_io_end,
+                                      int card_irq,
+                                      int cd_irq,
+                                      int stschg_irq,
+                                      int eject_irq,
+                                      int id);
+
+#endif
index b7f18e1..52b1d84 100644 (file)
@@ -103,21 +103,6 @@ enum external_pb1200_ints {
        DB1200_INT_END          = DB1200_INT_BEGIN + 15,
 };
 
-
-/*
- * DBAu1200 specific PCMCIA defines for drivers/pcmcia/au1000_db1x00.c
- */
-#define PCMCIA_MAX_SOCK  1
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP, SLOT) \
-       ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8))
-
-#define BOARD_PC0_INT  DB1200_PC0_INT
-#define BOARD_PC1_INT  DB1200_PC1_INT
-#define BOARD_CARD_INSERTED(SOCKET) (bcsr_read(BCSR_SIGSTAT) & (1 << (8 + (2 * SOCKET))))
-
 /* NAND chip select */
 #define NAND_CS 1
 
index cfa6429..a919dac 100644 (file)
 
 #endif
 
-/* PCMCIA DBAu1x00 specific defines */
-#define PCMCIA_MAX_SOCK  1
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP, SLOT)\
-       ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8))
-
 /*
  * NAND defines
  *
diff --git a/arch/mips/include/asm/mach-pb1x00/pb1100.h b/arch/mips/include/asm/mach-pb1x00/pb1100.h
deleted file mode 100644 (file)
index f2bf73a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Alchemy Semi Pb1100 Referrence Board
- *
- * Copyright 2001, 2008 MontaVista Software Inc.
- * Author: MontaVista Software, Inc. <source@mvista.com>
- *
- * ########################################################################
- *
- *  This program is free software; you can distribute it and/or modify it
- *  under the terms of the GNU General Public License (Version 2) as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * ########################################################################
- *
- *
- */
-#ifndef __ASM_PB1100_H
-#define __ASM_PB1100_H
-
-/* PCMCIA Pb1100 specific defines */
-#define PCMCIA_MAX_SOCK  0
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP) (((VCC) << 2) | ((VPP) << 0))
-
-#endif /* __ASM_PB1100_H */
index 2458eb4..962eb55 100644 (file)
@@ -135,20 +135,6 @@ enum external_pb1200_ints {
        PB1200_INT_END          = PB1200_INT_BEGIN + 15
 };
 
-/*
- * Pb1200 specific PCMCIA defines for drivers/pcmcia/au1000_db1x00.c
- */
-#define PCMCIA_MAX_SOCK  1
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP, SLOT) \
-       ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8))
-
-#define BOARD_PC0_INT  PB1200_PC0_INT
-#define BOARD_PC1_INT  PB1200_PC1_INT
-#define BOARD_CARD_INSERTED(SOCKET) (bcsr_read(BCSR_SIGSTAT & (1 << (8 + (2 * SOCKET))))
-
 /* NAND chip select */
 #define NAND_CS 1
 
diff --git a/arch/mips/include/asm/mach-pb1x00/pb1500.h b/arch/mips/include/asm/mach-pb1x00/pb1500.h
deleted file mode 100644 (file)
index 82431a7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Alchemy Semi Pb1500 Referrence Board
- *
- * Copyright 2001, 2008 MontaVista Software Inc.
- * Author: MontaVista Software, Inc. <source@mvista.com>
- *
- * ########################################################################
- *
- *  This program is free software; you can distribute it and/or modify it
- *  under the terms of the GNU General Public License (Version 2) as
- *  published by the Free Software Foundation.
- *
- *  This program is distributed in the hope it will be useful, but WITHOUT
- *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- *  for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * ########################################################################
- *
- *
- */
-#ifndef __ASM_PB1500_H
-#define __ASM_PB1500_H
-
-/* PCMCIA Pb1500 specific defines */
-#define PCMCIA_MAX_SOCK  0
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP) (((VCC) << 2) | ((VPP) << 0))
-
-#endif /* __ASM_PB1500_H */
index 306d584..5879641 100644 (file)
 #define SMBUS_PSC_BASE         PSC2_BASE_ADDR
 #define I2S_PSC_BASE           PSC3_BASE_ADDR
 
-#define PCMCIA_MAX_SOCK  1
-#define PCMCIA_NUM_SOCKS (PCMCIA_MAX_SOCK + 1)
-
-/* VPP/VCC */
-#define SET_VCC_VPP(VCC, VPP, SLOT) \
-       ((((VCC) << 2) | ((VPP) << 0)) << ((SLOT) * 8))
-
 #if defined(CONFIG_MTD_PB1550_BOOT) && defined(CONFIG_MTD_PB1550_USER)
 #define PB1550_BOTH_BANKS
 #elif defined(CONFIG_MTD_PB1550_BOOT) && !defined(CONFIG_MTD_PB1550_USER)