Hi Fabio,

Am Dienstag, den 02.09.2014, 10:31 -0300 schrieb Fabio Estevam:
> For debug purposes it is useful to know how far away the generated pixelclock 
> is
> from the desired rate, so print the amount of error.
> 
> After adding this patch and with debug enabled we have:
> 
> imx-ipuv3 2400000.ipu: disp 0: panel size = 1920 x 1080
> imx-ipuv3 2400000.ipu: Clocks: IPU 264000000Hz DI 24000000Hz Needed 
> 138500000Hz
> imx-ipuv3 2400000.ipu:   IPU clock can give 132000000 with divider 2, error 
> -4.3%
> imx-ipuv3 2400000.ipu: Want 138500000Hz IPU 264000000Hz DI 138500000Hz using 
> DI, 138500000Hz, error 0.0%
> imx-ipuv3 2400000.ipu: disp 1: panel size = 1024 x 768
> imx-ipuv3 2400000.ipu: Clocks: IPU 264000000Hz DI 64999999Hz Needed 65000000Hz
> imx-ipuv3 2400000.ipu: Want 65000000Hz IPU 264000000Hz DI 64999999Hz using 
> DI, 64999999Hz, error 0.9%

As this example shows ...

[...]
> -     dev_dbg(di->ipu->dev, "Want %luHz IPU %luHz DI %luHz using %s, %luHz\n",
> +     error = (clk_get_rate(di->clk_di_pixel) / (clkgen0 >> 4)) / 
> (sig->pixelclock / 1000);
> +
> +     dev_dbg(di->ipu->dev, "Want %luHz IPU %luHz DI %luHz using %s, %luHz, 
> error %d.%u%%\n",
>               sig->pixelclock,
>               clk_get_rate(di->clk_ipu),
>               clk_get_rate(di->clk_di),
>               clk == di->clk_di ? "DI" : "IPU",
> -             clk_get_rate(di->clk_di_pixel) / (clkgen0 >> 4));
> +             clk_get_rate(di->clk_di_pixel) / (clkgen0 >> 4),
> +             (signed)(error - 1000) / 10, error % 10);

... this only works for positive deviations. If error < 1000, error % 10
will return the wrong value and for 990 < error < 1000 the sign is
missing.

Also you are losing a lot of presicion. the real error in the example is
more like 0.000002%, so I wonder how useful this really is.

regards
Philipp

Reply via email to