Message ID | 20220622133047.33844-1-sergiu.moga@microchip.com |
---|---|
State | Accepted |
Commit | 222a1f490722c60d73efaa3387e617ff5b730eb6 |
Delegated to: | Eugen Hristev |
Headers | show |
Series | mmc: atmel_sdhci: re-enable sdhci after SD Card re-insertion | expand |
On 6/22/22 4:30 PM, Sergiu Moga wrote: > Whenever the SD Card would be removed and then re-inserted while in the > U-Boot command line, the `SDBPWR` bit of the `SDMMC_PCR` register would > remain unset afterwards. In order for the bit to be set again after > re-insertion, register an additional `deferred_probe` method that the > DM would then transparently call. This method will call the generic > `sdhci_probe` which will, during its execution flow, set this bit to 1. > > Signed-off-by: Sergiu Moga <sergiu.moga@microchip.com> > Reported-by: Mihai Sain <mihai.sain@microchip.com> > Reviewed-by: Eugen Hristev <eugen.hristev@microchip.com> > --- Hi Peng, To take this patch into my tree I would be happy if you had a look or reviewed it first. Thanks, Eugen > drivers/mmc/atmel_sdhci.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/mmc/atmel_sdhci.c b/drivers/mmc/atmel_sdhci.c > index 2b5ceeab94..37b0beeed4 100644 > --- a/drivers/mmc/atmel_sdhci.c > +++ b/drivers/mmc/atmel_sdhci.c > @@ -52,6 +52,17 @@ struct atmel_sdhci_plat { > struct mmc mmc; > }; > > +static int atmel_sdhci_deferred_probe(struct sdhci_host *host) > +{ > + struct udevice *dev = host->mmc->dev; > + > + return sdhci_probe(dev); > +} > + > +static const struct sdhci_ops atmel_sdhci_ops = { > + .deferred_probe = atmel_sdhci_deferred_probe, > +}; > + > static int atmel_sdhci_probe(struct udevice *dev) > { > struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); > @@ -104,6 +115,7 @@ static int atmel_sdhci_probe(struct udevice *dev) > return ret; > > host->mmc->priv = host; > + host->ops = &atmel_sdhci_ops; > upriv->mmc = host->mmc; > > clk_free(&clk); >
On 7/8/22 3:40 PM, Eugen Hristev - M18282 wrote: > On 6/22/22 4:30 PM, Sergiu Moga wrote: >> Whenever the SD Card would be removed and then re-inserted while in the >> U-Boot command line, the `SDBPWR` bit of the `SDMMC_PCR` register would >> remain unset afterwards. In order for the bit to be set again after >> re-insertion, register an additional `deferred_probe` method that the >> DM would then transparently call. This method will call the generic >> `sdhci_probe` which will, during its execution flow, set this bit to 1. >> >> Signed-off-by: Sergiu Moga <sergiu.moga@microchip.com> >> Reported-by: Mihai Sain <mihai.sain@microchip.com> >> Reviewed-by: Eugen Hristev <eugen.hristev@microchip.com> >> --- > > Hi Peng, > > To take this patch into my tree I would be happy if you had a look or > reviewed it first. > > Thanks, > Eugen > Applied to u-boot-at91/next , thanks !
diff --git a/drivers/mmc/atmel_sdhci.c b/drivers/mmc/atmel_sdhci.c index 2b5ceeab94..37b0beeed4 100644 --- a/drivers/mmc/atmel_sdhci.c +++ b/drivers/mmc/atmel_sdhci.c @@ -52,6 +52,17 @@ struct atmel_sdhci_plat { struct mmc mmc; }; +static int atmel_sdhci_deferred_probe(struct sdhci_host *host) +{ + struct udevice *dev = host->mmc->dev; + + return sdhci_probe(dev); +} + +static const struct sdhci_ops atmel_sdhci_ops = { + .deferred_probe = atmel_sdhci_deferred_probe, +}; + static int atmel_sdhci_probe(struct udevice *dev) { struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); @@ -104,6 +115,7 @@ static int atmel_sdhci_probe(struct udevice *dev) return ret; host->mmc->priv = host; + host->ops = &atmel_sdhci_ops; upriv->mmc = host->mmc; clk_free(&clk);