xref: /linux/Documentation/userspace-api/media/v4l/metafmt-arm-mali-c55.rst (revision d7aa60d966461ca6114dc348e97889dc8850ff7f)
1b35d9f3eSDaniel Scally.. SPDX-License-Identifier: GPL-2.0
2b35d9f3eSDaniel Scally
3*87b214ddSDaniel Scally.. _v4l2-meta-fmt-mali-c55-params:
4b35d9f3eSDaniel Scally.. _v4l2-meta-fmt-mali-c55-stats:
5b35d9f3eSDaniel Scally
6*87b214ddSDaniel Scally*****************************************************************************
7*87b214ddSDaniel ScallyV4L2_META_FMT_MALI_C55_STATS ('C55S'), V4L2_META_FMT_MALI_C55_PARAMS ('C55P')
8*87b214ddSDaniel Scally*****************************************************************************
9b35d9f3eSDaniel Scally
10b35d9f3eSDaniel Scally3A Statistics
11b35d9f3eSDaniel Scally=============
12b35d9f3eSDaniel Scally
13b35d9f3eSDaniel ScallyThe ISP device collects different statistics over an input bayer frame. Those
14b35d9f3eSDaniel Scallystatistics can be obtained by userspace from the
15b35d9f3eSDaniel Scally:ref:`mali-c55 3a stats <mali-c55-3a-stats>` metadata capture video node, using
16b35d9f3eSDaniel Scallythe :c:type:`v4l2_meta_format` interface. The buffer contains a single instance
17b35d9f3eSDaniel Scallyof the C structure :c:type:`mali_c55_stats_buffer` defined in
18b35d9f3eSDaniel Scally``mali-c55-config.h``, so the structure can be obtained from the buffer by:
19b35d9f3eSDaniel Scally
20b35d9f3eSDaniel Scally.. code-block:: C
21b35d9f3eSDaniel Scally
22b35d9f3eSDaniel Scally	struct mali_c55_stats_buffer *stats =
23b35d9f3eSDaniel Scally		(struct mali_c55_stats_buffer *)buf;
24b35d9f3eSDaniel Scally
25b35d9f3eSDaniel ScallyFor details of the statistics see :c:type:`mali_c55_stats_buffer`.
26b35d9f3eSDaniel Scally
27*87b214ddSDaniel ScallyConfiguration Parameters
28*87b214ddSDaniel Scally========================
29*87b214ddSDaniel Scally
30*87b214ddSDaniel ScallyThe configuration parameters are passed to the :ref:`mali-c55 3a params
31*87b214ddSDaniel Scally<mali-c55-3a-params>` metadata output video node, using the
32*87b214ddSDaniel Scally:c:type:`v4l2_meta_format` interface. Rather than a single struct containing
33*87b214ddSDaniel Scallysub-structs for each configurable area of the ISP, parameters for the Mali-C55
34*87b214ddSDaniel Scallyuse the v4l2-isp parameters system, through which groups of parameters are
35*87b214ddSDaniel Scallydefined as distinct structs or "blocks" which may be added to the data member of
36*87b214ddSDaniel Scally:c:type:`v4l2_isp_params_buffer`. Userspace is responsible for populating the
37*87b214ddSDaniel Scallydata member with the blocks that need to be configured by the driver.  Each
38*87b214ddSDaniel Scallyblock-specific struct embeds :c:type:`v4l2_isp_params_block_header` as its first
39*87b214ddSDaniel Scallymember and userspace must populate the type member with a value from
40*87b214ddSDaniel Scally:c:type:`mali_c55_param_block_type`.
41*87b214ddSDaniel Scally
42*87b214ddSDaniel Scally.. code-block:: c
43*87b214ddSDaniel Scally
44*87b214ddSDaniel Scally	struct v4l2_isp_params_buffer *params =
45*87b214ddSDaniel Scally		(struct v4l2_isp_params_buffer *)buffer;
46*87b214ddSDaniel Scally
47*87b214ddSDaniel Scally	params->version = MALI_C55_PARAM_BUFFER_V1;
48*87b214ddSDaniel Scally	params->data_size = 0;
49*87b214ddSDaniel Scally
50*87b214ddSDaniel Scally	void *data = (void *)params->data;
51*87b214ddSDaniel Scally
52*87b214ddSDaniel Scally	struct mali_c55_params_awb_gains *gains =
53*87b214ddSDaniel Scally		(struct mali_c55_params_awb_gains *)data;
54*87b214ddSDaniel Scally
55*87b214ddSDaniel Scally	gains->header.type = MALI_C55_PARAM_BLOCK_AWB_GAINS;
56*87b214ddSDaniel Scally	gains->header.flags |= V4L2_ISP_PARAMS_FL_BLOCK_ENABLE;
57*87b214ddSDaniel Scally	gains->header.size = sizeof(struct mali_c55_params_awb_gains);
58*87b214ddSDaniel Scally
59*87b214ddSDaniel Scally	gains->gain00 = 256;
60*87b214ddSDaniel Scally	gains->gain00 = 256;
61*87b214ddSDaniel Scally	gains->gain00 = 256;
62*87b214ddSDaniel Scally	gains->gain00 = 256;
63*87b214ddSDaniel Scally
64*87b214ddSDaniel Scally	data += sizeof(struct mali_c55_params_awb_gains);
65*87b214ddSDaniel Scally	params->data_size += sizeof(struct mali_c55_params_awb_gains);
66*87b214ddSDaniel Scally
67*87b214ddSDaniel Scally	struct mali_c55_params_sensor_off_preshading *blc =
68*87b214ddSDaniel Scally		(struct mali_c55_params_sensor_off_preshading *)data;
69*87b214ddSDaniel Scally
70*87b214ddSDaniel Scally	blc->header.type = MALI_C55_PARAM_BLOCK_SENSOR_OFFS;
71*87b214ddSDaniel Scally	blc->header.flags |= V4L2_ISP_PARAMS_FL_BLOCK_ENABLE;
72*87b214ddSDaniel Scally	blc->header.size = sizeof(struct mali_c55_params_sensor_off_preshading);
73*87b214ddSDaniel Scally
74*87b214ddSDaniel Scally	blc->chan00 = 51200;
75*87b214ddSDaniel Scally	blc->chan01 = 51200;
76*87b214ddSDaniel Scally	blc->chan10 = 51200;
77*87b214ddSDaniel Scally	blc->chan11 = 51200;
78*87b214ddSDaniel Scally
79*87b214ddSDaniel Scally	params->data_size += sizeof(struct mali_c55_params_sensor_off_preshading);
80*87b214ddSDaniel Scally
81b35d9f3eSDaniel ScallyArm Mali-C55 uAPI data types
82b35d9f3eSDaniel Scally============================
83b35d9f3eSDaniel Scally
84b35d9f3eSDaniel Scally.. kernel-doc:: include/uapi/linux/media/arm/mali-c55-config.h
85