2023-08-30 17:31:07 +02:00
|
|
|
.. SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause
|
|
|
|
|
|
|
|
.. 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.
|
|
|
|
|
2023-10-24 12:59:35 +02:00
|
|
|
CCS static data
|
|
|
|
---------------
|
|
|
|
|
|
|
|
The MIPI CCS driver supports CCS static data for all compliant devices,
|
|
|
|
including not just those compliant with CCS 1.1 but also CCS 1.0 and SMIA(++).
|
|
|
|
For CCS the file names are formed as
|
|
|
|
|
|
|
|
ccs/ccs-sensor-vvvv-mmmm-rrrr.fw (sensor) and
|
|
|
|
ccs/ccs-module-vvvv-mmmm-rrrr.fw (module).
|
|
|
|
|
|
|
|
For SMIA++ compliant devices the corresponding file names are
|
|
|
|
|
|
|
|
ccs/smiapp-sensor-vv-mmmm-rr.fw (sensor) and
|
|
|
|
ccs/smiapp-module-vv-mmmm-rrrr.fw (module).
|
|
|
|
|
|
|
|
For SMIA (non-++) compliant devices the static data file name is
|
|
|
|
|
|
|
|
ccs/smia-sensor-vv-mmmm-rr.fw (sensor).
|
|
|
|
|
|
|
|
vvvv or vv denotes MIPI and SMIA manufacturer IDs respectively, mmmm model ID
|
|
|
|
and rrrr or rr revision number.
|
|
|
|
|
2023-08-30 17:31:07 +02:00
|
|
|
Register definition generator
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
The ccs-regs.asc file contains MIPI CCS register definitions that are used
|
|
|
|
to produce C source code files for definitions that can be better used by
|
|
|
|
programs written in C language. As there are many dependencies between the
|
|
|
|
produced files, please do not modify them manually as it's error-prone and
|
|
|
|
in vain, but instead change the script producing them.
|
|
|
|
|
|
|
|
Usage
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
Conventionally the script is called this way to update the CCS driver
|
|
|
|
definitions:
|
|
|
|
|
|
|
|
.. code-block:: none
|
|
|
|
|
|
|
|
$ Documentation/driver-api/media/drivers/ccs/mk-ccs-regs -k \
|
|
|
|
-e drivers/media/i2c/ccs/ccs-regs.h \
|
|
|
|
-L drivers/media/i2c/ccs/ccs-limits.h \
|
|
|
|
-l drivers/media/i2c/ccs/ccs-limits.c \
|
|
|
|
-c Documentation/driver-api/media/drivers/ccs/ccs-regs.asc
|
|
|
|
|
|
|
|
CCS PLL calculator
|
|
|
|
==================
|
|
|
|
|
|
|
|
The CCS PLL calculator is used to compute the PLL configuration, given sensor's
|
|
|
|
capabilities as well as board configuration and user specified configuration. As
|
|
|
|
the configuration space that encompasses all these configurations is vast, the
|
|
|
|
PLL calculator isn't entirely trivial. Yet it is relatively simple to use for a
|
|
|
|
driver.
|
|
|
|
|
|
|
|
The PLL model implemented by the PLL calculator corresponds to MIPI CCS 1.1.
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/media/i2c/ccs-pll.h
|
|
|
|
|
|
|
|
**Copyright** |copy| 2020 Intel Corporation
|