summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>2018-05-24 12:34:47 +0200
committerJakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>2018-05-24 12:34:47 +0200
commited7939c68aa330595fe96701be0689cd6bf9127c (patch)
tree465e369c11db21a48e7387a59470c23e4d001958
parent70514eee0b370816b7a7c1dc6946dd75624eebd8 (diff)
[IN PROGRESS] rockchip isp1: tx1rx1 fixes for RK3399
For the RK3399, tx1rx1 support is incomplete in the driver.
-rw-r--r--drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c
index 72b1876cdd03..32a7535e8131 100644
--- a/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c
+++ b/drivers/media/platform/rockchip/isp1/mipi_dphy_sy.c
@@ -636,6 +636,10 @@ static int mipidphy_rx_stream_on(struct mipidphy_priv *priv,
return 0;
}
+// Compare with camsys_soc_rk3399.c / camsys_rk3399_mipihpy_cfg()
+
+#define BEHAVE_LIKE_MARVIN 1
+
static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv,
struct v4l2_subdev *sd)
{
@@ -652,25 +656,40 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv,
break;
}
}
- write_grf_reg(priv, GRF_CON_ISP_DPHY_SEL, 1);
- write_grf_reg(priv, GRF_DSI_CSI_TESTBUS_SEL, 1);
+ // write_grf_reg(priv, GRF_CON_ISP_DPHY_SEL, 1); // not defined for RK3399
+ // write_grf_reg(priv, GRF_DSI_CSI_TESTBUS_SEL, 1); // not defined for RK3399
+
+#if BEHAVE_LIKE_MARVIN
+ write_grf_reg(priv, GRF_DPHY_RX1_SRC_SEL, 0); // PHY_REG(RK3399_GRF_SOC_CON24, 1, 4)
+#else
write_grf_reg(priv, GRF_DPHY_RX1_SRC_SEL, 1);
- write_grf_reg(priv, GRF_DPHY_TX1RX1_MASTERSLAVEZ, 0);
- write_grf_reg(priv, GRF_DPHY_TX1RX1_BASEDIR, 1);
+#endif
+
+ write_grf_reg(priv, GRF_DPHY_TX1RX1_MASTERSLAVEZ, 0); // PHY_REG(RK3399_GRF_SOC_CON24, 1, 7)
+ write_grf_reg(priv, GRF_DPHY_TX1RX1_BASEDIR, 1); // PHY_REG(RK3399_GRF_SOC_CON24, 1, 5)
/* Disable lan turn around, which is ignored in receive mode */
write_grf_reg(priv, GRF_DPHY_TX1RX1_FORCERXMODE, 0);
write_grf_reg(priv, GRF_DPHY_TX1RX1_FORCETXSTOPMODE, 0);
- write_grf_reg(priv, GRF_DPHY_TX1RX1_TURNREQUEST, 0);
+ write_grf_reg(priv, GRF_DPHY_TX1RX1_TURNREQUEST, 0); // GRF_SOC_CON24 offset 0 width 4
write_grf_reg(priv, GRF_DPHY_TX1RX1_TURNDISABLE, 0xf);
write_grf_reg(priv, GRF_DPHY_TX1RX1_ENABLE,
GENMASK(sensor->lanes - 1, 0));
/* dphy start */
writel(0, priv->txrx_base_addr + CSIHOST_PHY_SHUTDOWNZ);
writel(0, priv->txrx_base_addr + CSIHOST_DPHY_RSTZ);
+#if BEHAVE_LIKE_MARVIN
+#define CAMSYS_DSIHOST_PHY_TEST_CTRL0 (0x00b4)
+ writel(PHY_TESTCLK, priv->txrx_base_addr + CAMSYS_DSIHOST_PHY_TEST_CTRL0);
+ writel(PHY_TESTCLR, priv->txrx_base_addr + CAMSYS_DSIHOST_PHY_TEST_CTRL0);
+ usleep_range(100, 150);
+ writel(PHY_TESTCLK, priv->txrx_base_addr + CAMSYS_DSIHOST_PHY_TEST_CTRL0);
+#else
writel(PHY_TESTCLK, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0);
writel(PHY_TESTCLR, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0);
usleep_range(100, 150);
writel(PHY_TESTCLK, priv->txrx_base_addr + CSIHOST_PHY_TEST_CTRL0);
+#endif
+
usleep_range(100, 150);
/* set clock lane */
@@ -683,6 +702,13 @@ static int mipidphy_txrx_stream_on(struct mipidphy_priv *priv,
mipidphy1_wr_reg(priv, HS_RX_DATA_LANES_THS_SETTLE_CONTROL,
THS_SETTLE_COUNTER_THRESHOLD);
+#if BEHAVE_LIKE_MARVIN
+#define CAMSYS_DSIHOST_PHY_TEST_CTRL1 (0x00b8)
+ mipidphy1_wr_reg(priv, CAMSYS_DSIHOST_PHY_TEST_CTRL0, 0x00000002);
+ mipidphy1_wr_reg(priv, CAMSYS_DSIHOST_PHY_TEST_CTRL1, 0x00000000);
+ mipidphy1_wr_reg(priv, CSIHOST_DPHY_RSTZ, 0x00000002);
+#endif
+
/* Normal operation */
mipidphy1_wr_reg(priv, 0x0, 0);