aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2015-08-12 18:00:02 +0100
committerJon Medhurst <tixy@linaro.org>2015-11-02 09:40:57 +0000
commitac8ca9d390d6d35a1ef7cfc688a5a4089cd5270a (patch)
treedeaa183039f10d0c2308a2dd8bb14baf4ce97d11
parentd87fa636bbf20ddea30bca3d0ccb90eb0246d785 (diff)
drm: hdlcd: Add implementation of mode_set_base
This prevents drm_crtc_helper_set_config from doing a full mode_set when just the the framebuffer start address is changed. E.g. when userside is implementing double buffering. Without this change, such uses cause monitors to be in a permanent state of lost signal synchronisation. Signed-off-by: Jon Medhurst <tixy@linaro.org>
-rw-r--r--drivers/gpu/drm/arm/hdlcd_crtc.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 3b37a0149f64..8db213d27fe2 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -185,6 +185,15 @@ static int hdlcd_crtc_colour_set(struct hdlcd_drm_private *hdlcd,
return 0;
}
+static int hdlcd_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
+ hdlcd_set_scanout(hdlcd);
+ return 0;
+}
+
+
static int hdlcd_crtc_mode_set(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode,
@@ -254,6 +263,7 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
.prepare = hdlcd_crtc_prepare,
.commit = hdlcd_crtc_commit,
.mode_set = hdlcd_crtc_mode_set,
+ .mode_set_base = hdlcd_crtc_mode_set_base,
.load_lut = hdlcd_crtc_load_lut,
};