CSI-2 is a data bus intended for transferring images from cameras to the host SoC. It is defined by the MIPI alliance.
CSI-2 transmitter, such as a sensor or a TV tuner, drivers need to provide the CSI-2 receiver with information on the CSI-2 bus configuration. These include the V4L2_CID_LINK_FREQ and V4L2_CID_PIXEL_RATE controls and (v4l2_subdev_video_ops->s_stream() callback). These interface elements must be present on the sub-device represents the CSI-2 transmitter.
The V4L2_CID_LINK_FREQ control is used to tell the receiver driver the frequency (and not the symbol rate) of the link. The V4L2_CID_PIXEL_RATE is may be used by the receiver to obtain the pixel rate the transmitter uses. The v4l2_subdev_video_ops->s_stream() callback provides an ability to start and stop the stream.
The value of the V4L2_CID_PIXEL_RATE is calculated as follows:
pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample
where
variable or constant | description |
---|---|
link_freq | The value of the V4L2_CID_LINK_FREQ integer64 menu item. |
nr_of_lanes | Number of data lanes used on the CSI-2 link. This can be obtained from the OF endpoint configuration. |
2 | Two bits are transferred per clock cycle per lane. |
bits_per_sample | Number of bits per sample. |
The transmitter drivers must configure the CSI-2 transmitter to LP-11 mode whenever the transmitter is powered on but not active. Some transmitters do this automatically but some have to be explicitly programmed to do so.
Before the receiver driver may enable the CSI-2 transmitter by using the v4l2_subdev_video_ops->s_stream(), it must have powered the transmitter up by using the v4l2_subdev_core_ops->s_power() callback. This may take place either indirectly by using v4l2_pipeline_pm_use() or directly.