Skip to content

Commit

Permalink
media: imx-csi: Skip first few frames from a BT.656 source
Browse files Browse the repository at this point in the history
Some BT.656 sensors (e.g. ADV718x) transmit frames with unstable BT.656
sync codes after initial power on. This confuses the imx CSI,resulting
in vertical and/or horizontal sync issues. Skip the first 20 frames
to avoid the unstable sync codes.

[fabio: fixed checkpatch warning and increased the frame skipping to 20]

Signed-off-by: Steve Longerbeam <[email protected]>
Signed-off-by: Fabio Estevam <[email protected]>
Reviewed-by: Tim Harvey <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
slongerbeam authored and mchehab committed Jun 17, 2021
1 parent ca81646 commit e198be3
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion drivers/staging/media/imx/imx-media-csi.c
Original file line number Diff line number Diff line change
Expand Up @@ -750,9 +750,10 @@ static int csi_setup(struct csi_priv *priv)

static int csi_start(struct csi_priv *priv)
{
struct v4l2_fract *output_fi;
struct v4l2_fract *input_fi, *output_fi;
int ret;

input_fi = &priv->frame_interval[CSI_SINK_PAD];
output_fi = &priv->frame_interval[priv->active_output_pad];

/* start upstream */
Expand All @@ -761,6 +762,17 @@ static int csi_start(struct csi_priv *priv)
if (ret)
return ret;

/* Skip first few frames from a BT.656 source */
if (priv->upstream_ep.bus_type == V4L2_MBUS_BT656) {
u32 delay_usec, bad_frames = 20;

delay_usec = DIV_ROUND_UP_ULL((u64)USEC_PER_SEC *
input_fi->numerator * bad_frames,
input_fi->denominator);

usleep_range(delay_usec, delay_usec + 1000);
}

if (priv->dest == IPU_CSI_DEST_IDMAC) {
ret = csi_idmac_start(priv);
if (ret)
Expand Down

0 comments on commit e198be3

Please sign in to comment.