aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <tixy@linaro.org>2015-07-20 16:51:28 +0100
committerAndrey Konovalov <andrey.konovalov@linaro.org>2015-08-18 19:22:57 +0300
commitc81b92bc57e22e947f2c23b530e168ce080e6200 (patch)
treecc33f271b2e03d2b18ef9ac28de5087dfb7ef345
parentfa3b01e07bef92969600b10870dc6403276f6fea (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;
}