diff options
author | Stéphane Marchesin <marcheu@chromium.org> | 2014-07-02 18:13:43 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-07-07 21:37:28 -0400 |
commit | 40377ef2d9a3ddc8ba4aee11393fb207e82111e1 (patch) | |
tree | a0d2cdd522839f8834618b8925b766bd8019a726 /drivers/gpu/drm/udl | |
parent | 26507b065b503ac1b5ba702161c2084190fc0c9f (diff) |
drm/udl: Implement page_flip ioctl
This is a very crude page_flip implementation for UDL. There are ways
to make it better (make it asynchronous, make it do actual vsynced
flips...) but that's for another patch.
[airlied: fixup primary change]
Signed-off-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/udl')
-rw-r--r-- | drivers/gpu/drm/udl/udl_modeset.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/udl/udl_modeset.c b/drivers/gpu/drm/udl/udl_modeset.c index cddc4fcf35cf..dc145d320b25 100644 --- a/drivers/gpu/drm/udl/udl_modeset.c +++ b/drivers/gpu/drm/udl/udl_modeset.c | |||
@@ -363,6 +363,26 @@ static void udl_crtc_destroy(struct drm_crtc *crtc) | |||
363 | kfree(crtc); | 363 | kfree(crtc); |
364 | } | 364 | } |
365 | 365 | ||
366 | static int udl_crtc_page_flip(struct drm_crtc *crtc, | ||
367 | struct drm_framebuffer *fb, | ||
368 | struct drm_pending_vblank_event *event, | ||
369 | uint32_t page_flip_flags) | ||
370 | { | ||
371 | struct udl_framebuffer *ufb = to_udl_fb(fb); | ||
372 | struct drm_device *dev = crtc->dev; | ||
373 | unsigned long flags; | ||
374 | |||
375 | udl_handle_damage(ufb, 0, 0, fb->width, fb->height); | ||
376 | |||
377 | spin_lock_irqsave(&dev->event_lock, flags); | ||
378 | if (event) | ||
379 | drm_send_vblank_event(dev, 0, event); | ||
380 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
381 | crtc->primary->fb = fb; | ||
382 | |||
383 | return 0; | ||
384 | } | ||
385 | |||
366 | static void udl_crtc_prepare(struct drm_crtc *crtc) | 386 | static void udl_crtc_prepare(struct drm_crtc *crtc) |
367 | { | 387 | { |
368 | } | 388 | } |
@@ -384,6 +404,7 @@ static struct drm_crtc_helper_funcs udl_helper_funcs = { | |||
384 | static const struct drm_crtc_funcs udl_crtc_funcs = { | 404 | static const struct drm_crtc_funcs udl_crtc_funcs = { |
385 | .set_config = drm_crtc_helper_set_config, | 405 | .set_config = drm_crtc_helper_set_config, |
386 | .destroy = udl_crtc_destroy, | 406 | .destroy = udl_crtc_destroy, |
407 | .page_flip = udl_crtc_page_flip, | ||
387 | }; | 408 | }; |
388 | 409 | ||
389 | static int udl_crtc_init(struct drm_device *dev) | 410 | static int udl_crtc_init(struct drm_device *dev) |