Skip to content

Commit 798681b

Browse files
zswanRussell King
authored andcommitted
ARM: 7158/1: add new MFP implement for NUC900
This patch is to add new MFP implement in mfp.c,since nuc900 mmc driver needs this function support. Signed-off-by: Wan ZongShun <[email protected]> Signed-off-by: Russell King <[email protected]>
1 parent a6dc544 commit 798681b

File tree

3 files changed

+45
-8
lines changed

3 files changed

+45
-8
lines changed

arch/arm/mach-w90x900/include/mach/mfp.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
extern void mfp_set_groupf(struct device *dev);
2020
extern void mfp_set_groupc(struct device *dev);
2121
extern void mfp_set_groupi(struct device *dev);
22-
extern void mfp_set_groupg(struct device *dev);
22+
extern void mfp_set_groupg(struct device *dev, const char *subname);
23+
extern void mfp_set_groupd(struct device *dev, const char *subname);
2324

2425
#endif /* __ASM_ARCH_MFP_H */

arch/arm/mach-w90x900/include/mach/nuc900_spi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#ifndef __ASM_ARCH_SPI_H
1515
#define __ASM_ARCH_SPI_H
1616

17-
extern void mfp_set_groupg(struct device *dev);
17+
extern void mfp_set_groupg(struct device *dev, const char *subname);
1818

1919
struct nuc900_spi_info {
2020
unsigned int num_cs;

arch/arm/mach-w90x900/mfp.c

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,25 @@
2626
#define REG_MFSEL (W90X900_VA_GCR + 0xC)
2727

2828
#define GPSELF (0x01 << 1)
29-
3029
#define GPSELC (0x03 << 2)
31-
#define ENKPI (0x02 << 2)
32-
#define ENNAND (0x01 << 2)
30+
#define GPSELD (0x0f << 4)
3331

3432
#define GPSELEI0 (0x01 << 26)
3533
#define GPSELEI1 (0x01 << 27)
3634

3735
#define GPIOG0TO1 (0x03 << 14)
3836
#define GPIOG2TO3 (0x03 << 16)
3937
#define GPIOG22TO23 (0x03 << 22)
38+
#define GPIOG18TO20 (0x07 << 18)
4039

4140
#define ENSPI (0x0a << 14)
4241
#define ENI2C0 (0x01 << 14)
4342
#define ENI2C1 (0x01 << 16)
4443
#define ENAC97 (0x02 << 22)
44+
#define ENSD1 (0x02 << 18)
45+
#define ENSD0 (0x0a << 4)
46+
#define ENKPI (0x02 << 2)
47+
#define ENNAND (0x01 << 2)
4548

4649
static DEFINE_MUTEX(mfp_mutex);
4750

@@ -127,16 +130,19 @@ void mfp_set_groupi(struct device *dev)
127130
}
128131
EXPORT_SYMBOL(mfp_set_groupi);
129132

130-
void mfp_set_groupg(struct device *dev)
133+
void mfp_set_groupg(struct device *dev, const char *subname)
131134
{
132135
unsigned long mfpen;
133136
const char *dev_id;
134137

135-
BUG_ON(!dev);
138+
BUG_ON((!dev) && (!subname));
136139

137140
mutex_lock(&mfp_mutex);
138141

139-
dev_id = dev_name(dev);
142+
if (subname != NULL)
143+
dev_id = subname;
144+
else
145+
dev_id = dev_name(dev);
140146

141147
mfpen = __raw_readl(REG_MFSEL);
142148

@@ -152,6 +158,9 @@ void mfp_set_groupg(struct device *dev)
152158
} else if (strcmp(dev_id, "nuc900-audio") == 0) {
153159
mfpen &= ~(GPIOG22TO23);
154160
mfpen |= ENAC97;/*enable AC97*/
161+
} else if (strcmp(dev_id, "nuc900-mmc-port1") == 0) {
162+
mfpen &= ~(GPIOG18TO20);
163+
mfpen |= (ENSD1 | 0x01);/*enable sd1*/
155164
} else {
156165
mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/
157166
}
@@ -162,3 +171,30 @@ void mfp_set_groupg(struct device *dev)
162171
}
163172
EXPORT_SYMBOL(mfp_set_groupg);
164173

174+
void mfp_set_groupd(struct device *dev, const char *subname)
175+
{
176+
unsigned long mfpen;
177+
const char *dev_id;
178+
179+
BUG_ON((!dev) && (!subname));
180+
181+
mutex_lock(&mfp_mutex);
182+
183+
if (subname != NULL)
184+
dev_id = subname;
185+
else
186+
dev_id = dev_name(dev);
187+
188+
mfpen = __raw_readl(REG_MFSEL);
189+
190+
if (strcmp(dev_id, "nuc900-mmc-port0") == 0) {
191+
mfpen &= ~GPSELD;/*enable sd0*/
192+
mfpen |= ENSD0;
193+
} else
194+
mfpen &= (~GPSELD);
195+
196+
__raw_writel(mfpen, REG_MFSEL);
197+
198+
mutex_unlock(&mfp_mutex);
199+
}
200+
EXPORT_SYMBOL(mfp_set_groupd);

0 commit comments

Comments
 (0)