mmc: sdhci-iproc: add bcm2835 support
authorStefan Wahren <stefan.wahren@i2se.com>
Wed, 27 Jan 2016 22:25:41 +0000 (22:25 +0000)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 29 Feb 2016 10:02:54 +0000 (11:02 +0100)
Scott Branden from Broadcom said that the BCM2835 eMMC IP core is
very similar to IPROC and share most of the quirks. So use this driver
instead of separate one.

The sdhci-iproc contains a better workaround for the clock domain
crossing problem which doesn't need any delays. This results in a
better write performance.

Btw we get the rid of the SDHCI_CAPABILITIES hack in the sdhci_readl
function.

Suggested-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Acked-by: Eric Anholt <eric@anholt.net>
Acked-by: Scott Branden <sbranden@broadcom.com>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/Kconfig
drivers/mmc/host/sdhci-iproc.c

index 3f907db1d0e5348ee5ea3deb799e2bbc4a9d3e6f..e8e06562d2a997661420ab69f4c47a8b49643b00 100644 (file)
@@ -318,15 +318,15 @@ config MMC_SDHCI_F_SDH30
          If unsure, say N.
 
 config MMC_SDHCI_IPROC
-       tristate "SDHCI platform support for the iProc SD/MMC Controller"
-       depends on ARCH_BCM_IPROC || COMPILE_TEST
+       tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller"
+       depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST
        depends on MMC_SDHCI_PLTFM
        default ARCH_BCM_IPROC
        select MMC_SDHCI_IO_ACCESSORS
        help
          This selects the iProc SD/MMC controller.
 
-         If you have an IPROC platform with SD or MMC devices,
+         If you have a BCM2835 or IPROC platform with SD or MMC devices,
          say Y or M here.
 
          If unsure, say N.
index cdc6c4a0af8454b09ab884f0ee07e99b9827f18e..871c92c03a7725c56a2302a8dc4a69145b3e62eb 100644 (file)
@@ -169,7 +169,22 @@ static const struct sdhci_iproc_data iproc_data = {
        .mmc_caps = MMC_CAP_1_8V_DDR,
 };
 
+static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = {
+       .quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION |
+                 SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
+                 SDHCI_QUIRK_MISSING_CAPS,
+       .ops = &sdhci_iproc_ops,
+};
+
+static const struct sdhci_iproc_data bcm2835_data = {
+       .pdata = &sdhci_bcm2835_pltfm_data,
+       .caps = SDHCI_CAN_VDD_330,
+       .caps1 = 0x00000000,
+       .mmc_caps = 0x00000000,
+};
+
 static const struct of_device_id sdhci_iproc_of_match[] = {
+       { .compatible = "brcm,bcm2835-sdhci", .data = &bcm2835_data },
        { .compatible = "brcm,sdhci-iproc-cygnus", .data = &iproc_data },
        { }
 };