]> git.sur5r.net Git - u-boot/commitdiff
Merge branch 'master' of http://git.denx.de/u-boot-mmc
authorTom Rini <trini@konsulko.com>
Fri, 28 Oct 2016 13:08:13 +0000 (09:08 -0400)
committerTom Rini <trini@konsulko.com>
Fri, 28 Oct 2016 13:08:13 +0000 (09:08 -0400)
drivers/mmc/mmc-uclass.c
drivers/mmc/mmc.c
drivers/mmc/sdhci.c
drivers/mmc/socfpga_dw_mmc.c

index 77424cdcea0b698c98e1cd442c2f54afdc045f1e..2fe5d61e263761ba71e1d5f0917eccbbc22805f4 100644 (file)
@@ -116,13 +116,7 @@ int get_mmc_num(void)
 
 int mmc_get_next_devnum(void)
 {
-       int ret;
-
-       ret = blk_find_max_devnum(IF_TYPE_MMC);
-       if (ret < 0)
-               return ret;
-
-       return ret;
+       return blk_find_max_devnum(IF_TYPE_MMC);
 }
 
 struct blk_desc *mmc_get_blk_desc(struct mmc *mmc)
@@ -243,7 +237,6 @@ static int mmc_select_hwpart(struct udevice *bdev, int hwpart)
        struct udevice *mmc_dev = dev_get_parent(bdev);
        struct mmc *mmc = mmc_get_mmc_dev(mmc_dev);
        struct blk_desc *desc = dev_get_uclass_platdata(bdev);
-       int ret;
 
        if (desc->hwpart == hwpart)
                return 0;
@@ -251,11 +244,7 @@ static int mmc_select_hwpart(struct udevice *bdev, int hwpart)
        if (mmc->part_config == MMCPART_NOAVAILABLE)
                return -EMEDIUMTYPE;
 
-       ret = mmc_switch_part(mmc, hwpart);
-       if (ret)
-               return ret;
-
-       return 0;
+       return mmc_switch_part(mmc, hwpart);
 }
 
 static const struct blk_ops mmc_blk_ops = {
index 0312da91af7736db2ee2845cbfea7cfbdb115dd0..4380c7c195a628e343f1f0b4719be6b6bbf3fdb3 100644 (file)
@@ -15,6 +15,7 @@
 #include <errno.h>
 #include <mmc.h>
 #include <part.h>
+#include <power/regulator.h>
 #include <malloc.h>
 #include <memalign.h>
 #include <linux/list.h>
@@ -1582,6 +1583,31 @@ __weak void board_mmc_power_init(void)
 {
 }
 
+static int mmc_power_init(struct mmc *mmc)
+{
+       board_mmc_power_init();
+
+#if defined(CONFIG_DM_MMC) && defined(CONFIG_DM_REGULATOR) && \
+       !defined(CONFIG_SPL_BUILD)
+       struct udevice *vmmc_supply;
+       int ret;
+
+       ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
+                                         &vmmc_supply);
+       if (ret) {
+               debug("%s: No vmmc supply\n", mmc->dev->name);
+               return 0;
+       }
+
+       ret = regulator_set_enable(vmmc_supply, true);
+       if (ret) {
+               puts("Error enabling VMMC supply\n");
+               return ret;
+       }
+#endif
+       return 0;
+}
+
 int mmc_start_init(struct mmc *mmc)
 {
        bool no_card;
@@ -1606,7 +1632,9 @@ int mmc_start_init(struct mmc *mmc)
 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
        mmc_adapter_card_type_ident();
 #endif
-       board_mmc_power_init();
+       err = mmc_power_init(mmc);
+       if (err)
+               return err;
 
 #ifdef CONFIG_DM_MMC_OPS
        /* The device has already been probed ready for use */
index 837c53842b3802700ca192692c9ead0e2d220590..766e9eef84a964df4e4762be5b864dd2743dcabf 100644 (file)
@@ -242,6 +242,7 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
 
        sdhci_writel(host, cmd->cmdarg, SDHCI_ARGUMENT);
 #ifdef CONFIG_MMC_SDMA
+       trans_bytes = ALIGN(trans_bytes, CONFIG_SYS_CACHELINE_SIZE);
        flush_cache(start_addr, trans_bytes);
 #endif
        sdhci_writew(host, SDHCI_MAKE_CMD(cmd->cmdidx, flags), SDHCI_COMMAND);
@@ -607,9 +608,11 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
         * In case of Host Controller v3.00, find out whether clock
         * multiplier is supported.
         */
-       caps_1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
-       host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
-                       SDHCI_CLOCK_MUL_SHIFT;
+       if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
+               caps_1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
+               host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
+                               SDHCI_CLOCK_MUL_SHIFT;
+       }
 
        return 0;
 }
index 5a3a4ff4032f4751849af08fdbb8c6c55dff73c0..0a22e582957fc24e00f05c56e956aa1fabfce479 100644 (file)
@@ -151,7 +151,9 @@ U_BOOT_DRIVER(socfpga_dwmmc_drv) = {
        .id             = UCLASS_MMC,
        .of_match       = socfpga_dwmmc_ids,
        .ofdata_to_platdata = socfpga_dwmmc_ofdata_to_platdata,
+       .ops            = &dm_dwmci_ops,
        .bind           = socfpga_dwmmc_bind,
        .probe          = socfpga_dwmmc_probe,
        .priv_auto_alloc_size = sizeof(struct dwmci_socfpga_priv_data),
+       .platdata_auto_alloc_size = sizeof(struct socfpga_dwmci_plat),
 };