On 05/11/2017 11:28 AM, Peng Fan wrote: > When using eMMC with 1.8V I/O, the VSELECT bit need to be set in > the USDHC controller when init. > > This patch adds a parameter "vs18_enable" in fsl_esdhc_cfg > structure and priv data, so each controller can have different > settings. > > We could not use CONFIG_SYS_FSL_ESDHC_FORCE_VSELECT, it has problem > that it will apply to all USDHC controllers and it only set the 1.8V > at init phase. So if user does not select to the eMMC device, > the voltage on the I/O pins are not correct. > > Signed-off-by: Peng Fan <peng....@nxp.com> > Cc: Jaehoon Chung <jh80.ch...@samsung.com> > Cc: York Sun <york....@nxp.com> > Cc: Stefano Babic <sba...@denx.de> > --- > > V3: none > V2: none > > drivers/mmc/fsl_esdhc.c | 9 +++++++++ > include/fsl_esdhc.h | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c > index f3c6358..bddfe24 100644 > --- a/drivers/mmc/fsl_esdhc.c > +++ b/drivers/mmc/fsl_esdhc.c > @@ -92,6 +92,7 @@ struct fsl_esdhc { > * @dev: pointer for the device > * @non_removable: 0: removable; 1: non-removable > * @wp_enable: 1: enable checking wp; 0: no check > + * @vs18_enable: 1: use 1.8V voltage; 0: use 3.3V > * @cd_gpio: gpio for card detection > * @wp_gpio: gpio for write protection > */ > @@ -104,6 +105,7 @@ struct fsl_esdhc_priv { > struct udevice *dev; > int non_removable; > int wp_enable; > + int vs18_enable; > #ifdef CONFIG_DM_GPIO > struct gpio_desc cd_gpio; > struct gpio_desc wp_gpio; > @@ -673,6 +675,9 @@ static int esdhc_init(struct mmc *mmc) > esdhc_setbits32(®s->vendorspec, ESDHC_VENDORSPEC_VSELECT); > #endif > > + if (priv->vs18_enable) > + esdhc_setbits32(®s->vendorspec, ESDHC_VENDORSPEC_VSELECT); > + > return 0; > } > > @@ -733,6 +738,7 @@ static int fsl_esdhc_cfg_to_priv(struct fsl_esdhc_cfg > *cfg, > priv->bus_width = cfg->max_bus_width; > priv->sdhc_clk = cfg->sdhc_clk; > priv->wp_enable = cfg->wp_enable; > + priv->vs18_enable = cfg->vs18_enable;
cfg->vs18_enable is u8, but priv->vs18_enable is int.. > > return 0; > }; > @@ -759,6 +765,9 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv) > VENDORSPEC_HCKEN | VENDORSPEC_IPGEN | VENDORSPEC_CKEN); > #endif > > + if (priv->vs18_enable) > + esdhc_setbits32(®s->vendorspec, ESDHC_VENDORSPEC_VSELECT); > + > writel(SDHCI_IRQ_EN_BITS, ®s->irqstaten); > memset(&priv->cfg, 0, sizeof(priv->cfg)); > > diff --git a/include/fsl_esdhc.h b/include/fsl_esdhc.h > index e15d3ae..7a5d653 100644 > --- a/include/fsl_esdhc.h > +++ b/include/fsl_esdhc.h > @@ -178,6 +178,7 @@ struct fsl_esdhc_cfg { > u32 sdhc_clk; > u8 max_bus_width; > u8 wp_enable; > + u8 vs18_enable; /* Use 1.8V if set to 1 */ > struct mmc_config cfg; > }; > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot