From: Loic Poulain <loic.poulain@oss.qualcomm.com>
To: Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>,
Loic Poulain <loic.poulain@oss.qualcomm.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Kees Cook <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-hardening@vger.kernel.org,
devicetree@vger.kernel.org
Subject: [PATCH v5 3/5] media: uapi: Add CAMSS OPE ISP configuration definition
Date: Fri, 24 Jul 2026 14:42:11 +0200 [thread overview]
Message-ID: <20260724-camss-isp-ope-v5-3-e70ad4fa39ce@oss.qualcomm.com> (raw)
In-Reply-To: <20260724-camss-isp-ope-v5-0-e70ad4fa39ce@oss.qualcomm.com>
Add the uapi header camss-ope-config.h defining the ISP parameter
structures used by the CAMSS Offline Processing Engine (OPE) driver.
This includes structures for white balance, chroma enhancement and
color correction configuration.
Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
---
include/uapi/linux/camss-ope-config.h | 160 ++++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
diff --git a/include/uapi/linux/camss-ope-config.h b/include/uapi/linux/camss-ope-config.h
new file mode 100644
index 0000000000000000000000000000000000000000..800e6ef1dba218ca33b565e1e51d6647f02f8753
--- /dev/null
+++ b/include/uapi/linux/camss-ope-config.h
@@ -0,0 +1,160 @@
+/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
+/*
+ * Qualcomm CAMSS Offline Processing Engine (OPE) ISP parameters UAPI
+ *
+ * Uses the generic V4L2 extensible ISP parameters buffer format defined in
+ * <uapi/linux/media/v4l2-isp.h>.
+ *
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#ifndef _UAPI_LINUX_CAMSS_OPE_CONFIG_H
+#define _UAPI_LINUX_CAMSS_OPE_CONFIG_H
+
+#include <linux/types.h>
+#include <linux/media/v4l2-isp.h>
+
+/**
+ * enum camss_ope_params_block_type - CAMSS ISP parameter block identifiers
+ *
+ * Each value identifies one ISP processing block. The value is placed in
+ * the @type field of &struct v4l2_isp_params_block_header.
+ */
+enum camss_ope_params_block_type {
+ CAMSS_OPE_PARAMS_WB_GAIN = 1,
+ CAMSS_OPE_PARAMS_CHROMA_ENHAN = 2,
+ CAMSS_OPE_PARAMS_COLOR_CORRECT = 3,
+};
+
+/**
+ * struct camss_ope_params_wb_gain - White Balance gains
+ *
+ * Implements the CLC_WB pipeline module. The pipeline applies three
+ * sequential operations per channel:
+ * 1. Subtract sub-offset (black-level subtraction)
+ * 2. Multiply by gain (colour balance)
+ * 3. Add add-offset (output pedestal)
+ *
+ * Gains are 15uQ10 (15-bit unsigned, 10 fractional bits). Offsets
+ * are 16-bit unsigned, normalised to full input scale (65535 = 1.0)
+ *
+ * @header: block header; @header.type = CAMSS_OPE_PARAMS_WB_GAIN
+ * @g_gain: green channel gain (15uQ10, 1024 = 1.0)
+ * @b_gain: blue channel gain (15uQ10, 1024 = 1.0)
+ * @r_gain: red channel gain (15uQ10, 1024 = 1.0)
+ * @g_sub: green sub-offset, subtracted before gain (16u)
+ * @b_sub: blue sub-offset, subtracted before gain (16u)
+ * @r_sub: red sub-offset, subtracted before gain (16u)
+ * @g_add: green add-offset, added after gain (16u)
+ * @b_add: blue add-offset, added after gain (16u)
+ * @r_add: red add-offset, added after gain (16u)
+ */
+struct camss_ope_params_wb_gain {
+ struct v4l2_isp_params_block_header header;
+ __u16 g_gain;
+ __u16 b_gain;
+ __u16 r_gain;
+ __u16 g_sub;
+ __u16 b_sub;
+ __u16 r_sub;
+ __u16 g_add;
+ __u16 b_add;
+ __u16 r_add;
+ __u16 _pad[3];
+} __attribute__((aligned(8)));
+
+/**
+ * struct camss_ope_params_chroma_enhan - RGB to YUV colour transfer matrix
+ *
+ * Implements the CLC_CHROMA_ENHAN pipeline module. All coefficients are
+ * signed 12-bit fixed-point Q3.8 (range roughly -8.0 to +7.996).
+ *
+ * RGB2Y - Luma (Y) coefficients
+ * Y = v0 * R + v1 * G + v2 * B
+ *
+ * @luma_v0: R-to-Y coefficient (12sQ8)
+ * @luma_v1: G-to-Y coefficient (12sQ8)
+ * @luma_v2: B-to-Y coefficient (12sQ8)
+ * @luma_k: Y output offset (9s, 0 = no offset)
+ *
+ * RGB2Cb - Chroma (Cb) coefficients
+ * Cb = a x ((B - G) + b(R - G)) + KCb
+ * with:
+ * a = ap, when (B-G) + b(R-G) > 0; a = am, when (B-G) + b(R-G) ≤ 0;
+ * b = bp when (R-G) > 0; b = bm when (R-G) ≤ 0
+ *
+ * @coeff_ap: Cb positive coefficient (12sQ8)
+ * @coeff_am: Cb negative coefficient (12sQ8)
+ * @coeff_bp: Cb positive coefficient (12sQ8)
+ * @coeff_bm: Cb negative coefficient (12sQ8)
+ * @kcb: Cb output offset (11s)
+ *
+ * RGB2Cr - Chroma (Cr) coefficients:
+ * Cr = c x ((R - G) + d(B - G)) + KCr
+ * with:
+ * c = cp, when (R-G) + d(B-G) > 0; c = cm, when (R-G) + d(B-G) ≤ 0
+ * d = dp when (B-G) > 0; d = dm when (B-G) ≤ 0
+ *
+ * @coeff_cp: Cr positive coefficient (12sQ8)
+ * @coeff_cm: Cr negative coefficient (12sQ8)
+ * @coeff_dp: Cr positive coefficient (12sQ8)
+ * @coeff_dm: Cr negative coefficient (12sQ8)
+ * @kcr: Cr output offset (11s)
+ *
+ * @header: generic block header; @header.type = CAMSS_OPE_PARAMS_CHROMA_ENHAN
+ */
+struct camss_ope_params_chroma_enhan {
+ struct v4l2_isp_params_block_header header;
+ __u16 luma_v0;
+ __u16 luma_v1;
+ __u16 luma_v2;
+ __u16 luma_k;
+ __u16 coeff_ap;
+ __u16 coeff_am;
+ __u16 coeff_bp;
+ __u16 coeff_bm;
+ __u16 coeff_cp;
+ __u16 coeff_cm;
+ __u16 coeff_dp;
+ __u16 coeff_dm;
+ __u16 kcb;
+ __u16 kcr;
+ __u16 _pad[2];
+} __attribute__((aligned(8)));
+
+/**
+ * struct camss_ope_params_color_correct - colour correction matrix
+ *
+ * Implements the CLC_CC pipeline module. The matrix computes:
+ * Out_ch0 (G) = a0*G + b0*B + c0*R + k0
+ * Out_ch1 (B) = a1*G + b1*B + c1*R + k1
+ * Out_ch2 (R) = a2*G + b2*B + c2*R + k2
+ *
+ * @header: block header; @header.type = CAMSS_OPE_PARAMS_COLOR_CORRECT
+ * @a: G-input coefficients per output channel (12s;
+ * a[0]=Out_G, a[1]=Out_B, a[2]=Out_R)
+ * @b: B-input coefficients (12s)
+ * @c: R-input coefficients (12s)
+ * @k: per-output-channel offsets (typically 9s effective)
+ * @qfactor: Q-format selector (2u):
+ * 0 = 12sQ7 (range ~-16.0 .. +15.992)
+ * 1 = 12sQ8 (range ~-8.0 .. +7.996)
+ * 2 = 12sQ9 (range ~-4.0 .. +3.998)
+ * 3 = 12sQ10 (range ~-2.0 .. +1.999)
+ */
+struct camss_ope_params_color_correct {
+ struct v4l2_isp_params_block_header header;
+ __u16 a[3];
+ __u16 b[3];
+ __u16 c[3];
+ __u16 k[3];
+ __u16 qfactor;
+ __u16 _pad[3];
+} __attribute__((aligned(8)));
+
+#define CAMSS_OPE_PARAMS_MAX_PAYLOAD \
+ (sizeof(struct camss_ope_params_wb_gain) +\
+ sizeof(struct camss_ope_params_chroma_enhan) +\
+ sizeof(struct camss_ope_params_color_correct))
+
+#endif /* _UAPI_LINUX_CAMSS_OPE_CONFIG_H */
--
2.34.1
next prev parent reply other threads:[~2026-07-24 12:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 12:42 [PATCH v5 0/5] media: qcom: camss: CAMSS Offline Processing Engine support Loic Poulain
2026-07-24 12:42 ` [PATCH v5 1/5] media: qcom: camss: Add V4L2 meta format for CAMSS ISP parameters Loic Poulain
2026-07-24 12:42 ` [PATCH v5 2/5] dt-bindings: media: qcom: Add CAMSS Offline Processing Engine (OPE) Loic Poulain
2026-07-24 12:42 ` Loic Poulain [this message]
2026-07-29 13:27 ` [PATCH v5 3/5] media: uapi: Add CAMSS OPE ISP configuration definition johannes.goede
2026-07-24 12:42 ` [PATCH v5 4/5] media: qcom: camss: Add CAMSS Offline Processing Engine driver Loic Poulain
2026-07-24 12:42 ` [PATCH v5 5/5] arm64: dts: qcom: agatti: Add OPE node Loic Poulain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260724-camss-isp-ope-v5-3-e70ad4fa39ce@oss.qualcomm.com \
--to=loic.poulain@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gustavoars@kernel.org \
--cc=kees@kernel.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=vladimir.zapolskiy@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox