summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
diff options
context:
space:
mode:
authorSebastian Reichel <sebastian.reichel@collabora.com>2020-12-15 11:46:03 +0100
committerTomi Valkeinen <tomi.valkeinen@ti.com>2020-12-15 15:08:24 +0100
commite290c812eb89728ee96ee831f443bb3fce578ab3 (patch)
treedfeee7364f408e0ae179338bd6d96b2c841f638b /drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
parentdrm/omap: dsi: move panel refresh function to host (diff)
downloadlinux-e290c812eb89728ee96ee831f443bb3fce578ab3.tar.xz
linux-e290c812eb89728ee96ee831f443bb3fce578ab3.zip
drm/omap: dsi: Reverse direction of the DSS device enable/disable operations
Complete the direction reversal of the DSS device enable/disable operations started by commit 19b4200d8f4b ("drm/omap: Reverse direction of the DSS device enable/disable operations"). This effectively drops the requirement of calling DSS specific code from the DSI panel driver moving it a bit further to a standard drm_panel driver. 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-31-tomi.valkeinen@ti.com
Diffstat (limited to 'drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c')
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c74
1 files changed, 37 insertions, 37 deletions
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index ccaf6ffe4f86..b72930dcbdf4 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -284,27 +284,6 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
struct omap_dss_device *src = ddata->src;
u8 id1, id2, id3;
int r;
- struct omap_dss_dsi_config dsi_config = {
- .vm = &ddata->vm,
- .hs_clk_min = 150000000,
- .hs_clk_max = 300000000,
- .lp_clk_min = 7000000,
- .lp_clk_max = 10000000,
- };
-
- 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_regulators;
- }
-
- src->ops->enable(src);
dsicm_hw_reset(ddata);
@@ -359,12 +338,6 @@ err:
dsicm_hw_reset(ddata);
- src->ops->disable(src);
-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;
}
@@ -373,6 +346,8 @@ static void dsicm_power_off(struct panel_drv_data *ddata)
struct omap_dss_device *src = ddata->src;
int r;
+ ddata->enabled = false;
+
src->ops->dsi.disable_video_output(src, ddata->dsi->channel);
r = mipi_dsi_dcs_set_display_off(ddata->dsi);
@@ -384,14 +359,6 @@ static void dsicm_power_off(struct panel_drv_data *ddata)
"error disabling panel, issuing HW reset\n");
dsicm_hw_reset(ddata);
}
-
- src->ops->disable(src);
-
- 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;
}
static int dsicm_connect(struct omap_dss_device *src,
@@ -411,6 +378,29 @@ static void dsicm_disconnect(struct omap_dss_device *src,
ddata->src = NULL;
}
+static void dsicm_pre_enable(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *src = ddata->src;
+ int r;
+ struct omap_dss_dsi_config dsi_config = {
+ .vm = &ddata->vm,
+ .hs_clk_min = 150000000,
+ .hs_clk_max = 300000000,
+ .lp_clk_min = 7000000,
+ .lp_clk_max = 10000000,
+ };
+
+ r = regulator_bulk_enable(ARRAY_SIZE(ddata->supplies), ddata->supplies);
+ if (r)
+ dev_err(&ddata->dsi->dev, "failed to enable supplies: %d\n", r);
+
+ r = src->ops->dsi.set_config(src, &dsi_config);
+ if (r) {
+ dev_err(&ddata->dsi->dev, "failed to configure DSI\n");
+ }
+}
+
static void dsicm_enable(struct omap_dss_device *dssdev)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
@@ -445,6 +435,16 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
mutex_unlock(&ddata->lock);
}
+static void dsicm_post_disable(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ int r;
+
+ r = regulator_bulk_disable(ARRAY_SIZE(ddata->supplies), ddata->supplies);
+ if (r)
+ dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", r);
+}
+
static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
{
struct mipi_dsi_device *dsi = ddata->dsi;
@@ -498,8 +498,10 @@ static const struct omap_dss_device_ops dsicm_ops = {
.connect = dsicm_connect,
.disconnect = dsicm_disconnect,
+ .pre_enable = dsicm_pre_enable,
.enable = dsicm_enable,
.disable = dsicm_disable,
+ .post_disable = dsicm_post_disable,
.get_modes = dsicm_get_modes,
.check_timings = dsicm_check_timings,
@@ -655,8 +657,6 @@ static int __exit dsicm_remove(struct mipi_dsi_device *dsi)
omapdss_device_unregister(dssdev);
- if (omapdss_device_is_enabled(dssdev))
- dsicm_disable(dssdev);
omapdss_device_disconnect(ddata->src, dssdev);
sysfs_remove_group(&dsi->dev.kobj, &dsicm_attr_group);