1*4ad97bfbSSakari Ailus.. SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause 2*4ad97bfbSSakari Ailus 3*4ad97bfbSSakari Ailus.. include:: <isonum.txt> 4*4ad97bfbSSakari Ailus 5*4ad97bfbSSakari AilusMIPI CCS camera sensor driver 6*4ad97bfbSSakari Ailus============================= 7*4ad97bfbSSakari Ailus 8*4ad97bfbSSakari AilusThe MIPI CCS camera sensor driver is a generic driver for `MIPI CCS 9*4ad97bfbSSakari Ailus<https://www.mipi.org/specifications/camera-command-set>`_ compliant 10*4ad97bfbSSakari Ailuscamera sensors. It exposes three sub-devices representing the pixel array, 11*4ad97bfbSSakari Ailusthe binner and the scaler. 12*4ad97bfbSSakari Ailus 13*4ad97bfbSSakari AilusAs the capabilities of individual devices vary, the driver exposes 14*4ad97bfbSSakari Ailusinterfaces based on the capabilities that exist in hardware. 15*4ad97bfbSSakari Ailus 16*4ad97bfbSSakari AilusPixel Array sub-device 17*4ad97bfbSSakari Ailus---------------------- 18*4ad97bfbSSakari Ailus 19*4ad97bfbSSakari AilusThe pixel array sub-device represents the camera sensor's pixel matrix, as well 20*4ad97bfbSSakari Ailusas analogue crop functionality present in many compliant devices. The analogue 21*4ad97bfbSSakari Ailuscrop is configured using the ``V4L2_SEL_TGT_CROP`` on the source pad (0) of the 22*4ad97bfbSSakari Ailusentity. The size of the pixel matrix can be obtained by getting the 23*4ad97bfbSSakari Ailus``V4L2_SEL_TGT_NATIVE_SIZE`` target. 24*4ad97bfbSSakari Ailus 25*4ad97bfbSSakari AilusBinner 26*4ad97bfbSSakari Ailus------ 27*4ad97bfbSSakari Ailus 28*4ad97bfbSSakari AilusThe binner sub-device represents the binning functionality on the sensor. For 29*4ad97bfbSSakari Ailusthat purpose, selection target ``V4L2_SEL_TGT_COMPOSE`` is supported on the 30*4ad97bfbSSakari Ailussink pad (0). 31*4ad97bfbSSakari Ailus 32*4ad97bfbSSakari AilusAdditionally, if a device has no scaler or digital crop functionality, the 33*4ad97bfbSSakari Ailussource pad (1) expses another digital crop selection rectangle that can only 34*4ad97bfbSSakari Ailuscrop at the end of the lines and frames. 35*4ad97bfbSSakari Ailus 36*4ad97bfbSSakari AilusScaler 37*4ad97bfbSSakari Ailus------ 38*4ad97bfbSSakari Ailus 39*4ad97bfbSSakari AilusThe scaler sub-device represents the digital crop and scaling functionality of 40*4ad97bfbSSakari Ailusthe sensor. The V4L2 selection target ``V4L2_SEL_TGT_CROP`` is used to 41*4ad97bfbSSakari Ailusconfigure the digital crop on the sink pad (0) when digital crop is supported. 42*4ad97bfbSSakari AilusScaling is configured using selection target ``V4L2_SEL_TGT_COMPOSE`` on the 43*4ad97bfbSSakari Ailussink pad (0) as well. 44*4ad97bfbSSakari Ailus 45*4ad97bfbSSakari AilusAdditionally, if the scaler sub-device exists, its source pad (1) exposes 46*4ad97bfbSSakari Ailusanother digital crop selection rectangle that can only crop at the end of the 47*4ad97bfbSSakari Ailuslines and frames. 48*4ad97bfbSSakari Ailus 49*4ad97bfbSSakari AilusDigital and analogue crop 50*4ad97bfbSSakari Ailus------------------------- 51*4ad97bfbSSakari Ailus 52*4ad97bfbSSakari AilusDigital crop functionality is referred to as cropping that effectively works by 53*4ad97bfbSSakari Ailusdropping some data on the floor. Analogue crop, on the other hand, means that 54*4ad97bfbSSakari Ailusthe cropped information is never retrieved. In case of camera sensors, the 55*4ad97bfbSSakari Ailusanalogue data is never read from the pixel matrix that are outside the 56*4ad97bfbSSakari Ailusconfigured selection rectangle that designates crop. The difference has an 57*4ad97bfbSSakari Ailuseffect in device timing and likely also in power consumption. 58*4ad97bfbSSakari Ailus 59*4ad97bfbSSakari AilusRegister definition generator 60*4ad97bfbSSakari Ailus----------------------------- 61*4ad97bfbSSakari Ailus 62*4ad97bfbSSakari AilusThe ccs-regs.txt file contains MIPI CCS register definitions that are used 63*4ad97bfbSSakari Ailusto produce C source code files for definitions that can be better used by 64*4ad97bfbSSakari Ailusprograms written in C language. As there are many dependencies between the 65*4ad97bfbSSakari Ailusproduced files, please do not modify them manually as it's error-prone and 66*4ad97bfbSSakari Ailusin vain, but instead change the script producing them. 67*4ad97bfbSSakari Ailus 68*4ad97bfbSSakari AilusUsage 69*4ad97bfbSSakari Ailus~~~~~ 70*4ad97bfbSSakari Ailus 71*4ad97bfbSSakari AilusConventionally the script is called this way to update the CCS driver 72*4ad97bfbSSakari Ailusdefinitions: 73*4ad97bfbSSakari Ailus 74*4ad97bfbSSakari Ailus.. code-block:: none 75*4ad97bfbSSakari Ailus 76*4ad97bfbSSakari Ailus $ Documentation/driver-api/media/drivers/ccs/mk-ccs-regs -k \ 77*4ad97bfbSSakari Ailus -e drivers/media/i2c/ccs/ccs-regs.h \ 78*4ad97bfbSSakari Ailus -L drivers/media/i2c/ccs/ccs-limits.h \ 79*4ad97bfbSSakari Ailus -l drivers/media/i2c/ccs/ccs-limits.c \ 80*4ad97bfbSSakari Ailus -c Documentation/driver-api/media/drivers/ccs/ccs-regs.txt 81*4ad97bfbSSakari Ailus 82*4ad97bfbSSakari Ailus**Copyright** |copy| 2020 Intel Corporation 83