[PATCH 3/3] mmc: stm32_sdmmc2: manage vqmmc
Jaehoon Chung
jh80.chung at gmail.com
Fri Oct 7 14:33:53 CEST 2022
On 9/13/22 20:23, Yann Gautier wrote:
> The SDMMC IOs can be in an IO domain, that has to be enabled.
> This is done by enabling vqmmc in the driver.
> This has no impact on configurations not using an IO domain, the check
> can then be executed on all platforms managing regulator, and the vqmmc
> regulator enabled on all platforms having it in their DT.
>
> Signed-off-by: Yann Gautier <yann.gautier at foss.st.com>
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
>
> ---
> There are 2 checkpatch warnings:
> drivers/mmc/stm32_sdmmc2.c:40: warning: Use 'if (IS_ENABLED(CONFIG...))'
> instead of '#if or #ifdef' where possible
> drivers/mmc/stm32_sdmmc2.c:580: warning: Use 'if (IS_ENABLED(CONFIG...))'
> instead of '#if or #ifdef' where possible
> But this cannot be changed as the vqmmc_supply field in struct mmc is
> under flag: #if CONFIG_IS_ENABLED(DM_REGULATOR). For platforms not
> enabling this flag there would be a compilation error.
>
> drivers/mmc/stm32_sdmmc2.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c
> index e1240b0cf3..1195134844 100644
> --- a/drivers/mmc/stm32_sdmmc2.c
> +++ b/drivers/mmc/stm32_sdmmc2.c
> @@ -25,6 +25,7 @@
> #include <asm/io.h>
> #include <asm/gpio.h>
> #include <linux/iopoll.h>
> +#include <power/regulator.h>
> #include <watchdog.h>
>
> struct stm32_sdmmc2_plat {
> @@ -36,6 +37,9 @@ struct stm32_sdmmc2_plat {
> struct gpio_desc cd_gpio;
> u32 clk_reg_msk;
> u32 pwr_reg_msk;
> +#if CONFIG_IS_ENABLED(DM_REGULATOR)
> + bool vqmmc_enabled;
> +#endif
> };
>
> struct stm32_sdmmc2_ctx {
> @@ -572,6 +576,15 @@ static void stm32_sdmmc2_pwron(struct stm32_sdmmc2_plat *plat)
> plat->base + SDMMC_POWER);
>
> /* during the first 74 SDMMC_CK cycles the SDMMC is still disabled. */
> +
> +#if CONFIG_IS_ENABLED(DM_REGULATOR)
> + if (plat->mmc.vqmmc_supply && !plat->vqmmc_enabled) {
> + if (regulator_set_enable_if_allowed(plat->mmc.vqmmc_supply, true))
> + dev_dbg(plat->mmc.dev, "failed to enable vqmmc-supply\n");
> + else
> + plat->vqmmc_enabled = true;
> + }
> +#endif
> }
>
> #define IS_RISING_EDGE(reg) (reg & SDMMC_CLKCR_NEGEDGE ? 0 : 1)
More information about the U-Boot
mailing list