aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_encoder.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-09-04 10:22:27 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2019-03-18 05:42:11 -0400
commitb80bfc66b0eeaf887f49c9cdb92ebba5ec0a94aa (patch)
tree13af115876421e3f593813351c150e2ee5bde1b9 /drivers/gpu/drm/omapdrm/omap_encoder.c
parentd2c53162f55798f7a6353ea021793b3a8e411914 (diff)
drm/omap: Move common display enable/disable code to encoder
All .enable() and .disable() handlers for panels and connectors share common code that validates and updates the device's state. Move it to common locations in the omap_encoder_enable() and omap_encoder_disable() handlers. The enabled check in the .disable() handler is left untouched, it will be addressed separately. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_encoder.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_encoder.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
index 0d85b3a35767..5427c0b3ff9e 100644
--- a/drivers/gpu/drm/omapdrm/omap_encoder.c
+++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
@@ -147,21 +147,45 @@ static void omap_encoder_disable(struct drm_encoder *encoder)
147{ 147{
148 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 148 struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
149 struct omap_dss_device *dssdev = omap_encoder->display; 149 struct omap_dss_device *dssdev = omap_encoder->display;
150 struct drm_device *dev = encoder->dev;
151
152 dev_dbg(dev->dev, "disable(%s)\n", dssdev->name);
153
154 if (!omapdss_device_is_enabled(dssdev))
155 return;
150 156
151 dssdev->ops->disable(dssdev); 157 dssdev->ops->disable(dssdev);
158
159 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
152} 160}
153 161
154static void omap_encoder_enable(struct drm_encoder *encoder) 162static void omap_encoder_enable(struct drm_encoder *encoder)
155{ 163{
156 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 164 struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
157 struct omap_dss_device *dssdev = omap_encoder->display; 165 struct omap_dss_device *dssdev = omap_encoder->display;
166 struct drm_device *dev = encoder->dev;
158 int r; 167 int r;
159 168
169 dev_dbg(dev->dev, "enable(%s)\n", dssdev->name);
170
171 if (!omapdss_device_is_connected(dssdev)) {
172 r = -ENODEV;
173 goto error;
174 }
175
176 if (omapdss_device_is_enabled(dssdev))
177 return;
178
160 r = dssdev->ops->enable(dssdev); 179 r = dssdev->ops->enable(dssdev);
161 if (r) 180 if (r)
162 dev_err(encoder->dev->dev, 181 goto error;
163 "Failed to enable display '%s': %d\n", 182
164 dssdev->name, r); 183 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
184 return;
185
186error:
187 dev_err(dev->dev, "Failed to enable display '%s': %d\n",
188 dssdev->name, r);
165} 189}
166 190
167static int omap_encoder_atomic_check(struct drm_encoder *encoder, 191static int omap_encoder_atomic_check(struct drm_encoder *encoder,