From: Hans de Goede Date: Tue, 30 Dec 2025 17:03:08 +0000 (+0100) Subject: media: mt9m114: Don't allow changing the IFP crop/compose selections when bypassing... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ceb485b3378bf59d3ed23726e9effff9c2d6792d;p=thirdparty%2Fkernel%2Flinux.git media: mt9m114: Don't allow changing the IFP crop/compose selections when bypassing the scaler The scaler is bypassed when the ISP source/output pad's pixel-format is set to MEDIA_BUS_FMT_SGRBG10_1X10. Don't allow changing the IFP crop and/or compose selections when in this mode. Instead of returning -EINVAL simply return the current (noop) crop and compose rectangles. Reviewed-by: Laurent Pinchart Signed-off-by: Hans de Goede Signed-off-by: Sakari Ailus Signed-off-by: Hans Verkuil --- diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c index c107e9f26618d..9743d83e9d0d6 100644 --- a/drivers/media/i2c/mt9m114.c +++ b/drivers/media/i2c/mt9m114.c @@ -1984,7 +1984,7 @@ static int mt9m114_ifp_set_selection(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_selection *sel) { - struct v4l2_mbus_framefmt *format; + struct v4l2_mbus_framefmt *format, *src_format; struct v4l2_rect *crop; struct v4l2_rect *compose; unsigned int border; @@ -1997,8 +1997,16 @@ static int mt9m114_ifp_set_selection(struct v4l2_subdev *sd, if (sel->pad != 0) return -EINVAL; - format = v4l2_subdev_state_get_format(state, 0); crop = v4l2_subdev_state_get_crop(state, 0); + + /* Crop and compose cannot be changed when bypassing the scaler. */ + src_format = v4l2_subdev_state_get_format(state, 1); + if (src_format->code == MEDIA_BUS_FMT_SGRBG10_1X10) { + sel->r = *crop; + return 0; + } + + format = v4l2_subdev_state_get_format(state, 0); compose = v4l2_subdev_state_get_compose(state, 0); if (sel->target == V4L2_SEL_TGT_CROP) { @@ -2043,9 +2051,8 @@ static int mt9m114_ifp_set_selection(struct v4l2_subdev *sd, } /* Propagate the compose rectangle to the source format. */ - format = v4l2_subdev_state_get_format(state, 1); - format->width = compose->width; - format->height = compose->height; + src_format->width = compose->width; + src_format->height = compose->height; return 0; }