From patchwork Fri Jul 31 14:45:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Cronin X-Patchwork-Id: 27528 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id B6D24BDE4C for ; Fri, 31 Jul 2026 14:46:00 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C6AD467FDA; Fri, 31 Jul 2026 16:45:59 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=stromback-com.20251104.gappssmtp.com header.i=@stromback-com.20251104.gappssmtp.com header.b="JUaFHc8h"; dkim-atps=neutral Received: from mail-yw1-x112d.google.com (mail-yw1-x112d.google.com [IPv6:2607:f8b0:4864:20::112d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7052965F9F for ; Fri, 31 Jul 2026 16:45:58 +0200 (CEST) Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-7dbcb505578so10178627b3.3 for ; Fri, 31 Jul 2026 07:45:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1785509157; cv=none; d=google.com; s=arc-20260327; b=laPTd73RKmHWFG/pxHAXidCrHDogtJaMz9SWLluVtn89wp7aLIydYBdf9ficuPnayI erxB3HAUDLewwfkzPgu7ktdP67GUjL4F5Pl3+JMsPdL5M+pAbhbySfhw5m7ZK1u1O9FU L6tHohqVkYvQ9UY0gl79r7xpjk2GFDu6CLBivpO7pG6X6DTcf6MZ1ooBRa0I7h891aaa wrZ2RUAfVrnY4QVVmEJhJzrXD1mOfnXdZL09+FEdPDsib6vea/lfE6EucCAcEIhmfNcv 3gUoAET06GMFqjrX30F6d0jKQPKeQIOMyEFudVPFM3xepeKUYQKjCY92pi286brFLsaA h0Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:dkim-signature; bh=BZ1QTkb3aEZhQf2+b9MsGmJBNHwb2M2es/NFRg3iihM=; fh=hN8mNPnxBXjCARLz6VoZGvcnfJs454t5dBv/gP0fGlc=; b=Ugx3desh1fpRIxs1TKBAKw9m0fErsLAKrZ1Xi+OfLHivN4z7y/0/iWuUtKz/f5Nquv SkS0XfC5tnPDyY8XABOp/IhrRTOoBHPjBPCe1q8KK84rJcoIKqH3k6b8nGaGnBBJA42D A94Z5/VelvD7asCNA49vWAp3rQ8YlYmBB26QMGfmbqx3k/A5bEb9G+5S9BidtqgJ3WbU 6DsnfJDv7HTg9ACP0c/xV0P36sfvN/z5cWuNyACZOi6HdpoWPQM63/8YnyeXHr9Z/fnl IP2+CL66IvOmKGuo5l3K/IZ8wVy7wiGa1PPppd2PN+UTpwQNjhhQI6Zh0xaOOcuc2+yt VPsQ==; darn=lists.libcamera.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stromback-com.20251104.gappssmtp.com; s=20251104; t=1785509157; x=1786113957; darn=lists.libcamera.org; h=content-type:cc:to:subject:message-id:date:from:references :in-reply-to:mime-version:from:to:cc:subject:date:message-id :reply-to:content-type; bh=BZ1QTkb3aEZhQf2+b9MsGmJBNHwb2M2es/NFRg3iihM=; b=JUaFHc8h5dpvZ8q2hLzo9PF7b66saVbTDcf9Ue+whnPFIRP+QzBonVoMMkKoM/9WTy vvkyv6bb4kjKhudO88uRF9sjyCNY+n0UV/gbVzq/Q52VM6v+bb2slTo/NfOOuJIvqxV1 aab4Ru0nQYp+fM85ibHpu0tHl80P/fuDwJkLwNcnJojcRcsojNd5yR8GW2MVfOXJvSLZ sVg9gzUOXVfSk7gLk3i8p0kJtIzWGcP7p5FBVeXIcD/yKaIUR4pb2D4QuCQJuQmv02Cy GLZo8zyjhotbkWmZKwVN8e/fVGAnsJnYQ+mUc5edKsd+vFSQMK5gSyD37BkzN5mdRCb+ y5TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509157; x=1786113957; h=content-type:cc:to:subject:message-id:date:from:references :in-reply-to:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=BZ1QTkb3aEZhQf2+b9MsGmJBNHwb2M2es/NFRg3iihM=; b=AgEHpjfIZP8QzkMFUMTgR66NEFg0glVBywTaunt/T82r8aDTqHJV5DmPn75UYnWCqg cOrmQoI+ID19DoF7VhsuL4lGqecKkknZ0eJsQP97wWB5q8pVJF8xhSvMdAAq5X4f8kbP x0LE67dN9xCvU9fzEliL7EWRB3F3+oQmbStqcvAz/ZYOuz5+Rj48py/eCTvmxly5cQFj +HI7X4R1sNQll4T99IzN9uHmT3r2o26gMLRUIKwZJ5stJ6nIgX7xg6SS5Wj/hT3MfKSn QWdOo5lPhMjHuP+tEFRYELi0gMWuQ58E83jiGs+DiiERR+fqZTdKtNRUukqITpDiPEEa oV1A== X-Gm-Message-State: AOJu0YzTbvRi8c7ayWr+JnVjpFuCpgrLo81WiMSKcCCddUXtARVSyTOv JB5h+1zlzWUU3K1M4lI/r4a4/oyEQQ7ccbKmWPPhC9E61wReoW4HyT+XMmmdorEPLIDveX9PglI PpsJRBu6HK8p3oJX/hNEp03L/EkSgoLx7RZiepYLgd0XZmcNR4kWQ/MA= X-Gm-Gg: AR+sD13LCjbbqmGwGi3jA9tWoVDtRabD4PJaUcfh7m/UYaB7TuvcTL4VoCaGroSJc+c O9kxAhdH9pBIZDgujXwYJfnCF5cvid3rc6fT97h29E2IO0W5vULF+KmTbQV3Nzlg4q3DHkyGdP2 cOJJY24ZhB+Ub/uWJRBD+TZ5SqLfkgJgLEtIwVdMDdlYsZA1yB+eTm8uaZ+dwW5OPJ4c408PzYY ungncu9TS/lHx34cj96Xf837QRg/efGRSA5xXdFuTcojZ/ACXBZx5Hm5gQ16IjJ8WBJTWmUY4UZ l/p2wS0fQf8vmpHFqfJDmGz0TzYoTgc9IwLRb44dnCFWjPhGM6sppkJZxqPMynsEWBiTFnE8Ee2 0RZea5tBDo8ZiqvThI6Hnh3DSMLPmkib4xwVhjxjoQrEAC8J0uRbsxiTQLb5a9vnyCMKzMH6Vyu aZNz4L+i7n6dFS7+W1nsuDLsqLehkXSK6zUt+huNb2FDhFFkvVFWyIonMlnSkSmeT8LPf9lBOCv sYTSvSq2pIf4mYEG2ogKUTPZqPODLRvLcvlOw0SyQ== X-Received: by 2002:a05:690c:278a:b0:81c:b865:2231 with SMTP id 00721157ae682-81fd4bf88ecmr591327b3.33.1785509157174; Fri, 31 Jul 2026 07:45:57 -0700 (PDT) Received: from 313336824172 named unknown by gmailapi.google.com with HTTPREST; Fri, 31 Jul 2026 07:45:56 -0700 Received: from 313336824172 named unknown by gmailapi.google.com with HTTPREST; Fri, 31 Jul 2026 07:45:56 -0700 MIME-Version: 1.0 In-Reply-To: References: From: John Cronin Date: Fri, 31 Jul 2026 07:45:56 -0700 X-Gm-Features: AUfX_mzazH7GswSaAar4Y5Fpq3lA7KA4e7DENRaNbsB2be89WxBVtczFQT9qqG0 Message-ID: Subject: [PATCH v3 1/2] libipa: camera_sensor_helper: Add imx471 To: libcamera-devel@lists.libcamera.org Cc: jacopo.mondi@ideasonboard.com, kieran.bingham@ideasonboard.com X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add CameraSensorHelper for Sony IMX471 (SONY471A), used on Lenovo ThinkPad X9 / X1 Carbon Gen14 and related IPU7 platforms. The kernel imx471 driver writes V4L2_CID_ANALOGUE_GAIN codes 0..800 directly to register 0x0204 and does not document a gain formula. Use the same Sony linear model G = 1024/(1024-code) already used for imx355/imx477/imx708. Under that model code 800 implies ~4.57x; that figure is derived from the V4L2 range, not a datasheet max-gain claim (no public datasheet available here). Black level 4096 (64 DN at 10-bit, scaled to 16-bit) follows the same pedestal convention as imx355. It has not yet been measured on a covered lens on this hardware. Soft-ISP loads without "Failed to create camera sensor helper for imx471" on Fedora 44 / ThinkPad X9-15 Gen 1 (kernel 7.1.5). Signed-off-by: John Cronin --- src/ipa/libipa/camera_sensor_helper.cpp | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) public: diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index cc16e25..bae2603 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -644,6 +644,36 @@ class CameraSensorHelperImx462 : public CameraSensorHelperImx290 }; REGISTER_CAMERA_SENSOR_HELPER("imx462", CameraSensorHelperImx462) +class CameraSensorHelperImx471 : public CameraSensorHelper +{ +public: + CameraSensorHelperImx471() + { + /* + * Sony IMX471 (IPU7 platforms: ThinkPad X9 / X1 Carbon Gen14, + * ACPI SONY471A). + * + * Kernel imx471 writes V4L2_CID_ANALOGUE_GAIN directly to + * register 0x0204 with range 0..800 (IMX471_ANA_GAIN_MIN/MAX). + * The driver does not document a conversion formula. + * + * Use the same Sony linear model as imx355/imx477/imx708: + * G = 1024 / (1024 - code) + * which yields code 0 -> 1.0x and code 800 -> ~4.57x. That max + * is a consequence of the V4L2 code range under this model, + * not an independent datasheet claim (no public datasheet + * available to this author). + * + * Black level: 64 DN at 10-bit -> 4096 at 16-bit, same pedestal + * convention as imx355 ("From datasheet: 64 at 10bits"). Not + * independently measured on a covered lens yet. + */ + blackLevel_ = 4096; + gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; + } +}; +REGISTER_CAMERA_SENSOR_HELPER("imx471", CameraSensorHelperImx471) + class CameraSensorHelperImx477 : public CameraSensorHelper {