OSDN Git Service

OMAPDSS: DISPC: decimation rounding fix
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 27 Jan 2014 09:29:53 +0000 (11:29 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 11 Feb 2014 14:19:41 +0000 (16:19 +0200)
commiteec77da2744b1265653ab99af91c3b26c49501e9
tree72aeb933e98156baed394f7879ad01879ed3ec7c
parentb28a960c42fcd9cfc987441fa6d1c1a471f0f9ed
OMAPDSS: DISPC: decimation rounding fix

The driver uses DIV_ROUND_UP when calculating decimated width & height.
For example, when decimating with 3, the width is calculated as:

  width = DIV_ROUND_UP(width, decim_x);

This yields bad results for some values. For example, 800/3=266.666...,
which is rounded to 267. When the input width is set to 267, and pixel
increment is set to 3, this causes the dispc to read a line of 801
pixels, i.e. it reads a wrong pixel at the end of the line.

Even more pressing, the above rounding causes a BUG() in pixinc(), as
the value of 801 is used to calculate row increment, leading to a bad
value being passed to pixinc().

This patch fixes the decimation by removing the DIV_ROUND_UP()s when
calculating width and height for decimation.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/dispc.c