[RFC 06/12] [media] tc358743: split set_csi into set_csi and start_csi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The CSI Tx can't be stopped except by pulling the CTx reset.
Split the actual CSI start out of set_csi. This allows to call
it later in s_stream, as the Synopsys Designware MIPI CSI-2 Host
Controller needs to start with the lanes in stop state before
it can sync its PLL to the clock lane.

Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
---
 drivers/media/i2c/tc358743.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c
index 74e83c5..34acfed 100644
--- a/drivers/media/i2c/tc358743.c
+++ b/drivers/media/i2c/tc358743.c
@@ -759,6 +759,14 @@ static void tc358743_set_csi(struct v4l2_subdev *sd)
 			((lanes > 3) ? MASK_D3M_HSTXVREGEN : 0x0));
 
 	i2c_wr32(sd, TXOPTIONCNTRL, MASK_CONTCLKMODE);
+}
+
+static void tc358743_start_csi(struct v4l2_subdev *sd)
+{
+	unsigned lanes = tc358743_num_csi_lanes_needed(sd);
+
+	v4l2_dbg(3, debug, sd, "%s:\n", __func__);
+
 	i2c_wr32(sd, STARTCNTRL, MASK_START);
 	i2c_wr32(sd, CSI_START, MASK_STRT);
 
@@ -1177,6 +1185,7 @@ static long tc358743_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
 		i2c_wr16(sd, CONFCTL, confctl &
 				(~(MASK_VBUFEN | MASK_ABUFEN)));
 		tc358743_set_csi(sd);
+		tc358743_start_csi(sd);
 		i2c_wr16(sd, CONFCTL, confctl |
 				(MASK_VBUFEN | MASK_ABUFEN));
 		return 0;
@@ -1505,7 +1514,11 @@ static int tc358743_g_mbus_config(struct v4l2_subdev *sd,
 
 static int tc358743_s_stream(struct v4l2_subdev *sd, int enable)
 {
+	if (enable)
+		tc358743_start_csi(sd);
 	enable_stream(sd, enable);
+	if (!enable)
+		tc358743_set_csi(sd);
 
 	return 0;
 }
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux