示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
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);
}