Quoting Laurent Pinchart (2022-09-28 01:58:11) > Up to and including v1.3, HDMI supported limited quantization range only > for YCbCr. HDMI v1.4 introduced selectable quantization ranges, but this > features isn't supported in the dw-hdmi driver that is used in > conjunction with the LCDIF in the i.MX8MP. The HDMI YCbCr output is thus > always advertised in the AVI infoframe as limited range. > > The LCDIF driver, on the other hand, configures the CSC to produce full > range YCbCr. This mismatch results in loss of details and incorrect > colours. Fix it by switching to limited range YCbCr. > > The coefficients are copied from drivers/media/platforms/nxp/imx-pxp.c > for coherency, as the hardware is most likely identical. Perhaps we need one or two of these somewhere: https://colorconfidence.com/products/calibrite-colorchecker-display Or does anyone have one that could test this patch? Anyway: Reviewed-by: Kieran Bingham <kieran.bingham@xxxxxxxxxxxxxxxx> > Fixes: 9db35bb349a0 ("drm: lcdif: Add support for i.MX8MP LCDIF variant") > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > Changes since v1: > > - Use coefficients from imx-pxp.c > --- > drivers/gpu/drm/mxsfb/lcdif_kms.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lcdif_kms.c > index 1f22ea5896d5..c3622be0c587 100644 > --- a/drivers/gpu/drm/mxsfb/lcdif_kms.c > +++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c > @@ -53,16 +53,16 @@ static void lcdif_set_formats(struct lcdif_drm_private *lcdif, > writel(DISP_PARA_LINE_PATTERN_UYVY_H, > lcdif->base + LCDC_V8_DISP_PARA); > > - /* CSC: BT.601 Full Range RGB to YCbCr coefficients. */ > - writel(CSC0_COEF0_A2(0x096) | CSC0_COEF0_A1(0x04c), > + /* CSC: BT.601 Limited Range RGB to YCbCr coefficients. */ > + writel(CSC0_COEF0_A2(0x081) | CSC0_COEF0_A1(0x041), > lcdif->base + LCDC_V8_CSC0_COEF0); > - writel(CSC0_COEF1_B1(0x7d5) | CSC0_COEF1_A3(0x01d), > + writel(CSC0_COEF1_B1(0x7db) | CSC0_COEF1_A3(0x019), > lcdif->base + LCDC_V8_CSC0_COEF1); > - writel(CSC0_COEF2_B3(0x080) | CSC0_COEF2_B2(0x7ac), > + writel(CSC0_COEF2_B3(0x070) | CSC0_COEF2_B2(0x7b6), > lcdif->base + LCDC_V8_CSC0_COEF2); > - writel(CSC0_COEF3_C2(0x795) | CSC0_COEF3_C1(0x080), > + writel(CSC0_COEF3_C2(0x7a2) | CSC0_COEF3_C1(0x070), > lcdif->base + LCDC_V8_CSC0_COEF3); > - writel(CSC0_COEF4_D1(0x000) | CSC0_COEF4_C3(0x7ec), > + writel(CSC0_COEF4_D1(0x010) | CSC0_COEF4_C3(0x7ee), > lcdif->base + LCDC_V8_CSC0_COEF4); > writel(CSC0_COEF5_D3(0x080) | CSC0_COEF5_D2(0x080), > lcdif->base + LCDC_V8_CSC0_COEF5); > -- > Regards, > > Laurent Pinchart >