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@gmail.com>
---
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
+
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;
return 0;
}
--
2.43.0
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@gmail.com>
> ---
> 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@ideasonboard.com>
> +
> 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;
> return 0;
> }
>
--
Regards,
Laurent Pinchart
Hi Laurent,
and thanks for the review!
On 2024-02-23 at 13:33 +02, Laurent Pinchart <laurent.pinchart@ideasonboard.com> 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@gmail.com>
>> ---
>> 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 */
Will add the comments in v3.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
>> +
>> 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;
>> return 0;
>> }
>>
--
Best regards,
Mikhail Rudenko
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@gmail.com>
> > ---
> > 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@ideasonboard.com>
>
> > +
> > 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.
> > return 0;
> > }
> >
--
Regards,
Laurent Pinchart
Hi Laurent,
and thanks for the review!
On 2024-02-23 at 13:36 +02, Laurent Pinchart <laurent.pinchart@ideasonboard.com> 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@gmail.com>
>> > ---
>> > 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@ideasonboard.com>
>>
>> > +
>> > 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
© 2016 - 2025 Red Hat, Inc.