]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/gpu/drm/omapdrm/omap_fbdev.c
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[linux-beck.git] / drivers / gpu / drm / omapdrm / omap_fbdev.c
similarity index 95%
rename from drivers/staging/omapdrm/omap_fbdev.c
rename to drivers/gpu/drm/omapdrm/omap_fbdev.c
index 70f2d6ed2ed37a9ec0060fbb8dd9370d50b71b9e..b11ce609fcc218894471b9da564df2943b2cfa06 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * drivers/staging/omapdrm/omap_fbdev.c
+ * drivers/gpu/drm/omapdrm/omap_fbdev.c
  *
  * Copyright (C) 2011 Texas Instruments
  * Author: Rob Clark <rob@ti.com>
@@ -131,9 +131,6 @@ static struct fb_ops omap_fb_ops = {
        .fb_pan_display = omap_fbdev_pan_display,
        .fb_blank = drm_fb_helper_blank,
        .fb_setcmap = drm_fb_helper_setcmap,
-
-       .fb_debug_enter = drm_fb_helper_debug_enter,
-       .fb_debug_leave = drm_fb_helper_debug_leave,
 };
 
 static int omap_fbdev_create(struct drm_fb_helper *helper,
@@ -275,8 +272,10 @@ fail:
        if (ret) {
                if (fbi)
                        framebuffer_release(fbi);
-               if (fb)
+               if (fb) {
+                       drm_framebuffer_unregister_private(fb);
                        drm_framebuffer_remove(fb);
+               }
        }
 
        return ret;
@@ -294,25 +293,10 @@ static void omap_crtc_fb_gamma_get(struct drm_crtc *crtc,
        DBG("fbdev: get gamma");
 }
 
-static int omap_fbdev_probe(struct drm_fb_helper *helper,
-               struct drm_fb_helper_surface_size *sizes)
-{
-       int new_fb = 0;
-       int ret;
-
-       if (!helper->fb) {
-               ret = omap_fbdev_create(helper, sizes);
-               if (ret)
-                       return ret;
-               new_fb = 1;
-       }
-       return new_fb;
-}
-
 static struct drm_fb_helper_funcs omap_fb_helper_funcs = {
        .gamma_set = omap_crtc_fb_gamma_set,
        .gamma_get = omap_crtc_fb_gamma_get,
-       .fb_probe = omap_fbdev_probe,
+       .fb_probe = omap_fbdev_create,
 };
 
 static struct drm_fb_helper *get_fb(struct fb_info *fbi)
@@ -365,6 +349,10 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device *dev)
        }
 
        drm_fb_helper_single_add_all_connectors(helper);
+
+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(helper, 32);
 
        priv->fbdev = helper;
@@ -398,8 +386,10 @@ void omap_fbdev_free(struct drm_device *dev)
        fbdev = to_omap_fbdev(priv->fbdev);
 
        /* this will free the backing object */
-       if (fbdev->fb)
+       if (fbdev->fb) {
+               drm_framebuffer_unregister_private(fbdev->fb);
                drm_framebuffer_remove(fbdev->fb);
+       }
 
        kfree(fbdev);