This patch uses the much lighter mode_set_base instead of calling a full 
mode set. Tested on a i915 netbook. Patch should be against drm-core-next.
 
Signed-By: James Simmons <jsimm...@infradead.org>

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7196620..99889e3 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -730,15 +730,20 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo 
*var,
                              struct fb_info *info)
 {
        struct drm_fb_helper *fb_helper = info->par;
+       struct drm_crtc_helper_funcs *crtc_funcs;
        struct drm_device *dev = fb_helper->dev;
        struct drm_mode_set *modeset;
        struct drm_crtc *crtc;
-       int ret = 0;
+       int ret = -ENXIO;
        int i;
 
        mutex_lock(&dev->mode_config.mutex);
        for (i = 0; i < fb_helper->crtc_count; i++) {
                crtc = fb_helper->crtc_info[i].mode_set.crtc;
+               crtc_funcs = crtc->helper_private;
+
+               if (!crtc_funcs->mode_set_base)
+                       continue;
 
                modeset = &fb_helper->crtc_info[i].mode_set;
 
@@ -746,7 +751,8 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
                modeset->y = var->yoffset;
 
                if (modeset->num_connectors) {
-                       ret = crtc->funcs->set_config(modeset);
+                       ret = crtc_funcs->mode_set_base(crtc, modeset->x,
+                                                       modeset->y, crtc->fb);
                        if (!ret) {
                                info->var.xoffset = var->xoffset;
                                info->var.yoffset = var->yoffset;
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to