]> git.sur5r.net Git - u-boot/blobdiff - drivers/mmc/stm32_sdmmc2.c
mmc: uniphier: Allow passing quirks to the probe function
[u-boot] / drivers / mmc / stm32_sdmmc2.c
index 5e43397f8edfe025e3fe6a614801ec372aebeef7..f5b21dd097d6ed50ce3194903682d414abb9f13b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) STMicroelectronics SA 2017
- * Author(s): Patrice CHOTARD, <patrice.chotard@st.com> for STMicroelectronics.
+ * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
+ * Author(s): Patrice Chotard, <patrice.chotard@st.com> for STMicroelectronics.
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -9,7 +9,7 @@
 #include <clk.h>
 #include <dm.h>
 #include <fdtdec.h>
-#include <libfdt.h>
+#include <linux/libfdt.h>
 #include <mmc.h>
 #include <reset.h>
 #include <asm/io.h>
@@ -72,7 +72,10 @@ struct stm32_sdmmc2_ctx {
 #define SDMMC_CLKCR_HWFC_EN            BIT(17)
 #define SDMMC_CLKCR_DDR                        BIT(18)
 #define SDMMC_CLKCR_BUSSPEED           BIT(19)
-#define SDMMC_CLKCR_SELCLKRX           GENMASK(21, 20)
+#define SDMMC_CLKCR_SELCLKRX_MASK      GENMASK(21, 20)
+#define SDMMC_CLKCR_SELCLKRX_CK                0
+#define SDMMC_CLKCR_SELCLKRX_CKIN      BIT(20)
+#define SDMMC_CLKCR_SELCLKRX_FBCK      BIT(21)
 
 /* SDMMC_CMD register */
 #define SDMMC_CMD_CMDINDEX             GENMASK(5, 0)
@@ -495,7 +498,8 @@ static int stm32_sdmmc2_set_ios(struct udevice *dev)
        if (mmc->bus_width == 8)
                clk |= SDMMC_CLKCR_WIDBUS_8;
 
-       writel(clk | priv->clk_reg_msk, priv->base + SDMMC_CLKCR);
+       writel(clk | priv->clk_reg_msk | SDMMC_CLKCR_HWFC_EN,
+              priv->base + SDMMC_CLKCR);
 
        return 0;
 }
@@ -534,6 +538,8 @@ static int stm32_sdmmc2_probe(struct udevice *dev)
                priv->clk_reg_msk |= SDMMC_CLKCR_NEGEDGE;
        if (dev_read_bool(dev, "st,dirpol"))
                priv->pwr_reg_msk |= SDMMC_POWER_DIRPOL;
+       if (dev_read_bool(dev, "st,pin-ckin"))
+               priv->clk_reg_msk |= SDMMC_CLKCR_SELCLKRX_CKIN;
 
        ret = clk_get_by_index(dev, 0, &priv->clk);
        if (ret)