mmc: sdhci: Factor out target_timeout calculation
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 27 Apr 2018 11:47:16 +0000 (17:17 +0530)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 3 May 2018 07:36:20 +0000 (09:36 +0200)
Factor out the target_timeout calculation so it can be re-used.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c

index 8da118d0d2c450c38c654074f05938ffe4e4a4fa..b229354e5b8899e1ba90f743f6468deec79c2935 100644 (file)
@@ -709,6 +709,35 @@ static u32 sdhci_sdma_address(struct sdhci_host *host)
                return sg_dma_address(host->data->sg);
 }
 
+static unsigned int sdhci_target_timeout(struct sdhci_host *host,
+                                        struct mmc_command *cmd,
+                                        struct mmc_data *data)
+{
+       unsigned int target_timeout;
+
+       /* timeout in us */
+       if (!data) {
+               target_timeout = cmd->busy_timeout * 1000;
+       } else {
+               target_timeout = DIV_ROUND_UP(data->timeout_ns, 1000);
+               if (host->clock && data->timeout_clks) {
+                       unsigned long long val;
+
+                       /*
+                        * data->timeout_clks is in units of clock cycles.
+                        * host->clock is in Hz.  target_timeout is in us.
+                        * Hence, us = 1000000 * cycles / Hz.  Round up.
+                        */
+                       val = 1000000ULL * data->timeout_clks;
+                       if (do_div(val, host->clock))
+                               target_timeout++;
+                       target_timeout += val;
+               }
+       }
+
+       return target_timeout;
+}
+
 static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
                             bool *too_big)
 {
@@ -732,24 +761,7 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
                return 0xE;
 
        /* timeout in us */
-       if (!data)
-               target_timeout = cmd->busy_timeout * 1000;
-       else {
-               target_timeout = DIV_ROUND_UP(data->timeout_ns, 1000);
-               if (host->clock && data->timeout_clks) {
-                       unsigned long long val;
-
-                       /*
-                        * data->timeout_clks is in units of clock cycles.
-                        * host->clock is in Hz.  target_timeout is in us.
-                        * Hence, us = 1000000 * cycles / Hz.  Round up.
-                        */
-                       val = 1000000ULL * data->timeout_clks;
-                       if (do_div(val, host->clock))
-                               target_timeout++;
-                       target_timeout += val;
-               }
-       }
+       target_timeout = sdhci_target_timeout(host, cmd, data);
 
        /*
         * Figure out needed cycles.