From patchwork Tue Jul 21 14:59:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27429 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 70910C3264 for ; Tue, 21 Jul 2026 15:00:14 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D2EF567E85; Tue, 21 Jul 2026 17:00:13 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="Jp6pkKdh"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RahsNq+s"; dkim-atps=neutral Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3122467E65 for ; Tue, 21 Jul 2026 17:00:10 +0200 (CEST) Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66LDg6Kq1805622 for ; Tue, 21 Jul 2026 15:00:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= kwpxxBqYpHpqHAiEJI/Sbk6Cz2awXOwuK4gNWTj9AUw=; b=Jp6pkKdhEfcuk5dv 5vPzO8O1ryusJcc0rm5kzN8v3GMwrvEmx78YhYWCn0FQiNDHOOb7ThZAOzy9gsUr IwDLECrlPA3hmxS2jIR7jloziYZo3+fb1zwBs13L6wZHyWgUkX3YT9/H0ZbBBdM7 zNxm1tlWlgv2oOXxaEJ1LD/dx7thLJesrEdvilf+M6+ZhMh3fAzGD04Zgtcpb6D3 +Ey1fjQjub/Lo09YlceBOwCqb5vMgc5WQ/TE2YTVC3IS2jyvfbB4gUS8RP8O1FHA cOrn1XSlCA8dyP4im9u5zrmPsSvUqEtXjEHQ30Q88Dngh8tB0ILCS3wgbemR97Rz DKzW4w== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj6pa9bmy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 21 Jul 2026 15:00:08 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c075c1e25so163187221cf.3 for ; Tue, 21 Jul 2026 08:00:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784646008; x=1785250808; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=kwpxxBqYpHpqHAiEJI/Sbk6Cz2awXOwuK4gNWTj9AUw=; b=RahsNq+sYFK5gEmjRDF6H/L+7ttwU+hyfbett8YDlDJ4FuI9IhIw0md/Kvw/6pN4mo CBk5HEvsRVcDABBW0AhXCBeZryxfzdT18nnvaJx/Qk7xQfaMPAB2eZyXzRqSEI7XxfpX I3riBZZE/AzIkESDU43x/gwZWe3jKg4q8Zq4lm5Xf4wOfBgRs/XH1qA/wSwTECxZBF+3 3D53A/Mxfh7OyXp7Hcsqdn/NH47TcOgYF6VKiSRig+vvWAocWwWHI0zE+UWY3I89YiZy StPAocDm/4OxnR83TZnEHtEt+c9vQitXrFw6khf27xSkFATQgtpr5WXt1I4SgPwZL7Vw YBtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784646008; x=1785250808; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kwpxxBqYpHpqHAiEJI/Sbk6Cz2awXOwuK4gNWTj9AUw=; b=GJZYJLIYutKRGhBAcXF1oHE0CXuG1RqeJdTf8MfT+OOY7fyI3M2B7QaJP2W2IctvUS hLdyZlloL6UF8gRXBXruSYzFWiGovqw6Ur2MOOTb7mhda1eN2eWH/75LOTk3k6rxr5Xw uWJbxATFchq3fmWleQ+5pMoPGTPW00bWv+yS4yTYm74OUqegPfOfmO0UxA6rZdvX+lB0 JSk33HIcWdS8jzWEHpspIhC/9vEmKGKQQyaQn0wcCyo6h2x59q2un8EQ+U9aDjoXwzGC RatgJMOE5NbxPFzxvHCbuig8kG+w9aKQ6hOuuKyB+FxtdcV6zv3ZtuYMGo3geyPeRas5 H20w== X-Gm-Message-State: AOJu0YxKtKMH8ihYW+oFQ5p6AZ4ncJyLp1HWdzFEZPqYxt4/xcABx3MV TG2uVcidQwPmxbemd8pLCA3TB3TGW2GE5HHOob30VkbU/muDuKInvyDFb+0pzX4/fLpYUtkeGPy 7JQ7VGflw9boBFeEuDkd+D/mO1wDxbf2+dCcKGp5ObhDGQGwUZMZMt3XBGqqHNsRuqBL8wUUBV8 dnkrOA3bAM X-Gm-Gg: AfdE7clXMxqEtc6NOMtJ+8zyC6ywDmEZcnR0D9vKbTMLBsiEXhddniDrBCmjkzA0lAF GsE5HFyW1c3c2oT0kDwSECFsG0z8ForbJyNKv2vatzkbPIuuxujoic9EX+SDzNz2hFunetFhWXp j+C2MSaVglo/ZDlwKpkDHTfAjsoCMn0yK2ackc5c7DCASBJisq4Q5QmGnjEjs012ydCv3bpVCdk 2GsVfrUglK7xina+wWQ7zjtIL0jZ0a+RfurBb4orbdE9mEjATAkoHByJgmhjQ7mppNMGGA1DSLF z7Kw+6tM0u10jqRGmBQTdCTb+TjblGioYfj84srA1N/FYNCimNVqn+hCfuj3NizTiE8RxcO9hrl 2oIRZns9vs+cn1ThnjrSpJ9VN/rM8jl8sxN/R+Dp0Bjd0v4dGehjoCd5ANPj4sr9UcjXsvbxDUx 4ZeOLEkt6HIxbAQas= X-Received: by 2002:a05:622a:11cf:b0:517:61d5:2f7b with SMTP id d75a77b69052e-5213e28e1c4mr176705991cf.56.1784646007946; Tue, 21 Jul 2026 08:00:07 -0700 (PDT) X-Received: by 2002:a05:622a:11cf:b0:517:61d5:2f7b with SMTP id d75a77b69052e-5213e28e1c4mr176704921cf.56.1784646007224; Tue, 21 Jul 2026 08:00:07 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c1712a5f837sm615968066b.32.2026.07.21.08.00.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 08:00:06 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Loic Poulain , Hans de Goede Subject: [PATCH v2 5/7] camss: Add include/linux/camss-config.h Date: Tue, 21 Jul 2026 16:59:55 +0200 Message-ID: <20260721145958.68489-6-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260721145958.68489-1-johannes.goede@oss.qualcomm.com> References: <20260721145958.68489-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-GUID: orhapHO2dJdF-t4mtJ3Vsk3fTFVbtJdV X-Proofpoint-ORIG-GUID: orhapHO2dJdF-t4mtJ3Vsk3fTFVbtJdV X-Authority-Analysis: v=2.4 cv=eYYNubEH c=1 sm=1 tr=0 ts=6a5f8978 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=kFo2aqxNIXtk6PDOeyQA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIxMDE1OCBTYWx0ZWRfX4lT9PHHfJAXf Nd0txgLwWYlA5kYi5UUK0gBL42LQM485MY6HWh6PI4E26nOb5CE7FCv9EB+byCBXN2W1HF99Vbw WfvKRWk1fZETDBa7yB5u1s+fFFkuczifDc16GrxhEcVTIgOHhnkLOAclTutBCrmsNEBmqON0s6w /rx+7NZBcQWh0sSJhOF+AKunerzzstTx9S+GuU3XyRFuVept2WkH2LeqAQzaaoOLEmXgrniZBDG BYYjumKzngJRVqkGF5EPnun5tjwhYTdZOcWGvzPMehnFc3E4HCnUzUO503KEDHhc2j9DMSSKd5b zNgRPmnHpAKJxY219RlCvrcH5GyTWlKKyENdS35EN6UkuT7ZBixSsUSU5tSaM38tvttxQWmJcyY 68Tu7LPtLoIUINlkL96Ix9d3ho6S58365dbKesCI8xIc9+OHD72hZ8qTPjUOrD2U+p7OBk0UbVE OHUc1cH3XwWOWZpaI4A== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIxMDE1OCBTYWx0ZWRfX3etln9sm1b5B uJvY9vjTGxjMFSR3MlcUmBeg7Ai7teTmn4f9/6DC9NlrMJmKePvuiM2EQIBUEcIZB/kiVfgodbb SbabFlzVlbtj1pFBcfXjgo5gRcmbVQk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-07-21_03,2026-07-20_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 spamscore=0 bulkscore=0 impostorscore=0 phishscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607210158 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add include/linux/camss-config.h for OPE ISP parameter definitions. Signed-off-by: Hans de Goede --- include/linux/camss-config.h | 161 +++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 include/linux/camss-config.h diff --git a/include/linux/camss-config.h b/include/linux/camss-config.h new file mode 100644 index 000000000..d0d087eea --- /dev/null +++ b/include/linux/camss-config.h @@ -0,0 +1,161 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/* + * Qualcomm CAMSS ISP parameters UAPI + * + * Uses the generic V4L2 extensible ISP parameters buffer format defined in + * . + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef _UAPI_LINUX_CAMSS_CONFIG_H +#define _UAPI_LINUX_CAMSS_CONFIG_H + +#include +#include + +/** + * enum camss_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_params_block_type { + CAMSS_PARAMS_WB_GAIN = 1, + CAMSS_PARAMS_CHROMA_ENHAN = 2, + CAMSS_PARAMS_COLOR_CORRECT = 3, + CAMSS_PARAMS_MAX, +}; + +/** + * struct camss_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 substraction) + * 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_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_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_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) ceofficients + * 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_PARAMS_CHROMA_ENHAN + */ +struct camss_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_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_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 ~-256.0 .. +255.992) + * 1 = 12sQ8 (range ~-128.0 .. +127.996) + * 2 = 12sQ9 (range ~-64.0 .. +63.998) + * 3 = 12sQ10 (range ~-32.0 .. +31.999) + */ +struct camss_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_PARAMS_MAX_PAYLOAD \ + (sizeof(struct camss_params_wb_gain) +\ + sizeof(struct camss_params_chroma_enhan) +\ + sizeof(struct camss_params_color_correct)) + +#endif /* _UAPI_LINUX_CAMSS_CONFIG_H */