Subject: [PATCH v1 1/8] scsi: ufs-mediatek: Remove useless mediatek,ufs-support-va09 property

Remove checking the mediatek,ufs-support-va09 property to decide
whether to try to support the VA09 regulator handling and change
the ufs_mtk_init_va09_pwr_ctrl() function to make it call
devm_regulator_get_optional(): if the regulator is present, then
we set the UFS_MTK_CAP_VA09_PWR_CTRL, effectively enabling the
handling of the VA09 regulator based on that.

Also, make sure to pass the return value of the call to
devm_regulator_get_optional() to the probe function, so that
if it returns a probe deferral, the appropriate action will be
taken.

While at it, remove the error print (disguised as info...) when
the va09 regulator was not found.

Fixes: ac8c2459091c ("scsi: ufs-mediatek: Decouple features from platform bindings")
Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
drivers/ufs/host/ufs-mediatek.c | 34 +++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index b8a8801322e2..5186ad99ad8b 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -591,27 +591,38 @@ static void ufs_mtk_init_boost_crypt(struct ufs_hba *hba)
return;
}

-static void ufs_mtk_init_va09_pwr_ctrl(struct ufs_hba *hba)
+static int ufs_mtk_init_va09_pwr_ctrl(struct ufs_hba *hba)
{
struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+ int ret;

- host->reg_va09 = regulator_get(hba->dev, "va09");
- if (IS_ERR(host->reg_va09))
- dev_info(hba->dev, "failed to get va09");
- else
- host->caps |= UFS_MTK_CAP_VA09_PWR_CTRL;
+ host->reg_va09 = devm_regulator_get_optional(hba->dev, "va09");
+ if (IS_ERR(host->reg_va09)) {
+ ret = PTR_ERR(host->reg_va09);
+
+ /* Return an error only if this is a deferral */
+ if (ret == -EPROBE_DEFER)
+ return ret;
+
+ return 0;
+ }
+
+ host->caps |= UFS_MTK_CAP_VA09_PWR_CTRL;
+ return 0;
}

-static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
+static int ufs_mtk_init_host_caps(struct ufs_hba *hba)
{
struct ufs_mtk_host *host = ufshcd_get_variant(hba);
struct device_node *np = hba->dev->of_node;
+ int ret;

if (of_property_read_bool(np, "mediatek,ufs-boost-crypt"))
ufs_mtk_init_boost_crypt(hba);

- if (of_property_read_bool(np, "mediatek,ufs-support-va09"))
- ufs_mtk_init_va09_pwr_ctrl(hba);
+ ret = ufs_mtk_init_va09_pwr_ctrl(hba);
+ if (ret)
+ return ret;

if (of_property_read_bool(np, "mediatek,ufs-disable-ah8"))
host->caps |= UFS_MTK_CAP_DISABLE_AH8;
@@ -623,6 +634,7 @@ static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
host->caps |= UFS_MTK_CAP_PMC_VIA_FASTAUTO;

dev_info(hba->dev, "caps: 0x%x", host->caps);
+ return 0;
}

static void ufs_mtk_scale_perf(struct ufs_hba *hba, bool scale_up)
@@ -941,7 +953,9 @@ static int ufs_mtk_init(struct ufs_hba *hba)
}

/* Initialize host capability */
- ufs_mtk_init_host_caps(hba);
+ err = ufs_mtk_init_host_caps(hba);
+ if (err)
+ goto out;

ufs_mtk_init_mcq_irq(hba);

--
2.44.0