
#
# Patch managed by http://www.holgerschurig.de/patcher.html
#

--- linux-2.6.10/drivers/pcmcia/sa1100_collie.c~collie_scoop_pcmcia-r0.patch
+++ linux-2.6.10/drivers/pcmcia/sa1100_collie.c
@@ -21,6 +21,7 @@
 #include <asm/irq.h>
 #include <asm/delay.h>
 #include <asm/arch/collie.h>
+#include <asm/hardware/scoop.h>
 
 #include "sa1100_generic.h"
 
@@ -33,26 +34,7 @@
 
 static void collie_pcmcia_init_reset(void)
 {
-#define	COLLIE_SCP_INIT_DATA(adr,dat)	(((adr)<<16)|(dat))
-#define	COLLIE_SCP_INIT_DATA_END	((unsigned long)-1)
-	static const unsigned long scp_init[] =
-	{
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_MCR,0x0100),
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_CDR,0x0000),  // 04
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_CPR,0x0000),  // 0C
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_CCR,0x0000),  // 10
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_IMR,0x0000),  // 18
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_IRM,0x00FF),  // 14
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_ISR,0x0000),  // 1C
-		COLLIE_SCP_INIT_DATA(COLLIE_SCP_IRM,0x0000),
-		COLLIE_SCP_INIT_DATA_END
-	};
-	int	i;
-	for(i=0; scp_init[i] != COLLIE_SCP_INIT_DATA_END; i++)
-	{
-		int	adr = scp_init[i] >> 16;
-		COLLIE_SCP_REG(adr) = scp_init[i] & 0xFFFF;
-	}
+	reset_scoop();
 	keep_vs[0] = NO_KEEP_VS;
 }
 
@@ -72,8 +54,8 @@
 		return ret;
 	
 	/* enable interrupt */
-	COLLIE_SCP_REG_IMR = 0x00C0;
-	COLLIE_SCP_REG_MCR = 0x0101;
+	write_scoop_reg(SCOOP_IMR, 0x00C0);
+	write_scoop_reg(SCOOP_MCR, 0x0101);
 	keep_vs[0] = keep_vs[1] = NO_KEEP_VS;
 
 	return 0;
@@ -92,29 +74,29 @@
 {
 	unsigned short cpr, csr;
 
-	cpr = COLLIE_SCP_REG_CPR;
+	cpr = read_scoop_reg(SCOOP_CPR);
 	//COLLIE_SCP_REG_CDR = 0x0002;
-	COLLIE_SCP_REG_IRM = 0x00FF;
-	COLLIE_SCP_REG_ISR = 0x0000;
-	COLLIE_SCP_REG_IRM = 0x0000;
-	csr = COLLIE_SCP_REG_CSR;
+	write_scoop_reg(SCOOP_IRM, 0x00FF);
+	write_scoop_reg(SCOOP_ISR, 0x0000);
+	write_scoop_reg(SCOOP_IRM, 0x0000);
+	csr = read_scoop_reg(SCOOP_CSR);
 	if( csr & 0x0004 ){
 		/* card eject */
-		COLLIE_SCP_REG_CDR = 0x0000;
+		write_scoop_reg(SCOOP_CDR, 0x0000);
 		keep_vs[0] = NO_KEEP_VS;
 	}
 	else if( !(keep_vs[0] & NO_KEEP_VS) ){
 		/* keep vs1,vs2 */
-		COLLIE_SCP_REG_CDR = 0x0000;
+		write_scoop_reg(SCOOP_CDR, 0x0000);
 		csr |= keep_vs[0];
 	}
 	else if( cpr & 0x0003 ){
 		/* power on */
-		COLLIE_SCP_REG_CDR = 0x0000;
+		write_scoop_reg(SCOOP_CDR, 0x0000);
 		keep_vs[0] = (csr & 0x00C0);
 	}
 	else{	/* card detect */
-		COLLIE_SCP_REG_CDR = 0x0002;
+		write_scoop_reg(SCOOP_CDR, 0x0002);
 	}
 
 	state->detect = (csr & 0x0004)? 0:1;
@@ -155,10 +137,10 @@
 
 	local_irq_save(flags);
 
-	nmcr = (mcr = COLLIE_SCP_REG_MCR) & ~0x0010;
-	ncpr = (cpr = COLLIE_SCP_REG_CPR) & ~0x0083;
-	nccr = (ccr = COLLIE_SCP_REG_CCR) & ~0x0080;
-	nimr = (imr = COLLIE_SCP_REG_IMR) & ~0x003E;
+	nmcr = (mcr = read_scoop_reg(SCOOP_MCR)) & ~0x0010;
+	ncpr = (cpr = read_scoop_reg(SCOOP_CPR)) & ~0x0083;
+	nccr = (ccr = read_scoop_reg(SCOOP_CCR)) & ~0x0080;
+	nimr = (imr = read_scoop_reg(SCOOP_IMR)) & ~0x003E;
 
 	ncpr |= (state->Vcc == 33) ? 0x0001: 
 		(state->Vcc == 50) ? 0x0002:
@@ -177,14 +159,10 @@
 		((skt->status&SS_STSCHG) ? 0x0010: 0)|
 		((skt->status&SS_WRPROT) ? 0x0008: 0);
 
-	if( mcr != nmcr )
-		COLLIE_SCP_REG_MCR = nmcr;
-	if( cpr != ncpr )
-		COLLIE_SCP_REG_CPR = ncpr;
-	if( ccr != nccr )
-		COLLIE_SCP_REG_CCR = nccr;
-	if( imr != nimr )
-		COLLIE_SCP_REG_IMR = nimr;
+	if (mcr != nmcr) write_scoop_reg(SCOOP_MCR, nmcr);
+	if (cpr != ncpr) write_scoop_reg(SCOOP_CPR, ncpr);
+	if (ccr != nccr) write_scoop_reg(SCOOP_CCR, nccr);
+	if (imr != nimr) write_scoop_reg(SCOOP_IMR, nimr);
 
 	local_irq_restore(flags);
 
@@ -201,8 +179,7 @@
 	soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	 /* We need to disable SS_OUTPUT_ENA here. */
-	COLLIE_SCP_REG_CPR &= ~0x0080;
-
+	write_scoop_reg(SCOOP_CPR, read_scoop_reg(SCOOP_CPR) & ~0x0080)
 }
 
 static void collie_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
@@ -210,7 +187,7 @@
 	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	 /* We need to disable SS_OUTPUT_ENA here. */
-	COLLIE_SCP_REG_CPR &= ~0x0080;
+	write_scoop_reg(SCOOP_CPR, read_scoop_reg(SCOOP_CPR) & ~0x0080)
 }
 
 struct pcmcia_low_level collie_pcmcia_ops = { 

