/* * 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 mmc_request_done(host->mmc, host->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); 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); } }
/* * Wait for a command to complete */ static void at91mci_process_command(struct at91mci_host *host, struct mmc_command *cmd) { unsigned int ier; ier = at91_mci_send_command(host, cmd); pr_debug("setting ier to %08X\n", ier); /* Stop on errors or the required value */ at91_mci_write(host, AT91_MCI_IER, AT91_MCI_ERRORS | ier); }