{"id":27630,"url":"https://patchwork.libcamera.org/api/patches/27630/?format=json","web_url":"https://patchwork.libcamera.org/patch/27630/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260805-libipa-algorithms-v7-7-7425b5b795d4@ideasonboard.com>","date":"2026-08-05T16:12:49","name":"[v7,07/32] include: linux: mali-c55: Update to support CCM and Gamma","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"b6c3971f99d49d30d069efe33fc31b04f5530781","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/?format=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/27630/mbox/","series":[{"id":6110,"url":"https://patchwork.libcamera.org/api/series/6110/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=6110","date":"2026-08-05T16:12:42","name":"ipa: libipa: Introduce libipa algorithms","version":7,"mbox":"https://patchwork.libcamera.org/series/6110/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/27630/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/27630/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 57E4BC333A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  5 Aug 2026 16:13:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4FAD568136;\n\tWed,  5 Aug 2026 18:13:34 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4491868133\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  5 Aug 2026 18:13:29 +0200 (CEST)","from [192.168.125.177] (mob-109-113-25-35.net.vodafone.it\n\t[109.113.25.35])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 66AA6245A;\n\tWed,  5 Aug 2026 18:12:18 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"etD3w4Pu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1785946338;\n\tbh=4A9kajOFuKXSQXUsoFZ+WfGwjzpqM6yrrwEjlszpxEw=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=etD3w4PucSM19iQV/pYmRFyWIJIgui5rhzOrwOOH/sXE90um+JgnVc9Q/B5Wq60U4\n\t3DxqwzTO5ul7F1a5ViVs4NnmoakaDEuUfB3USUqXRvsFidz5TDzqH6bogSAsqT9WpH\n\tBSir5JEsICIsabAJnAvcHMFHEhKqbTOP1XzhmidA=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Date":"Wed, 05 Aug 2026 18:12:49 +0200","Subject":"[PATCH v7 07/32] include: linux: mali-c55: Update to support CCM\n\tand Gamma","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260805-libipa-algorithms-v7-7-7425b5b795d4@ideasonboard.com>","References":"<20260805-libipa-algorithms-v7-0-7425b5b795d4@ideasonboard.com>","In-Reply-To":"<20260805-libipa-algorithms-v7-0-7425b5b795d4@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org, \n\tStefan Klug <stefan.klug@ideasonboard.com>, \n\tMilan Zamazal <mzamazal@redhat.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tDaniel Scally <dan.scally@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>","X-Mailer":"b4 0.16-dev","X-Developer-Signature":"v=1; a=openpgp-sha256; l=5761;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=4A9kajOFuKXSQXUsoFZ+WfGwjzpqM6yrrwEjlszpxEw=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqc2EbV6nQUl365kjHzBGN2Dr+VezHCljWO49c2\n\tn892LI7NeeJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCanNhGwAKCRByNAaPFqFW\n\tPCT+EAC+kVPM3RNPDFYmPjRKL4Y7eZojpQdl4Pw8JVqzPdgI2UfITOBiAoRzvBXoEAKRlA7xC4m\n\tGXcsUjkz1O5+E2pf+4rspFt0mJjzs6nxwHHhsgVj3hJIddZDl4+k6tr33B6jzvZ36E5hmaGyZbd\n\tkxviuzwadTPfKqva/iFa3+NcZwYw1LBVBMjj2W6ltRMrbyxwNfsLzpikcpkgT+SfXuKGF2ZddnL\n\t52clUkSZdfgvBnxemIG2BpT1IjtsTZ6pFo55JDYmGgUEWMmNX+FCi3JAs1MufdmTUWpcfnJpuxI\n\tB8Yktz0uKK3A5/1Y2GW+Kz45Mhg1RTeAl2o1qdJA1Ykxeo3QpDip0pdSqTCqsKSnfXjntwCiH10\n\tyD25BWF89tvll1Rs0puIiYwzIEvwkcFvmLfqK9Wyq2TOXUUGNyiszi6g6YSI/plaHCioaqWUDKE\n\tupL4pG1AL4vzpJVau0l92v+QorBTWjS2Z6PpsWojADTiwQq+QDw1KzzW629tANezdpQ0hEieEzQ\n\tLdEi0CcquVEpG6n53NdDz8XFX0rKnQhdxyRwruH7cDD9kP1ebf3kVPGH4lpopZwxnKnMNYEoxyE\n\tu7b7CQ9W0yDzWIUgcXqwzRTsP7fp+pBvOjG8coCb8kxmljEvbQdT+XvYu4U7GXCJAb7Zou1wA3B\n\tX3VIRD8MbnDMe+A==","X-Developer-Key":"i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=72392EDC88144A65C701EA9BA5826A2587AD026B","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Update the Mali-C55 uAPI header to add support for CCM and the\nRGB Gamma.\n\nPatches have been posted upstream but not yet merged\nhttps://patchwork.linuxtv.org/project/linux-media/list/?series=26932\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\nAcked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/linux/media/arm/mali-c55-config.h | 86 ++++++++++++++++++++++++++++++-\n 1 file changed, 85 insertions(+), 1 deletion(-)","diff":"diff --git a/include/linux/media/arm/mali-c55-config.h b/include/linux/media/arm/mali-c55-config.h\nindex 3d335f950eeb..ef0fe17df96e 100644\n--- a/include/linux/media/arm/mali-c55-config.h\n+++ b/include/linux/media/arm/mali-c55-config.h\n@@ -36,6 +36,9 @@\n  */\n #define MALI_C55_MAX_ZONES\t(15 * 15)\n \n+/* Number of RGB gamma LUT entries. */\n+#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129\n+\n /**\n  * struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics\n  *\n@@ -219,6 +222,9 @@ struct mali_c55_stats_buffer {\n  * @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap\n  * @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration\n  * @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection\n+ * @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix\n+ * @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe\n+ * @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe\n  */\n enum mali_c55_param_block_type {\n \tMALI_C55_PARAM_BLOCK_SENSOR_OFFS,\n@@ -232,6 +238,9 @@ enum mali_c55_param_block_type {\n \tMALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP,\n \tMALI_C55_PARAM_MESH_SHADING_CONFIG,\n \tMALI_C55_PARAM_MESH_SHADING_SELECTION,\n+\tMALI_C55_PARAM_BLOCK_CCM,\n+\tMALI_C55_PARAM_BLOCK_GAMMA_FR,\n+\tMALI_C55_PARAM_BLOCK_GAMMA_DS,\n };\n \n /**\n@@ -757,6 +766,78 @@ struct mali_c55_params_mesh_shading_selection {\n \t__u16 mesh_strength;\n };\n \n+/**\n+ * struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour\n+ *\t\t\t\tcorrection matrix\n+ *\n+ * The colour correction module converts images data from a sensor-specific\n+ * colour space to known one.\n+ *\n+ * Colour correction is applied after demosaicing and each pixel is represented\n+ * as a column vector of the three RGB colour channels on which the following\n+ * operations take place:\n+ * 1) An offset is subtracted from each colour channel\n+ * 2) Each colour channel is multiplied by a gain\n+ * 3) The pixel column vector is multiplied by the colour correction matrix\n+ *\n+ * This struct allows users to configure the coefficients for CCM and the\n+ * per-channel offsets and gains. The nine matrix coefficients are expressed as\n+ * 13 bits signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain\n+ * multipliers are expressed as 12 bits unsigned Q4.8 fixed-point numbers and\n+ * the three offsets are expressed as a 12 bits unsigned integers.\n+ *\n+ * header.type should be set to MALI_C55_PARAM_BLOCK_CCM from\n+ * :c:type:`mali_c55_param_block_type`.\n+ *\n+ * @header:\tThe Mali-C55 parameters block header\n+ * @coeffs:\t3x3 color conversion matrix coefficients in sign/magnitude\n+ *\t\tQ4.8 format\n+ * @gains:\tGains for red, green and blue channels in unsigned Q4.8 format\n+ * @offs:\tOffsets for red, green and blue channels\n+ */\n+struct mali_c55_params_ccm {\n+\tstruct v4l2_isp_params_block_header header;\n+\t__u16 coeffs[3][3];\n+\t__u16 gains[3];\n+\t__u16 offs[3];\n+};\n+\n+/**\n+ * struct mali_c55_params_gamma - RGB Gamma correction\n+ *\n+ * Gamma correction is used to program a standard gamma curve such as the sRGB\n+ * one. It provides gains and offsets to implement contrast adjustments.\n+ *\n+ * Gamma correction is applied on both the FR and DS pipes separately in the RGB\n+ * colour domain where the following operations take place:\n+ * 1) An offset is subtracted from each colour channel\n+ * 2) Each colour channel is multiplied by a gain\n+ * 3) The Gamma LUT is applied to each colour channel\n+ *\n+ * The Gamma LUT has 129 entries where each node is an unsigned 12 bit number.\n+ * It is expected that LUT[0]=0 and LUT[128]=0xfff, with the other 127 values\n+ * defining the Gamma correction curve. The three gain multipliers are expressed\n+ * as 12-bits unsigned Q4.8 fixed-point numbers and the three offsets are\n+ * expressed as a 12-bits unsigned integers.\n+ *\n+ * As one Gamma correction block is available on both the FR and DS pipes, the\n+ * header.type field should be set to one of either\n+ * MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from\n+ * :c:type:`mali_c55_param_block_type`.\n+ *\n+ * @header:\tThe Mali-C55 parameters block header\n+ * @gains:\tGains for the red, green and blue channel in unsigned Q4.8 format\n+ * @offs:\tOffsets subtracted from the red, green and blue channels\n+ *\t\tin unsigned 12 bits format\n+ * @lut:\t129-node Gamma LUT in unsigned 12 bits format\n+ */\n+struct mali_c55_params_gamma {\n+\tstruct v4l2_isp_params_block_header header;\n+\t__u16 gains[3];\n+\t__u16 offs[3];\n+\t__u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS];\n+};\n+\n /**\n  * define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters\n  *\n@@ -780,6 +861,9 @@ struct mali_c55_params_mesh_shading_selection {\n \tsizeof(struct mali_c55_params_awb_config) +\t\t\\\n \tsizeof(struct mali_c55_params_awb_gains) +\t\t\\\n \tsizeof(struct mali_c55_params_mesh_shading_config) +\t\\\n-\tsizeof(struct mali_c55_params_mesh_shading_selection))\n+\tsizeof(struct mali_c55_params_mesh_shading_selection) +\t\\\n+\tsizeof(struct mali_c55_params_ccm) +\t\t\t\\\n+\tsizeof(struct mali_c55_params_gamma) +\t\t\t\\\n+\tsizeof(struct mali_c55_params_gamma))\n \n #endif /* __UAPI_MALI_C55_CONFIG_H */\n","prefixes":["v7","07/32"]}