aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2015-07-20 16:51:28 +0100
committerRyan Harkin <ryan.harkin@linaro.org>2017-05-11 11:26:28 +0100
commit1b8daeb647275b9b035fb3858e5c5ca83cbf76d1 (patch)
tree29a4f9745ddd5b568e373207c7683667e5080b9f
parentc158b1941460644654fe4de1d488089766656bf0 (diff)
HACK: drm: hdlcd: Swap red and blue outputs on 32-bit ARM
To make display colours look right on Versatile Express Signed-off-by: Jon Medhurst <tixy@linaro.org>
-rw-r--r--drivers/gpu/drm/arm/hdlcd_crtc.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 8081238b2f16..3b37a0149f64 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -162,13 +162,26 @@ static int hdlcd_crtc_colour_set(struct hdlcd_drm_private *hdlcd,
* pixel is outside the visible frame area or when there is a
* buffer underrun.
*/
- hdlcd_write(hdlcd, HDLCD_REG_RED_SELECT, default_color |
- format->red.offset | (format->red.length & 0xf) << 8);
- hdlcd_write(hdlcd, HDLCD_REG_GREEN_SELECT, default_color |
- format->green.offset | (format->green.length & 0xf) << 8);
- hdlcd_write(hdlcd, HDLCD_REG_BLUE_SELECT, default_color |
- format->blue.offset | (format->blue.length & 0xf) << 8);
-
+ if(!config_enabled(CONFIG_ARM)) {
+ hdlcd_write(hdlcd, HDLCD_REG_RED_SELECT, default_color |
+ format->red.offset | (format->red.length & 0xf) << 8);
+ hdlcd_write(hdlcd, HDLCD_REG_GREEN_SELECT, default_color |
+ format->green.offset | (format->green.length & 0xf) << 8);
+ hdlcd_write(hdlcd, HDLCD_REG_BLUE_SELECT, default_color |
+ format->blue.offset | (format->blue.length & 0xf) << 8);
+ } else {
+ /*
+ * This is a hack to swap read and blue when building for
+ * 32-bit ARM, because Versatile Express motherboard seems
+ * to be wired up differently.
+ */
+ hdlcd_write(hdlcd, HDLCD_REG_BLUE_SELECT, default_color |
+ format->red.offset | (format->red.length & 0xf) << 8);
+ hdlcd_write(hdlcd, HDLCD_REG_GREEN_SELECT, default_color |
+ format->green.offset | (format->green.length & 0xf) << 8);
+ hdlcd_write(hdlcd, HDLCD_REG_RED_SELECT, default_color |
+ format->blue.offset | (format->blue.length & 0xf) << 8);
+ }
return 0;
}