From 54fe2ed91bf13d2b650914564904ec16b5d85d3e Mon Sep 17 00:00:00 2001
From: chenyifu <chenyf@rock-chips.com>
Date: Wed, 14 Jan 2015 08:57:59 +0800
Subject: [PATCH] rk3368 edp: The edp ctrl apb bus need software reset

Not only the edp 24m clock domain need software reset,
the edp ctrl apb bus of rk3368 also need software reset before request irq.

Signed-off-by: chenyifu <chenyf@rock-chips.com>
---
 drivers/video/rockchip/transmitter/rk32_dp.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 drivers/video/rockchip/transmitter/rk32_dp.c

diff --git a/drivers/video/rockchip/transmitter/rk32_dp.c b/drivers/video/rockchip/transmitter/rk32_dp.c
old mode 100644
new mode 100755
index 70f692ba2f2d..f8345a7637b2
--- a/drivers/video/rockchip/transmitter/rk32_dp.c
+++ b/drivers/video/rockchip/transmitter/rk32_dp.c
@@ -97,12 +97,19 @@ static int rk32_edp_pre_init(struct rk32_edp *edp)
 		dsb(sy);
 		udelay(1);
 	} else {
+		/* The rk3368 reset the edp 24M clock and apb bus
+		 * according to the CRU_SOFTRST6_CON and CRU_SOFTRST7_CON.
+		 */
 		val = 0x01 | (0x01 << 16);
 		regmap_write(edp->grf, RK3368_GRF_SOC_CON4, val);
 
 		reset_control_assert(edp->rst_24m);
 		usleep_range(10, 20);
 		reset_control_deassert(edp->rst_24m);
+
+		reset_control_assert(edp->rst_apb);
+		usleep_range(10, 20);
+		reset_control_deassert(edp->rst_apb);
 	}
 	return 0;
 }
@@ -1405,13 +1412,20 @@ static int rk32_edp_probe(struct platform_device *pdev)
 		return PTR_ERR(edp->pclk);
 	}
 
+	/* We use the reset API to control the software reset at this version
+	 * and later, and we reserve the code that setting the cru regs directly
+	 * in the rk3288.
+	 */
 	/*edp 24m need sorft reset*/
 	edp->rst_24m = devm_reset_control_get(&pdev->dev, "edp_24m");
 	if (IS_ERR(edp->rst_24m)) {
 		dev_err(&pdev->dev, "failed to get reset\n");
-		return PTR_ERR(edp->rst_24m);
 	}
-
+	/* edp ctrl apb bus need sorft reset */
+	edp->rst_apb = devm_reset_control_get(&pdev->dev, "edp_apb");
+	if (IS_ERR(edp->rst_apb)) {
+		dev_err(&pdev->dev, "failed to get reset\n");
+	}
 	rk32_edp_clk_enable(edp);
 	if (!support_uboot_display())
 		rk32_edp_pre_init(edp);
-- 
2.34.1