drm/omap: panel-dsi-cm: use bulk regulator API
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> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-23-tomi.valkeinen@ti.com
This commit is contained in:
parent
68ca91d7d8
commit
61714cd309
@ -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 @@ err:
|
||||
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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user