summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/rcar-du/rcar_du_drv.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2013-03-15 01:45:22 +0400
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2013-08-10 01:17:54 +0400
commit3864c6f446f3c2ebbeca1d45e28452682706c1aa (patch)
tree86aa2051db32395773b47b44d6bf5a8503e55a49 /drivers/gpu/drm/rcar-du/rcar_du_drv.c
parent90374b5c25c9f04895c52a1e7a2468ee8dac525b (diff)
downloadlinux-3864c6f446f3c2ebbeca1d45e28452682706c1aa.tar.xz
drm/rcar-du: Add FBDEV emulation support
Use the FB CMA helpers to implement FBDEV emulation support. The VGA connector status must be reported as connector_status_connected instead of connector_status_unknown to be usable by the emulation layer. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Diffstat (limited to 'drivers/gpu/drm/rcar-du/rcar_du_drv.c')
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_drv.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index 38a8b52624ce..e113352bacdc 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -21,6 +21,7 @@
#include <drm/drmP.h>
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_cma_helper.h>
#include <drm/drm_gem_cma_helper.h>
#include "rcar_du_crtc.h"
@@ -34,6 +35,11 @@
static int rcar_du_unload(struct drm_device *dev)
{
+ struct rcar_du_device *rcdu = dev->dev_private;
+
+ if (rcdu->fbdev)
+ drm_fbdev_cma_fini(rcdu->fbdev);
+
drm_kms_helper_poll_fini(dev);
drm_mode_config_cleanup(dev);
drm_vblank_cleanup(dev);
@@ -109,6 +115,13 @@ static void rcar_du_preclose(struct drm_device *dev, struct drm_file *file)
rcar_du_crtc_cancel_page_flip(&rcdu->crtcs[i], file);
}
+static void rcar_du_lastclose(struct drm_device *dev)
+{
+ struct rcar_du_device *rcdu = dev->dev_private;
+
+ drm_fbdev_cma_restore_mode(rcdu->fbdev);
+}
+
static int rcar_du_enable_vblank(struct drm_device *dev, int crtc)
{
struct rcar_du_device *rcdu = dev->dev_private;
@@ -145,6 +158,7 @@ static struct drm_driver rcar_du_driver = {
.load = rcar_du_load,
.unload = rcar_du_unload,
.preclose = rcar_du_preclose,
+ .lastclose = rcar_du_lastclose,
.get_vblank_counter = drm_vblank_count,
.enable_vblank = rcar_du_enable_vblank,
.disable_vblank = rcar_du_disable_vblank,