• Maxime Ripard's avatar
    media: ov5640: Compute the clock rate at runtime · dfbfb7aa
    Maxime Ripard authored
    The clock rate, while hardcoded until now, is actually a function of the
    resolution, framerate and bytes per pixel. Now that we have an algorithm to
    adjust our clock rate, we can select it dynamically when we change the
    mode.
    
    This changes a bit the clock rate being used, with the following effect:
    
    +------+------+------+------+-----+-----------------+----------------+-----------+
    | Hact | Vact | Htot | Vtot | FPS | Hardcoded clock | Computed clock | Deviation |
    +------+------+------+------+-----+-----------------+----------------+-----------+
    |  640 |  480 | 1896 | 1080 |  15 |        56000000 |       61430400 | 8.84 %    |
    |  640 |  480 | 1896 | 1080 |  30 |       112000000 |      122860800 | 8.84 %    |
    | 1024 |  768 | 1896 | 1080 |  15 |        56000000 |       61430400 | 8.84 %    |
    | 1024 |  768 | 1896 | 1080 |  30 |       112000000 |      122860800 | 8.84 %    |
    |  320 |  240 | 1896 |  984 |  15 |        56000000 |       55969920 | 0.05 %    |
    |  320 |  240 | 1896 |  984 |  30 |       112000000 |      111939840 | 0.05 %    |
    |  176 |  144 | 1896 |  984 |  15 |        56000000 |       55969920 | 0.05 %    |
    |  176 |  144 | 1896 |  984 |  30 |       112000000 |      111939840 | 0.05 %    |
    |  720 |  480 | 1896 |  984 |  15 |        56000000 |       55969920 | 0.05 %    |
    |  720 |  480 | 1896 |  984 |  30 |       112000000 |      111939840 | 0.05 %    |
    |  720 |  576 | 1896 |  984 |  15 |        56000000 |       55969920 | 0.05 %    |
    |  720 |  576 | 1896 |  984 |  30 |       112000000 |      111939840 | 0.05 %    |
    | 1280 |  720 | 1892 |  740 |  15 |        42000000 |       42002400 | 0.01 %    |
    | 1280 |  720 | 1892 |  740 |  30 |        84000000 |       84004800 | 0.01 %    |
    | 1920 | 1080 | 2500 | 1120 |  15 |        84000000 |       84000000 | 0.00 %    |
    | 1920 | 1080 | 2500 | 1120 |  30 |       168000000 |      168000000 | 0.00 %    |
    | 2592 | 1944 | 2844 | 1944 |  15 |        84000000 |      165862080 | 49.36 %   |
    +------+------+------+------+-----+-----------------+----------------+-----------+
    
    Only the 640x480, 1024x768 and 2592x1944 modes are significantly affected
    by the new formula.
    
    In this case, 640x480 and 1024x768 are actually fixed by this change.
    Indeed, the sensor was sending data at, for example, 27.33fps instead of
    30fps. This is -9%, which is roughly what we're seeing in the array.
    Testing these modes with the new clock setup actually fix that error, and
    data are now sent at around 30fps.
    
    2592x1944, on the other hand, is probably due to the fact that this mode
    can only be used using MIPI-CSI2, in a two lane mode, and never really
    tested with a DVP bus.
    Signed-off-by: default avatarMaxime Ripard <maxime.ripard@bootlin.com>
    Tested-by: Adam Ford <aford173@gmail.com> #imx6dq
    Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
    dfbfb7aa
ov5640.c 91 KB