aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorPierre Ossman <drzeus@drzeus.cx>2007-04-13 17:25:59 -0400
committerPierre Ossman <drzeus@drzeus.cx>2007-05-01 07:04:12 -0400
commit5721dbf217b073b40e31936781379ab2d17ea2ae (patch)
tree8bfdd4973d31bf80614adec6fa73fe6d26000886 /drivers/mmc
parent976d9276c826d6b35e4a2478fd4978dbd63bdd6f (diff)
wbsd: remove block crc test
Block completion interrupts occur faster than we can process them, so just ignore them competely. Commit also fixes up some incorrect register defines. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/wbsd.c32
-rw-r--r--drivers/mmc/wbsd.h5
2 files changed, 3 insertions, 34 deletions
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c
index 7a3e32ec46b8..673c64661d36 100644
--- a/drivers/mmc/wbsd.c
+++ b/drivers/mmc/wbsd.c
@@ -178,9 +178,8 @@ static void wbsd_init_device(struct wbsd_host *host)
178 ier = 0; 178 ier = 0;
179 ier |= WBSD_EINT_CARD; 179 ier |= WBSD_EINT_CARD;
180 ier |= WBSD_EINT_FIFO_THRE; 180 ier |= WBSD_EINT_FIFO_THRE;
181 ier |= WBSD_EINT_CCRC;
182 ier |= WBSD_EINT_TIMEOUT;
183 ier |= WBSD_EINT_CRC; 181 ier |= WBSD_EINT_CRC;
182 ier |= WBSD_EINT_TIMEOUT;
184 ier |= WBSD_EINT_TC; 183 ier |= WBSD_EINT_TC;
185 184
186 outb(ier, host->base + WBSD_EIR); 185 outb(ier, host->base + WBSD_EIR);
@@ -1166,30 +1165,6 @@ end:
1166 spin_unlock(&host->lock); 1165 spin_unlock(&host->lock);
1167} 1166}
1168 1167
1169static void wbsd_tasklet_block(unsigned long param)
1170{
1171 struct wbsd_host *host = (struct wbsd_host *)param;
1172 struct mmc_data *data;
1173
1174 spin_lock(&host->lock);
1175
1176 if ((wbsd_read_index(host, WBSD_IDX_CRCSTATUS) & WBSD_CRC_MASK) !=
1177 WBSD_CRC_OK) {
1178 data = wbsd_get_data(host);
1179 if (!data)
1180 goto end;
1181
1182 DBGF("CRC error\n");
1183
1184 data->error = MMC_ERR_BADCRC;
1185
1186 tasklet_schedule(&host->finish_tasklet);
1187 }
1188
1189end:
1190 spin_unlock(&host->lock);
1191}
1192
1193/* 1168/*
1194 * Interrupt handling 1169 * Interrupt handling
1195 */ 1170 */
@@ -1220,8 +1195,6 @@ static irqreturn_t wbsd_irq(int irq, void *dev_id)
1220 tasklet_hi_schedule(&host->crc_tasklet); 1195 tasklet_hi_schedule(&host->crc_tasklet);
1221 if (isr & WBSD_INT_TIMEOUT) 1196 if (isr & WBSD_INT_TIMEOUT)
1222 tasklet_hi_schedule(&host->timeout_tasklet); 1197 tasklet_hi_schedule(&host->timeout_tasklet);
1223 if (isr & WBSD_INT_BUSYEND)
1224 tasklet_hi_schedule(&host->block_tasklet);
1225 if (isr & WBSD_INT_TC) 1198 if (isr & WBSD_INT_TC)
1226 tasklet_schedule(&host->finish_tasklet); 1199 tasklet_schedule(&host->finish_tasklet);
1227 1200
@@ -1522,8 +1495,6 @@ static int __devinit wbsd_request_irq(struct wbsd_host *host, int irq)
1522 (unsigned long)host); 1495 (unsigned long)host);
1523 tasklet_init(&host->finish_tasklet, wbsd_tasklet_finish, 1496 tasklet_init(&host->finish_tasklet, wbsd_tasklet_finish,
1524 (unsigned long)host); 1497 (unsigned long)host);
1525 tasklet_init(&host->block_tasklet, wbsd_tasklet_block,
1526 (unsigned long)host);
1527 1498
1528 return 0; 1499 return 0;
1529} 1500}
@@ -1542,7 +1513,6 @@ static void __devexit wbsd_release_irq(struct wbsd_host *host)
1542 tasklet_kill(&host->crc_tasklet); 1513 tasklet_kill(&host->crc_tasklet);
1543 tasklet_kill(&host->timeout_tasklet); 1514 tasklet_kill(&host->timeout_tasklet);
1544 tasklet_kill(&host->finish_tasklet); 1515 tasklet_kill(&host->finish_tasklet);
1545 tasklet_kill(&host->block_tasklet);
1546} 1516}
1547 1517
1548/* 1518/*
diff --git a/drivers/mmc/wbsd.h b/drivers/mmc/wbsd.h
index 6fb4fa423219..873bda1e59b4 100644
--- a/drivers/mmc/wbsd.h
+++ b/drivers/mmc/wbsd.h
@@ -46,10 +46,10 @@
46 46
47#define WBSD_EINT_CARD 0x40 47#define WBSD_EINT_CARD 0x40
48#define WBSD_EINT_FIFO_THRE 0x20 48#define WBSD_EINT_FIFO_THRE 0x20
49#define WBSD_EINT_CCRC 0x10 49#define WBSD_EINT_CRC 0x10
50#define WBSD_EINT_TIMEOUT 0x08 50#define WBSD_EINT_TIMEOUT 0x08
51#define WBSD_EINT_PROGEND 0x04 51#define WBSD_EINT_PROGEND 0x04
52#define WBSD_EINT_CRC 0x02 52#define WBSD_EINT_BUSYEND 0x02
53#define WBSD_EINT_TC 0x01 53#define WBSD_EINT_TC 0x01
54 54
55#define WBSD_INT_PENDING 0x80 55#define WBSD_INT_PENDING 0x80
@@ -180,7 +180,6 @@ struct wbsd_host
180 struct tasklet_struct crc_tasklet; 180 struct tasklet_struct crc_tasklet;
181 struct tasklet_struct timeout_tasklet; 181 struct tasklet_struct timeout_tasklet;
182 struct tasklet_struct finish_tasklet; 182 struct tasklet_struct finish_tasklet;
183 struct tasklet_struct block_tasklet;
184 183
185 struct timer_list ignore_timer; /* Ignore detection timer */ 184 struct timer_list ignore_timer; /* Ignore detection timer */
186}; 185};