aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/wbsd.c
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/wbsd.c
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/wbsd.c')
-rw-r--r--drivers/mmc/wbsd.c32
1 files changed, 1 insertions, 31 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/*