From: Sebastian Reichel <sebastian.reic...@collabora.com>

Use bulk regulator API to simplify the code. This also switches
from _optional variant to normal variant, which will provide a
dummy regulator (i.e. if some always-enabled regulator is not
described in DT).

Signed-off-by: Sebastian Reichel <sebastian.reic...@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkei...@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
 .../gpu/drm/omapdrm/displays/panel-dsi-cm.c   | 65 ++++++-------------
 1 file changed, 21 insertions(+), 44 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c 
b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 1f4d67566e75..8534d0633e37 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -32,6 +32,8 @@
 #define DCS_GET_ID2            0xdb
 #define DCS_GET_ID3            0xdc
 
+#define DCS_REGULATOR_SUPPLY_NUM 2
+
 struct panel_drv_data {
        struct mipi_dsi_device *dsi;
 
@@ -54,8 +56,7 @@ struct panel_drv_data {
        struct gpio_desc *reset_gpio;
        struct gpio_desc *ext_te_gpio;
 
-       struct regulator *vpnl;
-       struct regulator *vddi;
+       struct regulator_bulk_data supplies[DCS_REGULATOR_SUPPLY_NUM];
 
        bool use_dsi_backlight;
 
@@ -556,28 +557,16 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
                .lp_clk_max = 10000000,
        };
 
-       if (ddata->vpnl) {
-               r = regulator_enable(ddata->vpnl);
-               if (r) {
-                       dev_err(&ddata->dsi->dev,
-                               "failed to enable VPNL: %d\n", r);
-                       return r;
-               }
-       }
-
-       if (ddata->vddi) {
-               r = regulator_enable(ddata->vddi);
-               if (r) {
-                       dev_err(&ddata->dsi->dev,
-                               "failed to enable VDDI: %d\n", r);
-                       goto err_vpnl;
-               }
+       r = regulator_bulk_enable(ARRAY_SIZE(ddata->supplies), ddata->supplies);
+       if (r) {
+               dev_err(&ddata->dsi->dev, "failed to enable supplies: %d\n", r);
+               return r;
        }
 
        r = src->ops->dsi.set_config(src, &dsi_config);
        if (r) {
                dev_err(&ddata->dsi->dev, "failed to configure DSI\n");
-               goto err_vddi;
+               goto err_regulators;
        }
 
        src->ops->enable(src);
@@ -636,12 +625,10 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
        dsicm_hw_reset(ddata);
 
        src->ops->dsi.disable(src, true, false);
-err_vddi:
-       if (ddata->vddi)
-               regulator_disable(ddata->vddi);
-err_vpnl:
-       if (ddata->vpnl)
-               regulator_disable(ddata->vpnl);
+err_regulators:
+       r = regulator_bulk_disable(ARRAY_SIZE(ddata->supplies), 
ddata->supplies);
+       if (r)
+               dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", 
r);
 
        return r;
 }
@@ -665,10 +652,9 @@ static void dsicm_power_off(struct panel_drv_data *ddata)
 
        src->ops->dsi.disable(src, true, false);
 
-       if (ddata->vddi)
-               regulator_disable(ddata->vddi);
-       if (ddata->vpnl)
-               regulator_disable(ddata->vpnl);
+       r = regulator_bulk_disable(ARRAY_SIZE(ddata->supplies), 
ddata->supplies);
+       if (r)
+               dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", 
r);
 
        ddata->enabled = false;
 }
@@ -972,21 +958,12 @@ static int dsicm_probe_of(struct mipi_dsi_device *dsi)
        ddata->height_mm = 0;
        of_property_read_u32(node, "height-mm", &ddata->height_mm);
 
-       ddata->vpnl = devm_regulator_get_optional(&dsi->dev, "vpnl");
-       if (IS_ERR(ddata->vpnl)) {
-               err = PTR_ERR(ddata->vpnl);
-               if (err == -EPROBE_DEFER)
-                       return err;
-               ddata->vpnl = NULL;
-       }
-
-       ddata->vddi = devm_regulator_get_optional(&dsi->dev, "vddi");
-       if (IS_ERR(ddata->vddi)) {
-               err = PTR_ERR(ddata->vddi);
-               if (err == -EPROBE_DEFER)
-                       return err;
-               ddata->vddi = NULL;
-       }
+       ddata->supplies[0].supply = "vpnl";
+       ddata->supplies[1].supply = "vddi";
+       err = devm_regulator_bulk_get(&dsi->dev, ARRAY_SIZE(ddata->supplies),
+                                     ddata->supplies);
+       if (err)
+               return err;
 
        backlight = devm_of_find_backlight(&dsi->dev);
        if (IS_ERR(backlight))
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to