diff options
Diffstat (limited to 'arch/arm/mach-w90x900/mfp.c')
| -rw-r--r-- | arch/arm/mach-w90x900/mfp.c | 48 | 
1 files changed, 42 insertions, 6 deletions
diff --git a/arch/arm/mach-w90x900/mfp.c b/arch/arm/mach-w90x900/mfp.c index fb7fb627b1a..9dd74612bb8 100644 --- a/arch/arm/mach-w90x900/mfp.c +++ b/arch/arm/mach-w90x900/mfp.c @@ -26,10 +26,8 @@  #define REG_MFSEL	(W90X900_VA_GCR + 0xC)  #define GPSELF		(0x01 << 1) -  #define GPSELC		(0x03 << 2) -#define ENKPI		(0x02 << 2) -#define ENNAND		(0x01 << 2) +#define GPSELD		(0x0f << 4)  #define GPSELEI0	(0x01 << 26)  #define GPSELEI1	(0x01 << 27) @@ -37,11 +35,16 @@  #define GPIOG0TO1	(0x03 << 14)  #define GPIOG2TO3	(0x03 << 16)  #define GPIOG22TO23	(0x03 << 22) +#define GPIOG18TO20	(0x07 << 18)  #define ENSPI		(0x0a << 14)  #define ENI2C0		(0x01 << 14)  #define ENI2C1		(0x01 << 16)  #define ENAC97		(0x02 << 22) +#define ENSD1		(0x02 << 18) +#define ENSD0		(0x0a << 4) +#define ENKPI		(0x02 << 2) +#define ENNAND		(0x01 << 2)  static DEFINE_MUTEX(mfp_mutex); @@ -127,16 +130,19 @@ void mfp_set_groupi(struct device *dev)  }  EXPORT_SYMBOL(mfp_set_groupi); -void mfp_set_groupg(struct device *dev) +void mfp_set_groupg(struct device *dev, const char *subname)  {  	unsigned long mfpen;  	const char *dev_id; -	BUG_ON(!dev); +	BUG_ON((!dev) && (!subname));  	mutex_lock(&mfp_mutex); -	dev_id = dev_name(dev); +	if (subname != NULL) +		dev_id = subname; +	else +		dev_id = dev_name(dev);  	mfpen = __raw_readl(REG_MFSEL); @@ -152,6 +158,9 @@ void mfp_set_groupg(struct device *dev)  	} else if (strcmp(dev_id, "nuc900-audio") == 0) {  		mfpen &= ~(GPIOG22TO23);  		mfpen |= ENAC97;/*enable AC97*/ +	} else if (strcmp(dev_id, "nuc900-mmc-port1") == 0) { +		mfpen &= ~(GPIOG18TO20); +		mfpen |= (ENSD1 | 0x01);/*enable sd1*/  	} else {  		mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/  	} @@ -162,3 +171,30 @@ void mfp_set_groupg(struct device *dev)  }  EXPORT_SYMBOL(mfp_set_groupg); +void mfp_set_groupd(struct device *dev, const char *subname) +{ +	unsigned long mfpen; +	const char *dev_id; + +	BUG_ON((!dev) && (!subname)); + +	mutex_lock(&mfp_mutex); + +	if (subname != NULL) +		dev_id = subname; +	else +		dev_id = dev_name(dev); + +	mfpen = __raw_readl(REG_MFSEL); + +	if (strcmp(dev_id, "nuc900-mmc-port0") == 0) { +		mfpen &= ~GPSELD;/*enable sd0*/ +		mfpen |= ENSD0; +	} else +		mfpen &= (~GPSELD); + +	__raw_writel(mfpen, REG_MFSEL); + +	mutex_unlock(&mfp_mutex); +} +EXPORT_SYMBOL(mfp_set_groupd);  |