| .. 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) exposes 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. |
| |
| 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. |
| |
| CCS tools |
| ~~~~~~~~~ |
| |
| `CCS tools <https://github.com/MIPI-Alliance/ccs-tools/>`_ is a set of |
| tools for working with CCS static data files. CCS tools includes a |
| definition of the human-readable CCS static data YAML format and includes a |
| program to convert it to a binary. |
| |
| 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 |