mmc: msm_sdhci: enable vqmmc at probe if available

On earlier platforms, the vqmmc regulator was enabled by the
previous bootloader, but on the newest (SM8650) it's not
and we need vqmmc to be enabled in order to have the card
to respond.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
Neil Armstrong 2024-10-16 11:17:16 +02:00 committed by Caleb Connolly
parent ab76484cf2
commit 615dfe1aea
No known key found for this signature in database
GPG key ID: 7930459FB9303217

View file

@ -15,6 +15,7 @@
#include <asm/global_data.h>
#include <asm/io.h>
#include <linux/bitops.h>
#include <power/regulator.h>
/* Non-standard registers needed for SDHCI startup */
#define SDCC_MCI_POWER 0x0
@ -43,6 +44,7 @@ struct msm_sdhc {
struct sdhci_host host;
void *base;
struct clk_bulk clks;
struct udevice *vqmmc;
};
struct msm_sdhc_variant_info {
@ -163,6 +165,16 @@ static int msm_sdc_probe(struct udevice *dev)
if (ret)
return ret;
/* Get the vqmmc regulator and enable it if available */
device_get_supply_regulator(dev, "vqmmc-supply", &prv->vqmmc);
if (prv->vqmmc) {
ret = regulator_set_enable_if_allowed(prv->vqmmc, true);
if (ret) {
printf("Failed to enable the VQMMC regulator\n");
return ret;
}
}
var_info = (void *)dev_get_driver_data(dev);
if (!var_info->mci_removed) {
ret = msm_sdc_mci_init(prv);