xref: /openbmc/linux/Documentation/driver-api/media/drivers/ccs/ccs.rst (revision 3bf10ebc6d12503edb3430234341491bdc9fff09)
14ad97bfbSSakari Ailus.. SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause
24ad97bfbSSakari Ailus
34ad97bfbSSakari Ailus.. include:: <isonum.txt>
44ad97bfbSSakari Ailus
54ad97bfbSSakari AilusMIPI CCS camera sensor driver
64ad97bfbSSakari Ailus=============================
74ad97bfbSSakari Ailus
84ad97bfbSSakari AilusThe MIPI CCS camera sensor driver is a generic driver for `MIPI CCS
94ad97bfbSSakari Ailus<https://www.mipi.org/specifications/camera-command-set>`_ compliant
104ad97bfbSSakari Ailuscamera sensors. It exposes three sub-devices representing the pixel array,
114ad97bfbSSakari Ailusthe binner and the scaler.
124ad97bfbSSakari Ailus
134ad97bfbSSakari AilusAs the capabilities of individual devices vary, the driver exposes
144ad97bfbSSakari Ailusinterfaces based on the capabilities that exist in hardware.
154ad97bfbSSakari Ailus
164ad97bfbSSakari AilusPixel Array sub-device
174ad97bfbSSakari Ailus----------------------
184ad97bfbSSakari Ailus
194ad97bfbSSakari AilusThe pixel array sub-device represents the camera sensor's pixel matrix, as well
204ad97bfbSSakari Ailusas analogue crop functionality present in many compliant devices. The analogue
214ad97bfbSSakari Ailuscrop is configured using the ``V4L2_SEL_TGT_CROP`` on the source pad (0) of the
224ad97bfbSSakari Ailusentity. The size of the pixel matrix can be obtained by getting the
234ad97bfbSSakari Ailus``V4L2_SEL_TGT_NATIVE_SIZE`` target.
244ad97bfbSSakari Ailus
254ad97bfbSSakari AilusBinner
264ad97bfbSSakari Ailus------
274ad97bfbSSakari Ailus
284ad97bfbSSakari AilusThe binner sub-device represents the binning functionality on the sensor. For
294ad97bfbSSakari Ailusthat purpose, selection target ``V4L2_SEL_TGT_COMPOSE`` is supported on the
304ad97bfbSSakari Ailussink pad (0).
314ad97bfbSSakari Ailus
324ad97bfbSSakari AilusAdditionally, if a device has no scaler or digital crop functionality, the
334ad97bfbSSakari Ailussource pad (1) expses another digital crop selection rectangle that can only
344ad97bfbSSakari Ailuscrop at the end of the lines and frames.
354ad97bfbSSakari Ailus
364ad97bfbSSakari AilusScaler
374ad97bfbSSakari Ailus------
384ad97bfbSSakari Ailus
394ad97bfbSSakari AilusThe scaler sub-device represents the digital crop and scaling functionality of
404ad97bfbSSakari Ailusthe sensor. The V4L2 selection target ``V4L2_SEL_TGT_CROP`` is used to
414ad97bfbSSakari Ailusconfigure the digital crop on the sink pad (0) when digital crop is supported.
424ad97bfbSSakari AilusScaling is configured using selection target ``V4L2_SEL_TGT_COMPOSE`` on the
434ad97bfbSSakari Ailussink pad (0) as well.
444ad97bfbSSakari Ailus
454ad97bfbSSakari AilusAdditionally, if the scaler sub-device exists, its source pad (1) exposes
464ad97bfbSSakari Ailusanother digital crop selection rectangle that can only crop at the end of the
474ad97bfbSSakari Ailuslines and frames.
484ad97bfbSSakari Ailus
494ad97bfbSSakari AilusDigital and analogue crop
504ad97bfbSSakari Ailus-------------------------
514ad97bfbSSakari Ailus
524ad97bfbSSakari AilusDigital crop functionality is referred to as cropping that effectively works by
534ad97bfbSSakari Ailusdropping some data on the floor. Analogue crop, on the other hand, means that
544ad97bfbSSakari Ailusthe cropped information is never retrieved. In case of camera sensors, the
554ad97bfbSSakari Ailusanalogue data is never read from the pixel matrix that are outside the
564ad97bfbSSakari Ailusconfigured selection rectangle that designates crop. The difference has an
574ad97bfbSSakari Ailuseffect in device timing and likely also in power consumption.
584ad97bfbSSakari Ailus
594ad97bfbSSakari AilusRegister definition generator
604ad97bfbSSakari Ailus-----------------------------
614ad97bfbSSakari Ailus
62*3bf10ebcSSakari AilusThe ccs-regs.asc file contains MIPI CCS register definitions that are used
634ad97bfbSSakari Ailusto produce C source code files for definitions that can be better used by
644ad97bfbSSakari Ailusprograms written in C language. As there are many dependencies between the
654ad97bfbSSakari Ailusproduced files, please do not modify them manually as it's error-prone and
664ad97bfbSSakari Ailusin vain, but instead change the script producing them.
674ad97bfbSSakari Ailus
684ad97bfbSSakari AilusUsage
694ad97bfbSSakari Ailus~~~~~
704ad97bfbSSakari Ailus
714ad97bfbSSakari AilusConventionally the script is called this way to update the CCS driver
724ad97bfbSSakari Ailusdefinitions:
734ad97bfbSSakari Ailus
744ad97bfbSSakari Ailus.. code-block:: none
754ad97bfbSSakari Ailus
764ad97bfbSSakari Ailus	$ Documentation/driver-api/media/drivers/ccs/mk-ccs-regs -k \
774ad97bfbSSakari Ailus		-e drivers/media/i2c/ccs/ccs-regs.h \
784ad97bfbSSakari Ailus		-L drivers/media/i2c/ccs/ccs-limits.h \
794ad97bfbSSakari Ailus		-l drivers/media/i2c/ccs/ccs-limits.c \
80*3bf10ebcSSakari Ailus		-c Documentation/driver-api/media/drivers/ccs/ccs-regs.asc
814ad97bfbSSakari Ailus
824ad97bfbSSakari Ailus**Copyright** |copy| 2020 Intel Corporation
83