drm/omap: fix operation without fbdev
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 25 Sep 2014 19:24:26 +0000 (19:24 +0000)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 24 Mar 2015 11:50:54 +0000 (13:50 +0200)
omapdrm should work fine even if fbdev is missing. The current driver
crashes in that case, though, as it is missing checks for the fbdev.

Add the checks so that we don't free fbdev or restore fbdev mode when
there's no fbdev.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/omap_drv.c

index b71a443e671e2f89d03f9852601f1a753534c936..63c953971c119fc766ecc3b95afa0bcfbe3139d5 100644 (file)
@@ -530,7 +530,8 @@ static int dev_unload(struct drm_device *dev)
 
        drm_kms_helper_poll_fini(dev);
 
-       omap_fbdev_free(dev);
+       if (priv->fbdev)
+               omap_fbdev_free(dev);
 
        /* flush crtcs so the fbs get released */
        for (i = 0; i < priv->num_crtcs; i++)
@@ -599,9 +600,11 @@ static void dev_lastclose(struct drm_device *dev)
                }
        }
 
-       ret = drm_fb_helper_restore_fbdev_mode_unlocked(priv->fbdev);
-       if (ret)
-               DBG("failed to restore crtc mode");
+       if (priv->fbdev) {
+               ret = drm_fb_helper_restore_fbdev_mode_unlocked(priv->fbdev);
+               if (ret)
+                       DBG("failed to restore crtc mode");
+       }
 }
 
 static void dev_preclose(struct drm_device *dev, struct drm_file *file)