From 15bca76694953f88464d1041e3e26a980ba55fd6 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Tue, 17 Mar 2009 00:13:57 +0300 Subject: [PATCH] --- yaml --- r: 140491 b: refs/heads/master c: 4240ff0a02cb52f7d10dc1df6d82ba9c27dba07b h: refs/heads/master i: 140489: 36cd8555c9bb03045f2770e252244ecdd35786a4 140487: 276f0e0103d381670534cb919001d9aef4595c4e v: v3 --- [refs] | 2 +- trunk/drivers/mmc/host/sdhci.c | 22 +++++++++++++++------- trunk/drivers/mmc/host/sdhci.h | 2 ++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 5c43d2cf3f15..190b3a30e1f4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c5075a1089e808d8f471ce21b02810cc98ab2692 +refs/heads/master: 4240ff0a02cb52f7d10dc1df6d82ba9c27dba07b diff --git a/trunk/drivers/mmc/host/sdhci.c b/trunk/drivers/mmc/host/sdhci.c index c814220d214e..34ab77bd12ae 100644 --- a/trunk/drivers/mmc/host/sdhci.c +++ b/trunk/drivers/mmc/host/sdhci.c @@ -1674,19 +1674,27 @@ int sdhci_add_host(struct sdhci_host *host) host->max_clk = (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; + host->max_clk *= 1000000; if (host->max_clk == 0) { - printk(KERN_ERR "%s: Hardware doesn't specify base clock " - "frequency.\n", mmc_hostname(mmc)); - return -ENODEV; + if (!host->ops->get_max_clock) { + printk(KERN_ERR + "%s: Hardware doesn't specify base clock " + "frequency.\n", mmc_hostname(mmc)); + return -ENODEV; + } + host->max_clk = host->ops->get_max_clock(host); } - host->max_clk *= 1000000; host->timeout_clk = (caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT; if (host->timeout_clk == 0) { - printk(KERN_ERR "%s: Hardware doesn't specify timeout clock " - "frequency.\n", mmc_hostname(mmc)); - return -ENODEV; + if (!host->ops->get_timeout_clock) { + printk(KERN_ERR + "%s: Hardware doesn't specify timeout clock " + "frequency.\n", mmc_hostname(mmc)); + return -ENODEV; + } + host->timeout_clk = host->ops->get_timeout_clock(host); } if (caps & SDHCI_TIMEOUT_CLK_UNIT) host->timeout_clk *= 1000; diff --git a/trunk/drivers/mmc/host/sdhci.h b/trunk/drivers/mmc/host/sdhci.h index 6980f2725b85..aab0652a4585 100644 --- a/trunk/drivers/mmc/host/sdhci.h +++ b/trunk/drivers/mmc/host/sdhci.h @@ -285,6 +285,8 @@ struct sdhci_ops { #endif int (*enable_dma)(struct sdhci_host *host); + unsigned int (*get_max_clock)(struct sdhci_host *host); + unsigned int (*get_timeout_clock)(struct sdhci_host *host); }; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS