mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
OMAPDSS: DISPC: fix 64 bit issue in 5-tap
The DISPC driver uses 64 bit arithmetic to calculate the required clock rate for scaling. The code does not seem to work correctly, and instead calculates with 32 bit numbers, giving wrong result. Fix the code by typecasting values to u64 first, so that the calculations do happen in 64 bits. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
f2aee319d9
commit
c582935c00
1 changed files with 3 additions and 3 deletions
|
@ -2166,7 +2166,7 @@ static unsigned long calc_core_clk_five_taps(unsigned long pclk,
|
|||
if (height > out_height) {
|
||||
unsigned int ppl = mgr_timings->x_res;
|
||||
|
||||
tmp = pclk * height * out_width;
|
||||
tmp = (u64)pclk * height * out_width;
|
||||
do_div(tmp, 2 * out_height * ppl);
|
||||
core_clk = tmp;
|
||||
|
||||
|
@ -2174,14 +2174,14 @@ static unsigned long calc_core_clk_five_taps(unsigned long pclk,
|
|||
if (ppl == out_width)
|
||||
return 0;
|
||||
|
||||
tmp = pclk * (height - 2 * out_height) * out_width;
|
||||
tmp = (u64)pclk * (height - 2 * out_height) * out_width;
|
||||
do_div(tmp, 2 * out_height * (ppl - out_width));
|
||||
core_clk = max_t(u32, core_clk, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
if (width > out_width) {
|
||||
tmp = pclk * width;
|
||||
tmp = (u64)pclk * width;
|
||||
do_div(tmp, out_width);
|
||||
core_clk = max_t(u32, core_clk, tmp);
|
||||
|
||||
|
|
Loading…
Reference in a new issue