.. SPDX-License-Identifier: GPL-2.0

DW100 dewarp driver
===================

The Vivante DW100 Dewarp Processor IP core found on i.MX8MP SoC applies a
programmable geometrical transformation on the input image to correct distortion
introduced by lenses.

The transformation function is exposed by the hardware as a grid map with 16x16
pixel macroblocks indexed using X, Y vertex coordinates.
::

                          Image width
           <--------------------------------------->

      ^    .-------.-------.-------.-------.-------.
      |    | 16x16 |       |       |       |       |
   I  |    | pixel |       |       |       |       |
   m  |    | block |       |       |       |       |
   a  |    .-------.-------.-------.-------.-------.
   g  |    |       |       |       |       |       |
   e  |    |       |       |       |       |       |
      |    |       |       |       |       |       |
   h  |    .-------.-------.-------.-------.-------.
   e  |    |       |       |       |       |       |
   i  |    |       |       |       |       |       |
   g  |    |       |       |       |       |       |
   h  |    .-------.-------.-------.-------.-------.
   t  |    |       |       |       |       |       |
      |    |       |       |       |       |       |
      |    |       |       |       |       |       |
      v    '-------'-------'-------'-------'-------'

            Grid of Image Blocks for Dewarping Map


Each x, y coordinate register uses 16 bits to record the coordinate address in
an unsigned 12.4 fixed point format (UQ12.4).
::

    .----------------------.--------..----------------------.--------.
    |         31~20        | 19~16  ||         15~4         |  3~0   |
    |       (integer)      | (frac) ||       (integer)      | (frac) |
    '----------------------'--------''----------------------'--------'
    <-------------------------------><------------------------------->
                Y coordinate                     X coordinate

                           Remap Register Layout

The dewarping map is set from applications using the
V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP control. The control contains
an array of u32 values storing (x, y) destination coordinates for each
vertex of the grid. The x coordinate is stored in the 16 LSBs and the y
coordinate in the 16 MSBs.

The number of elements in the array must match the image size:

.. code-block:: C

    elems = (DIV_ROUND_UP(width, 16) + 1) * (DIV_ROUND_UP(height, 16) + 1);

If the control has not been set by the application, the driver uses an identity
map.

More details on the DW100 hardware operations can be found in
*chapter 13.15 DeWarp* of IMX8MP_ reference manual.

The Vivante DW100 m2m driver implements the following driver-specific control:

``V4L2_CID_DW100_DEWARPING_16x16_VERTEX_MAP (__u32 array)``
    Specifies to DW100 driver its dewarping map (aka LUT) blob as described in
    *chapter 13.15.2.3 Dewarping Remap* of IMX8MP_ reference manual as an U32
    dynamic array. The image is divided into many small 16x16 blocks. If the
    width/height of the image is not divisible by 16, the size of the
    rightmost/bottommost block is the remainder. The dewarping map only saves
    the vertex coordinates of the block. The dewarping grid map is comprised of
    vertex coordinates for x and y. Each x, y coordinate register uses 16 bits
    (UQ12.4) to record the coordinate address, with the Y coordinate in the
    upper bits and X in the lower bits. The driver modifies the dimensions of
    this control when the sink format is changed, to reflect the new input
    resolution.

.. _IMX8MP: https://www.nxp.com/webapp/Download?colCode=IMX8MPRM
