static void at91_mci_process_next(struct at91mci_host *host) { if (!(host->flags & FL_SENT_COMMAND)) { host->flags |= FL_SENT_COMMAND; at91_mci_send_command(host, host->request->cmd); } else if ((!(host->flags & FL_SENT_STOP)) && host->request->stop) { host->flags |= FL_SENT_STOP; at91_mci_send_command(host, host->request->stop); } else { del_timer(&host->timer); if (cpu_is_at91rm9200()) at91_reset_host(host); mmc_request_done(host->mmc, host->request); } }
/* * Process the next step in the request */ static void at91_mci_process_next(struct at91mci_host *host) { if (!(host->flags & FL_SENT_COMMAND)) { host->flags |= FL_SENT_COMMAND; at91_mci_send_command(host, host->request->cmd); } else if ((!(host->flags & FL_SENT_STOP)) && host->request->stop) { host->flags |= FL_SENT_STOP; at91_mci_send_command(host, host->request->stop); } else { del_timer(&host->timer); /* the mci controller hangs after some transfers, * and the workaround is to reset it after each transfer. */ at91_reset_host(host); mmc_request_done(host->mmc, host->request); } }
static void at91_timeout_timer(unsigned long data) { struct at91mci_host *host; host = (struct at91mci_host *)data; if (host->request) { dev_err(host->mmc->parent, "Timeout waiting end of packet\n"); if (host->cmd && host->cmd->data) { host->cmd->data->error = -ETIMEDOUT; } else { if (host->cmd) host->cmd->error = -ETIMEDOUT; else host->request->cmd->error = -ETIMEDOUT; } at91_reset_host(host); mmc_request_done(host->mmc, host->request); } }