From 4690963a2d219abac912ebe2f0b22529c028db06 Mon Sep 17 00:00:00 2001
From: Vasily Khoruzhick <anarsoul@gmail.com>
Date: Sun, 28 Oct 2018 15:32:38 -0700
Subject: [PATCH 123/146] drm/sun4i: tcon: enable dithering on tcon0 is there's
 bridge connected

RGB on A64 is 6bpc, so if bridge is connected we need to enable dithering

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 drivers/gpu/drm/sun4i/sun4i_tcon.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index 1b28fd9c2908..891ba4dbbf10 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -283,10 +283,6 @@ static void sun4i_tcon0_mode_set_dithering(struct sun4i_tcon *tcon,
 	u32 bus_format = 0;
 	u32 val = 0;
 
-	/* XXX Would this ever happen? */
-	if (!connector)
-		return;
-
 	/*
 	 * FIXME: Undocumented bits
 	 *
@@ -304,11 +300,15 @@ static void sun4i_tcon0_mode_set_dithering(struct sun4i_tcon *tcon,
 	regmap_write(tcon->regs, SUN4I_TCON0_FRM_TBL2_REG, 0x57575555);
 	regmap_write(tcon->regs, SUN4I_TCON0_FRM_TBL3_REG, 0x7f7f7777);
 
+	/* Do dithering if there's bridge connected */
+	if (!connector)
+		val |= SUN4I_TCON0_FRM_CTL_EN;
+
 	/* Do dithering if panel only supports 6 bits per color */
-	if (connector->display_info.bpc == 6)
+	if (connector && connector->display_info.bpc == 6)
 		val |= SUN4I_TCON0_FRM_CTL_EN;
 
-	if (connector->display_info.num_bus_formats == 1)
+	if (connector && connector->display_info.num_bus_formats == 1)
 		bus_format = connector->display_info.bus_formats[0];
 
 	/* Check the connection format */
@@ -492,6 +492,8 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
 	/* Set dithering if needed */
 	if (tcon->panel)
 		sun4i_tcon0_mode_set_dithering(tcon, tcon->panel->connector);
+	else
+		sun4i_tcon0_mode_set_dithering(tcon, NULL);
 
 	/* Adjust clock delay */
 	clk_delay = sun4i_tcon_get_clk_delay(mode, 0);
-- 
2.17.1

