xref: /openbmc/linux/Documentation/driver-api/media/drivers/ccs/ccs.rst (revision 4ad97bfb1a7ee826b7f253750ba47f2e991c12ec)
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