Commit f5ffb81f authored by Rui Miguel Silva's avatar Rui Miguel Silva Committed by Mauro Carvalho Chehab
Browse files

media: imx7: csi: Fix pad link validation



We can not make the assumption that the bound subdev is always a CSI
mux, in i.MX6UL/i.MX6ULL that is not the case. So, just get the entity
selected by source directly upstream from the CSI.

Fixes: 86e02d07 ("media: imx5/6/7: csi: Mark a bound video mux as a CSI mux")
Reported-by: default avatarFabio Estevam <festevam@gmail.com>
Signed-off-by: default avatarRui Miguel Silva <rmfrfs@gmail.com>
Tested-by: default avatarFabio Estevam <festevam@gmail.com>
Tested-by: default avatarSébastien Szymanski <sebastien.szymanski@armadeus.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 9bac6721
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -499,6 +499,7 @@ static int imx7_csi_pad_link_validate(struct v4l2_subdev *sd,
				      struct v4l2_subdev_format *sink_fmt)
{
	struct imx7_csi *csi = v4l2_get_subdevdata(sd);
	struct media_entity *src;
	struct media_pad *pad;
	int ret;

@@ -509,11 +510,21 @@ static int imx7_csi_pad_link_validate(struct v4l2_subdev *sd,
	if (!csi->src_sd)
		return -EPIPE;

	src = &csi->src_sd->entity;

	/*
	 * if the source is neither a CSI MUX or CSI-2 get the one directly
	 * upstream from this CSI
	 */
	if (src->function != MEDIA_ENT_F_VID_IF_BRIDGE &&
	    src->function != MEDIA_ENT_F_VID_MUX)
		src = &csi->sd.entity;

	/*
	 * find the entity that is selected by the CSI mux. This is needed
	 * find the entity that is selected by the source. This is needed
	 * to distinguish between a parallel or CSI-2 pipeline.
	 */
	pad = imx_media_pipeline_pad(&csi->src_sd->entity, 0, 0, true);
	pad = imx_media_pipeline_pad(src, 0, 0, true);
	if (!pad)
		return -ENODEV;