From 08f87f769b595151be1afeff53e144f543faa614 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 06 Dec 2023 09:51:13 +0000
Subject: [PATCH] add dts config

---
 kernel/drivers/gpu/drm/bridge/rk630-tve.c |   80 ++++++++++++++++++++-------------------
 1 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/kernel/drivers/gpu/drm/bridge/rk630-tve.c b/kernel/drivers/gpu/drm/bridge/rk630-tve.c
index 4f279c4..c55d63d 100644
--- a/kernel/drivers/gpu/drm/bridge/rk630-tve.c
+++ b/kernel/drivers/gpu/drm/bridge/rk630-tve.c
@@ -15,7 +15,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_of.h>
-#include <drm/drmP.h>
+#include <drm/drm_probe_helper.h>
 
 #include "../rockchip/rockchip_drm_drv.h"
 
@@ -24,12 +24,12 @@
 		   816, 864, 0, 576, 580, 586, 625, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
 		   DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
-		   .vrefresh = 50, 0, },
+		   0, },
 	{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 753,
 		   815, 858, 0, 480, 483, 489, 525, 0,
 		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
 		   DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
-		   .vrefresh = 60, 0, },
+		   0, },
 };
 
 struct rk630_tve {
@@ -59,6 +59,7 @@
 };
 
 static struct env_config ntsc_bt656_config[] = {
+	{ BT656_DECODER_CTRL, 0x00000001 },
 	{ BT656_DECODER_CROP, 0x00000000 },
 	{ BT656_DECODER_SIZE, 0x01e002d0 },
 	{ BT656_DECODER_HTOTAL_HS_END, 0x035a003e },
@@ -66,7 +67,6 @@
 	{ BT656_DECODER_VTOTAL_VS_END, 0x020d0003 },
 	{ BT656_DECODER_VS_ST_END_F1, 0x01060109 },
 	{ BT656_DECODER_DBG_REG, 0x024002d0 },
-	{ BT656_DECODER_CTRL, 0x00000001 },
 };
 
 static struct env_config ntsc_tve_config[] = {
@@ -100,6 +100,7 @@
 };
 
 static struct env_config pal_bt656_config[] = {
+	{ BT656_DECODER_CTRL, 0x00000001 },
 	{ BT656_DECODER_CROP, 0x00000000 },
 	{ BT656_DECODER_SIZE, 0x024002d0 },
 	{ BT656_DECODER_HTOTAL_HS_END, 0x0360003f },
@@ -107,7 +108,6 @@
 	{ BT656_DECODER_VTOTAL_VS_END, 0x02710003 },
 	{ BT656_DECODER_VS_ST_END_F1, 0x0138013b },
 	{ BT656_DECODER_DBG_REG, 0x024002d0 },
-	{ BT656_DECODER_CTRL, 0x00000001 },
 };
 
 static struct env_config pal_tve_config[] = {
@@ -125,16 +125,16 @@
 	{ TVE_LUMA_FILTER7, 0x0ffa0e43 },
 	{ TVE_LUMA_FILTER8, 0x08200527 },
 	{ TVE_IMAGE_POSITION, 0x001500f6 },
-	{ TVE_ROUTING, 0x10008882 },
+	{ TVE_ROUTING, 0x1000088a },
 	{ TVE_SYNC_ADJUST, 0x00000000 },
 	{ TVE_STATUS, 0x000000b0 },
 	{ TVE_CTRL, 0x00000000 },
 	{ TVE_INTR_STATUS, 0x00000000 },
 	{ TVE_INTR_EN, 0x00000000 },
 	{ TVE_INTR_CLR, 0x00000000 },
-	{ TVE_COLOR_BUSRT_SAT, 0x00366044 },
+	{ TVE_COLOR_BUSRT_SAT, 0x002e553c },
 	{ TVE_CHROMA_BANDWIDTH, 0x00000022 },
-	{ TVE_BRIGHTNESS_CONTRAST, 0x0000a300 },
+	{ TVE_BRIGHTNESS_CONTRAST, 0x00008900 },
 	{ TVE_ID, 0x0a010000 },
 	{ TVE_REVISION, 0x00010108 },
 	{ TVE_CLAMP, 0x00000000 },
@@ -164,6 +164,7 @@
 	.val_format_endian = REGMAP_ENDIAN_NATIVE,
 	.rd_table = &rk630_tve_readable_table,
 };
+EXPORT_SYMBOL_GPL(rk630_tve_regmap_config);
 
 static struct rk630_tve *bridge_to_tve(struct drm_bridge *bridge)
 {
@@ -194,7 +195,6 @@
 {
 	int ret;
 	struct env_config *bt656_cfg, *tve_cfg;
-	int upsample_en = tve->is_4x ? 1 : 0;
 
 	switch (tve->mode) {
 	case CVBS_PAL:
@@ -225,7 +225,7 @@
 				   SW_DCLK_UPSAMPLE_EN_MASK |
 				   SW_TVE_MODE_MASK | SW_TVE_EN_MASK,
 				   SW_TVE_DCLK_POL(0) | SW_TVE_DCLK_EN(1) |
-				   SW_DCLK_UPSAMPLE_EN(upsample_en) |
+				   SW_DCLK_UPSAMPLE_EN(tve->is_4x) |
 				   SW_TVE_MODE(1) | SW_TVE_EN(1));
 	else
 		regmap_update_bits(tve->grf, PLUMAGE_GRF_SOC_CON0,
@@ -234,12 +234,8 @@
 				   SW_DCLK_UPSAMPLE_EN_MASK |
 				   SW_TVE_MODE_MASK | SW_TVE_EN_MASK,
 				   SW_TVE_DCLK_POL(0) | SW_TVE_DCLK_EN(1) |
-				   SW_DCLK_UPSAMPLE_EN(upsample_en) |
+				   SW_DCLK_UPSAMPLE_EN(tve->is_4x) |
 				   SW_TVE_MODE(0) | SW_TVE_EN(1));
-
-	regmap_update_bits(tve->grf, PLUMAGE_GRF_SOC_CON3,
-			   DCLK_UPSAMPLE_2X4X_MASK,
-			   DCLK_UPSAMPLE_2X4X(tve->is_4x - 1));
 
 	ret = rk630_tve_write_block(tve, tve_cfg, 27);
 	if (ret < 0) {
@@ -260,15 +256,16 @@
 
 static int rk630_tve_enable(struct rk630_tve *tve)
 {
-	int ret;
+	int ret, i;
+	u32 val = 0;
 
 	dev_dbg(tve->dev, "%s\n", __func__);
 
 	/* config bt656 input gpio*/
 	regmap_write(tve->grf, PLUMAGE_GRF_GPIO0A_IOMUX, 0x55555555);
 
-	regmap_update_bits(tve->grf, PLUMAGE_GRF_GPIO0B_IOMUX, PIN0_SEL_MASK,
-			   PIN0_SEL(1));
+	regmap_update_bits(tve->grf, PLUMAGE_GRF_GPIO0B_IOMUX, GPIO0B0_SEL_MASK,
+			   GPIO0B0_SEL(1));
 
 	regmap_update_bits(tve->grf, PLUMAGE_GRF_SOC_CON3, VDAC_ENDAC0_MASK,
 			   VDAC_ENDAC0(0));
@@ -279,21 +276,31 @@
 
 	/*config clk*/
 	if (!tve->is_4x) {
-		regmap_update_bits(tve->cru, CRU_GATE_CON0,
-				   DCLK_CVBS_4X_PLL_CLK_GATE_MASK,
-				   DCLK_CVBS_4X_PLL_CLK_GATE(1));
+		regmap_update_bits(tve->cru, CRU_MODE_CON, CLK_SPLL_MODE_MASK,
+				   CLK_SPLL_MODE(2));
 	} else {
-		regmap_update_bits(tve->cru, CRU_CLKSEL_CON1,
-				   DCLK_CVBS_4X_DIV_CON_MASK,
-				   DCLK_CVBS_4X_DIV_CON(0));
+		regmap_update_bits(tve->cru, CRU_SPLL_CON1, PLLPD0_MASK,
+				   PLLPD0(1));
 
-		regmap_update_bits(tve->cru, CRU_GATE_CON0,
-				   DCLK_CVBS_4X_PLL_CLK_GATE_MASK,
-				   DCLK_CVBS_4X_PLL_CLK_GATE(0));
+		regmap_update_bits(tve->cru, CRU_MODE_CON, CLK_SPLL_MODE_MASK,
+				   CLK_SPLL_MODE(1));
+
+		regmap_update_bits(tve->cru, CRU_SPLL_CON1, PLLPD0_MASK,
+				   PLLPD0(0));
+
+		for (i = 0; i < 10; i++) {
+			usleep_range(1000, 2000);
+			regmap_read(tve->cru, CRU_SPLL_CON1, &val);
+			if (val & PLL_LOCK) {
+				dev_dbg(tve->dev, "rk630 pll locked\n");
+				break;
+			}
+		}
+		if (!(val & PLL_LOCK)) {
+			dev_err(tve->dev, "rk630 pll unlock\n");
+			return -EINVAL;
+		}
 	}
-
-	/* set vdac gain */
-	regmap_write(tve->grf, PLUMAGE_GRF_SOC_CON3, 0x003f003f);
 
 	/* enable vdac */
 	regmap_update_bits(tve->grf, PLUMAGE_GRF_SOC_CON3,
@@ -369,8 +376,8 @@
 
 static void
 rk630_tve_bridge_mode_set(struct drm_bridge *bridge,
-		       struct drm_display_mode *mode,
-		       struct drm_display_mode *adjusted_mode)
+			  const struct drm_display_mode *mode,
+			  const struct drm_display_mode *adjusted_mode)
 {
 	struct rk630_tve *tve;
 
@@ -401,7 +408,8 @@
 	rk630_tve_disable(tve);
 }
 
-static int rk630_tve_bridge_attach(struct drm_bridge *bridge)
+static int rk630_tve_bridge_attach(struct drm_bridge *bridge,
+				   enum drm_bridge_attach_flags flags)
 {
 	struct rk630_tve *tve = bridge_to_tve(bridge);
 	int ret;
@@ -455,7 +463,6 @@
 	struct rk630 *rk630 = dev_get_drvdata(pdev->dev.parent);
 	struct rk630_tve *tve;
 	struct device *dev = &pdev->dev;
-	int ret;
 
 	if (!of_device_is_available(dev->of_node))
 		return -ENODEV;
@@ -473,11 +480,6 @@
 	tve->tvemap = rk630->tve;
 	if (!tve->grf | !tve->cru | !tve->tvemap)
 		return -ENODEV;
-
-	ret = device_property_read_u32(dev, "rockchip,tve-upsample",
-				       &tve->is_4x);
-	if (ret < 0)
-		tve->is_4x = 0;
 
 	tve->mode = CVBS_PAL;
 

--
Gitblit v1.6.2