diff options
author | Rob Clark <rob@ti.com> | 2012-01-16 13:51:18 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-02-08 17:14:11 -0500 |
commit | 2f53700df17bf52332056c1e85b23bcf64c77e57 (patch) | |
tree | 9c87832f29fb0129cb803a79359ca48c8d546847 /drivers | |
parent | 9a0774e0991c82a95ef5e5848b318bd15aba0dcd (diff) |
staging: drm/omap: updates for DSS fifomerge API changes
Signed-off-by: Rob Clark <rob@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/omapdrm/omap_crtc.c | 2 | ||||
-rw-r--r-- | drivers/staging/omapdrm/omap_drv.h | 6 | ||||
-rw-r--r-- | drivers/staging/omapdrm/omap_plane.c | 33 |
3 files changed, 31 insertions, 10 deletions
diff --git a/drivers/staging/omapdrm/omap_crtc.c b/drivers/staging/omapdrm/omap_crtc.c index 3cee04edcec8..17ca163e5896 100644 --- a/drivers/staging/omapdrm/omap_crtc.c +++ b/drivers/staging/omapdrm/omap_crtc.c | |||
@@ -81,7 +81,7 @@ static int omap_crtc_mode_set(struct drm_crtc *crtc, | |||
81 | struct omap_crtc *omap_crtc = to_omap_crtc(crtc); | 81 | struct omap_crtc *omap_crtc = to_omap_crtc(crtc); |
82 | struct drm_plane *plane = omap_crtc->plane; | 82 | struct drm_plane *plane = omap_crtc->plane; |
83 | 83 | ||
84 | return plane->funcs->update_plane(plane, crtc, crtc->fb, | 84 | return omap_plane_mode_set(plane, crtc, crtc->fb, |
85 | 0, 0, mode->hdisplay, mode->vdisplay, | 85 | 0, 0, mode->hdisplay, mode->vdisplay, |
86 | x << 16, y << 16, | 86 | x << 16, y << 16, |
87 | mode->hdisplay << 16, mode->vdisplay << 16); | 87 | mode->hdisplay << 16, mode->vdisplay << 16); |
diff --git a/drivers/staging/omapdrm/omap_drv.h b/drivers/staging/omapdrm/omap_drv.h index 48f6fce614b6..61fe022dda5b 100644 --- a/drivers/staging/omapdrm/omap_drv.h +++ b/drivers/staging/omapdrm/omap_drv.h | |||
@@ -69,6 +69,12 @@ struct drm_plane *omap_plane_init(struct drm_device *dev, | |||
69 | struct omap_overlay *ovl, unsigned int possible_crtcs, | 69 | struct omap_overlay *ovl, unsigned int possible_crtcs, |
70 | bool priv); | 70 | bool priv); |
71 | int omap_plane_dpms(struct drm_plane *plane, int mode); | 71 | int omap_plane_dpms(struct drm_plane *plane, int mode); |
72 | int omap_plane_mode_set(struct drm_plane *plane, | ||
73 | struct drm_crtc *crtc, struct drm_framebuffer *fb, | ||
74 | int crtc_x, int crtc_y, | ||
75 | unsigned int crtc_w, unsigned int crtc_h, | ||
76 | uint32_t src_x, uint32_t src_y, | ||
77 | uint32_t src_w, uint32_t src_h); | ||
72 | 78 | ||
73 | struct drm_encoder *omap_encoder_init(struct drm_device *dev, | 79 | struct drm_encoder *omap_encoder_init(struct drm_device *dev, |
74 | struct omap_overlay_manager *mgr); | 80 | struct omap_overlay_manager *mgr); |
diff --git a/drivers/staging/omapdrm/omap_plane.c b/drivers/staging/omapdrm/omap_plane.c index 66eed75e634d..97909124a1fe 100644 --- a/drivers/staging/omapdrm/omap_plane.c +++ b/drivers/staging/omapdrm/omap_plane.c | |||
@@ -85,7 +85,7 @@ static int commit(struct drm_plane *plane) | |||
85 | } | 85 | } |
86 | } | 86 | } |
87 | 87 | ||
88 | if (info->enabled) { | 88 | if (ovl->is_enabled(ovl)) { |
89 | omap_framebuffer_flush(plane->fb, info->pos_x, info->pos_y, | 89 | omap_framebuffer_flush(plane->fb, info->pos_x, info->pos_y, |
90 | info->out_width, info->out_height); | 90 | info->out_width, info->out_height); |
91 | } | 91 | } |
@@ -115,7 +115,7 @@ static void update_manager(struct drm_plane *plane) | |||
115 | } | 115 | } |
116 | 116 | ||
117 | if (ovl->manager != mgr) { | 117 | if (ovl->manager != mgr) { |
118 | bool enabled = omap_plane->info.enabled; | 118 | bool enabled = ovl->is_enabled(ovl); |
119 | 119 | ||
120 | /* don't switch things around with enabled overlays: */ | 120 | /* don't switch things around with enabled overlays: */ |
121 | if (enabled) | 121 | if (enabled) |
@@ -168,7 +168,8 @@ static void update_scanout(struct drm_plane *plane) | |||
168 | if (ret) { | 168 | if (ret) { |
169 | dev_err(plane->dev->dev, | 169 | dev_err(plane->dev->dev, |
170 | "could not pin fb: %d\n", ret); | 170 | "could not pin fb: %d\n", ret); |
171 | omap_plane->info.enabled = false; | 171 | omap_plane_dpms(plane, DRM_MODE_DPMS_OFF); |
172 | return; | ||
172 | } | 173 | } |
173 | 174 | ||
174 | omap_framebuffer_update_scanout(plane->fb, | 175 | omap_framebuffer_update_scanout(plane->fb, |
@@ -180,7 +181,7 @@ static void update_scanout(struct drm_plane *plane) | |||
180 | info->screen_width); | 181 | info->screen_width); |
181 | } | 182 | } |
182 | 183 | ||
183 | static int omap_plane_update(struct drm_plane *plane, | 184 | int omap_plane_mode_set(struct drm_plane *plane, |
184 | struct drm_crtc *crtc, struct drm_framebuffer *fb, | 185 | struct drm_crtc *crtc, struct drm_framebuffer *fb, |
185 | int crtc_x, int crtc_y, | 186 | int crtc_x, int crtc_y, |
186 | unsigned int crtc_w, unsigned int crtc_h, | 187 | unsigned int crtc_w, unsigned int crtc_h, |
@@ -195,7 +196,6 @@ static int omap_plane_update(struct drm_plane *plane, | |||
195 | src_w = src_w >> 16; | 196 | src_w = src_w >> 16; |
196 | src_h = src_h >> 16; | 197 | src_h = src_h >> 16; |
197 | 198 | ||
198 | omap_plane->info.enabled = true; | ||
199 | omap_plane->info.pos_x = crtc_x; | 199 | omap_plane->info.pos_x = crtc_x; |
200 | omap_plane->info.pos_y = crtc_y; | 200 | omap_plane->info.pos_y = crtc_y; |
201 | omap_plane->info.out_width = crtc_w; | 201 | omap_plane->info.out_width = crtc_w; |
@@ -214,11 +214,22 @@ static int omap_plane_update(struct drm_plane *plane, | |||
214 | 214 | ||
215 | update_scanout(plane); | 215 | update_scanout(plane); |
216 | update_manager(plane); | 216 | update_manager(plane); |
217 | commit(plane); | ||
218 | 217 | ||
219 | return 0; | 218 | return 0; |
220 | } | 219 | } |
221 | 220 | ||
221 | static int omap_plane_update(struct drm_plane *plane, | ||
222 | struct drm_crtc *crtc, struct drm_framebuffer *fb, | ||
223 | int crtc_x, int crtc_y, | ||
224 | unsigned int crtc_w, unsigned int crtc_h, | ||
225 | uint32_t src_x, uint32_t src_y, | ||
226 | uint32_t src_w, uint32_t src_h) | ||
227 | { | ||
228 | omap_plane_mode_set(plane, crtc, fb, crtc_x, crtc_y, crtc_w, crtc_h, | ||
229 | src_x, src_y, src_w, src_h); | ||
230 | return omap_plane_dpms(plane, DRM_MODE_DPMS_ON); | ||
231 | } | ||
232 | |||
222 | static int omap_plane_disable(struct drm_plane *plane) | 233 | static int omap_plane_disable(struct drm_plane *plane) |
223 | { | 234 | { |
224 | return omap_plane_dpms(plane, DRM_MODE_DPMS_OFF); | 235 | return omap_plane_dpms(plane, DRM_MODE_DPMS_OFF); |
@@ -236,18 +247,22 @@ static void omap_plane_destroy(struct drm_plane *plane) | |||
236 | int omap_plane_dpms(struct drm_plane *plane, int mode) | 247 | int omap_plane_dpms(struct drm_plane *plane, int mode) |
237 | { | 248 | { |
238 | struct omap_plane *omap_plane = to_omap_plane(plane); | 249 | struct omap_plane *omap_plane = to_omap_plane(plane); |
250 | struct omap_overlay *ovl = omap_plane->ovl; | ||
251 | int r; | ||
239 | 252 | ||
240 | DBG("%s: %d", omap_plane->ovl->name, mode); | 253 | DBG("%s: %d", omap_plane->ovl->name, mode); |
241 | 254 | ||
242 | if (mode == DRM_MODE_DPMS_ON) { | 255 | if (mode == DRM_MODE_DPMS_ON) { |
243 | update_scanout(plane); | 256 | update_scanout(plane); |
244 | omap_plane->info.enabled = true; | 257 | r = commit(plane); |
258 | if (!r) | ||
259 | r = ovl->enable(ovl); | ||
245 | } else { | 260 | } else { |
246 | omap_plane->info.enabled = false; | 261 | r = ovl->disable(ovl); |
247 | update_pin(plane, NULL); | 262 | update_pin(plane, NULL); |
248 | } | 263 | } |
249 | 264 | ||
250 | return commit(plane); | 265 | return r; |
251 | } | 266 | } |
252 | 267 | ||
253 | static const struct drm_plane_funcs omap_plane_funcs = { | 268 | static const struct drm_plane_funcs omap_plane_funcs = { |