>From ab5cfb88aab633ef448749531a0b9ddb99a4ee1f Mon Sep 17 00:00:00 2001
From: Philip Rakity <[email protected]>
Date: Tue, 14 Dec 2010 16:56:41 -0800
Subject: [PATCH] sdhci: support setting f_max clock via call back

need ability to set f_max independent of max_clk.

setting max_clk does not work since our clock speed is fixed.
adjusting max_clk lower just messes up the clock dividers.

Signed-off-by: Philip Rakity <[email protected]>
---
 drivers/mmc/host/sdhci.c |    8 +++++++-
 drivers/mmc/host/sdhci.h |    1 +
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index f439881..6486009 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1884,7 +1884,13 @@ int sdhci_add_host(struct sdhci_host *host)
        else
                mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200;
 
-       mmc->f_max = host->max_clk;
+       if (host->ops->get_f_max_clock) {
+               mmc->f_max = host->ops->get_f_max_clock(host);
+               if (mmc->f_max > host->max_clk)
+                       mmc->f_max = host->max_clk;
+       } else
+               mmc->f_max = host->max_clk;
+
        mmc->caps |= MMC_CAP_SDIO_IRQ;
 
        /*
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 9dd7bc1..a8c43c9 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -224,6 +224,7 @@ struct sdhci_ops {
        unsigned int    (*get_ro)(struct sdhci_host *host);
        void    (*platform_reset_enter)(struct sdhci_host *host, u8 mask);
        void    (*platform_reset_exit)(struct sdhci_host *host, u8 mask);
+       unsigned int    (*get_f_max_clock)(struct sdhci_host *host);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
-- 
1.6.0.4

Attachment: 0008-sdhci-support-setting-f_max-clock-via-call-back.patch
Description: 0008-sdhci-support-setting-f_max-clock-via-call-back.patch

Reply via email to