drm/mcde: Fix RGB/BGR bug
I was confused when the graphics came out with blue penguins on the DPI panel. It turns out that the so-called "packed RGB666" mode on the DSI formatter is incorrect: this mode is the actual RGB888 mode, and the mode called RGB888 is BGR888. The claims that the MCDE had inverse RGB/BGR buffer formats was wrong, so correct this and the buggy register and everything is much more consistent, and graphics look good on all targets, both DPI and DSI. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Cc: phone-devel@vger.kernel.org Cc: Stephan Gerhold <stephan@gerhold.net> Link: https://patchwork.freedesktop.org/patch/msgid/20201117175413.869871-1-linus.walleij@linaro.org
This commit is contained in:
parent
04295bc336
commit
77f512bde9
@ -243,73 +243,70 @@ static int mcde_configure_extsrc(struct mcde *mcde, enum mcde_extsrc src,
|
||||
val = 0 << MCDE_EXTSRCXCONF_BUF_ID_SHIFT;
|
||||
val |= 1 << MCDE_EXTSRCXCONF_BUF_NB_SHIFT;
|
||||
val |= 0 << MCDE_EXTSRCXCONF_PRI_OVLID_SHIFT;
|
||||
/*
|
||||
* MCDE has inverse semantics from DRM on RBG/BGR which is why
|
||||
* all the modes are inversed here.
|
||||
*/
|
||||
|
||||
switch (format) {
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_ARGB8888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_ABGR8888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_ARGB8888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_XRGB8888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XBGR8888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_XRGB8888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_RGB888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_BGR888:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB888 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_ARGB4444:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_ARGB4444 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_ABGR4444:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_ARGB4444 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XRGB4444:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB444 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XBGR4444:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB444 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XRGB1555:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_IRGB1555 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_XBGR1555:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_IRGB1555 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_RGB565:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB565 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_BGR565:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_RGB565 <<
|
||||
MCDE_EXTSRCXCONF_BPP_SHIFT;
|
||||
val |= MCDE_EXTSRCXCONF_BGR;
|
||||
break;
|
||||
case DRM_FORMAT_YUV422:
|
||||
val |= MCDE_EXTSRCXCONF_BPP_YCBCR422 <<
|
||||
@ -700,7 +697,9 @@ static void mcde_configure_dsi_formatter(struct mcde *mcde,
|
||||
MCDE_DSICONF0_PACKING_SHIFT;
|
||||
break;
|
||||
case MIPI_DSI_FMT_RGB666_PACKED:
|
||||
val |= MCDE_DSICONF0_PACKING_RGB666_PACKED <<
|
||||
dev_err(mcde->dev,
|
||||
"we cannot handle the packed RGB666 format\n");
|
||||
val |= MCDE_DSICONF0_PACKING_RGB666 <<
|
||||
MCDE_DSICONF0_PACKING_SHIFT;
|
||||
break;
|
||||
case MIPI_DSI_FMT_RGB565:
|
||||
|
@ -465,8 +465,8 @@
|
||||
#define MCDE_DSICONF0_PACKING_MASK 0x00700000
|
||||
#define MCDE_DSICONF0_PACKING_RGB565 0
|
||||
#define MCDE_DSICONF0_PACKING_RGB666 1
|
||||
#define MCDE_DSICONF0_PACKING_RGB666_PACKED 2
|
||||
#define MCDE_DSICONF0_PACKING_RGB888 3
|
||||
#define MCDE_DSICONF0_PACKING_RGB888 2
|
||||
#define MCDE_DSICONF0_PACKING_BGR888 3
|
||||
#define MCDE_DSICONF0_PACKING_HDTV 4
|
||||
|
||||
#define MCDE_DSIVID0FRAME 0x00000E04
|
||||
|
Loading…
x
Reference in New Issue
Block a user