Re: [PATCH v1 5/6] [media] ov9650: add multiple variant support (fwd)

2017-06-26 Thread Hugues FRUCHET
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)

2017-06-25 Thread Julia Lawall
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

2017-06-25 Thread kbuild test robot
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

2017-06-22 Thread Hugues Fruchet
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)
+