Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support (fwd)
Ok course, thanks Julia. On 06/25/2017 10:00 PM, Julia Lawall wrote: > Braces are probably missing aroud lines 1618-1620. > > julia > > -- Forwarded message -- > Date: Sun, 25 Jun 2017 23:06:03 +0800 > From: kbuild test robot <fengguang...@intel.com> > To: kbu...@01.org > Cc: Julia Lawall <julia.law...@lip6.fr> > Subject: Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support > > Hi Hugues, > > [auto build test WARNING on linuxtv-media/master] > [also build test WARNING on v4.12-rc6 next-20170623] > [if your patch is applied to the wrong git tree, please drop us a note to > help improve the system] > > url: > https://github.com/0day-ci/linux/commits/Hugues-Fruchet/Add-support-of-OV9655-camera/20170625-201153 > base: git://linuxtv.org/media_tree.git master > :: branch date: 3 hours ago > :: commit date: 3 hours ago > >>> drivers/media/i2c/ov9650.c:1618:2-44: code aligned with following code on >>> line 1619 > > git remote add linux-review https://github.com/0day-ci/linux > git remote update linux-review > git checkout a9fe8c23240a7f8df39c6238d98e41f41fedb641 > vim +1618 drivers/media/i2c/ov9650.c > > a9fe8c23 Hugues Fruchet 2017-06-22 1612 ov965x->set_params = > __ov965x_set_params; > 84a15ded Sylwester Nawrocki 2012-12-26 1613 > a9fe8c23 Hugues Fruchet 2017-06-22 1614 ov965x->frame_size = > >framesizes[0]; > a9fe8c23 Hugues Fruchet 2017-06-22 1615 > ov965x_get_default_format(ov965x, >format); > a9fe8c23 Hugues Fruchet 2017-06-22 1616 > a9fe8c23 Hugues Fruchet 2017-06-22 1617 if > (ov965x->initialize_controls) > a9fe8c23 Hugues Fruchet 2017-06-22 @1618 ret = > ov965x->initialize_controls(ov965x); > 84a15ded Sylwester Nawrocki 2012-12-26 @1619 if (ret < 0) > 84a15ded Sylwester Nawrocki 2012-12-26 1620 goto > err_ctrls; > 84a15ded Sylwester Nawrocki 2012-12-26 1621 > 84a15ded Sylwester Nawrocki 2012-12-26 1622 /* Update exposure time > min/max to match frame format */ > > --- > 0-DAY kernel test infrastructureOpen Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation >
Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support (fwd)
Braces are probably missing aroud lines 1618-1620. julia -- Forwarded message -- Date: Sun, 25 Jun 2017 23:06:03 +0800 From: kbuild test robot <fengguang...@intel.com> To: kbu...@01.org Cc: Julia Lawall <julia.law...@lip6.fr> Subject: Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support Hi Hugues, [auto build test WARNING on linuxtv-media/master] [also build test WARNING on v4.12-rc6 next-20170623] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Hugues-Fruchet/Add-support-of-OV9655-camera/20170625-201153 base: git://linuxtv.org/media_tree.git master :: branch date: 3 hours ago :: commit date: 3 hours ago >> drivers/media/i2c/ov9650.c:1618:2-44: code aligned with following code on >> line 1619 git remote add linux-review https://github.com/0day-ci/linux git remote update linux-review git checkout a9fe8c23240a7f8df39c6238d98e41f41fedb641 vim +1618 drivers/media/i2c/ov9650.c a9fe8c23 Hugues Fruchet 2017-06-22 1612ov965x->set_params = __ov965x_set_params; 84a15ded Sylwester Nawrocki 2012-12-26 1613 a9fe8c23 Hugues Fruchet 2017-06-22 1614ov965x->frame_size = >framesizes[0]; a9fe8c23 Hugues Fruchet 2017-06-22 1615 ov965x_get_default_format(ov965x, >format); a9fe8c23 Hugues Fruchet 2017-06-22 1616 a9fe8c23 Hugues Fruchet 2017-06-22 1617if (ov965x->initialize_controls) a9fe8c23 Hugues Fruchet 2017-06-22 @1618ret = ov965x->initialize_controls(ov965x); 84a15ded Sylwester Nawrocki 2012-12-26 @1619if (ret < 0) 84a15ded Sylwester Nawrocki 2012-12-26 1620goto err_ctrls; 84a15ded Sylwester Nawrocki 2012-12-26 1621 84a15ded Sylwester Nawrocki 2012-12-26 1622/* Update exposure time min/max to match frame format */ --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support
Hi Hugues, [auto build test WARNING on linuxtv-media/master] [also build test WARNING on v4.12-rc6 next-20170623] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Hugues-Fruchet/Add-support-of-OV9655-camera/20170625-201153 base: git://linuxtv.org/media_tree.git master config: i386-randconfig-x079-06251032 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): drivers/media//i2c/ov9650.c: In function 'ov965x_probe': >> drivers/media//i2c/ov9650.c:1617:2: warning: this 'if' clause does not >> guard... [-Wmisleading-indentation] if (ov965x->initialize_controls) ^~ drivers/media//i2c/ov9650.c:1619:3: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if' if (ret < 0) ^~ Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls Cyclomatic Complexity 1 include/linux/device.h:dev_get_drvdata Cyclomatic Complexity 1 include/asm-generic/gpio.h:gpio_is_valid Cyclomatic Complexity 1 include/linux/i2c.h:i2c_get_clientdata Cyclomatic Complexity 1 include/media/media-entity.h:media_entity_cleanup Cyclomatic Complexity 1 include/media/v4l2-subdev.h:v4l2_get_subdevdata Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:ctrl_to_sd Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:to_ov965x Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:ov965x_get_default_format Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_enum_mbus_code Cyclomatic Complexity 4 drivers/media//i2c/ov9650.c:ov965x_enum_frame_sizes Cyclomatic Complexity 6 drivers/media//i2c/ov9650.c:__ov965x_try_frame_size Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:ov965x_i2c_driver_init Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:ov965x_remove Cyclomatic Complexity 8 drivers/media//i2c/ov9650.c:__ov965x_set_frame_interval Cyclomatic Complexity 5 drivers/media//i2c/ov9650.c:ov965x_read Cyclomatic Complexity 11 drivers/media//i2c/ov9650.c:__g_volatile_ctrl Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_write Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_write_array Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_set_frame_size Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_default_gamma_curve Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_color_matrix Cyclomatic Complexity 5 drivers/media//i2c/ov9650.c:ov965x_set_white_balance Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_brightness Cyclomatic Complexity 12 drivers/media//i2c/ov9650.c:ov965x_set_gain Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_flip Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_saturation Cyclomatic Complexity 6 drivers/media//i2c/ov9650.c:ov965x_set_sharpness Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_set_test_pattern Cyclomatic Complexity 7 drivers/media//i2c/ov9650.c:ov965x_set_banding_filter Cyclomatic Complexity 10 drivers/media//i2c/ov9650.c:__ov965x_set_params Cyclomatic Complexity 1 include/linux/err.h:IS_ERR Cyclomatic Complexity 1 include/media/v4l2-ctrls.h:v4l2_ctrl_lock Cyclomatic Complexity 1 include/media/v4l2-ctrls.h:v4l2_ctrl_unlock Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_g_volatile_ctrl Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_s_frame_interval Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_g_frame_interval Cyclomatic Complexity 1 include/media/v4l2-ctrls.h:v4l2_ctrl_modify_range Cyclomatic Complexity 7 drivers/media//i2c/ov9650.c:ov965x_update_exposure_ctrl Cyclomatic Complexity 3 drivers/media//i2c/ov9650.c:ov965x_initialize_controls Cyclomatic Complexity 10 drivers/media//i2c/ov9650.c:ov965x_set_exposure Cyclomatic Complexity 12 drivers/media//i2c/ov9650.c:ov965x_s_ctrl Cyclomatic Complexity 1 include/media/v4l2-subdev.h:v4l2_subdev_get_try_format Cyclomatic Complexity 1 drivers/media//i2c/ov9650.c:ov965x_open Cyclomatic Complexity 11 drivers/media//i2c/ov9650.c:ov965x_set_fmt Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_get_fmt Cyclomatic Complexity 13 drivers/media//i2c/ov9650.c:ov965x_s_stream Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:ov965x_gpio_set Cyclomatic Complexity 2 drivers/media//i2c/ov9650.c:__ov965x_set_power Cyclomatic Complexity 7 drivers/media//i2c/ov9650.c:ov965x_s_power Cyclomatic Complexity 4 drivers/media//i2c/ov9650.c:ov965x_detect_sensor Cyclomatic Complexity 1 include/linux/device.h:devm_kzalloc Cyclomatic Complexity 1 include/asm-generic/gpio.h:__gpio_set_value Cyclomatic Complexity 1
[PATCH v1 5/6] [media] ov9650: add multiple variant support
Ops support and registers set can now be different from a variant to another. Signed-off-by: Hugues Fruchet--- drivers/media/i2c/ov9650.c | 141 + 1 file changed, 91 insertions(+), 50 deletions(-) diff --git a/drivers/media/i2c/ov9650.c b/drivers/media/i2c/ov9650.c index 8b283c9..a9d268d 100644 --- a/drivers/media/i2c/ov9650.c +++ b/drivers/media/i2c/ov9650.c @@ -38,7 +38,7 @@ module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Debug level (0-2)"); -#define DRIVER_NAME "OV9650" +#define DRIVER_NAME "ov965x" /* * OV9650/OV9652 register definitions @@ -257,6 +257,21 @@ struct ov965x { struct media_pad pad; enum v4l2_mbus_type bus_type; struct gpio_desc *gpios[NUM_GPIOS]; + + /* Variant specific regs and ops */ + const struct i2c_rv *init_regs; + const struct ov965x_framesize *framesizes; + unsigned int nb_of_framesizes; + const struct ov965x_pixfmt *formats; + unsigned int nb_of_formats; + const struct ov965x_interval *intervals; + unsigned int nb_of_intervals; + int (*initialize_controls)(struct ov965x *ov965x); + int (*set_frame_interval)(struct ov965x *ov965x, + struct v4l2_subdev_frame_interval *fi); + void (*update_exposure_ctrl)(struct ov965x *ov965x); + int (*set_params)(struct ov965x *ov965x); + /* External master clock frequency */ unsigned long mclk_frequency; struct clk *clk; @@ -576,7 +591,7 @@ static int ov965x_s_power(struct v4l2_subdev *sd, int on) __ov965x_set_power(ov965x, on); if (on) { ret = ov965x_write_array(client, -ov965x_init_regs); +ov965x->init_regs); ov965x->apply_frame_fmt = 1; ov965x->ctrls.update = 1; } @@ -1090,12 +1105,13 @@ static int ov965x_initialize_controls(struct ov965x *ov965x) /* * V4L2 subdev video and pad level operations */ -static void ov965x_get_default_format(struct v4l2_mbus_framefmt *mf) +static void ov965x_get_default_format(struct ov965x *ov965x, + struct v4l2_mbus_framefmt *mf) { - mf->width = ov965x_framesizes[0].width; - mf->height = ov965x_framesizes[0].height; - mf->colorspace = ov965x_formats[0].colorspace; - mf->code = ov965x_formats[0].code; + mf->width = ov965x->framesizes[0].width; + mf->height = ov965x->framesizes[0].height; + mf->colorspace = ov965x->formats[0].colorspace; + mf->code = ov965x->formats[0].code; mf->field = V4L2_FIELD_NONE; } @@ -1103,10 +1119,12 @@ static int ov965x_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) { - if (code->index >= ARRAY_SIZE(ov965x_formats)) + struct ov965x *ov965x = to_ov965x(sd); + + if (code->index >= ov965x->nb_of_formats) return -EINVAL; - code->code = ov965x_formats[code->index].code; + code->code = ov965x->formats[code->index].code; return 0; } @@ -1114,22 +1132,22 @@ static int ov965x_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) { - int i = ARRAY_SIZE(ov965x_formats); + struct ov965x *ov965x = to_ov965x(sd); + int i = ov965x->nb_of_formats; - if (fse->index >= ARRAY_SIZE(ov965x_framesizes)) + if (fse->index >= ov965x->nb_of_framesizes) return -EINVAL; while (--i) - if (fse->code == ov965x_formats[i].code) + if (fse->code == ov965x->formats[i].code) break; - fse->code = ov965x_formats[i].code; + fse->code = ov965x->formats[i].code; - fse->min_width = ov965x_framesizes[fse->index].width; + fse->min_width = ov965x->framesizes[fse->index].width; fse->max_width = fse->min_width; - fse->max_height = ov965x_framesizes[fse->index].height; + fse->max_height = ov965x->framesizes[fse->index].height; fse->min_height = fse->max_height; - return 0; } @@ -1138,6 +1156,9 @@ static int ov965x_g_frame_interval(struct v4l2_subdev *sd, { struct ov965x *ov965x = to_ov965x(sd); + if (!ov965x->fiv) + return 0; + mutex_lock(>lock); fi->interval = ov965x->fiv->interval; mutex_unlock(>lock); @@ -1146,13 +1167,15 @@ static int ov965x_g_frame_interval(struct v4l2_subdev *sd, } static int __ov965x_set_frame_interval(struct ov965x *ov965x, - struct v4l2_subdev_frame_interval *fi) +