#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>
#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
#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
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
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;
/* return without setting 'detect' */
printk(KERN_ERR "pb1x00 bad VS (%d)\n",
vs0);
- return;
+ return 0;
}
state->detect = 1;
}
/* return without setting 'detect' */
printk(KERN_ERR "pb1x00 bad VS (%d)\n",
vs1);
- return;
+ return 0;
}
state->detect = 1;
}
#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);
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,