aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_encoder.c
diff options
context:
space:
mode:
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,