diff options
author | Jon Medhurst <tixy@linaro.org> | 2015-07-20 16:51:28 +0100 |
---|---|---|
committer | Ryan Harkin <ryan.harkin@linaro.org> | 2017-05-11 11:26:28 +0100 |
commit | 1b8daeb647275b9b035fb3858e5c5ca83cbf76d1 (patch) | |
tree | 29a4f9745ddd5b568e373207c7683667e5080b9f | |
parent | c158b1941460644654fe4de1d488089766656bf0 (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.c | 27 |
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; } |