summaryrefslogtreecommitdiff
path: root/common/cmd_pcmcia.c
diff options
context:
space:
mode:
authordzu <dzu>2003-10-19 21:43:26 +0000
committerdzu <dzu>2003-10-19 21:43:26 +0000
commite7df029f1a24989532300c5e1bdfc83c77233594 (patch)
tree41ee459cafd0fcc3f644dd96f9921e5728995687 /common/cmd_pcmcia.c
parent3d1e8a9d4e40ce17a4fec75ee4055e7ddf6ca1a9 (diff)
downloadu-boot-imx-e7df029f1a24989532300c5e1bdfc83c77233594.zip
u-boot-imx-e7df029f1a24989532300c5e1bdfc83c77233594.tar.gz
u-boot-imx-e7df029f1a24989532300c5e1bdfc83c77233594.tar.bz2
Add CompactFlash support for NSCU
Diffstat (limited to 'common/cmd_pcmcia.c')
-rw-r--r--common/cmd_pcmcia.c58
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 */