static irqreturn_t jz_mmc_irq_worker(int irq, void *devid) { struct jz4740_mmc_host *host = (struct jz4740_mmc_host*)devid; if (host->cmd->error) jz4740_mmc_request_done(host); else jz4740_mmc_cmd_done(host); return IRQ_HANDLED; }
static void jz4740_mmc_timeout(unsigned long data) { struct jz4740_mmc_host *host = (struct jz4740_mmc_host *)data; if (!test_and_clear_bit(0, &host->waiting)) return; jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); host->req->cmd->error = -ETIMEDOUT; jz4740_mmc_request_done(host); }
static void jz4740_mmc_timeout(struct timer_list *t) { struct jz4740_mmc_host *host = from_timer(host, t, timeout_timer); if (!test_and_clear_bit(0, &host->waiting)) return; jz4740_mmc_set_irq_enabled(host, JZ_MMC_IRQ_END_CMD_RES, false); host->req->cmd->error = -ETIMEDOUT; jz4740_mmc_request_done(host); }
static void jz4740_mmc_timeout(unsigned long data) { struct jz4740_mmc_host *host = (struct jz4740_mmc_host*)data; unsigned long flags; spin_lock_irqsave(&host->lock, flags); if (!host->waiting) { spin_unlock_irqrestore(&host->lock, flags); return; } host->waiting = 0; spin_unlock_irqrestore(&host->lock, flags); host->req->cmd->error = -ETIMEDOUT; jz4740_mmc_request_done(host); }