]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mmc/host/sdhci.c
mmc: sdhci: Export sdhci_enable_sdio_irq() from sdhci.c
[karo-tx-linux.git] / drivers / mmc / host / sdhci.c
index a971fcfa6de7066db9ae9e3c3c83509b452a8513..4bdad8959ec26a15ff4663e57b446c0f6487b066 100644 (file)
@@ -502,8 +502,7 @@ static int sdhci_pre_dma_transfer(struct sdhci_host *host,
                return data->sg_count;
 
        sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
-                               data->flags & MMC_DATA_WRITE ?
-                               DMA_TO_DEVICE : DMA_FROM_DEVICE);
+                             mmc_get_dma_dir(data));
 
        if (sg_count == 0)
                return -ENOSPC;
@@ -1584,7 +1583,7 @@ void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing)
 }
 EXPORT_SYMBOL_GPL(sdhci_set_uhs_signaling);
 
-static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
+void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 {
        struct sdhci_host *host = mmc_priv(mmc);
        u8 ctrl;
@@ -1739,6 +1738,7 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 
        mmiowb();
 }
+EXPORT_SYMBOL_GPL(sdhci_set_ios);
 
 static int sdhci_get_cd(struct mmc_host *mmc)
 {
@@ -1832,7 +1832,7 @@ static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
        }
 }
 
-static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
+void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
 {
        struct sdhci_host *host = mmc_priv(mmc);
        unsigned long flags;
@@ -1852,9 +1852,10 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
        if (!enable)
                pm_runtime_put_noidle(host->mmc->parent);
 }
+EXPORT_SYMBOL_GPL(sdhci_enable_sdio_irq);
 
-static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
-                                            struct mmc_ios *ios)
+int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
+                                     struct mmc_ios *ios)
 {
        struct sdhci_host *host = mmc_priv(mmc);
        u16 ctrl;
@@ -1946,6 +1947,7 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
                return 0;
        }
 }
+EXPORT_SYMBOL_GPL(sdhci_start_signal_voltage_switch);
 
 static int sdhci_card_busy(struct mmc_host *mmc)
 {
@@ -2219,8 +2221,7 @@ static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
 
        if (data->host_cookie != COOKIE_UNMAPPED)
                dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
-                            data->flags & MMC_DATA_WRITE ?
-                              DMA_TO_DEVICE : DMA_FROM_DEVICE);
+                            mmc_get_dma_dir(data));
 
        data->host_cookie = COOKIE_UNMAPPED;
 }
@@ -2336,8 +2337,7 @@ static bool sdhci_request_done(struct sdhci_host *host)
 
                if (data && data->host_cookie == COOKIE_MAPPED) {
                        dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
-                                    (data->flags & MMC_DATA_READ) ?
-                                    DMA_FROM_DEVICE : DMA_TO_DEVICE);
+                                    mmc_get_dma_dir(data));
                        data->host_cookie = COOKIE_UNMAPPED;
                }
        }
@@ -3396,20 +3396,22 @@ int sdhci_setup_host(struct sdhci_host *host)
        if (!(host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) {
                host->timeout_clk = (host->caps & SDHCI_TIMEOUT_CLK_MASK) >>
                                        SDHCI_TIMEOUT_CLK_SHIFT;
+
+               if (host->caps & SDHCI_TIMEOUT_CLK_UNIT)
+                       host->timeout_clk *= 1000;
+
                if (host->timeout_clk == 0) {
-                       if (host->ops->get_timeout_clock) {
-                               host->timeout_clk =
-                                       host->ops->get_timeout_clock(host);
-                       } else {
+                       if (!host->ops->get_timeout_clock) {
                                pr_err("%s: Hardware doesn't specify timeout clock frequency.\n",
                                        mmc_hostname(mmc));
                                ret = -ENODEV;
                                goto undma;
                        }
-               }
 
-               if (host->caps & SDHCI_TIMEOUT_CLK_UNIT)
-                       host->timeout_clk *= 1000;
+                       host->timeout_clk =
+                               DIV_ROUND_UP(host->ops->get_timeout_clock(host),
+                                            1000);
+               }
 
                if (override_timeout_clk)
                        host->timeout_clk = override_timeout_clk;