Hi Jacopo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.16-rc2 next-20180220]
[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/Jacopo-Mondi/Renesas-Capture-Engine-Unit-CEU-V4L2-driver/20180220-101027
base:   git://linuxtv.org/media_tree.git master
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/media/i2c/ov772x.c: In function 'ov772x_set_frame_rate.isra.2':
>> drivers/media/i2c/ov772x.c:643:7: warning: 'fsize' may be used uninitialized 
>> in this function [-Wmaybe-uninitialized]
     pclk = fps * fsize;
     ~~~~~^~~~~~~~~~~~~

vim +/fsize +643 drivers/media/i2c/ov772x.c

   604  
   605  static int ov772x_set_frame_rate(struct ov772x_priv *priv,
   606                                   struct v4l2_fract *tpf,
   607                                   const struct ov772x_color_format *cfmt,
   608                                   const struct ov772x_win_size *win)
   609  {
   610          struct i2c_client *client = v4l2_get_subdevdata(&priv->subdev);
   611          unsigned long fin = clk_get_rate(priv->clk);
   612          unsigned int fps = tpf->numerator ?
   613                             tpf->denominator / tpf->numerator :
   614                             tpf->denominator;
   615          unsigned int best_diff;
   616          unsigned int fsize;
   617          unsigned int pclk;
   618          unsigned int diff;
   619          unsigned int idx;
   620          unsigned int i;
   621          u8 clkrc = 0;
   622          u8 com4 = 0;
   623          int ret;
   624  
   625          /* Approximate to the closest supported frame interval. */
   626          best_diff = ~0L;
   627          for (i = 0, idx = 0; i < OV772X_N_FRAME_INTERVALS; i++) {
   628                  diff = abs(fps - ov772x_frame_intervals[i]);
   629                  if (diff < best_diff) {
   630                          idx = i;
   631                          best_diff = diff;
   632                  }
   633          }
   634          fps = ov772x_frame_intervals[idx];
   635  
   636          /* Use image size (with blankings) to calculate desired pixel 
clock. */
   637          if ((cfmt->com7 & OFMT_MASK) == OFMT_RGB ||
   638              (cfmt->com7 & OFMT_MASK) == OFMT_YUV)
   639                  fsize = win->sizeimage * 2;
   640          else if ((cfmt->com7 & OFMT_MASK) == OFMT_BRAW)
   641                  fsize = win->sizeimage;
   642  
 > 643          pclk = fps * fsize;
   644  
   645          /*
   646           * Pixel clock generation circuit is pretty simple:
   647           *
   648           * Fin -> [ / CLKRC_div] -> [ * PLL_mult] -> pclk
   649           *
   650           * Try to approximate the desired pixel clock testing all 
available
   651           * PLL multipliers (1x, 4x, 6x, 8x) and calculate corresponding
   652           * divisor with:
   653           *
   654           * div = PLL_mult * Fin / pclk
   655           *
   656           * and re-calculate the pixel clock using it:
   657           *
   658           * pclk = Fin * PLL_mult / CLKRC_div
   659           *
   660           * Choose the PLL_mult and CLKRC_div pair that gives a pixel 
clock
   661           * closer to the desired one.
   662           *
   663           * The desired pixel clock is calculated using a known frame 
size
   664           * (blanking included) and FPS.
   665           */
   666          best_diff = ~0L;
   667          for (i = 0; i < ARRAY_SIZE(ov772x_pll); i++) {
   668                  unsigned int pll_mult = ov772x_pll[i].mult;
   669                  unsigned int pll_out = pll_mult * fin;
   670                  unsigned int t_pclk;
   671                  unsigned int div;
   672  
   673                  if (pll_out < pclk)
   674                          continue;
   675  
   676                  div = DIV_ROUND_CLOSEST(pll_out, pclk);
   677                  t_pclk = DIV_ROUND_CLOSEST(fin * pll_mult, div);
   678                  diff = abs(pclk - t_pclk);
   679                  if (diff < best_diff) {
   680                          best_diff = diff;
   681                          clkrc = CLKRC_DIV(div);
   682                          com4 = ov772x_pll[i].com4;
   683                  }
   684          }
   685  
   686          ret = ov772x_write(client, COM4, com4 | COM4_RESERVED);
   687          if (ret < 0)
   688                  return ret;
   689  
   690          ret = ov772x_write(client, CLKRC, clkrc | CLKRC_RESERVED);
   691          if (ret < 0)
   692                  return ret;
   693  
   694          tpf->numerator = 1;
   695          tpf->denominator = fps;
   696          priv->fps = tpf->denominator;
   697  
   698          return 0;
   699  }
   700  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to