[{"id":38405,"web_url":"https://patchwork.libcamera.org/comment/38405/","msgid":"<acQCfraRIyr3iOuG@zed>","date":"2026-03-25T16:02:25","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Stuart\n\nOn Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n> From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n> From: Stuart J Mackintosh <sjm@opendigital.cc>\n> Date: Wed, 25 Mar 2026 10:19:05 +0100\n> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n\nThere is something going on with the way you submitted the patch\nas 'git am' is not able to apply it. it seem you copied the patch in\nan email message ?\n\nCould you check Documentation/contributing.rst and use git-send-email ?\n\n>\n> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n> subsystem.\n>\n> The analogue gain model is derived from the V4L2 control range\n> reported by the sensor driver. The minimum gain code is 256 with\n> a step of 1, giving the linear model:\n>\n>   gain = code / 256\n\nFollowing this line of reasoning, the max gain code in the driver is\nsaid to be 0x3fff which would give a max gain of x64 which seems quite\nhigh (however I surely can't rule out it is correct).\n\n>\n> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n> with the pattern used by other OmniVision sensors in this file.\n\nAre we going by reasoning just looking at the min/max ? Aren't\nthere other sources that migh confirm the analogue gain model is\nactually a linear one ?\n\nHave you tried manually increasing the analogue gain and validate you\nget a linear response ?\n\n>\n> The black level of 0x40 at 10 bits (4096 scaled to 16 bits) was\n> confirmed by dark frame measurement with the lens covered.\n\nGreat\n\n>\n> Without this helper, libcamera's AGC algorithm cannot convert between\n> gain codes and real gain values, causing auto-exposure oscillation and\n> the following warning:\n>\n>   IPASoft: Failed to create camera sensor helper for ov01a10\n>\n> Signed-off-by: Stuart J Mackintosh <sjm@opendigital.cc>\n> ---\n> Note: Colour calibration (CCM) for this sensor is not yet available.\n> A tuning file exists at /usr/share/libcamera/ipa/simple/ov01a10.yaml\n> but contains no calibrated parameters. This is deferred to a follow-up\n> contribution once calibration data is available.\n\nThat would be nice! Do you plan to generate the CCM values yourself ?\n\nThanks\n  j\n\n>\n>  src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n>  1 file changed, 12 insertions(+)\n>\n> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n> b/src/ipa/libipa/camera_sensor_helper.cpp\n> index 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>  +class CameraSensorHelperOv01a10 : public CameraSensorHelper\n\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> --\n> 2.47.3\n>\n>\n> --\n> Stuart J Mackintosh\n>\n> Business & digital technology consultant\n>\n> Open Digital Consulting Co\n>\n> Open Digital Consulting Co Logo\n>\n> UK: +44 20 36 27 90 40\n>\n> FR: +33 1 89 48 00 40\n>\n> Email: sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n>\n> Web: https://opendigital.cc <https://opendigital.cc>\n>\n> IM: xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n>","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 B9747BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 25 Mar 2026 16:02:31 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D9EA962837;\n\tWed, 25 Mar 2026 17:02:30 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C54256274D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 17:02:29 +0100 (CET)","from ideasonboard.com (net-93-65-100-155.cust.vodafonedsl.it\n\t[93.65.100.155])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 81BFA121A;\n\tWed, 25 Mar 2026 17:01:11 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"J6xDrNWM\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774454471;\n\tbh=VY7sAZIw9DsaYIoAigq+kW8HsMU9ruKkD5ckmpzag+M=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=J6xDrNWMbjPkAuuK23Ucgxm8JN+ezxjAeHMNA4BJp8cixk/jIIdWhOF0CmWZou7ke\n\tWr9os0NKJADHaYcvyjAnNbCII/BhO7BkeftyfnGN6K05yt2Jo5Rh2SRQENAc7oNfUM\n\tCwQ0KcRh/nv4kUw9m89JjS9Z1G0E7bQUVSwj0+l8=","Date":"Wed, 25 Mar 2026 17:02:25 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Stuart J Mackintosh <sjm@opendigital.cc>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","Message-ID":"<acQCfraRIyr3iOuG@zed>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>","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>"}},{"id":38406,"web_url":"https://patchwork.libcamera.org/comment/38406/","msgid":"<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>","date":"2026-03-25T16:28:14","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"Hi Jacopo,\n\nOn 25/03/2026 17:02, Jacopo Mondi wrote:\n> Hi Stuart\n>\n> On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n>>  From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n>> From: Stuart J Mackintosh<sjm@opendigital.cc>\n>> Date: Wed, 25 Mar 2026 10:19:05 +0100\n>> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n> There is something going on with the way you submitted the patch\n> as 'git am' is not able to apply it. it seem you copied the patch in\n> an email message ?\n>\n> Could you check Documentation/contributing.rst and use git-send-email ?\n\nYes - I haven't used this method before, I am used to making PR's, so \nlearning on this one. I will configure |git send-email| and resubmit.\n\n>> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n>> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n>> subsystem.\n>>\n>> The analogue gain model is derived from the V4L2 control range\n>> reported by the sensor driver. The minimum gain code is 256 with\n>> a step of 1, giving the linear model:\n>>\n>>    gain = code / 256\n> Following this line of reasoning, the max gain code in the driver is\n> said to be 0x3fff which would give a max gain of x64 which seems quite\n> high (however I surely can't rule out it is correct).\n\nThe upstream kernel driver defines |OV01A10_ANAL_GAIN_MAX = 0x3fff| = \n16383, giving a maximum of 63.99x. My running kernel (6.12.74+deb13) \nreports max=65535 via V4L2, which appears to be an older driver version \npredating a recent fix. The gain model is correct regardless - only the \nclamp value differs.(AI)\n\n>> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n>> with the pattern used by other OmniVision sensors in this file.\n> Are we going by reasoning just looking at the min/max ? Aren't\n> there other sources that migh confirm the analogue gain model is\n> actually a linear one ?\n>\n> Have you tried manually increasing the analogue gain and validate you\n> get a linear response ?\n\nThe kernel driver writes the analogue gain register directly without \nscaling: |cci_write(ov01a10->regmap, OV01A10_REG_ANALOG_GAIN, ctrl->val, \nNULL)|. The minimum |OV01A10_ANAL_GAIN_MIN = 0x100| = 256 represents \nunity gain, consistent with Q8 fixed-point where |gain = register_value \n/ 256|. This is the same fixed-point convention used for digital gain, \nwhere |OV01A10_DGTL_GAIN_DEFAULT = 1024| represents unity with a 6-bit \nfractional part. (AI)\n\n>> Without this helper, libcamera's AGC algorithm cannot convert between\n>> gain codes and real gain values, causing auto-exposure oscillation and\n>> the following warning:\n>>\n>>    IPASoft: Failed to create camera sensor helper for ov01a10\n>>\n>> Signed-off-by: Stuart J Mackintosh<sjm@opendigital.cc>\n>> ---\n>> Note: Colour calibration (CCM) for this sensor is not yet available.\n>> A tuning file exists at /usr/share/libcamera/ipa/simple/ov01a10.yaml\n>> but contains no calibrated parameters. This is deferred to a follow-up\n>> contribution once calibration data is available.\n> That would be nice! Do you plan to generate the CCM values yourself ?\n\nYes, that is my intention once I have worked out a reasonable \ncalibration approach.\n\nA little more background - I am using a Dell XPS and it generally works \nwith Debian, the biggest problem being this camera so I am committed to \nchipping away at it until it is usable. This patch already makes a big \ndifference and I am keen to get the fixes upstream. I am using AI to \nassist this work and marked the generated statements with (AI); I am not \nCPP experienced.\n\nWhat would help me is to know the recommended way to capture frames at a \nfixed analogue gain value on an IPU6 platform, bypassing the AGC, to \nhelp validate the gain parameters? Any guidance that you might have with \ndiagnostics is welcome.\n\nBest wishes,\n\nStuart.\n\n\n>\n> Thanks\n>    j\n>\n>>   src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n>>   1 file changed, 12 insertions(+)\n>>\n>> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n>> b/src/ipa/libipa/camera_sensor_helper.cpp\n>> index 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>>   +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>> --\n>> 2.47.3\n>>\n>>\n>> --\n>> Stuart J Mackintosh\n>>\n>> Business & digital technology consultant\n>>\n>> Open Digital Consulting Co\n>>\n>> Open Digital Consulting Co Logo\n>>\n>> UK: +44 20 36 27 90 40\n>>\n>> FR: +33 1 89 48 00 40\n>>\n>> Email:sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n>>\n>> Web:https://opendigital.cc <https://opendigital.cc>\n>>\n>> IM:xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n>>","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 1D152BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 25 Mar 2026 16:28:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B0C56274D;\n\tWed, 25 Mar 2026 17:28:19 +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 C5FAF6274D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 17:28:17 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w5R5b-00ETlg-1C;\n\tWed, 25 Mar 2026 16:28:17 +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=\"Hy73wVTi\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=qmifgyj2nDn6PvpCZ3ZSln78Cw055khEb4kvxpT17zY=;\n\tb=Hy73wVTi/SEVOpx/L8flEw+/Ko\n\t9PEs9tucQA3QIkZiRugpOjF/3LvjfOXlWz/uYuxQgJIt18FNnqi080P/5YMDhMayP0NBSKKRs26XZ\n\tBMzIo9RxGpg1iO+YffSD9cHYEGL6ABI2mZ8MDB/vns2IHqYZ4LsapKblr9RIo9TYdqpLxHMuA6DLo\n\txqOMaVAsac4tv4O+gBxCvDgNFVRF/f2eJ1JCD8d8OlqJSrmAFtfxO6vb0neIiaYVFiY0661qmd+14\n\tbsiLGdz9fivaFqQQbTZIQQ/PKBYRd6SNgZzEcpG64AddpUrlemTXp30ShiilCicWpUxEzOl2noiVC\n\t9LbHSWBw==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------p0D1x0JZcw4W0NzQm9jAW4hm\"","Message-ID":"<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>","Date":"Wed, 25 Mar 2026 17:28:14 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<acQCfraRIyr3iOuG@zed>","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>"}},{"id":38411,"web_url":"https://patchwork.libcamera.org/comment/38411/","msgid":"<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","date":"2026-03-25T17:44:53","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":242,"url":"https://patchwork.libcamera.org/api/people/242/","name":"Hans de Goede","email":"johannes.goede@oss.qualcomm.com"},"content":"Hi Stuart, Jacopo,\n\nStuart, thank you for your interest in this.\n\nWhen I had a XPS 13 on loan I've made a set of calibration images\nof its sensor:\n\nhttps://fedorapeople.org/~jwrdegoede/sensor-calibration/dell-xps13-9320-ov01a10/\n\nYou can use those with the rkisp1.py found under utils/tuning/rkisp1.py\nto try and generate a CCM for the camera-module.\n\nNote at the moment there are some know issues with the CCM handling\nin the software ISP which we are working on fixing.\n\nSo you could give this a try, but you will likely get neon-purple\ncolors in brightly lit areas. This is a known issue.\n\nOn 25-Mar-26 17:02, Jacopo Mondi wrote:\n> Hi Stuart\n> \n> On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n>> From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n>> From: Stuart J Mackintosh <sjm@opendigital.cc>\n>> Date: Wed, 25 Mar 2026 10:19:05 +0100\n>> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n> \n> There is something going on with the way you submitted the patch\n> as 'git am' is not able to apply it. it seem you copied the patch in\n> an email message ?\n> \n> Could you check Documentation/contributing.rst and use git-send-email ?\n> \n>>\n>> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n>> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n>> subsystem.\n>>\n>> The analogue gain model is derived from the V4L2 control range\n>> reported by the sensor driver. The minimum gain code is 256 with\n>> a step of 1, giving the linear model:\n>>\n>>   gain = code / 256\n> \n> Following this line of reasoning, the max gain code in the driver is\n> said to be 0x3fff which would give a max gain of x64 which seems quite\n> high (however I surely can't rule out it is correct).\n\nI think this is a driver bug, almost all ov-sensors seem to have\na fractional gain with 4 bits for the non fractional parts\nand either 7 or 8 bits for the fraction. With the non-fractional\npart starting at 1 for 1.0 .\n\nSo based on that and other ov sensor drivers I think the driver\nis buggy and the maximum should be 0xf80, 0xf80 rather then 0xfff\nbecause, well that is what other omnivision sensor drivers do,\nI guess something goes funky in the hw for gains > 15.5 ?\n\nA maximum gain of 15.5 sounds much more realistic IMHO.\n\nSo I think we need to fix the kernel driver to make the maximum\n0x780.\n\n>> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n>> with the pattern used by other OmniVision sensors in this file.\n> \n> Are we going by reasoning just looking at the min/max ? Aren't\n> there other sources that migh confirm the analogue gain model is\n> actually a linear one ?\n> > Have you tried manually increasing the analogue gain and validate you\n> get a linear response ?\n\nWhen I did the calibration images under controlled lighting conditions\nI checked the influence of the gain control on the 18% grey square\n(monitoring that square with camshark) of the macbeth chart and it\nseemed linear. This also matches other known ov sensors.\n\nRegards,\n\nHans\n\n\np.s.\n\nStuart many of us have a wariness about over-use of AI, often just\nthrowing a lot of things at the wall and seeing what looks like it\nmight work, without rhyme or reason. Or what people call AI slop. \n\nNote this first submission does not seem to be AI slop at all!\n\nAnd your disclosure of using of AI is appreciated but please be\ncareful with your use of AI.","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 60215BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 25 Mar 2026 17:45:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7C4C66284C;\n\tWed, 25 Mar 2026 18:45:00 +0100 (CET)","from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n\t[205.220.168.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C96086274D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 18:44:58 +0100 (CET)","from pps.filterd (m0279867.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t62PFHM5g433827 for <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 17:44:57 GMT","from mail-qt1-f197.google.com (mail-qt1-f197.google.com\n\t[209.85.160.197])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d41414ayh-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 17:44:56 +0000 (GMT)","by mail-qt1-f197.google.com with SMTP id\n\td75a77b69052e-50b4076dc16so2393441cf.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Mar 2026 10:44:56 -0700 (PDT)","from ?IPV6:2001:1c00:c32:7800:5bfa:a036:83f0:f9ec?\n\t(2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:5bfa:a036:83f0:f9ec])\n\tby smtp.gmail.com with ESMTPSA id\n\t4fb4d7f45d1cf-66ad6854979sm60893a12.21.2026.03.25.10.44.54\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tWed, 25 Mar 2026 10:44:54 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"exKHCRBm\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"Djw6YXzj\"; dkim-atps=neutral","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\tJXikArcgcVQgU9X40oYDQ7i6GG9zjV0C/RkWVTzwaAo=; b=exKHCRBm6+zhMqZy\n\t2WbAs9+mcpy7/5yMPQGaEWabSFNXCWxmKcdTAFXoybjEsA6gW07l6WfavGE+gZA/\n\trUG9mlHSy3graJ9YtqR/Ts7gIadxNQ8AfZt22GOiUjcu0Zb/ynIYVBIPrnqrnmwZ\n\t0dsHXPUe37IKXzUr7lIflADR1liezCCc6YOg+l0krOpdhfTscU4iWncMJGyjN15u\n\tQZ12fpqRKFAj0m1ez6oCfe9+M0rX9hK1hJ/Qgn5ej4H7XTtMBd8IcXTY6Y8m2lLO\n\teKEC+PqUPYg6/6fihB6MZxOXqoLd117+Ft3sdHrI0fo5bDLRkNHDc/hLKHzW1HwT\n\tXB68/A==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1774460696; x=1775065496;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:cc:to:subject:from:user-agent:mime-version:date:message-id:from:to\n\t:cc:subject:date:message-id:reply-to;\n\tbh=JXikArcgcVQgU9X40oYDQ7i6GG9zjV0C/RkWVTzwaAo=;\n\tb=Djw6YXzjB7Af8LtXYlO4QlJItdyPzYLhnmuUn+tkD3xsu09xh03xESb5787viWb51a\n\tHe0767z0q/2bzLrvrt9afl2i7bEuTbzH1axdKXSgEw/8Rz4chYBmhcYJJcngMynGZ5yi\n\tXpwcQ4FOMhC3ptXEIqsNllAg42jBeCptxIQ/8SOfNBm7dyUxG0ScQQavhKoaE3YMi4mB\n\tF1ngFpGL4zeQ3+9rUrj5ZoZUSrr7Ot71+7L+Soj5Bhpblnbc0Khyzfvmvc5B5pEDnV0x\n\tvOY8e4SJDRYzAmZCRqG3YO6G8RpzV7UdHbjaCTwTkA+KIOZh/b4EdOMvjQ8L8CdZj1Sa\n\t6pOA=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1774460696; x=1775065496;\n\th=content-transfer-encoding:in-reply-to:content-language:references\n\t:cc:to:subject:from:user-agent:mime-version:date:message-id:x-gm-gg\n\t:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n\tbh=JXikArcgcVQgU9X40oYDQ7i6GG9zjV0C/RkWVTzwaAo=;\n\tb=p1XMzBF9bkSlPIUnJHJfNsgQLXc4DT5E9UDW2YIhFwwY08uq5uUy7WWN8fuIEFlJEf\n\t4TQBjOz93GKM09CZMesdxQaGgdkOr1alo1tmzGKaS9OcFLoOChubZnCUTJcznnp++g9A\n\tTK4fOE+BX80zjugHXcopP+tqyoE0tIYuvm4HjnrTolWAf4mVqzH2EuoXkQB9w8DMInai\n\tNkNRr6mh/G7OC7yvzGmb7nObDALmv2Jn5OVPPy9Hcw4xEh5d7zp6lomlxfqmAq7TF7ZH\n\txMgOTXNWVal22KU9Xv4ye73O9+iEYaAqBYHhckGT0CB0Dqnoneq+dTTlHxi+z3XRl/tq\n\tKOXg==","X-Gm-Message-State":"AOJu0YzvcLEyj+VRQ1GXvb4uBqUAD3RUAisYKkXDwWZjog2UEdcFY8dO\n\tPUoJ2AxS/4VWvlX9c/4OxR7beb2ez0UtuULeS23k3TMk4NZAct7jTgE9PncU0FE2XoTA1Btgmlz\n\tL247J+qFN0Ha57kn/Q6Ea8Z6GyAjghGkBi9JG2E7eYTLbFA166VvXsZpKCciyXigvjaO5FnDnlB\n\tET","X-Gm-Gg":"ATEYQzzbAQ+NFrk+2hj9JAEPKf20leB/ZmwecZlDMewsyLhr8vHFj4FJ2eLJrQ1/nhu\n\tHmWUcXM91XhQvETvi8Frc7LzAv96+3rfd0nZVWpG5804rTfB/Pnk7PfBVv3f4om8p1pyBRbTc32\n\tzW8GhpueoUSrORvsNwheyQelNvpueyLodjDe+8cFeHOq18JtL08Ahq3b40bHlvXdBHFG1S53sNq\n\twm5RdmDENidQuHmdkH8KkioTlFJNiDlFb5XHf4XcMlmG9Njmj/cIhGO/DYHjXEv+Mruv9ge9ZRD\n\tG0p5uuYyOhoM9YiEaisY9zk5SqxXHsIIGzUblpnBHqBY2gcQrImvpjDeUV9W173rcO4n+ur0KkR\n\tVjA4RgBw9jqyCWFFzPOstZm5guO7Os+TEeuHDx+r8P/zbtwLVmFde3F6YuPuiOPOKn3rpvfiDZd\n\tzpwl/MTNU9EhASjXpnnZlRRewFeMZvaMw3rUq7m/jJBA3Ps8Sffm0so8feO+M1CJqKtfdmbQBb0\n\tBu0/5qqO2aw4W45","X-Received":["by 2002:a05:622a:418c:b0:50b:4167:7889 with SMTP id\n\td75a77b69052e-50b80d2c0d3mr60938071cf.30.1774460695809; \n\tWed, 25 Mar 2026 10:44:55 -0700 (PDT)","by 2002:a05:622a:418c:b0:50b:4167:7889 with SMTP id\n\td75a77b69052e-50b80d2c0d3mr60937651cf.30.1774460695314; \n\tWed, 25 Mar 2026 10:44:55 -0700 (PDT)"],"Message-ID":"<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","Date":"Wed, 25 Mar 2026 18:44:53 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","From":"johannes.goede@oss.qualcomm.com","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tStuart J Mackintosh <sjm@opendigital.cc>","Cc":"libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>","Content-Language":"en-US, nl","In-Reply-To":"<acQCfraRIyr3iOuG@zed>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-Authority-Analysis":"v=2.4 cv=fOk0HJae c=1 sm=1 tr=0 ts=69c41f18 cx=c_pps\n\ta=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n\ta=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n\ta=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=6ABPrATuAAAA:8\n\ta=JVlSH06LDNDJLb4Ss5gA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22\n\ta=FCRCnXBEA80fiJtl_cq2:22","X-Proofpoint-GUID":"hksKklOfi4bRVXslPuL3qF0rfFmXTRtc","X-Proofpoint-ORIG-GUID":"hksKklOfi4bRVXslPuL3qF0rfFmXTRtc","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwMzI1MDEyOCBTYWx0ZWRfXyhS36YEJ8dwx\n\t30Q0CBb/BXzJLnBCZ5JCe75niAwpx2zxWN2Z6tfKil7bhSDaycP053A78ntw8kJxY/N4RZTEMru\n\teKT8FKgWSvR0QvQssJAbq41w4H5DDArwO0m7EkAR0UNK4PA9RDFtYby9vh3r4VMbx0HjQUUU3lC\n\tK6a5SLXpTkr3WMNe9CAbYtBkdn86CZzbqdlSxQZwp7z+fBaIwEKWt/s5zlbuGRaLkwBNQArUJdL\n\tKk2Y1yiGMDjtG1sFJeR9pNK1jbGMRLNS8cZEeyby6IuS/9OICuplnZafT42EPDdsmBcn1ZBUXz1\n\t7ElxJ0ZJfPxpORgySG3TAjCX81ID8xRZel4+Aw/yWU46JgUyK+BE7gBvClCg5sW1lb+KC8WQyED\n\tBHX5CFQWaIA8GrLiSSyGHr/IdbK1KtJYNA3S/orqILhyQq7pijBstG0co1OquM2QK3XLOw6uA5m\n\te/kHIdvc3sgHwSFs92w==","X-Proofpoint-Virus-Version":"vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.51,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-03-25_05,2026-03-24_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tmalwarescore=0 bulkscore=0 priorityscore=1501 clxscore=1015\n\tadultscore=0\n\tlowpriorityscore=0 phishscore=0 spamscore=0 suspectscore=0\n\timpostorscore=0\n\tclassifier=typeunknown authscore=0 authtc= authcc= route=outbound\n\tadjust=0\n\treason=mlx scancount=1 engine=8.22.0-2603050001\n\tdefinitions=main-2603250128","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>"}},{"id":38412,"web_url":"https://patchwork.libcamera.org/comment/38412/","msgid":"<6a63fa12-004d-4ed6-941e-5dedfa8a7847@opendigital.cc>","date":"2026-03-26T06:37:16","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"On 25/03/2026 18:44, johannes.goede@oss.qualcomm.com wrote:\n> Hi Stuart, Jacopo,\n>\n> Stuart, thank you for your interest in this.\n>\n> When I had a XPS 13 on loan I've made a set of calibration images\n> of its sensor:\n>\n> https://fedorapeople.org/~jwrdegoede/sensor-calibration/dell-xps13-9320-ov01a10/\n>\n> You can use those with the rkisp1.py found under utils/tuning/rkisp1.py\n> to try and generate a CCM for the camera-module.\n\nThanks Hans - yes, this is really useful, I will see if I can generate CCM.\n\n> Note at the moment there are some know issues with the CCM handling\n> in the software ISP which we are working on fixing.\n>\n> So you could give this a try, but you will likely get neon-purple\n> colors in brightly lit areas. This is a known issue.\nNoted - that still is likely better than what I have now.\n> On 25-Mar-26 17:02, Jacopo Mondi wrote:\n>> Hi Stuart\n>>\n>> On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n>>>  From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n>>> From: Stuart J Mackintosh<sjm@opendigital.cc>\n>>> Date: Wed, 25 Mar 2026 10:19:05 +0100\n>>> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n>> There is something going on with the way you submitted the patch\n>> as 'git am' is not able to apply it. it seem you copied the patch in\n>> an email message ?\n>>\n>> Could you check Documentation/contributing.rst and use git-send-email ?\n>>\n>>> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n>>> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n>>> subsystem.\n>>>\n>>> The analogue gain model is derived from the V4L2 control range\n>>> reported by the sensor driver. The minimum gain code is 256 with\n>>> a step of 1, giving the linear model:\n>>>\n>>>    gain = code / 256\n>> Following this line of reasoning, the max gain code in the driver is\n>> said to be 0x3fff which would give a max gain of x64 which seems quite\n>> high (however I surely can't rule out it is correct).\n> I think this is a driver bug, almost all ov-sensors seem to have\n> a fractional gain with 4 bits for the non fractional parts\n> and either 7 or 8 bits for the fraction. With the non-fractional\n> part starting at 1 for 1.0 .\n>\n> So based on that and other ov sensor drivers I think the driver\n> is buggy and the maximum should be 0xf80, 0xf80 rather then 0xfff\n> because, well that is what other omnivision sensor drivers do,\n> I guess something goes funky in the hw for gains > 15.5 ?\n>\n> A maximum gain of 15.5 sounds much more realistic IMHO.\n>\n> So I think we need to fix the kernel driver to make the maximum\n> 0x780.\n\nThat correlates with my observations and will see if I can get a kernel \ndriver fix submitted to fix to cap the maximum at 0x780.\n\nThe sensor helper patch itself is unaffected as it only defines the gain \nformula, not the clamp value (AI).\n\n>>> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n>>> with the pattern used by other OmniVision sensors in this file.\n>> Are we going by reasoning just looking at the min/max ? Aren't\n>> there other sources that migh confirm the analogue gain model is\n>> actually a linear one ?\n>>> Have you tried manually increasing the analogue gain and validate you\n>> get a linear response ?\n> When I did the calibration images under controlled lighting conditions\n> I checked the influence of the gain control on the 18% grey square\n> (monitoring that square with camshark) of the macbeth chart and it\n> seemed linear. This also matches other known ov sensors.\n\nThank you for confirming the linearity. This answers the question raised \nby Jacopo and supports the gain model in the patch (AI).\n\n> p.s.\n>\n> Stuart many of us have a wariness about over-use of AI, often just\n> throwing a lot of things at the wall and seeing what looks like it\n> might work, without rhyme or reason. Or what people call AI slop.\n>\n> Note this first submission does not seem to be AI slop at all!\n\nAI is neither artificial or intelligent, so it isn't AI slop but human \nslop. Like plastic, it is invaluable in many places but unhealthy if it \nis used for everything.\n\n> And your disclosure of using of AI is appreciated but please be\n> careful with your use of AI.\n\nI work with various Open Source foundations and working on the \ndevelopment of AI policies. Apart from etiquette / contributor problems \n(quality,quantity,volume) and security, the main issue is licences and \nthe ambiguity of provenance. It is a valuable tool that requires careful \nhandling.\n\nBest wishes,\n\nStuart.\n\n\n\n\n>\n>\n>\n>","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 EE50CBD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Mar 2026 06:37:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E1E126284A;\n\tThu, 26 Mar 2026 07:37:21 +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 3599762844\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Mar 2026 07:37:20 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w5eLE-00FFNL-25;\n\tThu, 26 Mar 2026 06:37:18 +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=\"aHvmRM47\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=wv6iMOzK/u2cbRF/uApKw9qM82ffzYQ6Iwi0KncKYgM=;\n\tb=aHvmRM47f3FGhSMcGukzbEYyeQ\n\t7h1iRpublku6R6b5736ia5ZbrTY1AQueEenrcRrOUM1iZmNpayHcIR0wdteGf177y/+IPR4ZsHAEu\n\t5HBGjsOZ6Y+N/w4IbV/2N5oa2LkDDp1+hl+0VrnuJuQ6Vav7ZBqlLtAOiwVR4NCp/XVdycZ09e8Gw\n\tNdy4DhCqeXImmm8BGAUAUgzRu3r4f+aiETGJbl9RhzTCGzQz5tUtvIyEEOhr/iqm2JY0Wd5typ8Dq\n\tH62maShSv6qhk30MfgSk/D+FIwpownqTIMMeH2HhHc96Znt/i8XGAs2JQKvOCQByDKwRdOyEW4IJg\n\tQBUanahg==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------AY0PasS0w1o4K1xilfSoyWya\"","Message-ID":"<6a63fa12-004d-4ed6-941e-5dedfa8a7847@opendigital.cc>","Date":"Thu, 26 Mar 2026 07:37:16 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","To":"johannes.goede@oss.qualcomm.com,\n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","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>"}},{"id":38413,"web_url":"https://patchwork.libcamera.org/comment/38413/","msgid":"<acTr2pP9t8tOvZko@zed>","date":"2026-03-26T08:40:50","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Stuart\n\nOn Wed, Mar 25, 2026 at 05:28:14PM +0100, Stuart J Mackintosh wrote:\n> Hi Jacopo,\n>\n> On 25/03/2026 17:02, Jacopo Mondi wrote:\n> > Hi Stuart\n> >\n> > On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n> > >  From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n> > > From: Stuart J Mackintosh<sjm@opendigital.cc>\n> > > Date: Wed, 25 Mar 2026 10:19:05 +0100\n> > > Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n> > There is something going on with the way you submitted the patch\n> > as 'git am' is not able to apply it. it seem you copied the patch in\n> > an email message ?\n> >\n> > Could you check Documentation/contributing.rst and use git-send-email ?\n>\n> Yes - I haven't used this method before, I am used to making PR's, so\n> learning on this one. I will configure |git send-email| and resubmit.\n>\n> > > Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n> > > used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n> > > subsystem.\n> > >\n> > > The analogue gain model is derived from the V4L2 control range\n> > > reported by the sensor driver. The minimum gain code is 256 with\n> > > a step of 1, giving the linear model:\n> > >\n> > >    gain = code / 256\n> > Following this line of reasoning, the max gain code in the driver is\n> > said to be 0x3fff which would give a max gain of x64 which seems quite\n> > high (however I surely can't rule out it is correct).\n>\n> The upstream kernel driver defines |OV01A10_ANAL_GAIN_MAX = 0x3fff| = 16383,\n> giving a maximum of 63.99x. My running kernel (6.12.74+deb13) reports\n> max=65535 via V4L2, which appears to be an older driver version predating a\n> recent fix. The gain model is correct regardless - only the clamp value\n> differs.(AI)\n>\n\nYes, the max gain has been changed by Hans in\n109e0feacaeca5ec2dd71d7d17c73232ce5cbddc \"media: i2c: ov01a10: Fix\nanalogue gain range\"\n\nHowever, this still is this part of the commit message which puzzels\nme\n\n    The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n    in the same gain values as setting these bits to 0x1, with bits 0-7\n    still increasing the gain when going from 0x000 - 0x0ff in the exact\n    same range as when going from 0x100 - 0x1ff.\n\nI don't get what \"Setting bits 8-11 to 0x0 results n the same gain\nvalues as setting these bits to 0x1\" part. I should ask Hans\n\n\n> > > This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n> > > with the pattern used by other OmniVision sensors in this file.\n> > Are we going by reasoning just looking at the min/max ? Aren't\n> > there other sources that migh confirm the analogue gain model is\n> > actually a linear one ?\n> >\n> > Have you tried manually increasing the analogue gain and validate you\n> > get a linear response ?\n>\n> The kernel driver writes the analogue gain register directly without\n> scaling: |cci_write(ov01a10->regmap, OV01A10_REG_ANALOG_GAIN, ctrl->val,\n> NULL)|. The minimum |OV01A10_ANAL_GAIN_MIN = 0x100| = 256 represents unity\n> gain, consistent with Q8 fixed-point where |gain = register_value / 256|.\n> This is the same fixed-point convention used for digital gain, where\n> |OV01A10_DGTL_GAIN_DEFAULT = 1024| represents unity with a 6-bit fractional\n> part. (AI)\n\nThis almost make sense, if max is 0x3fff and x1 = 0100 we're looking\nat a register in Q6.8 format.\n\nHowver the fact writes the value unscaled doesn't mean anything,\nuserspace is expected to do the coversion/scaling/whatever between the\ngain value and the gain code\n\n>\n> > > Without this helper, libcamera's AGC algorithm cannot convert between\n> > > gain codes and real gain values, causing auto-exposure oscillation and\n> > > the following warning:\n> > >\n> > >    IPASoft: Failed to create camera sensor helper for ov01a10\n> > >\n> > > Signed-off-by: Stuart J Mackintosh<sjm@opendigital.cc>\n> > > ---\n> > > Note: Colour calibration (CCM) for this sensor is not yet available.\n> > > A tuning file exists at /usr/share/libcamera/ipa/simple/ov01a10.yaml\n> > > but contains no calibrated parameters. This is deferred to a follow-up\n> > > contribution once calibration data is available.\n> > That would be nice! Do you plan to generate the CCM values yourself ?\n>\n> Yes, that is my intention once I have worked out a reasonable calibration\n> approach.\n>\n> A little more background - I am using a Dell XPS and it generally works with\n> Debian, the biggest problem being this camera so I am committed to chipping\n> away at it until it is usable. This patch already makes a big difference and\n> I am keen to get the fixes upstream. I am using AI to assist this work and\n> marked the generated statements with (AI); I am not CPP experienced.\n\nThanks for pointing it out\n\n>\n> What would help me is to know the recommended way to capture frames at a\n> fixed analogue gain value on an IPU6 platform, bypassing the AGC, to help\n> validate the gain parameters? Any guidance that you might have with\n> diagnostics is welcome.\n\nNot an expert of softIsp and I don't know what controls it offers you\nbut I think using camshark is the easiest way.\n\nPoint your camera to some grey background where the RGB components are\nalmost balanced.\n\nDisable AEGC and manually increase the analogue gain starting from 1x,\nthe response in brightness you get should be linear if your model is\ncorrect. Don't expect perfect results but you should be able to see if\nyou have big jumps in brightness that do not corresponds to a linear\nincrement of the gain value.\n\n>\n> Best wishes,\n>\n> Stuart.\n>\n>\n> >\n> > Thanks\n> >    j\n> >\n> > >   src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n> > >   1 file changed, 12 insertions(+)\n> > >\n> > > diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n> > > b/src/ipa/libipa/camera_sensor_helper.cpp\n> > > index 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> > >   +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> > > --\n> > > 2.47.3\n> > >\n> > >\n> > > --\n> > > Stuart J Mackintosh\n> > >\n> > > Business & digital technology consultant\n> > >\n> > > Open Digital Consulting Co\n> > >\n> > > Open Digital Consulting Co Logo\n> > >\n> > > UK: +44 20 36 27 90 40\n> > >\n> > > FR: +33 1 89 48 00 40\n> > >\n> > > Email:sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n> > >\n> > > Web:https://opendigital.cc <https://opendigital.cc>\n> > >\n> > > IM:xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n> > >\n> --\n>\n> Stuart J Mackintosh\n>\n> Business & digital technology consultant\n>\n> Open Digital Consulting Co\n>\n> Open Digital Consulting Co Logo\n>\n> UK: +44 20 36 27 90 40\n>\n> FR: +33 1 89 48 00 40\n>\n> Email: sjm@opendigital.cc\n>\n> Web: https://opendigital.cc\n>\n> IM: xmpp:sjm@opendigital.cc","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 A3848BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Mar 2026 08:40:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9805562655;\n\tThu, 26 Mar 2026 09:40:55 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C423A62655\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Mar 2026 09:40:53 +0100 (CET)","from ideasonboard.com (net-93-65-100-155.cust.vodafonedsl.it\n\t[93.65.100.155])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0C5B79A9;\n\tThu, 26 Mar 2026 09:39:35 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"UZ6+Mm6M\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774514375;\n\tbh=o+J6IlfCpGOmRtGy2s+VD05UOJb7FjPsQJ9fVB6lB+A=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=UZ6+Mm6MezirSLjA+hatStyU6pJ8EpweO2Z14F3lpXDABQ0hwSCCpcv8SQQn4/Qmt\n\tzI8Gx5EXwj4H8Gcj1RrrgXs1McCRGVfdNYN19vlPOO3eWiWsl7W8/+zXqZs8e96GQI\n\trvT1eiadr93JsLaSM3gCKhcd0Tys7d7qRrCkF4YY=","Date":"Thu, 26 Mar 2026 09:40:50 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Stuart J Mackintosh <sjm@opendigital.cc>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","Message-ID":"<acTr2pP9t8tOvZko@zed>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>","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>"}},{"id":38414,"web_url":"https://patchwork.libcamera.org/comment/38414/","msgid":"<acTxL9k_jwx8Sge1@zed>","date":"2026-03-26T08:53:21","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Hans\n\nOn Wed, Mar 25, 2026 at 06:44:53PM +0100, johannes.goede@oss.qualcomm.com wrote:\n> Hi Stuart, Jacopo,\n>\n> Stuart, thank you for your interest in this.\n>\n> When I had a XPS 13 on loan I've made a set of calibration images\n> of its sensor:\n>\n> https://fedorapeople.org/~jwrdegoede/sensor-calibration/dell-xps13-9320-ov01a10/\n>\n> You can use those with the rkisp1.py found under utils/tuning/rkisp1.py\n> to try and generate a CCM for the camera-module.\n>\n> Note at the moment there are some know issues with the CCM handling\n> in the software ISP which we are working on fixing.\n>\n> So you could give this a try, but you will likely get neon-purple\n> colors in brightly lit areas. This is a known issue.\n>\n> On 25-Mar-26 17:02, Jacopo Mondi wrote:\n> > Hi Stuart\n> >\n> > On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n> >> From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n> >> From: Stuart J Mackintosh <sjm@opendigital.cc>\n> >> Date: Wed, 25 Mar 2026 10:19:05 +0100\n> >> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n> >\n> > There is something going on with the way you submitted the patch\n> > as 'git am' is not able to apply it. it seem you copied the patch in\n> > an email message ?\n> >\n> > Could you check Documentation/contributing.rst and use git-send-email ?\n> >\n> >>\n> >> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n> >> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n> >> subsystem.\n> >>\n> >> The analogue gain model is derived from the V4L2 control range\n> >> reported by the sensor driver. The minimum gain code is 256 with\n> >> a step of 1, giving the linear model:\n> >>\n> >>   gain = code / 256\n> >\n> > Following this line of reasoning, the max gain code in the driver is\n> > said to be 0x3fff which would give a max gain of x64 which seems quite\n> > high (however I surely can't rule out it is correct).\n>\n> I think this is a driver bug, almost all ov-sensors seem to have\n> a fractional gain with 4 bits for the non fractional parts\n> and either 7 or 8 bits for the fraction. With the non-fractional\n> part starting at 1 for 1.0 .\n\nAs said in the previous reply, 0x3fff means a Q6.8 format which is\nunusual at best.\n\n>\n> So based on that and other ov sensor drivers I think the driver\n> is buggy and the maximum should be 0xf80, 0xf80 rather then 0xfff\n> because, well that is what other omnivision sensor drivers do,\n\nFeels like we're guessing a little too much here.\n\nCan't we ask the driver's author who presumably has a datasheet to\nclarify ?\n\n> I guess something goes funky in the hw for gains > 15.5 ?\n>\n> A maximum gain of 15.5 sounds much more realistic IMHO.\n>\n> So I think we need to fix the kernel driver to make the maximum\n> 0x780.\n\nf80 you mean ?\n\n>\n> >> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n> >> with the pattern used by other OmniVision sensors in this file.\n> >\n> > Are we going by reasoning just looking at the min/max ? Aren't\n> > there other sources that migh confirm the analogue gain model is\n> > actually a linear one ?\n> > > Have you tried manually increasing the analogue gain and validate you\n> > get a linear response ?\n>\n> When I did the calibration images under controlled lighting conditions\n> I checked the influence of the gain control on the 18% grey square\n> (monitoring that square with camshark) of the macbeth chart and it\n> seemed linear. This also matches other known ov sensors.\n\nAh see, that makes me more confident in accepting this patch!\n\n>\n> Regards,\n>\n> Hans\n>\n>\n> p.s.\n>\n> Stuart many of us have a wariness about over-use of AI, often just\n> throwing a lot of things at the wall and seeing what looks like it\n> might work, without rhyme or reason. Or what people call AI slop.\n>\n> Note this first submission does not seem to be AI slop at all!\n>\n> And your disclosure of using of AI is appreciated but please be\n> careful with your use of AI.\n\nIndeed, and I appreciate it was made clear.\n\nUnfortunately this still makes me wonder if the discussion I'm having\nis with someone which understand what he wrote or with someone simply\nproxying an LLM response to the list. Not saying that's the case, at\nall, but I feel like AI could help understanding some topics by giving\npointers and guidance, but once a person has absorbed that\nunderstanding it should be the one producing a useful reply out of\nit, otherwise the quality of the discussion quickly degrades.\n\nAgain, a general thought, not specifically on this discussion.\n\n>\n>\n>","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 18914BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 26 Mar 2026 08:53:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 337AB6284A;\n\tThu, 26 Mar 2026 09:53:26 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8E93F62655\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 26 Mar 2026 09:53:24 +0100 (CET)","from ideasonboard.com (net-93-65-100-155.cust.vodafonedsl.it\n\t[93.65.100.155])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D05859A9;\n\tThu, 26 Mar 2026 09:52:05 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"gnb6NlU4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774515125;\n\tbh=P7RLySYzJoWI93xQqf8KxsAWl5t5s6GKBG2LRkBTqbg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=gnb6NlU4nOvyhxpS6M8kJa7gjn1gWr3JHjsUXW/SQU0DpUvwTfnODSmHdRYGq6cbI\n\tP19noPJ2WUoYSQYBWcz2UElXmVcGx7MByyFNtI64dvtPm71jk3nbpZj8GxPE35McFG\n\twfEGowgUs9y4XuymRyZfXzr0+ZciMdq8sEK3qh9U=","Date":"Thu, 26 Mar 2026 09:53:21 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"johannes.goede@oss.qualcomm.com","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tStuart J Mackintosh <sjm@opendigital.cc>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","Message-ID":"<acTxL9k_jwx8Sge1@zed>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>","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>"}},{"id":38422,"web_url":"https://patchwork.libcamera.org/comment/38422/","msgid":"<0df07bee-9d71-49f1-847a-972c4c995c79@opendigital.cc>","date":"2026-03-27T06:04:42","subject":"Re: Use of AI in general","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"On 26/03/2026 09:53, Jacopo Mondi wrote:\n>> Stuart many of us have a wariness about over-use of AI, often just\n>> throwing a lot of things at the wall and seeing what looks like it\n>> might work, without rhyme or reason. Or what people call AI slop.\n>>\n>> Note this first submission does not seem to be AI slop at all!\n>>\n>> And your disclosure of using of AI is appreciated but please be\n>> careful with your use of AI.\n> Indeed, and I appreciate it was made clear.\n>\n> Unfortunately this still makes me wonder if the discussion I'm having\n> is with someone which understand what he wrote or with someone simply\n> proxying an LLM response to the list. Not saying that's the case, at\n> all, but I feel like AI could help understanding some topics by giving\n> pointers and guidance, but once a person has absorbed that\n> understanding it should be the one producing a useful reply out of\n> it, otherwise the quality of the discussion quickly degrades.\n\n\nThanks for bringing this up. It is a significant debate across most \ncommunities that I am part of right now and currently drafting AI policy \nfor one.\n\nI am human - you can phone me, or look at my linkedin page (which isn't \nquite up to date) - whatever this might prove. Also talk to anyone you \nknow from the Perl community.\n\nAI (I really don't like that term) is a powerful computing tool that \nhelps me accelerate my understand the details of this particular issue. \nHaving spent years working on hardware, and 30 years in Open Source \n(starting when changing an IRQ on an eth meant kernel recompile in the \n0.9x series) I am confident that I have capability to do this without \nAI, but don't have capacity.\n\nThis Dell laptop has been unusable for 2 years because of the camera \nissue, and AI can help get it resolved.\n\nThe real issue here is people and provenance;if I was a long-standing \nmember of this community and we had interactions over the years, it \nwould be less of a concern for you but as someone who dropped in a \ncouple of days ago, it is reasonable to be concerned (note xz case).\n\nAI slop is human slop, and any patch over 30 or so lines can easily fall \nin to that category, it is hard to review and puts pressure on the \nexisting community.\n\n\nI have tried hard to state where AI has helped with my diagnostic, and \nas you will see by my reply to the thread, this next one has more AI and \nless me in it - I am sensitive to how this may be received, but also \nfeel that, cautiously, it can help get this problem sorted out.\n\n\nBest wishes,\n\nStuart.","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 851F9BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 06:04:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B7DB06297D;\n\tFri, 27 Mar 2026 07:04:48 +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 E96376274D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 07:04:46 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w60JH-00GUvT-1X;\n\tFri, 27 Mar 2026 06:04:45 +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=\"q7zlcN+q\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=OowytDPNByGnVNpLwx5poe/otg3xbRhdT2q4EtfqqYY=;\n\tb=q7zlcN+qb+iuXJJVkpqCHOoFEc\n\tiQYaNSEkMTuMU1Gz7chNHMtmcO34P0q8v+6QH2iuM/siEae0jPuIgFhy+XT1uUKx/95lkpGnxHBfO\n\t7AA6LzZwEiIRefdSkUKrstYUtyk6b0A0d/GqQpEQ9cD8FEgo54mSoY8QvYqIgtwRydR0G/TU31B5O\n\tgKHgnj1U6EJy+kQskx/5JnHFtmvlIYcdCnrvKoIqyarpiP8HJe/72tlG4BQs/RzvzicL6qW9C+qAm\n\tKp85FO2gcermM26KF9q/7BH+efKFh2PcLqW/YhrWOsEB4CdTMa/RtXk/OMeB7Wkfw+jqMSoOwtQ5n\n\t36FowXrw==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------EwhbpW0wZ3zypUBapVeH7Ipm\"","Message-ID":"<0df07bee-9d71-49f1-847a-972c4c995c79@opendigital.cc>","Date":"Fri, 27 Mar 2026 07:04:42 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: Use of AI in general","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com","Cc":"libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>\n\t<acTxL9k_jwx8Sge1@zed>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<acTxL9k_jwx8Sge1@zed>","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>"}},{"id":38423,"web_url":"https://patchwork.libcamera.org/comment/38423/","msgid":"<1935d2da-9d1e-4903-8fdb-82d79988bfd2@opendigital.cc>","date":"2026-03-27T06:04:53","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"Hi Jacopo,\n\n\nOn 26/03/2026 09:40, Jacopo Mondi wrote:\n> Hi Stuart\n>\n> On Wed, Mar 25, 2026 at 05:28:14PM +0100, Stuart J Mackintosh wrote:\n>> Hi Jacopo,\n>>\n>> On 25/03/2026 17:02, Jacopo Mondi wrote:\n>>> Hi Stuart\n>>>\n>>> On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n>>>>   From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n>>>> From: Stuart J Mackintosh<sjm@opendigital.cc>\n>>>> Date: Wed, 25 Mar 2026 10:19:05 +0100\n>>>> Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n>>> There is something going on with the way you submitted the patch\n>>> as 'git am' is not able to apply it. it seem you copied the patch in\n>>> an email message ?\n>>>\n>>> Could you check Documentation/contributing.rst and use git-send-email ?\n>> Yes - I haven't used this method before, I am used to making PR's, so\n>> learning on this one. I will configure |git send-email| and resubmit.\n>>\n>>>> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n>>>> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n>>>> subsystem.\n>>>>\n>>>> The analogue gain model is derived from the V4L2 control range\n>>>> reported by the sensor driver. The minimum gain code is 256 with\n>>>> a step of 1, giving the linear model:\n>>>>\n>>>>     gain = code / 256\n>>> Following this line of reasoning, the max gain code in the driver is\n>>> said to be 0x3fff which would give a max gain of x64 which seems quite\n>>> high (however I surely can't rule out it is correct).\n>> The upstream kernel driver defines |OV01A10_ANAL_GAIN_MAX = 0x3fff| = 16383,\n>> giving a maximum of 63.99x. My running kernel (6.12.74+deb13) reports\n>> max=65535 via V4L2, which appears to be an older driver version predating a\n>> recent fix. The gain model is correct regardless - only the clamp value\n>> differs.(AI)\n>>\n> Yes, the max gain has been changed by Hans in\n> 109e0feacaeca5ec2dd71d7d17c73232ce5cbddc \"media: i2c: ov01a10: Fix\n> analogue gain range\"\n\nThank you - I can see that commit sets the max to 0x3fff. My running \nkernel predates it (AI).\n\n> However, this still is this part of the commit message which puzzels\n> me\n>\n>      The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n>      in the same gain values as setting these bits to 0x1, with bits 0-7\n>      still increasing the gain when going from 0x000 - 0x0ff in the exact\n>      same range as when going from 0x100 - 0x1ff.\n>\n> I don't get what \"Setting bits 8-11 to 0x0 results n the same gain\n> values as setting these bits to 0x1\" part. I should ask Hans\n\nThe kernel commit by Hans clarifies this: the hardware mirrors gain \ncodes 0x000-0x0ff onto the same range as 0x100-0x1ff, so the minimum is \ncorrectly set to 0x100 to avoid the mirrored region. The Q6.8 model \nholds from 0x100 upwards - gain = code / 256, with unity at 0x100 and \nmaximum of 63.99x at 0x3fff (AI).\n\n>>>> This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n>>>> with the pattern used by other OmniVision sensors in this file.\n>>> Are we going by reasoning just looking at the min/max ? Aren't\n>>> there other sources that migh confirm the analogue gain model is\n>>> actually a linear one ?\n>>>\n>>> Have you tried manually increasing the analogue gain and validate you\n>>> get a linear response ?\n>> The kernel driver writes the analogue gain register directly without\n>> scaling: |cci_write(ov01a10->regmap, OV01A10_REG_ANALOG_GAIN, ctrl->val,\n>> NULL)|. The minimum |OV01A10_ANAL_GAIN_MIN = 0x100| = 256 represents unity\n>> gain, consistent with Q8 fixed-point where |gain = register_value / 256|.\n>> This is the same fixed-point convention used for digital gain, where\n>> |OV01A10_DGTL_GAIN_DEFAULT = 1024| represents unity with a 6-bit fractional\n>> part. (AI)\n> This almost make sense, if max is 0x3fff and x1 = 0100 we're looking\n> at a register in Q6.8 format.\n>\n> Howver the fact writes the value unscaled doesn't mean anything,\n> userspace is expected to do the coversion/scaling/whatever between the\n> gain value and the gain code\n\nUnderstood - I should not have used the unscaled write as evidence. The \nQ6.8 interpretation is the correct reasoning, and Hans confirmed linear \nbehaviour from his Macbeth chart testing on the same sensor (AI).\n\n\n>> What would help me is to know the recommended way to capture frames at a\n>> fixed analogue gain value on an IPU6 platform, bypassing the AGC, to help\n>> validate the gain parameters? Any guidance that you might have with\n>> diagnostics is welcome.\n> Not an expert of softIsp and I don't know what controls it offers you\n> but I think using camshark is the easiest way.\n\nCamshark has overhead and beyond my capacity today. It would make sense \nfor me if this was something I was doing more often.\n\nFor the gain linearity question, Hans's Macbeth chart testing on the \nsame sensor combined with the Q6.8 register format documented in the \nkernel driver provides sufficient evidence for the model (AI).\n\n\nBest wishes,\n\nStuart.\n\n\n\n\n>\n>> Best wishes,\n>>\n>> Stuart.\n>>\n>>\n>>> Thanks\n>>>     j\n>>>\n>>>>    src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n>>>>    1 file changed, 12 insertions(+)\n>>>>\n>>>> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n>>>> b/src/ipa/libipa/camera_sensor_helper.cpp\n>>>> index 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>>>>    +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>>>> --\n>>>> 2.47.3\n>>>>\n>>>>\n>>>> --\n>>>> Stuart J Mackintosh\n>>>>\n>>>> Business & digital technology consultant\n>>>>\n>>>> Open Digital Consulting Co\n>>>>\n>>>> Open Digital Consulting Co Logo\n>>>>\n>>>> UK: +44 20 36 27 90 40\n>>>>\n>>>> FR: +33 1 89 48 00 40\n>>>>\n>>>> Email:sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n>>>>\n>>>> Web:https://opendigital.cc <https://opendigital.cc>\n>>>>\n>>>> IM:xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n>>>>\n>> --\n>>\n>> Stuart J Mackintosh\n>>\n>> Business & digital technology consultant\n>>\n>> Open Digital Consulting Co\n>>\n>> Open Digital Consulting Co Logo\n>>\n>> UK: +44 20 36 27 90 40\n>>\n>> FR: +33 1 89 48 00 40\n>>\n>> Email:sjm@opendigital.cc\n>>\n>> Web:https://opendigital.cc\n>>\n>> IM:xmpp:sjm@opendigital.cc","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 C744CBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 06:04:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 71C2262BD2;\n\tFri, 27 Mar 2026 07:04:57 +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 3307C62850\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 07:04:56 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w60JS-00GUvq-0Q;\n\tFri, 27 Mar 2026 06:04:55 +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=\"l98AmWMt\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=8wpPRpvF9QmyF88qtko++NaooyQm+Dy8pNm4G94l8ww=;\n\tb=l98AmWMtN/4FdglY+DRRIrIHTe\n\tgocQDOdYauM2fJuZEtyBC3DkfFIGJ8yC1n6hbEYdJuYj5D9DHpE5TOdnjHG/kL9qWakxtvwCcaduP\n\t4I/X4VbR+QewVTg34Uns7aTpL+QFmPtCoAsXJcRW2hXH+Wk5o4EZFOZDpmNYD0QtsSWnsanSWv1Eo\n\tGCbPjLKP2NEMGZc6gJcPkIAworAXfZoHcQyn39PZA+GBbf5OIApnImOqstXRyNop/hdnf4uAExkq/\n\tPGrRydbnbv81WWHiSG2HklswvZWdpdUx39BSng3/Hc9VDeCvqSoRKmdVBcNjAXxtMLRe9aY0npzrr\n\twhuiYKSA==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------GLuhrpQuODGsaVg4DBcjJSuS\"","Message-ID":"<1935d2da-9d1e-4903-8fdb-82d79988bfd2@opendigital.cc>","Date":"Fri, 27 Mar 2026 07:04:53 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>\n\t<acTr2pP9t8tOvZko@zed>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<acTr2pP9t8tOvZko@zed>","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>"}},{"id":38429,"web_url":"https://patchwork.libcamera.org/comment/38429/","msgid":"<acY-WnSYAa0r_oSd@zed>","date":"2026-03-27T08:27:41","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Stuart,\n\nOn Fri, Mar 27, 2026 at 07:04:53AM +0100, Stuart J Mackintosh wrote:\n> Hi Jacopo,\n>\n>\n> On 26/03/2026 09:40, Jacopo Mondi wrote:\n> > Hi Stuart\n> >\n> > On Wed, Mar 25, 2026 at 05:28:14PM +0100, Stuart J Mackintosh wrote:\n> > > Hi Jacopo,\n> > >\n> > > On 25/03/2026 17:02, Jacopo Mondi wrote:\n> > > > Hi Stuart\n> > > >\n> > > > On Wed, Mar 25, 2026 at 10:31:45AM +0100, Stuart J Mackintosh wrote:\n> > > > >   From ae84819121c206dd352c5e24942c1170ff7c6819 Mon Sep 17 00:00:00 2001\n> > > > > From: Stuart J Mackintosh<sjm@opendigital.cc>\n> > > > > Date: Wed, 25 Mar 2026 10:19:05 +0100\n> > > > > Subject: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10\n> > > > There is something going on with the way you submitted the patch\n> > > > as 'git am' is not able to apply it. it seem you copied the patch in\n> > > > an email message ?\n> > > >\n> > > > Could you check Documentation/contributing.rst and use git-send-email ?\n> > > Yes - I haven't used this method before, I am used to making PR's, so\n> > > learning on this one. I will configure |git send-email| and resubmit.\n> > >\n> > > > > Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n> > > > > used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n> > > > > subsystem.\n> > > > >\n> > > > > The analogue gain model is derived from the V4L2 control range\n> > > > > reported by the sensor driver. The minimum gain code is 256 with\n> > > > > a step of 1, giving the linear model:\n> > > > >\n> > > > >     gain = code / 256\n> > > > Following this line of reasoning, the max gain code in the driver is\n> > > > said to be 0x3fff which would give a max gain of x64 which seems quite\n> > > > high (however I surely can't rule out it is correct).\n> > > The upstream kernel driver defines |OV01A10_ANAL_GAIN_MAX = 0x3fff| = 16383,\n> > > giving a maximum of 63.99x. My running kernel (6.12.74+deb13) reports\n> > > max=65535 via V4L2, which appears to be an older driver version predating a\n> > > recent fix. The gain model is correct regardless - only the clamp value\n> > > differs.(AI)\n> > >\n> > Yes, the max gain has been changed by Hans in\n> > 109e0feacaeca5ec2dd71d7d17c73232ce5cbddc \"media: i2c: ov01a10: Fix\n> > analogue gain range\"\n>\n> Thank you - I can see that commit sets the max to 0x3fff. My running kernel\n> predates it (AI).\n>\n> > However, this still is this part of the commit message which puzzels\n> > me\n> >\n> >      The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n> >      in the same gain values as setting these bits to 0x1, with bits 0-7\n> >      still increasing the gain when going from 0x000 - 0x0ff in the exact\n> >      same range as when going from 0x100 - 0x1ff.\n> >\n> > I don't get what \"Setting bits 8-11 to 0x0 results n the same gain\n> > values as setting these bits to 0x1\" part. I should ask Hans\n>\n> The kernel commit by Hans clarifies this: the hardware mirrors gain codes\n> 0x000-0x0ff onto the same range as 0x100-0x1ff, so the minimum is correctly\n> set to 0x100 to avoid the mirrored region. The Q6.8 model holds from 0x100\n> upwards - gain = code / 256, with unity at 0x100 and maximum of 63.99x at\n> 0x3fff (AI).\n\nI really can't parse this, sorry. What does it mean \"mirrors gain\ncodes\" ??\n\nI've re-read the commit message a few times\n\n    The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n    in the same gain values as setting these bits to 0x1, with bits 0-7\n    still increasing the gain when going from 0x000 - 0x0ff in the exact\n    same range as when going from 0x100 - 0x1ff.\n\nand I interpret it as the relative gain increase is identical in the\n0x000-0x0ff and 0x100-0x1ff range. I'm not sure what the above\n\n\"Setting bits 8-11 to 0x0 results in the same gain values as setting\nthese bits to 0x1\"\n\npart means though.\n\nWe have Hans in the thread, he knows for sure :)\n\n>\n> > > > > This corresponds to AnalogueGainLinear{ 1, 0, 0, 256 }, consistent\n> > > > > with the pattern used by other OmniVision sensors in this file.\n> > > > Are we going by reasoning just looking at the min/max ? Aren't\n> > > > there other sources that migh confirm the analogue gain model is\n> > > > actually a linear one ?\n> > > >\n> > > > Have you tried manually increasing the analogue gain and validate you\n> > > > get a linear response ?\n> > > The kernel driver writes the analogue gain register directly without\n> > > scaling: |cci_write(ov01a10->regmap, OV01A10_REG_ANALOG_GAIN, ctrl->val,\n> > > NULL)|. The minimum |OV01A10_ANAL_GAIN_MIN = 0x100| = 256 represents unity\n> > > gain, consistent with Q8 fixed-point where |gain = register_value / 256|.\n> > > This is the same fixed-point convention used for digital gain, where\n> > > |OV01A10_DGTL_GAIN_DEFAULT = 1024| represents unity with a 6-bit fractional\n> > > part. (AI)\n> > This almost make sense, if max is 0x3fff and x1 = 0100 we're looking\n> > at a register in Q6.8 format.\n> >\n> > Howver the fact writes the value unscaled doesn't mean anything,\n> > userspace is expected to do the coversion/scaling/whatever between the\n> > gain value and the gain code\n>\n> Understood - I should not have used the unscaled write as evidence. The Q6.8\n> interpretation is the correct reasoning, and Hans confirmed linear behaviour\n> from his Macbeth chart testing on the same sensor (AI).\n>\n>\n> > > What would help me is to know the recommended way to capture frames at a\n> > > fixed analogue gain value on an IPU6 platform, bypassing the AGC, to help\n> > > validate the gain parameters? Any guidance that you might have with\n> > > diagnostics is welcome.\n> > Not an expert of softIsp and I don't know what controls it offers you\n> > but I think using camshark is the easiest way.\n>\n> Camshark has overhead and beyond my capacity today. It would make sense for\n> me if this was something I was doing more often.\n>\n\nIf you want to do tuning camshark is the best option and the setup is\npretty easy\n\nThanks\n  j\n\n> For the gain linearity question, Hans's Macbeth chart testing on the same\n> sensor combined with the Q6.8 register format documented in the kernel\n> driver provides sufficient evidence for the model (AI).\n>\n>\n> Best wishes,\n>\n> Stuart.\n>\n>\n>\n>\n> >\n> > > Best wishes,\n> > >\n> > > Stuart.\n> > >\n> > >\n> > > > Thanks\n> > > >     j\n> > > >\n> > > > >    src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n> > > > >    1 file changed, 12 insertions(+)\n> > > > >\n> > > > > diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n> > > > > b/src/ipa/libipa/camera_sensor_helper.cpp\n> > > > > index 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> > > > >    +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> > > > > --\n> > > > > 2.47.3\n> > > > >\n> > > > >\n> > > > > --\n> > > > > Stuart J Mackintosh\n> > > > >\n> > > > > Business & digital technology consultant\n> > > > >\n> > > > > Open Digital Consulting Co\n> > > > >\n> > > > > Open Digital Consulting Co Logo\n> > > > >\n> > > > > UK: +44 20 36 27 90 40\n> > > > >\n> > > > > FR: +33 1 89 48 00 40\n> > > > >\n> > > > > Email:sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n> > > > >\n> > > > > Web:https://opendigital.cc <https://opendigital.cc>\n> > > > >\n> > > > > IM:xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n> > > > >\n> > > --\n> > >\n> > > Stuart J Mackintosh\n> > >\n> > > Business & digital technology consultant\n> > >\n> > > Open Digital Consulting Co\n> > >\n> > > Open Digital Consulting Co Logo\n> > >\n> > > UK: +44 20 36 27 90 40\n> > >\n> > > FR: +33 1 89 48 00 40\n> > >\n> > > Email:sjm@opendigital.cc\n> > >\n> > > Web:https://opendigital.cc\n> > >\n> > > IM:xmpp:sjm@opendigital.cc\n> --\n>\n> Stuart J Mackintosh\n>\n> Business & digital technology consultant\n>\n> Open Digital Consulting Co\n>\n> Open Digital Consulting Co Logo\n>\n> UK: +44 20 36 27 90 40\n>\n> FR: +33 1 89 48 00 40\n>\n> Email: sjm@opendigital.cc\n>\n> Web: https://opendigital.cc\n>\n> IM: xmpp:sjm@opendigital.cc","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 61408BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 08:27:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 836DE628CA;\n\tFri, 27 Mar 2026 09:27:46 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D50F06271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 09:27:44 +0100 (CET)","from ideasonboard.com (net-93-65-100-155.cust.vodafonedsl.it\n\t[93.65.100.155])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9C7547CA;\n\tFri, 27 Mar 2026 09:26:25 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"wbCoOA+8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774599985;\n\tbh=Kami/9V+hlJo8qzXrPlE4JrMVxK2359nPuH93vqTP/4=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=wbCoOA+8gBzbsR07zJ2quOVUAGYj4ldNqNCkSy2uXbvoeDqo3GWaM3ldXJr4bWSWi\n\tASbgIsCxZ/Bi+34uYgisoJ87waNy5+PCA7a7wzV+jfkLjK9IlFK7ajQ9F89rOtExJ9\n\t0VP1jxw6uQxAr5lsutdAJ6wnqOGLOWIPoo5tLLuM=","Date":"Fri, 27 Mar 2026 09:27:41 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Stuart J Mackintosh <sjm@opendigital.cc>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org,\n\tHans de Goede <johannes.goede@oss.qualcomm.com>","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","Message-ID":"<acY-WnSYAa0r_oSd@zed>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>\n\t<acTr2pP9t8tOvZko@zed>\n\t<1935d2da-9d1e-4903-8fdb-82d79988bfd2@opendigital.cc>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<1935d2da-9d1e-4903-8fdb-82d79988bfd2@opendigital.cc>","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>"}},{"id":38435,"web_url":"https://patchwork.libcamera.org/comment/38435/","msgid":"<ea0fcc79-665c-4a34-bb40-a958350bfea8@opendigital.cc>","date":"2026-03-27T09:00:28","subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"On 27/03/2026 09:27, Jacopo Mondi wrote:\n>>>>>> Add a CameraSensorHelper for the OmniVision OV01A10 image sensor,\n>>>>>> used in Dell XPS 13 and other laptops with the Intel IPU6 camera\n>>>>>> subsystem.\n>>>>>>\n>>>>>> The analogue gain model is derived from the V4L2 control range\n>>>>>> reported by the sensor driver. The minimum gain code is 256 with\n>>>>>> a step of 1, giving the linear model:\n>>>>>>\n>>>>>>      gain = code / 256\n>>>>> Following this line of reasoning, the max gain code in the driver is\n>>>>> said to be 0x3fff which would give a max gain of x64 which seems quite\n>>>>> high (however I surely can't rule out it is correct).\n>>>> The upstream kernel driver defines |OV01A10_ANAL_GAIN_MAX = 0x3fff| = 16383,\n>>>> giving a maximum of 63.99x. My running kernel (6.12.74+deb13) reports\n>>>> max=65535 via V4L2, which appears to be an older driver version predating a\n>>>> recent fix. The gain model is correct regardless - only the clamp value\n>>>> differs.(AI)\n>>>>\n>>> Yes, the max gain has been changed by Hans in\n>>> 109e0feacaeca5ec2dd71d7d17c73232ce5cbddc \"media: i2c: ov01a10: Fix\n>>> analogue gain range\"\n>> Thank you - I can see that commit sets the max to 0x3fff. My running kernel\n>> predates it (AI).\n>>\n>>> However, this still is this part of the commit message which puzzels\n>>> me\n>>>\n>>>       The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n>>>       in the same gain values as setting these bits to 0x1, with bits 0-7\n>>>       still increasing the gain when going from 0x000 - 0x0ff in the exact\n>>>       same range as when going from 0x100 - 0x1ff.\n>>>\n>>> I don't get what \"Setting bits 8-11 to 0x0 results n the same gain\n>>> values as setting these bits to 0x1\" part. I should ask Hans\n>> The kernel commit by Hans clarifies this: the hardware mirrors gain codes\n>> 0x000-0x0ff onto the same range as 0x100-0x1ff, so the minimum is correctly\n>> set to 0x100 to avoid the mirrored region. The Q6.8 model holds from 0x100\n>> upwards - gain = code / 256, with unity at 0x100 and maximum of 63.99x at\n>> 0x3fff (AI).\n> I really can't parse this, sorry. What does it mean \"mirrors gain\n> codes\" ??\n>\n> I've re-read the commit message a few times\n>\n>      The minimum gain of 0x100 is correct. Setting bits 8-11 to 0x0 results\n>      in the same gain values as setting these bits to 0x1, with bits 0-7\n>      still increasing the gain when going from 0x000 - 0x0ff in the exact\n>      same range as when going from 0x100 - 0x1ff.\n>\n> and I interpret it as the relative gain increase is identical in the\n> 0x000-0x0ff and 0x100-0x1ff range. I'm not sure what the above\n>\n> \"Setting bits 8-11 to 0x0 results in the same gain values as setting\n> these bits to 0x1\"\n>\n> part means though.\n>\n> We have Hans in the thread, he knows for sure :)\n\n  I don't fully understand the register behaviour below 0x100 either. \nHans or the original driver author should clarify, as they have the \ndatasheet. What we do know is that the minimum of 0x100 is established \nand the Q6.8 formula gain = code / 256 is correct from that point \nupwards. (AI-assisted)\n\n\n>> Camshark has overhead and beyond my capacity today. It would make sense for\n>> me if this was something I was doing more often.\n>>\n> If you want to do tuning camshark is the best option and the setup is\n> pretty easy\n\n\nOk - lets see if the weekend allows me time to set up camshark.\n\nI do find it a surprise that this standard cam in an XPS of a few years \nold has such problems, particularly when it came with Ubuntu installed. \nIt seems that there may have been custom drivers from Intel to work \naround the issue. Might Intel have internal documentation or contacts \nthat could help with the sensor delays and the gain max register \nbehaviour, as it is their hardware?\n\n\nBest wishes,\n\nStuart.\n\n\n\n\n>\n> Thanks\n>    j\n>\n>>>>>\n>>>>>>     src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++\n>>>>>>     1 file changed, 12 insertions(+)\n>>>>>>\n>>>>>> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp\n>>>>>> b/src/ipa/libipa/camera_sensor_helper.cpp\n>>>>>> index 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>>>>>>     +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>>>>>> --\n>>>>>> 2.47.3\n>>>>>>\n>>>>>>\n>>>>>> --\n>>>>>> Stuart J Mackintosh\n>>>>>>\n>>>>>> Business & digital technology consultant\n>>>>>>\n>>>>>> Open Digital Consulting Co\n>>>>>>\n>>>>>> Open Digital Consulting Co Logo\n>>>>>>\n>>>>>> UK: +44 20 36 27 90 40\n>>>>>>\n>>>>>> FR: +33 1 89 48 00 40\n>>>>>>\n>>>>>> Email:sjm@opendigital.cc <mailto:sjm@opendigital.cc>\n>>>>>>\n>>>>>> Web:https://opendigital.cc <https://opendigital.cc>\n>>>>>>\n>>>>>> IM:xmpp:sjm@opendigital.cc <xmpp:sjm@opendigital.cc>\n>>>>>>\n>>>> --\n>>>>\n>>>> Stuart J Mackintosh\n>>>>\n>>>> Business & digital technology consultant\n>>>>\n>>>> Open Digital Consulting Co\n>>>>\n>>>> Open Digital Consulting Co Logo\n>>>>\n>>>> UK: +44 20 36 27 90 40\n>>>>\n>>>> FR: +33 1 89 48 00 40\n>>>>\n>>>> Email:sjm@opendigital.cc\n>>>>\n>>>> Web:https://opendigital.cc\n>>>>\n>>>> IM:xmpp:sjm@opendigital.cc\n>> --\n>>\n>> Stuart J Mackintosh\n>>\n>> Business & digital technology consultant\n>>\n>> Open Digital Consulting Co\n>>\n>> Open Digital Consulting Co Logo\n>>\n>> UK: +44 20 36 27 90 40\n>>\n>> FR: +33 1 89 48 00 40\n>>\n>> Email:sjm@opendigital.cc\n>>\n>> Web:https://opendigital.cc\n>>\n>> IM:xmpp:sjm@opendigital.cc","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 87C53BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 09:00:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 65BCD62CB7;\n\tFri, 27 Mar 2026 10:00:32 +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 3D1BE6271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 10:00:31 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w633M-00GfEO-2l;\n\tFri, 27 Mar 2026 09:00:30 +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=\"R2MUBVRw\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=zfAC0bQy2HE/x3xOotsQCwmoMPF8wrbj83FM7C3pI1Q=;\n\tb=R2MUBVRw1xxYXocfOklfl0h1c+\n\tUPrjESiBLbQcLgT5lkQwn2zRciYydgfPMVdU7I6wvK69rjUXL10k7syF2jxj9WODvgSMHiKf/0mz6\n\t+PWxFFqFJTedySy4jSSlVZJ7DhDRJi62H0q3yvD81KaI9wRNCsoQD7gcnRWPw+iRDO20+psQrm//9\n\tfgiikXaMZor1FBHfcPDHwzWaY2wdiN3rY2zHyPWPl0mEEoWsRzNg+la7lvDqxess7tB1YkB0rof6M\n\t65W9jbJDlxtRC2DcUr6wOmJjlJVZ4q8rCxfqwoYbY53QAHN/YInNPYr2ZEohQLxRLB+a/Zz1U5Mu1\n\t0rZKcumQ==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------JU0rSsHw2vB1BukW0F9Y9TOb\"","Message-ID":"<ea0fcc79-665c-4a34-bb40-a958350bfea8@opendigital.cc>","Date":"Fri, 27 Mar 2026 10:00:28 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] ipa: libipa: camera_sensor_helper: Add OV01A10","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tHans de Goede <johannes.goede@oss.qualcomm.com>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<3ec56013-da97-4d26-9cbd-169a93f3865a@opendigital.cc>\n\t<acTr2pP9t8tOvZko@zed>\n\t<1935d2da-9d1e-4903-8fdb-82d79988bfd2@opendigital.cc>\n\t<acY-WnSYAa0r_oSd@zed>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<acY-WnSYAa0r_oSd@zed>","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>"}},{"id":38436,"web_url":"https://patchwork.libcamera.org/comment/38436/","msgid":"<20260327093345.GB3026673@killaraus.ideasonboard.com>","date":"2026-03-27T09:33:45","subject":"Re: Use of AI in general","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hello Stuart,\n\nOn Fri, Mar 27, 2026 at 07:04:42AM +0100, Stuart J Mackintosh wrote:\n> On 26/03/2026 09:53, Jacopo Mondi wrote:\n> >> Stuart many of us have a wariness about over-use of AI, often just\n> >> throwing a lot of things at the wall and seeing what looks like it\n> >> might work, without rhyme or reason. Or what people call AI slop.\n> >>\n> >> Note this first submission does not seem to be AI slop at all!\n> >>\n> >> And your disclosure of using of AI is appreciated but please be\n> >> careful with your use of AI.\n> > Indeed, and I appreciate it was made clear.\n> >\n> > Unfortunately this still makes me wonder if the discussion I'm having\n> > is with someone which understand what he wrote or with someone simply\n> > proxying an LLM response to the list. Not saying that's the case, at\n> > all, but I feel like AI could help understanding some topics by giving\n> > pointers and guidance, but once a person has absorbed that\n> > understanding it should be the one producing a useful reply out of\n> > it, otherwise the quality of the discussion quickly degrades.\n> \n> Thanks for bringing this up. It is a significant debate across most \n> communities that I am part of right now and currently drafting AI policy \n> for one.\n> \n> I am human - you can phone me, or look at my linkedin page (which isn't \n> quite up to date) - whatever this might prove. Also talk to anyone you \n> know from the Perl community.\n> \n> AI (I really don't like that term) is a powerful computing tool that \n> helps me accelerate my understand the details of this particular issue. \n> Having spent years working on hardware, and 30 years in Open Source \n> (starting when changing an IRQ on an eth meant kernel recompile in the \n> 0.9x series) I am confident that I have capability to do this without \n> AI, but don't have capacity.\n> \n> This Dell laptop has been unusable for 2 years because of the camera \n> issue, and AI can help get it resolved.\n> \n> The real issue here is people and provenance;if I was a long-standing \n> member of this community and we had interactions over the years, it \n> would be less of a concern for you but as someone who dropped in a \n> couple of days ago, it is reasonable to be concerned (note xz case).\n> \n> AI slop is human slop, and any patch over 30 or so lines can easily fall \n> in to that category, it is hard to review and puts pressure on the \n> existing community.\n> \n> \n> I have tried hard to state where AI has helped with my diagnostic, and \n> as you will see by my reply to the thread, this next one has more AI and \n> less me in it - I am sensitive to how this may be received, but also \n> feel that, cautiously, it can help get this problem sorted out.\n\nFor what it's worth, I recently came accross\nhttps://kusma.xyz/blog/2026/03/26/open-source-and-ai/. This summarizes\npretty well my own opinion on the topic. My desire to engage with\ncontributions where part of the code, documentation or e-mails has been\nwritten by an LLM is zero.","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 C1459BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 09:33:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13DE562BB6;\n\tFri, 27 Mar 2026 10:33:49 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4C00062BB6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 10:33:47 +0100 (CET)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id D6C723DA;\n\tFri, 27 Mar 2026 10:32:27 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Qid6mjbu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1774603948;\n\tbh=/z/N4x+q0/rfF9FBtYqRCwE0XeOsT0/15ipvcywf3pk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Qid6mjbuvJUfT71b0nLA8tUqRZssd3rMV9ALcAO9/uHwraCEDAW63XHt67QP5D1Z6\n\t2AXRJFMl+h5dcvBucosoNpu7DFhFI/lRpojHAHcEMP6TuM6NAxGZeVFU7XlojwfILx\n\t4LDgkWWs/YtBjSlNrGnz9n1WedaFRybyii58LbXs=","Date":"Fri, 27 Mar 2026 11:33:45 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Stuart J Mackintosh <sjm@opendigital.cc>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com, libcamera-devel@lists.libcamera.org","Subject":"Re: Use of AI in general","Message-ID":"<20260327093345.GB3026673@killaraus.ideasonboard.com>","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>\n\t<acTxL9k_jwx8Sge1@zed>\n\t<0df07bee-9d71-49f1-847a-972c4c995c79@opendigital.cc>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<0df07bee-9d71-49f1-847a-972c4c995c79@opendigital.cc>","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>"}},{"id":38442,"web_url":"https://patchwork.libcamera.org/comment/38442/","msgid":"<6e603d59-0a2f-4b53-b56c-474b55ff87c4@opendigital.cc>","date":"2026-03-27T12:24:56","subject":"Re: Use of AI in general","submitter":{"id":264,"url":"https://patchwork.libcamera.org/api/people/264/","name":"Stuart J Mackintosh","email":"sjm@opendigital.cc"},"content":"> For what it's worth, I recently came accross\n> https://kusma.xyz/blog/2026/03/26/open-source-and-ai/. This summarizes\n> pretty well my own opinion on the topic. My desire to engage with\n> contributions where part of the code, documentation or e-mails has been\n> written by an LLM is zero.\n\nThanks for the link - I hadn't seen this.\n\nI find myself aligned with most of the points made on the link that you \nshared and agree that most do not have satisfactory answers at this \npoint. I do feel that the Open Source communities are best placed to \nfind the answers, because business interest is strongly pushing the use \nof AI and at the current pace, the corporates will be setting the rules.\n\nIn a community that I am closely connected with, the debate is playing \nout currently which touches on some of these points: \nhttps://github.com/Perl/perl5/pull/24321\n\nWhat I am sure of is that there will be no shortage of tensions about \nthis for quite some time to come.","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 EF5C0BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 12:25:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DFE4262CD3;\n\tFri, 27 Mar 2026 13:25:01 +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 BFC4D62CCC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 13:25:00 +0100 (CET)","from 103.82.220.81.rev.sfr.net ([81.220.82.103]\n\thelo=[192.168.125.173])\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 1w66FF-00Gp1M-1Y;\n\tFri, 27 Mar 2026 12:24:59 +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=\"uwJlWnsr\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=opendigital.cc; s=mail; h=In-Reply-To:From:References:Cc:To:Subject:\n\tMIME-Version:Date:Message-ID:Content-Type:Sender:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:\n\tList-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;\n\tbh=q3WFtvi0w2F9u1vEOWVWWk5OPNPOHJIPQHAQMnLhot0=;\n\tb=uwJlWnsrTYR8GdF07XGNZhwmWv\n\t0fUv6NDvTW0q+dPnINqwu4b+soNx1/owLnIv+atyot8Vlm4fVonPHe9sIQzSw36mnjZFLLic78oJP\n\tp0w6pm3sPKc9F0ndGZAIgZlDHcRm9fk6fKOaY4fOJ4nybbZa8iM0/tyEdj80cvF3eXr6CiTy1V3N/\n\tZTRkyYE9wBllLabU4XBxYy38C8fmez1hlytclmmoGXmJ7c0pgQDV9+Zzy6eLkraUGK6dXJBCvEp/l\n\tTPw4xg3ZrN6V0dRVtnrpuETHXVN2AVhAqV5oiStV4RCwAV5c6C7MZsxpHfkM3KJzgbzxAXx4Rt0uY\n\tn/huuB2Q==;","Content-Type":"multipart/alternative;\n\tboundary=\"------------pW87lRg5C1b0xRnK0VUacZ0D\"","Message-ID":"<6e603d59-0a2f-4b53-b56c-474b55ff87c4@opendigital.cc>","Date":"Fri, 27 Mar 2026 13:24:56 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: Use of AI in general","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tjohannes.goede@oss.qualcomm.com, libcamera-devel@lists.libcamera.org","References":"<c6a502b4-4193-40a6-8cfa-62a19bfb5011@opendigital.cc>\n\t<acQCfraRIyr3iOuG@zed>\n\t<7d45854e-3db4-4629-9839-7f87bf633c30@oss.qualcomm.com>\n\t<acTxL9k_jwx8Sge1@zed>\n\t<0df07bee-9d71-49f1-847a-972c4c995c79@opendigital.cc>\n\t<20260327093345.GB3026673@killaraus.ideasonboard.com>","From":"Stuart J Mackintosh <sjm@opendigital.cc>","Content-Language":"en-GB","In-Reply-To":"<20260327093345.GB3026673@killaraus.ideasonboard.com>","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>"}}]