Hi Laurent, Laurent Pinchart wrote: > Hi Sakari, > > Thanks for the patch. > > On Tuesday 20 December 2011 21:27:57 Sakari Ailus wrote: >> From: Sakari Ailus <sakari.ailus@xxxxxx> >> >> Revert to s_selection if s_crop isn't implemented by a driver. Same for >> g_selection / g_crop. > > Shouldn't this say "Fall back" instead of "Revert" ? Fixed all issues you mentioned in this e-mail. >> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxx> >> --- >> drivers/media/video/v4l2-subdev.c | 37 >> +++++++++++++++++++++++++++++++++++-- 1 files changed, 35 insertions(+), 2 >> deletions(-) >> >> diff --git a/drivers/media/video/v4l2-subdev.c >> b/drivers/media/video/v4l2-subdev.c index e8ae098..f8de551 100644 >> --- a/drivers/media/video/v4l2-subdev.c >> +++ b/drivers/media/video/v4l2-subdev.c >> @@ -226,6 +226,8 @@ static long subdev_do_ioctl(struct file *file, unsigned >> int cmd, void *arg) >> >> case VIDIOC_SUBDEV_G_CROP: { >> struct v4l2_subdev_crop *crop = arg; >> + struct v4l2_subdev_selection sel; >> + int rval; >> >> if (crop->which != V4L2_SUBDEV_FORMAT_TRY && >> crop->which != V4L2_SUBDEV_FORMAT_ACTIVE) >> @@ -234,11 +236,27 @@ static long subdev_do_ioctl(struct file *file, >> unsigned int cmd, void *arg) if (crop->pad >= sd->entity.num_pads) >> return -EINVAL; >> >> - return v4l2_subdev_call(sd, pad, get_crop, subdev_fh, crop); >> + rval = v4l2_subdev_call(sd, pad, get_crop, subdev_fh, crop); >> + if (rval != -ENOIOCTLCMD) >> + return rval; >> + >> + memset(&sel, 0, sizeof(sel)); >> + sel.which = V4L2_SUBDEV_FORMAT_ACTIVE; > > Shouldn't sel.which be set to crop->which ? > >> + sel.pad = crop->pad; >> + sel.target = V4L2_SUBDEV_SEL_TGT_CROP_ACTIVE; >> + >> + rval = v4l2_subdev_call( >> + sd, pad, get_selection, subdev_fh, &sel); >> + >> + crop->rect = sel.r; >> + >> + return rval; >> } >> >> case VIDIOC_SUBDEV_S_CROP: { >> struct v4l2_subdev_crop *crop = arg; >> + struct v4l2_subdev_selection sel; >> + int rval; >> >> if (crop->which != V4L2_SUBDEV_FORMAT_TRY && >> crop->which != V4L2_SUBDEV_FORMAT_ACTIVE) >> @@ -247,7 +265,22 @@ static long subdev_do_ioctl(struct file *file, >> unsigned int cmd, void *arg) if (crop->pad >= sd->entity.num_pads) >> return -EINVAL; >> >> - return v4l2_subdev_call(sd, pad, set_crop, subdev_fh, crop); >> + rval = v4l2_subdev_call(sd, pad, set_crop, subdev_fh, crop); >> + if (rval != -ENOIOCTLCMD) >> + return rval; >> + >> + memset(&sel, 0, sizeof(sel)); >> + sel.which = V4L2_SUBDEV_FORMAT_ACTIVE; > > Same here. > >> + sel.pad = crop->pad; >> + sel.target = V4L2_SUBDEV_SEL_TGT_CROP_ACTIVE; >> + sel.r = crop->rect; >> + >> + rval = v4l2_subdev_call( >> + sd, pad, set_selection, subdev_fh, &sel); >> + >> + crop->rect = sel.r; >> + >> + return rval; >> } >> >> case VIDIOC_SUBDEV_ENUM_MBUS_CODE: { > -- Sakari Ailus sakari.ailus@xxxxxxxxxxxxxxxxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html