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