Date: | 2010-06-27 23:45:23 (13 years 9 months ago) |
---|---|
Author: | Lars C. |
Commit: | d55f3fec4fd699ad89780402d80fb87095c79a1e |
Message: | mmc: jz4740: Rework irq handler |
Files: |
drivers/mmc/host/jz4740_mmc.c (4 diffs) |
Change Details
drivers/mmc/host/jz4740_mmc.c | ||
---|---|---|
185 | 185 | req = host->req; |
186 | 186 | host->req = NULL; |
187 | 187 | |
188 | if (!unlikely(req)) | |
189 | return; | |
190 | ||
191 | 188 | mmc_request_done(host->mmc, req); |
192 | 189 | } |
193 | 190 | |
... | ... | |
371 | 368 | if (!test_and_clear_bit(0, &host->waiting)) |
372 | 369 | return; |
373 | 370 | |
371 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); | |
372 | ||
374 | 373 | host->req->cmd->error = -ETIMEDOUT; |
375 | 374 | jz4740_mmc_request_done(host); |
376 | 375 | } |
... | ... | |
493 | 492 | irq_reg &= ~host->irq_mask; |
494 | 493 | |
495 | 494 | tmp &= ~(JZ_MMC_IRQ_TXFIFO_WR_REQ | JZ_MMC_IRQ_RXFIFO_RD_REQ | |
496 | JZ_MMC_IRQ_PRG_DONE | JZ_MMC_IRQ_DATA_TRAN_DONE); | |
495 | JZ_MMC_IRQ_PRG_DONE | JZ_MMC_IRQ_DATA_TRAN_DONE); | |
497 | 496 | |
498 | 497 | if (tmp != irq_reg) |
499 | 498 | writew(tmp & ~irq_reg, host->base + JZ_REG_MMC_IREG); |
... | ... | |
506 | 505 | if (!host->req || !host->cmd) |
507 | 506 | goto handled; |
508 | 507 | |
509 | if (!test_and_clear_bit(0, &host->waiting)) | |
508 | if (!(irq_reg & JZ_MMC_IRQ_END_CMD_RES)) | |
510 | 509 | goto handled; |
511 | 510 | |
512 | del_timer(&host->timeout_timer); | |
513 | ||
514 | status = readl(host->base + JZ_REG_MMC_STATUS); | |
515 | ||
516 | if (status & JZ_MMC_STATUS_TIMEOUT_RES) { | |
517 | host->cmd->error = -ETIMEDOUT; | |
518 | } else if (status & JZ_MMC_STATUS_CRC_RES_ERR) { | |
519 | host->cmd->error = -EIO; | |
520 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | |
521 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | |
522 | host->cmd->data->error = -EIO; | |
523 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | |
524 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | |
525 | host->cmd->data->error = -EIO; | |
526 | } | |
511 | if (test_and_clear_bit(0, &host->waiting)) { | |
512 | del_timer(&host->timeout_timer); | |
513 | ||
514 | status = readl(host->base + JZ_REG_MMC_STATUS); | |
515 | ||
516 | if (status & JZ_MMC_STATUS_TIMEOUT_RES) { | |
517 | host->cmd->error = -ETIMEDOUT; | |
518 | } else if (status & JZ_MMC_STATUS_CRC_RES_ERR) { | |
519 | host->cmd->error = -EIO; | |
520 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | |
521 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | |
522 | host->cmd->data->error = -EIO; | |
523 | } else if (status & (JZ_MMC_STATUS_CRC_READ_ERROR | | |
524 | JZ_MMC_STATUS_CRC_WRITE_ERROR)) { | |
525 | host->cmd->data->error = -EIO; | |
526 | } | |
527 | 527 | |
528 | if (irq_reg & JZ_MMC_IRQ_END_CMD_RES) { | |
529 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); | |
530 | writew(JZ_MMC_IRQ_END_CMD_RES, host->base + JZ_REG_MMC_IREG); | |
531 | 528 | ret = IRQ_WAKE_THREAD; |
532 | 529 | } |
533 | 530 | |
534 | return ret; | |
531 | jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); | |
532 | writew(JZ_MMC_IRQ_END_CMD_RES, host->base + JZ_REG_MMC_IREG); | |
535 | 533 | |
536 | 534 | handled: |
537 | writew(0xff, host->base + JZ_REG_MMC_IREG); | |
538 | return IRQ_HANDLED; | |
535 | return ret; | |
539 | 536 | } |
540 | 537 | |
541 | 538 | static int jz4740_mmc_set_clock_rate(struct jz4740_mmc_host *host, int rate) |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9