aboutsummaryrefslogtreecommitdiff
path: root/drivers/mmc/host/sdhci.c
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2008-11-03 20:19:03 +0000
committerBen Dooks <ben-linux@fluff.org>2008-11-03 20:30:50 +0000
commit1e00ce0538023c76fb13ebcba48d93543ba3dd7f (patch)
tree9ad6ccdcd3701ca03bb680b8fee4a104cdcfbf7c /drivers/mmc/host/sdhci.c
parent6d26f8260a3c06933310d9641deae782182eba24 (diff)
SDHCI: Add change_clock callback for glue drivers
Add a change_clock callback to allow drivers to update device specific clock selections and control registers when there is a change in clock. Move the main part of sdhci_set_clock() to a new routine which can be called by the glue drivers to do the sdhci standard clock management. Update the sdhci-s3c driver to use this to select the appropriate clock source when clocks change. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r--drivers/mmc/host/sdhci.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 59c890e7b4c..280f3eafac9 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -907,13 +907,18 @@ static void sdhci_finish_command(struct sdhci_host *host)
static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
{
+ if (clock == host->clock)
+ return;
+
+ host->ops->change_clock(host, clock);
+}
+
+void sdhci_change_clock(struct sdhci_host *host, unsigned int clock)
+{
int div;
u16 clk;
unsigned long timeout;
- if (clock == host->clock)
- return;
-
writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
if (clock == 0)
@@ -950,6 +955,8 @@ out:
host->clock = clock;
}
+EXPORT_SYMBOL_GPL(sdhci_set_clock);
+
static void sdhci_set_power(struct sdhci_host *host, unsigned short power)
{
u8 pwr;