]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pmdomain: mediatek: Use OF-specific regulator API to get power domain supply
authorChen-Yu Tsai <wenst@chromium.org>
Mon, 30 Sep 2024 04:45:23 +0000 (12:45 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Wed, 2 Oct 2024 10:28:30 +0000 (12:28 +0200)
The MediaTek power domain driver contains a hack that assigns the device
node of the power domain to the struct device of the power domain
controller in order to use the devres regulator API.

Now that there is a proper OF-specific regulator API, and even a devres
version, replace the hack with proper code.

This change is incompatible with incomplete device trees. Instead of
assigning the dummy regulator in cases where the power domain requires
a supply but the device tree does not provide one, the driver will just
error out. This will be seen on the MT8390 EVK, which is missing
supplies for the IMG_VCORE and CAM_VCORE domains. And likely all the
MediaTek EVBs, which have no power domain supplies specified. This is
however the correct behavior. If the power domain's supply is missing,
then it should not work. Relying on other parts of the system to keep
the unattached regulator enabled is likely to break in ways less easier
to understand.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Link: https://lore.kernel.org/r/20240930044525.2043884-4-wenst@chromium.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/pmdomain/mediatek/mtk-pm-domains.c

index 88406e9ac63c22330d23f1c8cfa61e689eceb2c0..3580913f25d3917612ac2e9776bc02c62dd96d99 100644 (file)
@@ -353,7 +353,6 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no
 {
        const struct scpsys_domain_data *domain_data;
        struct scpsys_domain *pd;
-       struct device_node *root_node = scpsys->dev->of_node;
        struct device_node *smi_node;
        struct property *prop;
        const char *clk_name;
@@ -388,16 +387,7 @@ generic_pm_domain *scpsys_add_one_domain(struct scpsys *scpsys, struct device_no
        pd->scpsys = scpsys;
 
        if (MTK_SCPD_CAPS(pd, MTK_SCPD_DOMAIN_SUPPLY)) {
-               /*
-                * Find regulator in current power domain node.
-                * devm_regulator_get() finds regulator in a node and its child
-                * node, so set of_node to current power domain node then change
-                * back to original node after regulator is found for current
-                * power domain node.
-                */
-               scpsys->dev->of_node = node;
-               pd->supply = devm_regulator_get(scpsys->dev, "domain");
-               scpsys->dev->of_node = root_node;
+               pd->supply = devm_of_regulator_get_optional(scpsys->dev, node, "domain");
                if (IS_ERR(pd->supply))
                        return dev_err_cast_probe(scpsys->dev, pd->supply,
                                      "%pOF: failed to get power supply.\n",