I'm working on the i.MX6Q board with toshiba chip tc358743 (HDMI->CSI2) and trying to get interlaced modes working. But it only supports one way to distinguish top and bottom fields: through custom Data Identifier of CSI2 packets. So I'm trying to set top field to use 0th channel and bottom field - 1st. But I can't get 1st (or any other except 0th) channel on i.MX6 side.
As I understand, these are the steps I need to change virtual channel:
- use corresponding ipu/csi (ipu0 csi1 is for 1st channel for instance);
- configure CSI_MIPI_DI register with the received data type
- configure SMFC_MAP to connect needed channel to csi port
- (optional) configure IOMUX_GPR1 (for i.mx6q) to select MIPI input for ipu0/csi0 or ipu1/csi1 if needed.
For configuring MIPI itself there is also a question of correct clocking and other minor stuff. But I get the output correctly when 0th channel is configured. When on tc358743 side I configure different Data Type (for instance 0x23 instead of 0x24) I see that video changes indeed. So this setting works. But when I specify 0x64 (Data Type 0x24, virtual channel 1) I get no frames, playback doesn't start and imx reports:
ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0
I'm testing output with the simplest gstreamer pipe:
$ gst-launch-1.0 imxv4l2videosrc ! fakesink
I attach dump of all related registers. What am I missing? How can I debug it? I highly doubt that tc358743 may fail to write Data Id of channels != 0 into MIPI packet header.
Side question: is it possible to perform interlace between buffers captured by different CSI_MEM channels using custom CPMEM configuration?
Original Attachment has been moved to: 1st-virtual-channel.log.zip