diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_encoder.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_encoder.c | 30 |
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 | ||
154 | static void omap_encoder_enable(struct drm_encoder *encoder) | 162 | static 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 | |||
186 | error: | ||
187 | dev_err(dev->dev, "Failed to enable display '%s': %d\n", | ||
188 | dssdev->name, r); | ||
165 | } | 189 | } |
166 | 190 | ||
167 | static int omap_encoder_atomic_check(struct drm_encoder *encoder, | 191 | static int omap_encoder_atomic_check(struct drm_encoder *encoder, |