Hi Niklas, Thank you for the patch. On Tuesday 14 Mar 2017 19:59:44 Niklas Söderlund wrote: > The rcar-vin driver only uses one pad, pad number 0. > > - All v4l2 operations that did not check that the requested operation > was for pad 0 have been updated with a check to enforce this. > > - All v4l2 operations that stored (and later restore) the requested pad > before substituting it for the subdevice pad number have been updated > to not store the incoming pad and simply restore it to 0 after the > subdevice operation is complete. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > drivers/media/platform/rcar-vin/rcar-v4l2.c | 26 ++++++++++++++------------ > 1 file changed, 14 insertions(+), 12 deletions(-) > > diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c > b/drivers/media/platform/rcar-vin/rcar-v4l2.c index > 7ca27599b9982ffc..610f59e2a9142622 100644 > --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c > +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c > @@ -550,14 +550,16 @@ static int rvin_enum_dv_timings(struct file *file, > void *priv_fh, { > struct rvin_dev *vin = video_drvdata(file); > struct v4l2_subdev *sd = vin_to_source(vin); > - int pad, ret; > + int ret; > + > + if (timings->pad) > + return -EINVAL; > > - pad = timings->pad; > timings->pad = vin->sink_pad_idx; > > ret = v4l2_subdev_call(sd, pad, enum_dv_timings, timings); > > - timings->pad = pad; > + timings->pad = 0; > > return ret; > } > @@ -600,14 +602,16 @@ static int rvin_dv_timings_cap(struct file *file, void > *priv_fh, { > struct rvin_dev *vin = video_drvdata(file); > struct v4l2_subdev *sd = vin_to_source(vin); > - int pad, ret; > + int ret; > + > + if (cap->pad) > + return -EINVAL; > > - pad = cap->pad; > cap->pad = vin->sink_pad_idx; > > ret = v4l2_subdev_call(sd, pad, dv_timings_cap, cap); > > - cap->pad = pad; > + cap->pad = 0; > > return ret; > } > @@ -616,17 +620,16 @@ static int rvin_g_edid(struct file *file, void *fh, > struct v4l2_edid *edid) { > struct rvin_dev *vin = video_drvdata(file); > struct v4l2_subdev *sd = vin_to_source(vin); > - int input, ret; > + int ret; > > if (edid->pad) > return -EINVAL; > > - input = edid->pad; > edid->pad = vin->sink_pad_idx; > > ret = v4l2_subdev_call(sd, pad, get_edid, edid); > > - edid->pad = input; > + edid->pad = 0; > > return ret; > } > @@ -635,17 +638,16 @@ static int rvin_s_edid(struct file *file, void *fh, > struct v4l2_edid *edid) { > struct rvin_dev *vin = video_drvdata(file); > struct v4l2_subdev *sd = vin_to_source(vin); > - int input, ret; > + int ret; > > if (edid->pad) > return -EINVAL; > > - input = edid->pad; > edid->pad = vin->sink_pad_idx; > > ret = v4l2_subdev_call(sd, pad, set_edid, edid); > > - edid->pad = input; > + edid->pad = 0; > > return ret; > } -- Regards, Laurent Pinchart