mmc: sdhci: Get rid of host->busy_handle
authorAdrian Hunter <adrian.hunter@intel.com>
Wed, 29 Jun 2016 13:24:24 +0000 (16:24 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 25 Jul 2016 08:34:38 +0000 (10:34 +0200)
Now that there is host->data_cmd to record the command for which a data
interrupt is expected, it is possible to determine whether a command with
busy signaling has completed without an extra flag. So host->busy_handle
is not needed. Remove it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.h

index c9456bd603a97f8aa37701dbeeb90143c7139d21..1f2c4a71ccecc7e7ada96abedd3e05fc76c91234 100644 (file)
@@ -1014,7 +1014,6 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
        mod_timer(&host->timer, timeout);
 
        host->cmd = cmd;
-       host->busy_handle = 0;
        if (cmd->data || cmd->flags & MMC_RSP_BUSY) {
                WARN_ON(host->data_cmd);
                host->data_cmd = cmd;
@@ -1094,9 +1093,8 @@ static void sdhci_finish_command(struct sdhci_host *host)
                if (cmd->data) {
                        DBG("Cannot wait for busy signal when also doing a data transfer");
                } else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ) &&
-                          !host->busy_handle) {
-                       /* Mark that command complete before busy is ended */
-                       host->busy_handle = 1;
+                          cmd == host->data_cmd) {
+                       /* Command complete before busy is ended */
                        return;
                }
        }
@@ -2393,10 +2391,10 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
                                 * before the command completed, so make
                                 * sure we do things in the proper order.
                                 */
-                               if (host->busy_handle)
-                                       tasklet_schedule(&host->finish_tasklet);
-                               else
-                                       host->busy_handle = 1;
+                               if (host->cmd == data_cmd)
+                                       return;
+
+                               tasklet_schedule(&host->finish_tasklet);
                                return;
                        }
                }
index 6e971709c9dffd1d905a48336606535e3cc1698f..13e0bd6cff5da364e528b808a9ae6b0928356e03 100644 (file)
@@ -469,7 +469,6 @@ struct sdhci_host {
        struct mmc_command *data_cmd;   /* Current data command */
        struct mmc_data *data;  /* Current data request */
        unsigned int data_early:1;      /* Data finished before cmd */
-       unsigned int busy_handle:1;     /* Handling the order of Busy-end */
 
        struct sg_mapping_iter sg_miter;        /* SG state for PIO */
        unsigned int blocks;    /* remaining PIO blocks */