diff options
Diffstat (limited to 'common/cmd_pcmcia.c')
-rw-r--r-- | common/cmd_pcmcia.c | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/common/cmd_pcmcia.c b/common/cmd_pcmcia.c index 1bd4bc5..8c17859 100644 --- a/common/cmd_pcmcia.c +++ b/common/cmd_pcmcia.c @@ -229,7 +229,7 @@ int pcmcia_on (void) #endif /* CONFIG_IDE_8xx_PCCARD */ #ifdef CONFIG_BMS2003 case 3: { /* map I/O window for 4xUART data/ctrl */ - win->br += 0x140000; + win->br += 0x40000; win->or = ( PCMCIA_BSIZE_256K | PCMCIA_PPS_8 | PCMCIA_PRS_IO @@ -622,6 +622,7 @@ static int hardware_enable(int slot) PCMCIA_PGCRX(slot) = reg; udelay(500); +#ifndef CONFIG_BMS2003 #ifndef CONFIG_NSCU /* * Configure Port C pins for @@ -633,6 +634,16 @@ static int hardware_enable(int slot) immap->im_ioport.iop_pcdat &= ~(0x0002 | 0x0004); #endif +#else /* CONFIG_BMS2003 */ + /* + * Configure Port B pins for + * 5 Volts Enable and 3 Volts enable + */ + immap->im_cpm.cp_pbpar &= ~(0x00000300); + + /* remove all power */ + immap->im_cpm.cp_pbdat |= 0x00000300; +#endif /* CONFIG_BMS2003 */ /* * Make sure there is a card in the slot, then configure the interface. @@ -641,7 +652,11 @@ static int hardware_enable(int slot) debug ("[%d] %s: PIPR(%p)=0x%x\n", __LINE__,__FUNCTION__, &(pcmp->pcmc_pipr),pcmp->pcmc_pipr); +#ifndef CONFIG_BMS2003 if (pcmp->pcmc_pipr & (0x18000000 >> (slot << 4))) { +#else + if (pcmp->pcmc_pipr & (0x10000000 >> (slot << 4))) { +#endif /* CONFIG_BMS2003 */ printf (" No Card found\n"); return (1); } @@ -657,14 +672,26 @@ static int hardware_enable(int slot) (reg&PCMCIA_VS2(slot))?"n":"ff"); #ifndef CONFIG_NSCU if ((reg & mask) == mask) { +#ifndef CONFIG_BMS2003 immap->im_ioport.iop_pcdat |= 0x0004; +#else + immap->im_cpm.cp_pbdat &= ~(0x0000100); +#endif /* CONFIG_BMS2003 */ puts (" 5.0V card found: "); } else { +#ifndef CONFIG_BMS2003 immap->im_ioport.iop_pcdat |= 0x0002; +#else + immap->im_cpm.cp_pbdat &= ~(0x0000200); +#endif /* CONFIG_BMS2003 */ puts (" 3.3V card found: "); } +#ifndef CONFIG_BMS2003 immap->im_ioport.iop_pcdir |= (0x0002 | 0x0004); #else + immap->im_cpm.cp_pbdir |= 0x00000300; +#endif /* CONFIG_BMS2003 */ +#else if ((reg & mask) == mask) { puts (" 5.0V card found: "); } else { @@ -708,10 +735,14 @@ static int hardware_disable(int slot) immap = (immap_t *)CFG_IMMR; pcmp = (pcmconf8xx_t *)(&(((immap_t *)CFG_IMMR)->im_pcmcia)); +#ifndef CONFIG_BMS2003 #ifndef CONFIG_NSCU /* remove all power */ immap->im_ioport.iop_pcdat &= ~(0x0002 | 0x0004); #endif +#else /* CONFIG_BMS2003 */ + immap->im_cpm.cp_pbdat |= 0x00000300; +#endif /* CONFIG_BMS2003 */ debug ("Disable PCMCIA buffers and assert RESET\n"); reg = 0; @@ -761,6 +792,7 @@ static int voltage_set(int slot, int vcc, int vpp) PCMCIA_PGCRX(slot) = reg; udelay(500); +#ifndef CONFIG_BMS2003 /* * Configure Port C pins for * 5 Volts Enable and 3 Volts enable, @@ -778,6 +810,26 @@ static int voltage_set(int slot, int vcc, int vpp) case 50: reg |= 0x0004; break; default: goto done; } +#else /* CONFIG_BMS2003 */ + /* + * Configure Port B pins for + * 5 Volts Enable and 3 Volts enable, + * Turn off all power + */ + debug ("PCMCIA power OFF\n"); + immap->im_cpm.cp_pbpar &= ~(0x00000300); + /* remove all power */ + + immap->im_cpm.cp_pbdat |= 0x00000300; + + reg = 0; + switch(vcc) { + case 0: break; + case 33: reg |= 0x00000200; break; + case 50: reg |= 0x00000100; break; + default: goto done; +} +#endif /* CONFIG_BMS2003 */ /* Checking supported voltages */ @@ -785,11 +837,21 @@ static int voltage_set(int slot, int vcc, int vpp) pcmp->pcmc_pipr, (pcmp->pcmc_pipr & 0x00008000) ? "only 5 V" : "can do 3.3V"); +#ifndef CONFIG_BMS2003 immap->im_ioport.iop_pcdat |= reg; immap->im_ioport.iop_pcdir |= (0x0002 | 0x0004); +#else + immap->im_cpm.cp_pbdat &= !reg; + immap->im_cpm.cp_pbdir |= 0x00000300; +#endif /* CONFIG_BMS2003 */ if (reg) { +#ifndef CONFIG_BMS2003 debug ("PCMCIA powered at %sV\n", (reg&0x0004) ? "5.0" : "3.3"); +#else + debug ("PCMCIA powered at %sV\n", + (reg&0x00000200) ? "5.0" : "3.3"); +#endif /* CONFIG_BMS2003 */ } else { debug ("PCMCIA powered down\n"); } @@ -1774,7 +1836,11 @@ static int hardware_enable (int slot) debug ("[%d] %s: PIPR(%p)=0x%x\n", __LINE__,__FUNCTION__, &(pcmp->pcmc_pipr),pcmp->pcmc_pipr); +#ifndef CONFIG_BMS2003 if (pcmp->pcmc_pipr & (0x18000000 >> (slot << 4))) { +#else + if (pcmp->pcmc_pipr & (0x10000000 >> (slot << 4))) { +#endif /* CONFIG_BMS2003 */ printf (" No Card found\n"); return (1); } |