diff options
author | Pierre Ossman <drzeus@drzeus.cx> | 2007-04-13 17:25:59 -0400 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2007-05-01 07:04:12 -0400 |
commit | 5721dbf217b073b40e31936781379ab2d17ea2ae (patch) | |
tree | 8bfdd4973d31bf80614adec6fa73fe6d26000886 /drivers/mmc | |
parent | 976d9276c826d6b35e4a2478fd4978dbd63bdd6f (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.c | 32 | ||||
-rw-r--r-- | drivers/mmc/wbsd.h | 5 |
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 | ||
1169 | static 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 | |||
1189 | end: | ||
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 | }; |