aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRob Clark <rob@ti.com>2012-01-16 13:51:18 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-08 17:14:11 -0500
commit2f53700df17bf52332056c1e85b23bcf64c77e57 (patch)
tree9c87832f29fb0129cb803a79359ca48c8d546847 /drivers
parent9a0774e0991c82a95ef5e5848b318bd15aba0dcd (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.c2
-rw-r--r--drivers/staging/omapdrm/omap_drv.h6
-rw-r--r--drivers/staging/omapdrm/omap_plane.c33
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);
71int omap_plane_dpms(struct drm_plane *plane, int mode); 71int omap_plane_dpms(struct drm_plane *plane, int mode);
72int 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
73struct drm_encoder *omap_encoder_init(struct drm_device *dev, 79struct 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
183static int omap_plane_update(struct drm_plane *plane, 184int 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
221static 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
222static int omap_plane_disable(struct drm_plane *plane) 233static 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)
236int omap_plane_dpms(struct drm_plane *plane, int mode) 247int 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
253static const struct drm_plane_funcs omap_plane_funcs = { 268static const struct drm_plane_funcs omap_plane_funcs = {