[PATCH v3 23/56] drm/omap: panel-dsi-cm: use bulk regulator API

Tomi Valkeinen
2020-11-05T12:05:02Z

From: Sebastian Reichel <sebastian.reichel@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.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.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 2e9de33fc8d4..1e742cf798b6 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;

@@ -557,28 +558,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(DCS_REGULATOR_SUPPLY_NUM, 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);
@@ -637,12 +626,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(DCS_REGULATOR_SUPPLY_NUM, ddata->supplies);
+ if (r)
+ dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", r);

return r;
}
@@ -666,10 +653,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(DCS_REGULATOR_SUPPLY_NUM, ddata->supplies);
+ if (r)
+ dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", r);

ddata->enabled = false;
}
@@ -973,21 +959,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, DCS_REGULATOR_SUPPLY_NUM,
+ ddata->supplies);
+ if (err)
+ return err;

backlight = devm_of_find_backlight(&dsi->dev);
if (IS_ERR(backlight))