From patchwork Wed Jul 22 11:23:19 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 27438 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 E9C0ABDE17 for ; Wed, 22 Jul 2026 11:24:58 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9892D67E9B; Wed, 22 Jul 2026 13:24:58 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="AcLkkLUu"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4FDA367E8A for ; Wed, 22 Jul 2026 13:24:57 +0200 (CEST) Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:25d4:fa24:78d1:31:7a56]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EC9B2227; Wed, 22 Jul 2026 13:23:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1784719437; bh=cf6wpGKR2KCk5BiqjCHllai+xyMyN8efOP8EN/jcD8o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AcLkkLUuTmqEJ+AHBhLjhoqbyhmzScmXGxSs8+tvJnq9qfv54wxDj2PNEfdbibuUL 78lY+CqnUu7ITWi9fWb0BE2VBr/nOczlnAjbJPWC9zL6UER3EIPXpYwNGuPDl5zwqT +A67wxNssoHzOLWpGFDMTkzVnk4pC91civK0hKhw= From: Jai Luthra Date: Wed, 22 Jul 2026 16:53:19 +0530 Subject: [PATCH v2 3/8] ipa: rpi: vc4: Add Bcm2835Params helper MIME-Version: 1.0 Message-Id: <20260722-pi4-upstream-v2-3-eb44d3c6fd92@ideasonboard.com> References: <20260722-pi4-upstream-v2-0-eb44d3c6fd92@ideasonboard.com> In-Reply-To: <20260722-pi4-upstream-v2-0-eb44d3c6fd92@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Naushir Patuck , David Plowman , Laurent Pinchart , Kieran Bingham , Jacopo Mondi , Daniel Scally , Jai Luthra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2547; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=cf6wpGKR2KCk5BiqjCHllai+xyMyN8efOP8EN/jcD8o=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBqYKhpTo6Dh5fd3NGXI240oVCSmGg9KfB7V0MUP a78StGZr/SJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCamCoaQAKCRBD3pH5JJpx RRpVEACZHDKurSTE46kt1tGoiSwKyQ7A0ieM7sOvGNIigHh2bVrmckeLtQKtBk2d7EPBkOV+AAB iOynIAJNRoarNkVZcfp5Hmm/QpXRiuWgvEwNrIBu5S/t7CKoSg0Umq88t1BXUsp/pNvpV448Et0 Lrhf8cgzbRj5l7QJKc3uTxORQp7xd1fjSvJVmIAJDwlJJUs4qplYpY/A6VLWsxXv1J8+7yThcb9 //F8jxkVmexX2VSx9n55zg639f4UCB5xuVGdrKssnqCPWRrKb3KvRLxqDcZtfn2tFNSGkawWovW ILGzynDnfgZcplrzwan7ZVX+vxOk1BqbKFCLq8AF83L+40VuRbMDb/pI7piHoDVUvXLFGkjOM1l I7JvBoAaD6Eri4vMuGo202CpFqXfCd2h5QzD8qwxuFO3cubmo2fXJwW3oml5HlzbGCDFBGXOzPG y3lsP1TFDfaU5K+joVEO3qWG1Xf6hjANwsD+ZWScix9GvK261CHwRULuOLx/Pm2J/BhA8wF+Tu+ qUqGn/PA0YzZgcY1FFwi9KpPE1xYUPK1S5i/B6cTzJnH5orCM8buxY6P+fcmSVE1tpUE+gdtHwj ej/ya2D8KzNl+re9IkCDZGR/9xOqNScD/i08QJqtlv7IncP2cAjSs8+4eBZKlvY1HGL40sxautX Ta8vxPnS86hp20A== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 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" Implement Bcm2835Params to derive from V4L2Params. The mailine driver uses extensible V4L2 parameter for configuration instead of custom V4L2 controls. Signed-off-by: Jai Luthra --- src/ipa/rpi/vc4/params.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/src/ipa/rpi/vc4/params.h b/src/ipa/rpi/vc4/params.h new file mode 100644 index 000000000..c936f8812 --- /dev/null +++ b/src/ipa/rpi/vc4/params.h @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2026, Ideas On Board + * + * Raspberry Pi VC4/BCM2835 ISP Parameters + */ + +#pragma once + +#include + +#include + +#include + +namespace libcamera { + +namespace ipa::RPi { + +enum class BlockType : uint16_t { + BlackLevel, + Geq, + Gamma, + Denoise, + Sharpen, + Dpc, + Cdn, + CcMatrix, + LensShading, + AwbGains, + DGain, +}; + +namespace details { + +template +struct block_type { +}; + +#define BCM2835_DEFINE_BLOCK_TYPE(id, structName, blockId) \ + template<> \ + struct block_type { \ + using type = struct bcm2835_isp_params_##structName; \ + static constexpr bcm2835_isp_param_block_type blockType = \ + BCM2835_ISP_PARAM_BLOCK_##blockId; \ + }; + +BCM2835_DEFINE_BLOCK_TYPE(BlackLevel, black_level, BLACK_LEVEL) +BCM2835_DEFINE_BLOCK_TYPE(Geq, geq, GEQ) +BCM2835_DEFINE_BLOCK_TYPE(Gamma, gamma, GAMMA) +BCM2835_DEFINE_BLOCK_TYPE(Denoise, denoise, DENOISE) +BCM2835_DEFINE_BLOCK_TYPE(Sharpen, sharpen, SHARPEN) +BCM2835_DEFINE_BLOCK_TYPE(Dpc, dpc, DPC) +BCM2835_DEFINE_BLOCK_TYPE(Cdn, cdn, CDN) +BCM2835_DEFINE_BLOCK_TYPE(CcMatrix, cc_matrix, CC_MATRIX) +BCM2835_DEFINE_BLOCK_TYPE(LensShading, lens_shading, LENS_SHADING) +BCM2835_DEFINE_BLOCK_TYPE(AwbGains, awb_gains, AWB_GAINS) +BCM2835_DEFINE_BLOCK_TYPE(DGain, digital_gain, DIGITAL_GAIN) + +struct params_traits { + using id_type = BlockType; + template + using id_to_details = block_type; +}; + +} /* namespace details */ + +class Bcm2835Params : public V4L2Params +{ +public: + Bcm2835Params(Span data) : V4L2Params(data, + BCM2835_ISP_PARAM_BUFFER_V1) + { + } +}; + +} /* namespace ipa::RPi */ + +} /* namespace libcamera */