Re: [PATCH] media: i2c: add ov01a10 image sensor driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for your review.

On 2/9/23 8:40 PM, Dave Stevenson wrote:
> Hi Bingbu
> 
> Thanks for the patch. Just a couple of observations as I read through it.
> 
> On Thu, 9 Feb 2023 at 11:39, Bingbu Cao <bingbu.cao@xxxxxxxxx> wrote:
>>
>> Add v4l2 device driver for OmniVision ov01a10 image sensor, ov01a10
>> image sensor can deliver 1280x800 resolution BGGR10 images at 60 fps.
>>
>> Signed-off-by: Bingbu Cao <bingbu.cao@xxxxxxxxx>
>> Signed-off-by: Yating Wang <yating.wang@xxxxxxxxx>
>> ---
>>  drivers/media/i2c/Kconfig   |  13 +
>>  drivers/media/i2c/Makefile  |   1 +
>>  drivers/media/i2c/ov01a10.c | 906 ++++++++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 920 insertions(+)
>>  create mode 100644 drivers/media/i2c/ov01a10.c
>>

snip

>> +static int ov01a10_init_controls(struct ov01a10 *ov01a10)
>> +{
>> +       struct v4l2_ctrl_handler *ctrl_hdlr;
>> +       const struct ov01a10_mode *cur_mode;
>> +       s64 exposure_max, h_blank;
>> +       u32 vblank_min, vblank_max, vblank_default;
>> +       int size;
>> +       int ret = 0;
>> +
>> +       ctrl_hdlr = &ov01a10->ctrl_handler;
>> +       ret = v4l2_ctrl_handler_init(ctrl_hdlr, 8);
>> +       if (ret)
>> +               return ret;
>> +
>> +       ctrl_hdlr->lock = &ov01a10->mutex;
>> +       cur_mode = ov01a10->cur_mode;
>> +       size = ARRAY_SIZE(link_freq_menu_items);
>> +
>> +       ov01a10->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr,
>> +                                                   &ov01a10_ctrl_ops,
>> +                                                   V4L2_CID_LINK_FREQ,
>> +                                                   size - 1, 0,
>> +                                                   link_freq_menu_items);
>> +       if (ov01a10->link_freq)
>> +               ov01a10->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
>> +
>> +       ov01a10->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops,
>> +                                               V4L2_CID_PIXEL_RATE, 0,
>> +                                               OV01A10_SCLK, 1, OV01A10_SCLK);
>> +
>> +       vblank_min = cur_mode->vts_min - cur_mode->height;
>> +       vblank_max = OV01A10_VTS_MAX - cur_mode->height;
>> +       vblank_default = cur_mode->vts_def - cur_mode->height;
>> +       ov01a10->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops,
>> +                                           V4L2_CID_VBLANK, vblank_min,
>> +                                           vblank_max, 1, vblank_default);
>> +
>> +       h_blank = cur_mode->hts - cur_mode->width;
>> +       ov01a10->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops,
>> +                                           V4L2_CID_HBLANK, h_blank, h_blank,
>> +                                           1, h_blank);
>> +       if (ov01a10->hblank)
>> +               ov01a10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
>> +
>> +       v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops, V4L2_CID_ANALOGUE_GAIN,
>> +                         OV01A10_ANAL_GAIN_MIN, OV01A10_ANAL_GAIN_MAX,
>> +                         OV01A10_ANAL_GAIN_STEP, OV01A10_ANAL_GAIN_MIN);
>> +       v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops, V4L2_CID_DIGITAL_GAIN,
>> +                         OV01A10_DGTL_GAIN_MIN, OV01A10_DGTL_GAIN_MAX,
>> +                         OV01A10_DGTL_GAIN_STEP, OV01A10_DGTL_GAIN_DEFAULT);
>> +       exposure_max = cur_mode->vts_def - OV01A10_EXPOSURE_MAX_MARGIN;
>> +       ov01a10->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov01a10_ctrl_ops,
>> +                                             V4L2_CID_EXPOSURE,
>> +                                             OV01A10_EXPOSURE_MIN,
>> +                                             exposure_max,
>> +                                             OV01A10_EXPOSURE_STEP,
>> +                                             exposure_max);
>> +       v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &ov01a10_ctrl_ops,
>> +                                    V4L2_CID_TEST_PATTERN,
>> +                                    ARRAY_SIZE(ov01a10_test_pattern_menu) - 1,
>> +                                    0, 0, ov01a10_test_pattern_menu);
>> +       if (ctrl_hdlr->error)
>> +               return ctrl_hdlr->error;
> 
> A call to v4l2_ctrl_new_fwnode_properties to add the standard
> V4L2_CID_CAMERA_ORIENTATION and V4L2_CID_CAMERA_SENSOR_ROTATION
> properties?

Dave and Sakari,

Is it mandatory for all systems? Cameras don't have such 2 properties on
some systems.

> 
>> +
>> +       ov01a10->sd.ctrl_handler = ctrl_hdlr;
>> +
>> +       return 0;
>> +}
>> +
...

>> --
>> 2.7.4
>>

-- 
Best regards,
Bingbu Cao



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux