vserver 1.9.5.x5
[linux-2.6.git] / drivers / pcmcia / au1000_pb1x00.c
index 40d5037..df19ce1 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/timer.h>
 #include <linux/mm.h>
 #include <linux/proc_fs.h>
+#include <linux/version.h>
 #include <linux/types.h>
 
 #include <pcmcia/version.h>
@@ -55,7 +56,7 @@
 #define PCMCIA_IRQ AU1000_GPIO_15
 #elif defined (CONFIG_MIPS_PB1500)
 #include <asm/pb1500.h>
-#define PCMCIA_IRQ AU1000_GPIO_11   /* fixme */
+#define PCMCIA_IRQ AU1500_GPIO_203
 #elif defined (CONFIG_MIPS_PB1100)
 #include <asm/pb1100.h>
 #define PCMCIA_IRQ AU1000_GPIO_11
@@ -82,9 +83,9 @@ static int pb1x00_pcmcia_init(struct pcmcia_init *init)
 #else /* fixme -- take care of the Pb1500 at some point */
 
        u16 pcr;
-       pcr = au_readw(PB1100_MEM_PCMCIA) & ~0xf; /* turn off power */
-       pcr &= ~(PB1100_PC_DEASSERT_RST | PB1100_PC_DRV_EN);
-       au_writew(pcr, PB1100_MEM_PCMCIA);
+       pcr = au_readw(PCMCIA_BOARD_REG) & ~0xf; /* turn off power */
+       pcr &= ~(PC_DEASSERT_RST | PC_DRV_EN);
+       au_writew(pcr, PCMCIA_BOARD_REG);
        au_sync_delay(500);
        return PCMCIA_NUM_SOCKS;
 #endif
@@ -102,9 +103,9 @@ static int pb1x00_pcmcia_shutdown(void)
        return 0;
 #else
        u16 pcr;
-       pcr = au_readw(PB1100_MEM_PCMCIA) & ~0xf; /* turn off power */
-       pcr &= ~(PB1100_PC_DEASSERT_RST | PB1100_PC_DRV_EN);
-       au_writew(pcr, PB1100_MEM_PCMCIA);
+       pcr = au_readw(PCMCIA_BOARD_REG) & ~0xf; /* turn off power */
+       pcr &= ~(PC_DEASSERT_RST | PC_DRV_EN);
+       au_writew(pcr, PCMCIA_BOARD_REG);
        au_sync_delay(2);
        return 0;
 #endif
@@ -123,9 +124,14 @@ pb1x00_pcmcia_socket_state(unsigned sock, struct pcmcia_state *state)
        vs0 = (vs0 >> 4) & 0x3;
        vs1 = (vs1 >> 12) & 0x3;
 #else
-       vs0 = (au_readw(PB1100_BOARD_STATUS) >> 4) & 0x3;
+       vs0 = (au_readw(BOARD_STATUS_REG) >> 4) & 0x3;
+#ifdef CONFIG_MIPS_PB1500
+       inserted0 = !((au_readl(GPIO2_PINSTATE) >> 1) & 0x1); /* gpio 201 */
+#else /* Pb1100 */
        inserted0 = !((au_readl(SYS_PINSTATERD) >> 9) & 0x1); /* gpio 9 */
 #endif
+       inserted1 = 0;
+#endif
 
        state->ready = 0;
        state->vs_Xv = 0;
@@ -145,7 +151,7 @@ pb1x00_pcmcia_socket_state(unsigned sock, struct pcmcia_state *state)
                                        /* return without setting 'detect' */
                                        printk(KERN_ERR "pb1x00 bad VS (%d)\n",
                                                        vs0);
-                                       return;
+                                       return 0;
                        }
                        state->detect = 1;
                }
@@ -163,7 +169,7 @@ pb1x00_pcmcia_socket_state(unsigned sock, struct pcmcia_state *state)
                                        /* return without setting 'detect' */
                                        printk(KERN_ERR "pb1x00 bad VS (%d)\n",
                                                        vs1);
-                                       return;
+                                       return 0;
                        }
                        state->detect = 1;
                }
@@ -324,7 +330,7 @@ pb1x00_pcmcia_configure_socket(const struct pcmcia_configure *configure)
 
 #else
 
-       pcr = au_readw(PB1100_MEM_PCMCIA) & ~0xf;
+       pcr = au_readw(PCMCIA_BOARD_REG) & ~0xf;
 
        debug("Vcc %dV Vpp %dV, pcr %x, reset %d\n", 
                        configure->vcc, configure->vpp, pcr, configure->reset);
@@ -383,26 +389,27 @@ pb1x00_pcmcia_configure_socket(const struct pcmcia_configure *configure)
                        break;
        }
 
-       au_writew(pcr, PB1100_MEM_PCMCIA);
+       au_writew(pcr, PCMCIA_BOARD_REG);
        au_sync_delay(300);
 
        if (!configure->reset) {
-               pcr |= PB1100_PC_DRV_EN;
-               au_writew(pcr, PB1100_MEM_PCMCIA);
+               pcr |= PC_DRV_EN;
+               au_writew(pcr, PCMCIA_BOARD_REG);
                au_sync_delay(100);
-               pcr |= PB1100_PC_DEASSERT_RST;
-               au_writew(pcr, PB1100_MEM_PCMCIA);
+               pcr |= PC_DEASSERT_RST;
+               au_writew(pcr, PCMCIA_BOARD_REG);
                au_sync_delay(100);
        }
        else {
-               pcr &= ~(PB1100_PC_DEASSERT_RST | PB1100_PC_DRV_EN);
-               au_writew(pcr, PB1100_MEM_PCMCIA);
+               pcr &= ~(PC_DEASSERT_RST | PC_DRV_EN);
+               au_writew(pcr, PCMCIA_BOARD_REG);
                au_sync_delay(100);
        }
 #endif
        return 0;
 }
 
+
 struct pcmcia_low_level pb1x00_pcmcia_ops = { 
        pb1x00_pcmcia_init,
        pb1x00_pcmcia_shutdown,