Hi Daniel,
On Mi, 2019-08-14 at 12:44 +0100, Daniel Stone wrote:
Hi Robert,
On Wed, 14 Aug 2019 at 11:49, Robert Chiras robert.chiras@nxp.com wrote:
+ case DRM_FORMAT_BGR565: /* BG16 */ + if (mxsfb->devdata->ipversion < 4) + goto err; + writel(CTRL2_ODD_LINE_PATTERN(CTRL2_LINE_PATTERN_BG R) | + CTRL2_EVEN_LINE_PATTERN(CTRL2_LINE_PATTERN_ BGR), + mxsfb->base + LCDC_V4_CTRL2 + REG_SET); + /* Fall through */ + case DRM_FORMAT_RGB565: /* RG16 */ + ctrl |= CTRL_SET_WORD_LENGTH(0); + ctrl &= ~CTRL_DF16; + ctrl1 |= CTRL1_SET_BYTE_PACKAGING(0xf); + break;
For non-BGR formats, do you need to write RGB line-pattern back to the CTRL2 register? Otherwise, if you start with BGR565 then switch back to RGB565, presumably CTRL2 would still be programmed for BGR so you would display inverted channels.
The LINE_PATTERN from LCDC_V4_CTRL2 register is cleared above, with this code: + if (mxsfb->devdata->ipversion >= 4) + writel(CTRL2_ODD_LINE_PATTERN(CTRL2_LINE_PATTERN_CLR) | + CTRL2_EVEN_LINE_PATTERN(CTRL2_LINE_PATTERN_CLR), + mxsfb->base + LCDC_V4_CTRL2 + REG_CLR);
Same goes for all the other BGR/RGB format pairs below.
Cheers, Daniel
Thanks, Robert