Hi Laurent, and thanks for the review! On 2024-02-23 at 13:36 +02, Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> wrote: > On Fri, Feb 23, 2024 at 01:33:01PM +0200, Laurent Pinchart wrote: >> Hi Mikhail, >> >> Thank you for the patch. >> >> On Mon, Dec 18, 2023 at 08:40:36PM +0300, Mikhail Rudenko wrote: >> > Pixel array dimensions and default crop size do not belong to the >> > ov4689_mode structure, since they are mode independent. Make them >> > defines instead. >> > >> > Signed-off-by: Mikhail Rudenko <mike.rudenko@xxxxxxxxx> >> > --- >> > drivers/media/i2c/ov4689.c | 29 +++++++++++++---------------- >> > 1 file changed, 13 insertions(+), 16 deletions(-) >> > >> > diff --git a/drivers/media/i2c/ov4689.c b/drivers/media/i2c/ov4689.c >> > index b43fb1d7b15f..475508559e3e 100644 >> > --- a/drivers/media/i2c/ov4689.c >> > +++ b/drivers/media/i2c/ov4689.c >> > @@ -70,6 +70,11 @@ >> > #define OV4689_LANES 4 >> > #define OV4689_XVCLK_FREQ 24000000 >> > >> > +#define OV4689_PIXEL_ARRAY_WIDTH 2720 >> > +#define OV4689_PIXEL_ARRAY_HEIGHT 1536 >> > +#define OV4689_DUMMY_ROWS 8 >> > +#define OV4689_DUMMY_COLUMNS 16 >> >> Adding a comment here to indicate that there are dummy columns in each >> side would be useful: >> >> #define OV4689_DUMMY_ROWS 8 /* 8 dummy rows on each side */ >> #define OV4689_DUMMY_COLUMNS 16 /* 16 dummy columns on each side */ >> >> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> >> >> > + >> > static const char *const ov4689_supply_names[] = { >> > "avdd", /* Analog power */ >> > "dovdd", /* Digital I/O power */ >> > @@ -90,10 +95,6 @@ struct ov4689_mode { >> > u32 vts_def; >> > u32 exp_def; >> > u32 pixel_rate; >> > - u32 sensor_width; >> > - u32 sensor_height; >> > - u32 crop_top; >> > - u32 crop_left; >> > const struct cci_reg_sequence *reg_list; >> > unsigned int num_regs; >> > }; >> > @@ -254,10 +255,6 @@ static const struct ov4689_mode supported_modes[] = { >> > .id = OV4689_MODE_2688_1520, >> > .width = 2688, >> > .height = 1520, >> > - .sensor_width = 2720, >> > - .sensor_height = 1536, >> > - .crop_top = 8, >> > - .crop_left = 16, >> > .exp_def = 1536, >> > .hts_def = 10296, >> > .hts_min = 3432, >> > @@ -385,8 +382,6 @@ static int ov4689_get_selection(struct v4l2_subdev *sd, >> > struct v4l2_subdev_state *state, >> > struct v4l2_subdev_selection *sel) >> > { >> > - const struct ov4689_mode *mode = to_ov4689(sd)->cur_mode; >> > - >> > if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE) >> > return -EINVAL; >> > >> > @@ -394,15 +389,17 @@ static int ov4689_get_selection(struct v4l2_subdev *sd, >> > case V4L2_SEL_TGT_CROP_BOUNDS: >> > sel->r.top = 0; >> > sel->r.left = 0; >> > - sel->r.width = mode->sensor_width; >> > - sel->r.height = mode->sensor_height; >> > + sel->r.width = OV4689_PIXEL_ARRAY_WIDTH; >> > + sel->r.height = OV4689_PIXEL_ARRAY_HEIGHT; >> > return 0; >> > case V4L2_SEL_TGT_CROP: >> > case V4L2_SEL_TGT_CROP_DEFAULT: >> > - sel->r.top = mode->crop_top; >> > - sel->r.left = mode->crop_left; >> > - sel->r.width = mode->width; >> > - sel->r.height = mode->height; >> > + sel->r.top = OV4689_DUMMY_ROWS; >> > + sel->r.left = OV4689_DUMMY_COLUMNS; >> > + sel->r.width = >> > + OV4689_PIXEL_ARRAY_WIDTH - 2 * OV4689_DUMMY_COLUMNS; >> > + sel->r.height = >> > + OV4689_PIXEL_ARRAY_WIDTH - 2 * OV4689_DUMMY_ROWS; > > I spoke too fast: this should be OV4689_PIXEL_ARRAY_HEIGHT, not > OV4689_PIXEL_ARRAY_WIDTH. Good catch, will fix in v3. >> > return 0; >> > } >> > -- Best regards, Mikhail Rudenko