Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] v4l2-dv-timing: avoid rounding twice in gtf hblank calc

Currently, in gtf hblank calculations, the rounding is used twice,
one at intermediate division and one at final state where hblank
is rounded to nearest multiple of twice cell granularity. This
error got introduced in 'commit d7ed5a3ddaec ("[media]
v4l2-dv-timings: fix rounding in hblank and hsync calculation"),
where it missed combining the rounding step. Correcting the same
in this patch.

Signed-off-by: Prashant Laddha <prladdha@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

authored by

Prashant Laddha and committed by
Mauro Carvalho Chehab
dc0cf4cf 7a5d99e7

+6 -4
+6 -4
drivers/media/v4l2-core/v4l2-dv-timings.c
··· 561 561 562 562 num = ((image_width * GTF_D_C_PRIME * (u64)hfreq) - 563 563 ((u64)image_width * GTF_D_M_PRIME * 1000)); 564 - den = hfreq * (100 - GTF_D_C_PRIME) + GTF_D_M_PRIME * 1000; 564 + den = (hfreq * (100 - GTF_D_C_PRIME) + GTF_D_M_PRIME * 1000) * 565 + (2 * GTF_CELL_GRAN); 565 566 h_blank = div_u64((num + (den >> 1)), den); 567 + h_blank *= (2 * GTF_CELL_GRAN); 566 568 } else { 567 569 u64 num; 568 570 u32 den; 569 571 570 572 num = ((image_width * GTF_S_C_PRIME * (u64)hfreq) - 571 573 ((u64)image_width * GTF_S_M_PRIME * 1000)); 572 - den = hfreq * (100 - GTF_S_C_PRIME) + GTF_S_M_PRIME * 1000; 574 + den = (hfreq * (100 - GTF_S_C_PRIME) + GTF_S_M_PRIME * 1000) * 575 + (2 * GTF_CELL_GRAN); 573 576 h_blank = div_u64((num + (den >> 1)), den); 577 + h_blank *= (2 * GTF_CELL_GRAN); 574 578 } 575 579 576 - h_blank = ((h_blank + GTF_CELL_GRAN) / (2 * GTF_CELL_GRAN)) * 577 - (2 * GTF_CELL_GRAN); 578 580 frame_width = image_width + h_blank; 579 581 580 582 pix_clk = (image_width + h_blank) * hfreq;