]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/msm/dsi: Don't set a load before disabling a regulator
authorDouglas Anderson <dianders@chromium.org>
Thu, 4 Aug 2022 14:38:50 +0000 (07:38 -0700)
committerRob Clark <robdclark@chromium.org>
Sun, 18 Sep 2022 16:38:05 +0000 (09:38 -0700)
As of commit 5451781dadf8 ("regulator: core: Only count load for
enabled consumers"), a load isn't counted for a disabled
regulator. That means all the code in the DSI driver to specify and
set loads before disabling a regulator is not actually doing anything
useful. Let's remove it.

It should be noted that all of the loads set that were being specified
were pointless noise anyway. The only use for this number is to pick
between low power and high power modes of regulators. Regulators
appear to do this changeover at loads on the order of 10000 uA. You
would need a lot of clients of the same rail for that 100 uA number to
count for anything.

Note that now that we get rid of the setting of the load at disable
time, we can just set the load once when we first get the regulator
and then forget it.

It should also be noted that the regulator functions
regulator_bulk_enable() and regulator_set_load() already print error
messages when they encounter problems so while moving things around we
get rid of some extra error prints.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/496320/
Link: https://lore.kernel.org/r/20220804073608.v4.3.If1f94fbbdb7c1d0fb3961de61483a851ad1971a7@changeid
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/dsi/dsi.h
drivers/gpu/drm/msm/dsi/dsi_cfg.c
drivers/gpu/drm/msm/dsi/dsi_host.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_10nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_14nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_20nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm_8960.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c

index df46cdda1b433e114eb03a16ec4056d7b0e08311..56996ac9e58a6d739f8ef69e2d1988571c6a8698 100644 (file)
@@ -37,7 +37,6 @@ enum msm_dsi_phy_usecase {
 struct dsi_reg_entry {
        char name[32];
        int enable_load;
-       int disable_load;
 };
 
 struct dsi_reg_config {
index 72c018e26f47fb1a7271dde90ea26c59643aa67a..901d6fd53800162f97c0c4aada48acfc92667e0f 100644 (file)
@@ -14,9 +14,9 @@ static const struct msm_dsi_config apq8064_dsi_cfg = {
        .reg_cfg = {
                .num = 3,
                .regs = {
-                       {"vdda", 100000, 100},  /* 1.2 V */
-                       {"avdd", 10000, 100},   /* 3.0 V */
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vdda", 100000},       /* 1.2 V */
+                       {"avdd", 10000},        /* 3.0 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .bus_clk_names = dsi_v2_bus_clk_names,
@@ -34,9 +34,9 @@ static const struct msm_dsi_config msm8974_apq8084_dsi_cfg = {
        .reg_cfg = {
                .num = 3,
                .regs = {
-                       {"vdd", 150000, 100},   /* 3.0 V */
-                       {"vdda", 100000, 100},  /* 1.2 V */
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vdd", 150000},        /* 3.0 V */
+                       {"vdda", 100000},       /* 1.2 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .bus_clk_names = dsi_6g_bus_clk_names,
@@ -54,8 +54,8 @@ static const struct msm_dsi_config msm8916_dsi_cfg = {
        .reg_cfg = {
                .num = 2,
                .regs = {
-                       {"vdda", 100000, 100},  /* 1.2 V */
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vdda", 100000},       /* 1.2 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .bus_clk_names = dsi_8916_bus_clk_names,
@@ -73,8 +73,8 @@ static const struct msm_dsi_config msm8976_dsi_cfg = {
        .reg_cfg = {
                .num = 2,
                .regs = {
-                       {"vdda", 100000, 100},  /* 1.2 V */
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vdda", 100000},       /* 1.2 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .bus_clk_names = dsi_8976_bus_clk_names,
@@ -88,12 +88,12 @@ static const struct msm_dsi_config msm8994_dsi_cfg = {
        .reg_cfg = {
                .num = 6,
                .regs = {
-                       {"vdda", 100000, 100},  /* 1.25 V */
-                       {"vddio", 100000, 100}, /* 1.8 V */
-                       {"vcca", 10000, 100},   /* 1.0 V */
-                       {"vdd", 100000, 100},   /* 1.8 V */
-                       {"lab_reg", -1, -1},
-                       {"ibb_reg", -1, -1},
+                       {"vdda", 100000},       /* 1.25 V */
+                       {"vddio", 100000},      /* 1.8 V */
+                       {"vcca", 10000},        /* 1.0 V */
+                       {"vdd", 100000},        /* 1.8 V */
+                       {"lab_reg", -1},
+                       {"ibb_reg", -1},
                },
        },
        .bus_clk_names = dsi_6g_bus_clk_names,
@@ -111,9 +111,9 @@ static const struct msm_dsi_config msm8996_dsi_cfg = {
        .reg_cfg = {
                .num = 3,
                .regs = {
-                       {"vdda", 18160, 1 },    /* 1.25 V */
-                       {"vcca", 17000, 32 },   /* 0.925 V */
-                       {"vddio", 100000, 100 },/* 1.8 V */
+                       {"vdda", 18160},        /* 1.25 V */
+                       {"vcca", 17000},        /* 0.925 V */
+                       {"vddio", 100000},/* 1.8 V */
                },
        },
        .bus_clk_names = dsi_8996_bus_clk_names,
@@ -131,8 +131,8 @@ static const struct msm_dsi_config msm8998_dsi_cfg = {
        .reg_cfg = {
                .num = 2,
                .regs = {
-                       {"vdd", 367000, 16 },   /* 0.9 V */
-                       {"vdda", 62800, 2 },    /* 1.2 V */
+                       {"vdd", 367000},        /* 0.9 V */
+                       {"vdda", 62800},        /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_msm8998_bus_clk_names,
@@ -150,7 +150,7 @@ static const struct msm_dsi_config sdm660_dsi_cfg = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdda", 12560, 4 },    /* 1.2 V */
+                       {"vdda", 12560},        /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_sdm660_bus_clk_names,
@@ -172,7 +172,7 @@ static const struct msm_dsi_config sdm845_dsi_cfg = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdda", 21800, 4 },    /* 1.2 V */
+                       {"vdda", 21800},        /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_sdm845_bus_clk_names,
@@ -186,7 +186,7 @@ static const struct msm_dsi_config sc7180_dsi_cfg = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdda", 21800, 4 },    /* 1.2 V */
+                       {"vdda", 21800},        /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_sc7180_bus_clk_names,
@@ -204,7 +204,7 @@ static const struct msm_dsi_config sc7280_dsi_cfg = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdda", 8350, 0 },     /* 1.2 V */
+                       {"vdda", 8350}, /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_sc7280_bus_clk_names,
@@ -222,7 +222,7 @@ static const struct msm_dsi_config qcm2290_dsi_cfg = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdda", 21800, 4 },    /* 1.2 V */
+                       {"vdda", 21800},        /* 1.2 V */
                },
        },
        .bus_clk_names = dsi_qcm2290_bus_clk_names,
index 15e108be190125c4bb5c1b9ab97f4bac0b291259..99e21d38c7da3c151011805abfc71f15fa2d3c6b 100644 (file)
@@ -205,9 +205,6 @@ static inline void dsi_write(struct msm_dsi_host *msm_host, u32 reg, u32 data)
        msm_writel(data, msm_host->ctrl_base + reg);
 }
 
-static int dsi_host_regulator_enable(struct msm_dsi_host *msm_host);
-static void dsi_host_regulator_disable(struct msm_dsi_host *msm_host);
-
 static const struct msm_dsi_cfg_handler *dsi_get_config(
                                                struct msm_dsi_host *msm_host)
 {
@@ -258,56 +255,6 @@ static inline struct msm_dsi_host *to_msm_dsi_host(struct mipi_dsi_host *host)
        return container_of(host, struct msm_dsi_host, base);
 }
 
-static void dsi_host_regulator_disable(struct msm_dsi_host *msm_host)
-{
-       struct regulator_bulk_data *s = msm_host->supplies;
-       const struct dsi_reg_entry *regs = msm_host->cfg_hnd->cfg->reg_cfg.regs;
-       int num = msm_host->cfg_hnd->cfg->reg_cfg.num;
-       int i;
-
-       DBG("");
-       for (i = num - 1; i >= 0; i--)
-               if (regs[i].disable_load >= 0)
-                       regulator_set_load(s[i].consumer,
-                                          regs[i].disable_load);
-
-       regulator_bulk_disable(num, s);
-}
-
-static int dsi_host_regulator_enable(struct msm_dsi_host *msm_host)
-{
-       struct regulator_bulk_data *s = msm_host->supplies;
-       const struct dsi_reg_entry *regs = msm_host->cfg_hnd->cfg->reg_cfg.regs;
-       int num = msm_host->cfg_hnd->cfg->reg_cfg.num;
-       int ret, i;
-
-       DBG("");
-       for (i = 0; i < num; i++) {
-               if (regs[i].enable_load >= 0) {
-                       ret = regulator_set_load(s[i].consumer,
-                                                regs[i].enable_load);
-                       if (ret < 0) {
-                               pr_err("regulator %d set op mode failed, %d\n",
-                                       i, ret);
-                               goto fail;
-                       }
-               }
-       }
-
-       ret = regulator_bulk_enable(num, s);
-       if (ret < 0) {
-               pr_err("regulator enable failed, %d\n", ret);
-               goto fail;
-       }
-
-       return 0;
-
-fail:
-       for (i--; i >= 0; i--)
-               regulator_set_load(s[i].consumer, regs[i].disable_load);
-       return ret;
-}
-
 static int dsi_regulator_init(struct msm_dsi_host *msm_host)
 {
        struct regulator_bulk_data *s = msm_host->supplies;
@@ -325,6 +272,15 @@ static int dsi_regulator_init(struct msm_dsi_host *msm_host)
                return ret;
        }
 
+       for (i = 0; i < num; i++) {
+               if (regs[i].enable_load >= 0) {
+                       ret = regulator_set_load(s[i].consumer,
+                                                regs[i].enable_load);
+                       if (ret < 0)
+                               return ret;
+               }
+       }
+
        return 0;
 }
 
@@ -2547,7 +2503,8 @@ int msm_dsi_host_power_on(struct mipi_dsi_host *host,
 
        msm_dsi_sfpb_config(msm_host, true);
 
-       ret = dsi_host_regulator_enable(msm_host);
+       ret = regulator_bulk_enable(msm_host->cfg_hnd->cfg->reg_cfg.num,
+                                   msm_host->supplies);
        if (ret) {
                pr_err("%s:Failed to enable vregs.ret=%d\n",
                        __func__, ret);
@@ -2587,7 +2544,8 @@ fail_disable_clk:
        cfg_hnd->ops->link_clk_disable(msm_host);
        pm_runtime_put(&msm_host->pdev->dev);
 fail_disable_reg:
-       dsi_host_regulator_disable(msm_host);
+       regulator_bulk_disable(msm_host->cfg_hnd->cfg->reg_cfg.num,
+                              msm_host->supplies);
 unlock_ret:
        mutex_unlock(&msm_host->dev_mutex);
        return ret;
@@ -2614,7 +2572,8 @@ int msm_dsi_host_power_off(struct mipi_dsi_host *host)
        cfg_hnd->ops->link_clk_disable(msm_host);
        pm_runtime_put(&msm_host->pdev->dev);
 
-       dsi_host_regulator_disable(msm_host);
+       regulator_bulk_disable(msm_host->cfg_hnd->cfg->reg_cfg.num,
+                              msm_host->supplies);
 
        msm_dsi_sfpb_config(msm_host, false);
 
index 56dfa2d24be1fb128676b4facb9e5644e89635c3..c341d6ab5d9e5603e4e66ff580318d01d5afaff7 100644 (file)
@@ -529,58 +529,16 @@ static int dsi_phy_regulator_init(struct msm_dsi_phy *phy)
                return ret;
        }
 
-       return 0;
-}
-
-static void dsi_phy_regulator_disable(struct msm_dsi_phy *phy)
-{
-       struct regulator_bulk_data *s = phy->supplies;
-       const struct dsi_reg_entry *regs = phy->cfg->reg_cfg.regs;
-       int num = phy->cfg->reg_cfg.num;
-       int i;
-
-       DBG("");
-       for (i = num - 1; i >= 0; i--)
-               if (regs[i].disable_load >= 0)
-                       regulator_set_load(s[i].consumer, regs[i].disable_load);
-
-       regulator_bulk_disable(num, s);
-}
-
-static int dsi_phy_regulator_enable(struct msm_dsi_phy *phy)
-{
-       struct regulator_bulk_data *s = phy->supplies;
-       const struct dsi_reg_entry *regs = phy->cfg->reg_cfg.regs;
-       struct device *dev = &phy->pdev->dev;
-       int num = phy->cfg->reg_cfg.num;
-       int ret, i;
-
-       DBG("");
        for (i = 0; i < num; i++) {
                if (regs[i].enable_load >= 0) {
                        ret = regulator_set_load(s[i].consumer,
                                                        regs[i].enable_load);
-                       if (ret < 0) {
-                               DRM_DEV_ERROR(dev,
-                                       "regulator %d set op mode failed, %d\n",
-                                       i, ret);
-                               goto fail;
-                       }
+                       if (ret < 0)
+                               return ret;
                }
        }
 
-       ret = regulator_bulk_enable(num, s);
-       if (ret < 0) {
-               DRM_DEV_ERROR(dev, "regulator enable failed, %d\n", ret);
-               goto fail;
-       }
-
        return 0;
-
-fail:
-       for (i--; i >= 0; i--)
-               regulator_set_load(s[i].consumer, regs[i].disable_load);
-       return ret;
 }
 
 static int dsi_phy_enable_resource(struct msm_dsi_phy *phy)
@@ -829,7 +787,7 @@ int msm_dsi_phy_enable(struct msm_dsi_phy *phy,
                goto res_en_fail;
        }
 
-       ret = dsi_phy_regulator_enable(phy);
+       ret = regulator_bulk_enable(phy->cfg->reg_cfg.num, phy->supplies);
        if (ret) {
                DRM_DEV_ERROR(dev, "%s: regulator enable failed, %d\n",
                        __func__, ret);
@@ -866,7 +824,7 @@ pll_restor_fail:
        if (phy->cfg->ops.disable)
                phy->cfg->ops.disable(phy);
 phy_en_fail:
-       dsi_phy_regulator_disable(phy);
+       regulator_bulk_disable(phy->cfg->reg_cfg.num, phy->supplies);
 reg_en_fail:
        dsi_phy_disable_resource(phy);
 res_en_fail:
@@ -880,7 +838,7 @@ void msm_dsi_phy_disable(struct msm_dsi_phy *phy)
 
        phy->cfg->ops.disable(phy);
 
-       dsi_phy_regulator_disable(phy);
+       regulator_bulk_disable(phy->cfg->reg_cfg.num, phy->supplies);
        dsi_phy_disable_resource(phy);
 }
 
index ae57f95edf63586d381de94c53675fc7ca3c9b64..d1a943e2c66af39820e0e40a53b598b2a35b22f0 100644 (file)
@@ -1024,7 +1024,7 @@ const struct msm_dsi_phy_cfg dsi_phy_10nm_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdds", 36000, 32},
+                       {"vdds", 36000},
                },
        },
        .ops = {
@@ -1046,7 +1046,7 @@ const struct msm_dsi_phy_cfg dsi_phy_10nm_8998_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdds", 36000, 32},
+                       {"vdds", 36000},
                },
        },
        .ops = {
index 1a855351654cd6c38e92cc1f3444d5ce6b042f5d..7ca30d9b54f5d86c171b00081dfea84835908c40 100644 (file)
@@ -1028,7 +1028,7 @@ const struct msm_dsi_phy_cfg dsi_phy_14nm_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vcca", 17000, 32},
+                       {"vcca", 17000},
                },
        },
        .ops = {
@@ -1049,7 +1049,7 @@ const struct msm_dsi_phy_cfg dsi_phy_14nm_660_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vcca", 73400, 32},
+                       {"vcca", 73400},
                },
        },
        .ops = {
@@ -1070,7 +1070,7 @@ const struct msm_dsi_phy_cfg dsi_phy_14nm_8953_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vcca", 17000, 32},
+                       {"vcca", 17000},
                },
        },
        .ops = {
index ee7c418a1c2943317dbdb02c3bdc8123722edd4e..b7c621d94981db1f5ae327fb932bba4803878a5e 100644 (file)
@@ -134,8 +134,8 @@ const struct msm_dsi_phy_cfg dsi_phy_20nm_cfgs = {
        .reg_cfg = {
                .num = 2,
                .regs = {
-                       {"vddio", 100000, 100}, /* 1.8 V */
-                       {"vcca", 10000, 100},   /* 1.0 V */
+                       {"vddio", 100000},      /* 1.8 V */
+                       {"vcca", 10000},        /* 1.0 V */
                },
        },
        .ops = {
index 04411fefb80884b2b2fcfa55cb25ed0b31cbb4fa..8535659520f982da2095f1bfd280be2e86658238 100644 (file)
@@ -769,7 +769,7 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_hpm_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vddio", 100000, 100},
+                       {"vddio", 100000},
                },
        },
        .ops = {
@@ -790,7 +790,7 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_hpm_famb_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vddio", 100000, 100},
+                       {"vddio", 100000},
                },
        },
        .ops = {
@@ -811,7 +811,7 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_lp_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .ops = {
index 69c1b2d8333cfee774993b51c266a02fd59860a1..e96f5adca27550efb44568d1ef39c293f017262c 100644 (file)
@@ -643,7 +643,7 @@ const struct msm_dsi_phy_cfg dsi_phy_28nm_8960_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vddio", 100000, 100}, /* 1.8 V */
+                       {"vddio", 100000},      /* 1.8 V */
                },
        },
        .ops = {
index c1710a8824e7fd8c5fa5aa4aa5106af1a13e9595..7897c9ddb0bb60713e927612620199daf61305db 100644 (file)
@@ -1037,7 +1037,7 @@ const struct msm_dsi_phy_cfg dsi_phy_7nm_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdds", 36000, 32},
+                       {"vdds", 36000},
                },
        },
        .ops = {
@@ -1064,7 +1064,7 @@ const struct msm_dsi_phy_cfg dsi_phy_7nm_8150_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdds", 36000, 32},
+                       {"vdds", 36000},
                },
        },
        .ops = {
@@ -1086,7 +1086,7 @@ const struct msm_dsi_phy_cfg dsi_phy_7nm_7280_cfgs = {
        .reg_cfg = {
                .num = 1,
                .regs = {
-                       {"vdds", 37550, 0},
+                       {"vdds", 37550},
                },
        },
        .ops = {