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.gaut...@foss.st.com> Reviewed-by: Jaehoon Chung <jh80.ch...@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)