111 lines
3.9 KiB
ReStructuredText
111 lines
3.9 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0-only
|
||
|
|
||
|
.. include:: <isonum.txt>
|
||
|
|
||
|
MIPI CCS camera sensor driver
|
||
|
=============================
|
||
|
|
||
|
The MIPI CCS camera sensor driver is a generic driver for `MIPI CCS
|
||
|
<https://www.mipi.org/specifications/camera-command-set>`_ compliant
|
||
|
camera sensors. It exposes three sub-devices representing the pixel array,
|
||
|
the binner and the scaler.
|
||
|
|
||
|
As the capabilities of individual devices vary, the driver exposes
|
||
|
interfaces based on the capabilities that exist in hardware.
|
||
|
|
||
|
Pixel Array sub-device
|
||
|
----------------------
|
||
|
|
||
|
The pixel array sub-device represents the camera sensor's pixel matrix, as well
|
||
|
as analogue crop functionality present in many compliant devices. The analogue
|
||
|
crop is configured using the ``V4L2_SEL_TGT_CROP`` on the source pad (0) of the
|
||
|
entity. The size of the pixel matrix can be obtained by getting the
|
||
|
``V4L2_SEL_TGT_NATIVE_SIZE`` target.
|
||
|
|
||
|
Binner
|
||
|
------
|
||
|
|
||
|
The binner sub-device represents the binning functionality on the sensor. For
|
||
|
that purpose, selection target ``V4L2_SEL_TGT_COMPOSE`` is supported on the
|
||
|
sink pad (0).
|
||
|
|
||
|
Additionally, if a device has no scaler or digital crop functionality, the
|
||
|
source pad (1) expses another digital crop selection rectangle that can only
|
||
|
crop at the end of the lines and frames.
|
||
|
|
||
|
Scaler
|
||
|
------
|
||
|
|
||
|
The scaler sub-device represents the digital crop and scaling functionality of
|
||
|
the sensor. The V4L2 selection target ``V4L2_SEL_TGT_CROP`` is used to
|
||
|
configure the digital crop on the sink pad (0) when digital crop is supported.
|
||
|
Scaling is configured using selection target ``V4L2_SEL_TGT_COMPOSE`` on the
|
||
|
sink pad (0) as well.
|
||
|
|
||
|
Additionally, if the scaler sub-device exists, its source pad (1) exposes
|
||
|
another digital crop selection rectangle that can only crop at the end of the
|
||
|
lines and frames.
|
||
|
|
||
|
Digital and analogue crop
|
||
|
-------------------------
|
||
|
|
||
|
Digital crop functionality is referred to as cropping that effectively works by
|
||
|
dropping some data on the floor. Analogue crop, on the other hand, means that
|
||
|
the cropped information is never retrieved. In case of camera sensors, the
|
||
|
analogue data is never read from the pixel matrix that are outside the
|
||
|
configured selection rectangle that designates crop. The difference has an
|
||
|
effect in device timing and likely also in power consumption.
|
||
|
|
||
|
Private controls
|
||
|
----------------
|
||
|
|
||
|
The MIPI CCS driver implements a number of private controls under
|
||
|
``V4L2_CID_USER_BASE_CCS`` to control the MIPI CCS compliant camera sensors.
|
||
|
|
||
|
Analogue gain model
|
||
|
~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The CCS defines an analogue gain model where the gain can be calculated using
|
||
|
the following formula:
|
||
|
|
||
|
gain = m0 * x + c0 / (m1 * x + c1)
|
||
|
|
||
|
Either m0 or c0 will be zero. The constants that are device specific, can be
|
||
|
obtained from the following controls:
|
||
|
|
||
|
V4L2_CID_CCS_ANALOGUE_GAIN_M0
|
||
|
V4L2_CID_CCS_ANALOGUE_GAIN_M1
|
||
|
V4L2_CID_CCS_ANALOGUE_GAIN_C0
|
||
|
V4L2_CID_CCS_ANALOGUE_GAIN_C1
|
||
|
|
||
|
The analogue gain (``x`` in the formula) is controlled through
|
||
|
``V4L2_CID_ANALOGUE_GAIN`` in this case.
|
||
|
|
||
|
Alternate analogue gain model
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The CCS defines another analogue gain model called alternate analogue gain. In
|
||
|
this case, the formula to calculate actual gain consists of linear and
|
||
|
exponential parts:
|
||
|
|
||
|
gain = linear * 2 ^ exponent
|
||
|
|
||
|
The ``linear`` and ``exponent`` factors can be set using the
|
||
|
``V4L2_CID_CCS_ANALOGUE_LINEAR_GAIN`` and
|
||
|
``V4L2_CID_CCS_ANALOGUE_EXPONENTIAL_GAIN`` controls, respectively
|
||
|
|
||
|
Shading correction
|
||
|
~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
The CCS standard supports lens shading correction. The feature can be controlled
|
||
|
using ``V4L2_CID_CCS_SHADING_CORRECTION``. Additionally, the luminance
|
||
|
correction level may be changed using
|
||
|
``V4L2_CID_CCS_LUMINANCE_CORRECTION_LEVEL``, where value 0 indicates no
|
||
|
correction and 128 indicates correcting the luminance in corners to 10 % less
|
||
|
than in the centre.
|
||
|
|
||
|
Shading correction needs to be enabled for luminance correction level to have an
|
||
|
effect.
|
||
|
|
||
|
**Copyright** |copy| 2020 Intel Corporation
|