sdhci: implement CAP_CLOCK_BASE_BROKEN quirk
PATCH 3/203 sdhci: implement CAP_CLOCK_BASE_BROKEN quirk
From: Anton Vorontsov <[email protected]>
Some hosts (e.g. as found in CNS3xxx SOCs) report wrong value in CLOCK_BASE capability field, and currently there is no way to force the SDHCI core to use the platform-provided base clock value.
This patch implements CAP_CLOCK_BASE_BROKEN quirk. When enabled, the SDHCI core will always use base clock frequency provided by the platform.
Signed-off-by Anton Vorontsov <[email protected]>
Cc Richard Röjfors <[email protected]>
Cc David Vrabel <[email protected]>
Cc Pierre Ossman <[email protected]>
Cc Ben Dooks <[email protected]>
Cc <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
drivers/mmc/host/sdhci.c | 3 ++- drivers/mmc/host/sdhci.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-)
drivers/mmc/host/sdhci.c renamed from drivers/mmc/host/sdhci.c~sdhci-implement-cap_clock_base_broken-quirk +2 -1
@@ -1744,7 +1744,8 @@ int sdhci_add_host(struct sdhci_host *ho host->max_clk = (caps &SDHCI_CLOCK_BASE_MASK ) >>SDHCI_CLOCK_BASE_SHIFT ; host->max_clk *=1000000 ; -if (host->max_clk ==0 ) { +if (host->max_clk ==0 || host->quirks & +SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN ) {if (!host->ops->get_max_clock) {printk (KERN_ERR "%s: Hardware doesn't specify base clock "
drivers/mmc/host/sdhci.h renamed from drivers/mmc/host/sdhci.h~sdhci-implement-cap_clock_base_broken-quirk +2 -0
@@ -236,6 +236,8 @@ struct sdhci_host {#define SDHCI_QUIRK_DELAY_AFTER_POWER (1<<23)/* Controller uses SDCLK instead of TMCLK for data timeouts */ #define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1<<24) +/* Controller reports wrong base clock capability */ +#define SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN (1<<25)int irq;/* Device IRQ */ void __iomem * ioaddr;/* Mapped address */
_