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