mmc: sdhci: Allow for long command timeouts
authorAdrian Hunter <adrian.hunter@intel.com>
Thu, 14 Nov 2013 08:16:20 +0000 (10:16 +0200)
committerChris Ball <chris@printf.net>
Mon, 20 Jan 2014 14:54:40 +0000 (09:54 -0500)
The driver has a timer with a 10 second timeout to catch devices that stop
responding.  However it is possible for commands to take even longer than
that.  Change the timer timeout to reflect the command timeout.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Chris Ball <chris@printf.net>
drivers/mmc/host/sdhci.c

index 0a1893a..9ddef47 100644 (file)
@@ -1018,7 +1018,12 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
                mdelay(1);
        }
 
-       mod_timer(&host->timer, jiffies + 10 * HZ);
+       timeout = jiffies;
+       if (!cmd->data && cmd->cmd_timeout_ms > 9000)
+               timeout += DIV_ROUND_UP(cmd->cmd_timeout_ms, 1000) * HZ + HZ;
+       else
+               timeout += 10 * HZ;
+       mod_timer(&host->timer, timeout);
 
        host->cmd = cmd;