static int mxr_try_crop(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, unsigned int pad, struct v4l2_rect *r, enum v4l2_subdev_format_whence which) { struct v4l2_mbus_framefmt *fmt; fmt = __mxr_get_fmt(sd, fh, pad, which); if (fmt == NULL) return -EINVAL; r->left = clamp_val(r->left, 0, fmt->width); r->top = clamp_val(r->top, 0, fmt->height); r->width = clamp_val(r->width, 1, fmt->width - r->left); r->height = clamp_val(r->height, 1, fmt->height - r->top); return 0; }
static int mxr_try_crop(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, unsigned int pad, struct v4l2_rect *r, enum v4l2_subdev_format_whence which) { struct v4l2_mbus_framefmt *fmt; fmt = __mxr_get_fmt(sd, fh, pad, which); if (fmt == NULL) return -EINVAL; r->left = clamp_val(r->left, 0, fmt->width); r->top = clamp_val(r->top, 0, fmt->height); r->width = clamp_val(r->width, 1, fmt->width - r->left); r->height = clamp_val(r->height, 1, fmt->height - r->top); /* need to align size with G-Scaler */ if (pad == MXR_PAD_SINK_GSCALER || pad == MXR_PAD_SOURCE_GSCALER) if (r->width % 2) r->width -= 1; return 0; }