diff options
Diffstat (limited to 'common/cmd_pcmcia.c')
-rw-r--r-- | common/cmd_pcmcia.c | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/common/cmd_pcmcia.c b/common/cmd_pcmcia.c index bfdcbda..1a8c123 100644 --- a/common/cmd_pcmcia.c +++ b/common/cmd_pcmcia.c @@ -160,7 +160,7 @@ int pcmcia_on (void) } #else -#if defined(CONFIG_LWMON) +#if defined(CONFIG_LWMON) || defined(CONFIG_NSCU) # define CFG_PCMCIA_TIMING (PCMCIA_SHT(9) | PCMCIA_SST(3) | PCMCIA_SL(12)) #else # define CFG_PCMCIA_TIMING (PCMCIA_SHT(2) | PCMCIA_SST(4) | PCMCIA_SL(9)) @@ -594,8 +594,8 @@ static int hardware_enable(int slot) sysp->sc_siumcr &= ~SIUMCR_DBGC11; /* set DBGC to 00 */ /* clear interrupt state, and disable interrupts */ - pcmp->pcmc_pscr = PCMCIA_MASK(_slot_); - pcmp->pcmc_per &= ~PCMCIA_MASK(_slot_); + pcmp->pcmc_pscr = PCMCIA_MASK(slot); + pcmp->pcmc_per &= ~PCMCIA_MASK(slot); /* * Disable interrupts, DMA, and PCMCIA buffers @@ -604,10 +604,13 @@ static int hardware_enable(int slot) debug ("Disable PCMCIA buffers and assert RESET\n"); reg = 0; reg |= __MY_PCMCIA_GCRX_CXRESET; /* active high */ +#ifndef NSCU_OE_INV reg |= __MY_PCMCIA_GCRX_CXOE; /* active low */ - PCMCIA_PGCRX(_slot_) = reg; +#endif + PCMCIA_PGCRX(slot) = reg; udelay(500); +#ifndef CONFIG_NSCU /* * Configure Port C pins for * 5 Volts Enable and 3 Volts enable @@ -617,6 +620,7 @@ static int hardware_enable(int slot) /* remove all power */ immap->im_ioport.iop_pcdat &= ~(0x0002 | 0x0004); +#endif /* * Make sure there is a card in the slot, then configure the interface. @@ -639,6 +643,7 @@ static int hardware_enable(int slot) reg, (reg&PCMCIA_VS1(slot))?"n":"ff", (reg&PCMCIA_VS2(slot))?"n":"ff"); +#ifndef CONFIG_NSCU if ((reg & mask) == mask) { immap->im_ioport.iop_pcdat |= 0x0004; puts (" 5.0V card found: "); @@ -647,6 +652,13 @@ static int hardware_enable(int slot) puts (" 3.3V card found: "); } immap->im_ioport.iop_pcdir |= (0x0002 | 0x0004); +#else + if ((reg & mask) == mask) { + puts (" 5.0V card found: "); + } else { + puts (" 3.3V card found: "); + } +#endif #if 0 /* VCC switch error flag, PCMCIA slot INPACK_ pin */ cp->cp_pbdir &= ~(0x0020 | 0x0010); @@ -655,10 +667,14 @@ static int hardware_enable(int slot) #endif udelay(1000); debug ("Enable PCMCIA buffers and stop RESET\n"); - reg = PCMCIA_PGCRX(_slot_); + reg = PCMCIA_PGCRX(slot); reg &= ~__MY_PCMCIA_GCRX_CXRESET; /* active high */ +#ifndef NSCU_OE_INV reg &= ~__MY_PCMCIA_GCRX_CXOE; /* active low */ - PCMCIA_PGCRX(_slot_) = reg; +#else + reg |= __MY_PCMCIA_GCRX_CXOE; /* active low */ +#endif + PCMCIA_PGCRX(slot) = reg; udelay(250000); /* some cards need >150 ms to come up :-( */ @@ -680,14 +696,18 @@ static int hardware_disable(int slot) immap = (immap_t *)CFG_IMMR; pcmp = (pcmconf8xx_t *)(&(((immap_t *)CFG_IMMR)->im_pcmcia)); +#ifndef CONFIG_NSCU /* remove all power */ immap->im_ioport.iop_pcdat &= ~(0x0002 | 0x0004); +#endif debug ("Disable PCMCIA buffers and assert RESET\n"); reg = 0; reg |= __MY_PCMCIA_GCRX_CXRESET; /* active high */ +#ifndef NSCU_OE_INV reg |= __MY_PCMCIA_GCRX_CXOE; /* active low */ - PCMCIA_PGCRX(_slot_) = reg; +#endif + PCMCIA_PGCRX(slot) = reg; udelay(10000); @@ -695,7 +715,12 @@ static int hardware_disable(int slot) } #endif /* CFG_CMD_PCMCIA */ - +#ifdef CONFIG_NSCU +static int voltage_set(int slot, int vcc, int vpp) +{ + return 0; +} +#else static int voltage_set(int slot, int vcc, int vpp) { volatile immap_t *immap; @@ -714,10 +739,14 @@ static int voltage_set(int slot, int vcc, int vpp) * and assert RESET signal */ debug ("Disable PCMCIA buffers and assert RESET\n"); - reg = PCMCIA_PGCRX(_slot_); + reg = PCMCIA_PGCRX(slot); reg |= __MY_PCMCIA_GCRX_CXRESET; /* active high */ +#ifndef NSCU_OE_INV reg |= __MY_PCMCIA_GCRX_CXOE; /* active low */ - PCMCIA_PGCRX(_slot_) = reg; +#else + reg &= ~__MY_PCMCIA_GCRX_CXOE; /* active low */ +#endif + PCMCIA_PGCRX(slot) = reg; udelay(500); /* @@ -755,16 +784,21 @@ static int voltage_set(int slot, int vcc, int vpp) done: debug ("Enable PCMCIA buffers and stop RESET\n"); - reg = PCMCIA_PGCRX(_slot_); + reg = PCMCIA_PGCRX(slot); reg &= ~__MY_PCMCIA_GCRX_CXRESET; /* active high */ +#ifndef NSCU_OE_INV reg &= ~__MY_PCMCIA_GCRX_CXOE; /* active low */ - PCMCIA_PGCRX(_slot_) = reg; +#else + reg |= __MY_PCMCIA_GCRX_CXOE; /* active low */ +#endif + PCMCIA_PGCRX(slot) = reg; udelay(500); debug ("voltage_set: " PCMCIA_BOARD_MSG " Slot %c, DONE\n", slot+'A'); return (0); } +#endif #endif /* TQM8xxL */ |