{"id":26383,"url":"https://patchwork.libcamera.org/api/patches/26383/?format=json","web_url":"https://patchwork.libcamera.org/patch/26383/","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":"<20260327153739.2862134-1-sjm@opendigital.cc>","date":"2026-03-27T15:37:39","name":"ipa: libipa: camera_sensor_helper: Add OV01A10","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"30f0ab3e422ba130f6f90ef43f0cdbf6a05d322a","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/?format=json","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/26383/mbox/","series":[{"id":5855,"url":"https://patchwork.libcamera.org/api/series/5855/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5855","date":"2026-03-27T15:37:39","name":"ipa: libipa: camera_sensor_helper: Add OV01A10","version":1,"mbox":"https://patchwork.libcamera.org/series/5855/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/26383/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/26383/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 205F5BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 15:37:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 65D0962CE3;\n\tFri, 27 Mar 2026 16:37:55 +0100 (CET)","from isp.services.fr2.cloudient.net (services.fr2.cloudient.net\n\t[2.59.188.206])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EB17662CCC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 16:37:53 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=sjm-xps.home.mackintosh.me)\n\tby isp.cloudient.net with esmtpsa (TLS1.3) tls\n\tTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96)\n\t(envelope-from <sjm@opendigital.cc>) id 1w69Fw-00GzJD-1e;\n\tFri, 27 Mar 2026 15:37:53 +0000"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=opendigital.cc header.i=@opendigital.cc\n\theader.b=\"MHKjMBdD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail;\n\th=Content-Transfer-Encoding:MIME-Version:Message-ID\n\t:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:\n\tContent-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc\n\t:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:\n\tList-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=kraQnirzf32yESIVuV46Nw3Np3Ltk0G+WW/dVVPUGlE=;\n\tb=MHKjMBdDxnzquxT0mUWIVE+SmA\n\tdq1ynyhwuRRuXBbS+Fzn83BPKk1/CBWgSbDeBezxT3KZYhDG/K1l1/E2sdqPVvHBjTWj1M7+1hXkw\n\t6B/zYMFf/zcd7uYAQkD3V06c61WV6F6Bu0W/mD09NDg7s0PEe9IF8Uw711VulLGp6wkwQqO4p+2yW\n\tLEDTBttfLQNNvGHIfYrpjFSoEhrmzTkRJ15MD27QjFYQaeJKnAymfK2LED7CAb3NSX6S9BFqAQft3\n\tmmedTTGq1n5eAmZjuRYhGtDFd82kDjDpLpqw5KDWoiXn6owJvUPX5tJEsXEdIReC+nUwvp/Tj19AD\n\t/Bm0URJA==;","From":"Stuart J Mackintosh <sjm@opendigital.cc>","To":"libcamera-devel@lists.libcamera.org","Cc":"Stuart J Mackintosh <sjm@opendigital.cc>","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","Content-Transfer-Encoding":"8bit","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":"Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\nused in Dell XPS 13 and other laptops with the Intel IPU6 camera\nsubsystem.\n\nThe analogue gain register (0x3508) uses a Q6.8 fixed-point format,\nwith the minimum value OV01A10_ANAL_GAIN_MIN = 0x100 representing\nunity gain. This gives the linear model:\n\n  gain = code / 256\n\nHans de Goede confirmed linear behaviour by monitoring the 18% grey\npatch of a Macbeth chart under controlled lighting while stepping the\ngain control.\n\nThe black level of 0x40 at 10 bits (4096 scaled to 16 bits) was\nconfirmed by dark frame measurement with the lens covered.\n\nWithout this helper, libcamera's AGC algorithm cannot convert between\ngain codes and real gain values, causing auto-exposure oscillation and\nthe following warning:\n\n  IPASoft: Failed to create camera sensor helper for ov01a10\n\nSigned-off-by: Stuart J Mackintosh <sjm@opendigital.cc>\n---\n src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n 1 file changed, 12 insertions(+)","diff":"diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp\nindex e3e3e535..72466867 100644\n--- a/src/ipa/libipa/camera_sensor_helper.cpp\n+++ b/src/ipa/libipa/camera_sensor_helper.cpp\n@@ -653,6 +653,18 @@ public:\n };\n REGISTER_CAMERA_SENSOR_HELPER(\"imx708\", CameraSensorHelperImx708)\n \n+class CameraSensorHelperOv01a10 : public CameraSensorHelper\n+{\n+public:\n+\tCameraSensorHelperOv01a10()\n+\t{\n+\t\t/* From dark frame measurement: 0x40 at 10bits. */\n+\t\tblackLevel_ = 4096;\n+\t\tgain_ = AnalogueGainLinear{ 1, 0, 0, 256 };\n+\t}\n+};\n+REGISTER_CAMERA_SENSOR_HELPER(\"ov01a10\", CameraSensorHelperOv01a10)\n+\n class CameraSensorHelperOv2685 : public CameraSensorHelper\n {\n public:\n","prefixes":[]}