From patchwork Fri Mar 27 15:37:39 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stuart J Mackintosh X-Patchwork-Id: 26383 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 205F5BDCBD for ; Fri, 27 Mar 2026 15:37:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 65D0962CE3; Fri, 27 Mar 2026 16:37:55 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=opendigital.cc header.i=@opendigital.cc header.b="MHKjMBdD"; dkim-atps=neutral Received: from isp.services.fr2.cloudient.net (services.fr2.cloudient.net [2.59.188.206]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EB17662CCC for ; Fri, 27 Mar 2026 16:37:53 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=opendigital.cc; s=mail; h=Content-Transfer-Encoding:MIME-Version:Message-ID :Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=kraQnirzf32yESIVuV46Nw3Np3Ltk0G+WW/dVVPUGlE=; b=MHKjMBdDxnzquxT0mUWIVE+SmA dq1ynyhwuRRuXBbS+Fzn83BPKk1/CBWgSbDeBezxT3KZYhDG/K1l1/E2sdqPVvHBjTWj1M7+1hXkw 6B/zYMFf/zcd7uYAQkD3V06c61WV6F6Bu0W/mD09NDg7s0PEe9IF8Uw711VulLGp6wkwQqO4p+2yW LEDTBttfLQNNvGHIfYrpjFSoEhrmzTkRJ15MD27QjFYQaeJKnAymfK2LED7CAb3NSX6S9BFqAQft3 mmedTTGq1n5eAmZjuRYhGtDFd82kDjDpLpqw5KDWoiXn6owJvUPX5tJEsXEdIReC+nUwvp/Tj19AD /Bm0URJA==; Received: from 103.82.220.81.rev.sfr.net ([81.220.82.103] helo=sjm-xps.home.mackintosh.me) by isp.cloudient.net with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1w69Fw-00GzJD-1e; Fri, 27 Mar 2026 15:37:53 +0000 From: Stuart J Mackintosh To: libcamera-devel@lists.libcamera.org Cc: Stuart J Mackintosh Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10 Date: Fri, 27 Mar 2026 16:37:39 +0100 Message-ID: <20260327153739.2862134-1-sjm@opendigital.cc> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 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 a CameraSensorHelper for the OmniVision OV01A10 image sensor, used in Dell XPS 13 and other laptops with the Intel IPU6 camera subsystem. The analogue gain register (0x3508) uses a Q6.8 fixed-point format, with the minimum value OV01A10_ANAL_GAIN_MIN = 0x100 representing unity gain. This gives the linear model: gain = code / 256 Hans de Goede confirmed linear behaviour by monitoring the 18% grey patch of a Macbeth chart under controlled lighting while stepping the gain control. The black level of 0x40 at 10 bits (4096 scaled to 16 bits) was confirmed by dark frame measurement with the lens covered. Without this helper, libcamera's AGC algorithm cannot convert between gain codes and real gain values, causing auto-exposure oscillation and the following warning: IPASoft: Failed to create camera sensor helper for ov01a10 Signed-off-by: Stuart J Mackintosh --- src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index e3e3e535..72466867 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -653,6 +653,18 @@ public: }; REGISTER_CAMERA_SENSOR_HELPER("imx708", CameraSensorHelperImx708) +class CameraSensorHelperOv01a10 : public CameraSensorHelper +{ +public: + CameraSensorHelperOv01a10() + { + /* From dark frame measurement: 0x40 at 10bits. */ + blackLevel_ = 4096; + gain_ = AnalogueGainLinear{ 1, 0, 0, 256 }; + } +}; +REGISTER_CAMERA_SENSOR_HELPER("ov01a10", CameraSensorHelperOv01a10) + class CameraSensorHelperOv2685 : public CameraSensorHelper { public: