From nobody Fri Apr 3 02:57:00 2026 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 47A12317160 for ; Tue, 24 Mar 2026 21:42:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388530; cv=none; b=oTMnRsQw7R4k9XJK/NEGGQDfa28GWh/Pl9+BC6xKE5R5qtwf4r9trNnCfVdq1nBaY9/WSNyYpGiuf+rRS4s/LK+fGCpcStmv5IZdIDwsjiQvtEX0LHLg+UAliIVLDg1u8IFj6Ut5/NhePHB1GWpjIktGvLKrlOARs0HIbTLJIS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388530; c=relaxed/simple; bh=+075GOoyLbd5S34H1HUCr/nG7KpOcOATM4+CPgFOnJs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mz1Vk+OJcCVF6FC/sQpynszRE18VWD2esDIc+OgasecmFAqrJIkP8YnXhvdbLYjPTWJUjqSBvdzHsjOyRsD00SNd4TRN/4LQeoFXQd+1Emn3K2JpxbbnKhXg8JJFGz8N6ylajEtH9yKvclgID9DBPw2A04RIiKGmfEraylbMsVk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RvcVZ6cM; arc=none smtp.client-ip=74.125.82.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RvcVZ6cM" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-2ba9c484e5eso4193954eec.1 for ; Tue, 24 Mar 2026 14:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774388528; x=1774993328; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yX+MCrL59z+GAPTCkuU/G/y2YHYVEKPhhbS8nU432oc=; b=RvcVZ6cMJxhRdvn7Bv/A9KKNs18E8ieDu7jXAZpbPgyWWP7fql5cMjdevy/uMr01UM VebWwpE1OZREP+SSEpcxMrTjgY5kUSGMSZr5IMspoCGuOWbMixo84xcr6eFo3xxSsbuI A3eAVHJdRx9Pp8DV2oTLWJoEWKX2MxywdYfPkwABPulG1UbK21M9cWeE0jCn6e9+S0wm TnVkv3JAjNNV1K+hBvjdB49hEvqeK3mvtEPu0mV/T9ttkN7hpE0wscqM2oPr7zbxfs7b bWB5Cj7FtIDzTErXXbg+OsWDh7dz4CdY+Ueq4GH0OhiIIseRyXLdkCpjYO4crZsFUXYg 7iuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388528; x=1774993328; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yX+MCrL59z+GAPTCkuU/G/y2YHYVEKPhhbS8nU432oc=; b=YqKId8Vjk9cD5KK0tdSKqljP8WsN21fYYCiFPtP3ce/OyznznpbMiSTmH+UHR91Ifa PjsxUnzY+sqchFLnjOzaGNxNoySsP2P1TTNGzb8N+WMgtuRGlrgffn0DrGPsvDfnsx4L rta1bMQ6Mh5zNg2y1lNbQm6Qbx0Moi5Z/f170xcfYbWWzvRAJFso2d1FJgde5Ouh67JN 1FeB1h4wo1sTC0VFd/MjjyArtOxWralRL/iql4Jp5Pe73shxcNKjuD2TF5sXqFFVzMVZ Jbksy175C5Ad2u4/l8ybX/ohUCRNGbE4CcpxQCR9dHTKWf3E6fV/+hYwlA3RoXR009TS 2j/g== X-Gm-Message-State: AOJu0Yx+FHHbt8uGcCRwRjtsZAaa/7RywIWpWlFYehhsNNElRxJJdZxt sHkmw/jyR6xHXlxX3Rd3Cflgp76TrTjEUtpsG0MPgV0konX2oPxr+4gxOSrNUOmrTnQ= X-Gm-Gg: ATEYQzxCpmxIRuTkV8xhBBeoDCm0n0ug3CcIFxbBfxlqtxJuGBu44loxDCnduSLR5+F dTJ5T0oobACtTPQGbqM021xT+EE/6V/X7WIysVq24IYTZK9uMcyv5keDl9EXQjvsd8N3bngFtIS CkFhjQ6B9HogHh2EUi9KE3YtmZ1NrQoR7k0TRrduytZmkQ8rz/Af0cCToMWdAVD/ioMp1XO8hsT SEOfoEyWXgQzDd/E8eM7hz/JSrz73OMtPkmH35+1h5dzN8SSgwrBnG1kJDkW9eugATbpWdY9xqP 9MsHzj0O66ZYcMlzFz69NIWoIHRLshKDnveZq3DF6GzDk/FgfY1oGk/JnU01xzR8Q7HuDimdxWe qZdE8u3ehbEWr9XbvdOQpeh83pl8paNO+jApaEcW6zfUNaHTZatuOEdoY0quLTy2/LoPo+UJ29y XmxbOyjrPPEjblsJXXRv/6/A== X-Received: by 2002:a05:7300:2153:b0:2be:e0a:f37c with SMTP id 5a478bee46e88-2c15d49e2bbmr504337eec.25.1774388528256; Tue, 24 Mar 2026 14:42:08 -0700 (PDT) Received: from TC-LAPTOP.lan ([209.76.64.37]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c1536aa870sm3284180eec.2.2026.03.24.14.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 14:42:08 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: linux-media@vger.kernel.org, platform-driver-x86@vger.kernel.org, lee@kernel.org, djrscally@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v2 1/3] platform/x86: intel_lpss: add resource conflict quirk for Dell Latitude 5285 Date: Tue, 24 Mar 2026 14:41:25 -0700 Message-ID: <20260324214129.17300-2-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324214129.17300-1-tchatard@gmail.com> References: <20260320000937.9177-1-tchatard@gmail.com> <20260324214129.17300-1-tchatard@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Dell Latitude 5285 2-in-1 has a BIOS bug where the ACPI GEXP device and the I2C4 controller (INT3446) both claim the same MMIO region via the shared SB04 variable. This causes intel_lpss_acpi to fail binding to I2C4 with -EBUSY, preventing the front camera (OV5670) sensor from being registered. Add a DMI quirk that selects IGNORE_RESOURCE_CONFLICTS for INT3446 on this machine, matching the existing pattern used by other LPSS quirks. Signed-off-by: Thierry Chatard --- drivers/mfd/intel-lpss-acpi.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/mfd/intel-lpss-acpi.c b/drivers/mfd/intel-lpss-acpi.c index 63406026d..7d0964848 100644 --- a/drivers/mfd/intel-lpss-acpi.c +++ b/drivers/mfd/intel-lpss-acpi.c @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include #include @@ -52,6 +54,15 @@ static const struct intel_lpss_platform_info spt_i2c_inf= o =3D { .swnode =3D &spt_i2c_node, }; =20 +/* Same as spt_i2c_info but with QUIRK_IGNORE_RESOURCE_CONFLICTS for Dell = 5285 + * where ACPI GEXP device conflicts with I2C4 (INT3446) MMIO resources. + */ +static const struct intel_lpss_platform_info spt_i2c_info_ignore_conflicts= =3D { + .clk_rate =3D 120000000, + .swnode =3D &spt_i2c_node, + .quirks =3D QUIRK_IGNORE_RESOURCE_CONFLICTS, +}; + static const struct property_entry uart_properties[] =3D { PROPERTY_ENTRY_U32("reg-io-width", 4), PROPERTY_ENTRY_U32("reg-shift", 2), @@ -172,6 +183,16 @@ static const struct acpi_device_id intel_lpss_acpi_ids= [] =3D { }; MODULE_DEVICE_TABLE(acpi, intel_lpss_acpi_ids); =20 +static const struct dmi_system_id dell5285_lpss_dmi[] =3D { + { + .matches =3D { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Latitude 5285"), + }, + }, + { } +}; + static int intel_lpss_acpi_probe(struct platform_device *pdev) { const struct intel_lpss_platform_info *data; @@ -182,6 +203,17 @@ static int intel_lpss_acpi_probe(struct platform_devic= e *pdev) if (!data) return -ENODEV; =20 + /* Apply IGNORE_RESOURCE_CONFLICTS for I2C4 on Dell Latitude 5285. + * The ACPI GEXP device conflicts with I2C4 (INT3446) MMIO resources + * due to a BIOS bug where both use the same SB04 variable. + */ + if (data =3D=3D &spt_i2c_info && + acpi_dev_hid_uid_match(ACPI_COMPANION(&pdev->dev), "INT3446", NULL) && + dmi_check_system(dell5285_lpss_dmi)) { + dev_info(&pdev->dev, "Dell 5285: applying IGNORE_RESOURCE_CONFLICTS for = I2C4\n"); + data =3D &spt_i2c_info_ignore_conflicts; + } + info =3D devm_kmemdup(&pdev->dev, data, sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; --=20 2.51.0 From nobody Fri Apr 3 02:57:00 2026 Received: from mail-dy1-f170.google.com (mail-dy1-f170.google.com [74.125.82.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43D2234C989 for ; Tue, 24 Mar 2026 21:42:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388533; cv=none; b=hQWghDywvD5NY8QaeXHQgI7V3vZwh7xLIJXRe2KDj3nQms2sYH1C9oQMYWB5ReE/iPPJAU8PRDrkLxNBl3tls1+8tKVdpkBcgBDJRrLjEy2EapaiwZFmhdaATNFCXJGvmjGKtWsXJMA0ziAHnH0D7FGMkSh7UaQw6SZnDpFt8hk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388533; c=relaxed/simple; bh=la0HE0qtz7Pv2g0oEQay0X0IsfysA07UfreUabqV8LM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VXmY9Z30TqhdW0fKv/oOaj0toivkMoSmydLIgR3AM1KQt6eBI4XlWHnJU9yce7q3gYHGXqdCX+GO/eOhkzUzZgIrxvGo15s9IN/BCIT8/kkPCds6SEqySokjQSfckfWtds7dnK/yRUz0YEJBQnRlwQio5Ini0ehffF7MaWjZ1qY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VAO5yOFR; arc=none smtp.client-ip=74.125.82.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VAO5yOFR" Received: by mail-dy1-f170.google.com with SMTP id 5a478bee46e88-2c0bb213b16so10433748eec.0 for ; Tue, 24 Mar 2026 14:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774388531; x=1774993331; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M/PGeCZ0MB+zM0M8BNi4C8mQnbwNTKvleFT37RyQ3oo=; b=VAO5yOFRivRDWeCqSGcKEoAgQ3wAG7h0HQJ0SGhDmOZQM9GoxQJpp/xdFNaXI1Rkcc symzExbUa4giLYw+SLJfqpvqsum+QFVM6AEz9KUy9GifeZ4KzKCiJ55VVRxsW1VfgIwM BkmH01zAjSJEETIKQlToAAUCt8OPSxIGXA02FWX1AZp0EgbKBVjH7kSxp3n+zCRdbrgy PFP1+OU+q5ITg6dC2IuScY4GJiCTB4L1DhTW3fTqBhh7QYcJQEW5WW6+i0YUGOBAQ+iq pMg7EAGp9a8MEE5yRLNN9l7GeyFcLFu+J1Si0V4kEt2TG9PZK9h/IwWkTtcY4B++fBFH p6nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388531; x=1774993331; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=M/PGeCZ0MB+zM0M8BNi4C8mQnbwNTKvleFT37RyQ3oo=; b=NLa9JIWmttDlwBHcEYC0nH2op40uOV3QTxU3DfdpeoPWWn8pyyhfdKDh4OvdmR+nGh Apa7j9kF8O6aF3Vzi8GHYUf/7l+UAWlpTf0tquqA5f0aEgVOacXXSscfvISZFtnOFt4T y3MXrfJxLSrdUPlZ2aDtwN0uyqrPKOhXQK1PqXx1LGDROcMFr2pmP/z/dJE8+fXobBCs /NseeyHbpk66/S2wA1oI5U3US+Cj8Dex94vGyoOaS1vi2X1KsG6+9RgAJObph30eve0o tezV3qvI10LulQ7vdtleHaTxrNcB7Wh5xYb8fIm33NPpRS9OXKzRB27TBYmUfN4jotTy KrFw== X-Gm-Message-State: AOJu0Yyc3SPHIlo3jdwuCQClWhBVKfCYMiNMgYeNNd6ADOMSbmbrwBFB MY1pqzNLGbzgOo5FJ3a33l8S76kvfeVnqxu1CDwWtlom410ibN6b1uLKQ4etPt+HYAQ= X-Gm-Gg: ATEYQzw/nB/QXNatQo4mQCwlE/gOwD3cyavPOK8RIZNuUtaloG3mIzWOpFxZwdHIeQx caykUDxQhWZKW0pV4BKefpIO2KuM7qhMUqFpkzwnnT0741iBolu8QtsxKQT6Udc2SdlAOh/A9nq l+bh0pwyAgZhKPUqRtFrCznTWAXhEqG684QuIadSKVjLVaLKteCBqdWCxVUM7vf+StMm2oB2yHF +PAMLqi7bxNVyFi4QK3hPneuYjM+1A5UGp1/KGLb2/TNIsBlSF8d1+Z8brf2UM8l54t83TdfMJ7 Uw/5nJe+JE5fUG4B/yE6gyNClNdI4Fj4LPxBenLvETH/fD4ldQWt/EkKXBgfchzSK6ufyDlI8D8 4adkbsvET+LpYU0oxmok2qhZgaIPJ8ZcEUmlZsgxHQ76NST1VPveiNtqh/I46qCPeZA5jyiruPD 9USVpdIauat7jd//m64j3PMQ== X-Received: by 2002:a05:7301:d19:b0:2be:2b8d:399b with SMTP id 5a478bee46e88-2c15d2800b5mr570130eec.5.1774388531176; Tue, 24 Mar 2026 14:42:11 -0700 (PDT) Received: from TC-LAPTOP.lan ([209.76.64.37]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c1536aa870sm3284180eec.2.2026.03.24.14.42.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 14:42:10 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: linux-media@vger.kernel.org, platform-driver-x86@vger.kernel.org, lee@kernel.org, djrscally@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard , kernel test robot Subject: [PATCH v2 2/3] platform/x86: int3472: tps68470: fix GNVS clock fields for Dell Latitude 5285 Date: Tue, 24 Mar 2026 14:41:26 -0700 Message-ID: <20260324214129.17300-3-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324214129.17300-1-tchatard@gmail.com> References: <20260320000937.9177-1-tchatard@gmail.com> <20260324214129.17300-1-tchatard@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Dell Latitude 5285 BIOS leaves the GNVS fields C0TP, L0CL, and L1CL at zero at boot. The TPS68470 clock driver reads L0CL and L1CL to select the output frequency; with both fields zero the clock outputs are disabled, and neither camera sensor can communicate over I2C. Additionally, when C0TP=3D0 the ACPI _DEP method on INT3479 returns PCI0 as its dependency instead of CLP0 (the INT3472 device), causing ipu_bridge to never create the i2c-INT3479:00 client for the front camera. Add a DMI-gated fixup that runs at TPS68470 probe time and writes 0x02 (19.2 MHz) into C0TP, L0CL, and L1CL. The GNVS physical address is discovered at run time by scanning the raw AML of the DSDT (and any SSDTs) for the GNVS SystemMemory OperationRegion definition (opcode sequence 0x5B 0x80 "GNVS" 0x00). The parsed address is then mapped with acpi_os_map_memory(), which is safe because ACPI NVS memory is reserved by the firmware and already mapped by the OS. No hard-coded physical addresses are used. Field byte offsets within the GNVS region (verified against DSDT disassembly on this platform, region size 0x0725 bytes): C0TP: 0x43A L0CL: 0x4F7 L1CL: 0x549 Signed-off-by: Thierry Chatard Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202603211747.Z6xudmNd-lkp@int= el.com/ --- drivers/platform/x86/intel/int3472/tps68470.c | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platfo= rm/x86/intel/int3472/tps68470.c index a496075c0..c9686426f 100644 --- a/drivers/platform/x86/intel/int3472/tps68470.c +++ b/drivers/platform/x86/intel/int3472/tps68470.c @@ -2,8 +2,10 @@ /* Author: Dan Scally */ =20 #include +#include #include #include +#include #include #include #include @@ -140,6 +142,203 @@ skl_int3472_fill_clk_pdata(struct device *dev, struct= tps68470_clk_platform_data return n_consumers; } =20 +/* Dell Latitude 5285 GNVS fix + * + * The BIOS leaves GNVS fields C0TP, L0CL and L1CL at zero after POST. + * With C0TP=3D0 the ACPI _DEP on INT3479 resolves to PCI0 instead of CLP0 + * (INT3472), so ipu_bridge never creates i2c-INT3479:00 (OV5670 front cam= ). + * With L0CL=3DL1CL=3D0 the TPS68470 clock driver disables all clock outpu= ts, + * making both sensors unreachable over I2C. + * + * Fix: at TPS68470 probe time, locate the GNVS SystemMemory OperationRegi= on + * by scanning the DSDT/SSDTs for its AML definition, map the region, and + * write 0x02 (19.2 MHz) into C0TP, L0CL and L1CL. + * + * Field byte offsets (verified from DSDT disassembly, GNVS size 0x0725): + * C0TP: 0x43A L0CL: 0x4F7 L1CL: 0x549 + */ +#define DELL5285_C0TP_OFF 0x43A +#define DELL5285_L0CL_OFF 0x4F7 +#define DELL5285_L1CL_OFF 0x549 +/* Minimum GNVS region size: last field (L1CL) is 1 byte at 0x549 */ +#define DELL5285_GNVS_MIN_SIZE (DELL5285_L1CL_OFF + 1) + +/* AML integer opcodes (ACPI 6.4, section 20.2.3) */ +#define AML_ZERO_OP 0x00 +#define AML_ONE_OP 0x01 +#define AML_BYTE_PREFIX 0x0A +#define AML_WORD_PREFIX 0x0B +#define AML_DWORD_PREFIX 0x0C +#define AML_QWORD_PREFIX 0x0E + +/** + * aml_parse_int - Parse one AML integer opcode at @p. + * @p: Pointer to the current position in the AML byte stream. + * @end: One past the last valid byte of the AML buffer. + * @val: Output: the parsed integer value. + * + * Returns the number of bytes consumed, or 0 on failure. + */ +static int aml_parse_int(const u8 *p, const u8 *end, u64 *val) +{ + if (p >=3D end) + return 0; + switch (*p) { + case AML_ZERO_OP: + *val =3D 0; + return 1; + case AML_ONE_OP: + *val =3D 1; + return 1; + case AML_BYTE_PREFIX: + if (p + 2 > end) + return 0; + *val =3D p[1]; + return 2; + case AML_WORD_PREFIX: + if (p + 3 > end) + return 0; + *val =3D get_unaligned_le16(p + 1); + return 3; + case AML_DWORD_PREFIX: + if (p + 5 > end) + return 0; + *val =3D get_unaligned_le32(p + 1); + return 5; + case AML_QWORD_PREFIX: + if (p + 9 > end) + return 0; + *val =3D get_unaligned_le64(p + 1); + return 9; + } + return 0; +} + +/** + * dell5285_gnvs_from_table - Scan one ACPI table for the GNVS OperationRe= gion. + * @tbl: ACPI table header; the AML body is scanned for the GNVS signatur= e. + * @addr: Output: physical base address of the GNVS region. + * @size: Output: byte length of the GNVS region. + * + * Searches the AML body of @tbl for the byte sequence: + * ExtOp(0x5B) OpRegionOp(0x80) NameSeg("GNVS") RegionSpace(SystemMemory= =3D0x00) + * followed by two AML integers (region address and length). + * + * Returns true and fills @addr / @size if found and plausible. + */ +static bool dell5285_gnvs_from_table(const struct acpi_table_header *tbl, + phys_addr_t *addr, u32 *size) +{ + /* AML: ExtOp OpRegionOp NameSeg("GNVS") SystemMemory */ + static const u8 sig[] =3D { 0x5B, 0x80, 'G', 'N', 'V', 'S', 0x00 }; + const u8 *aml =3D (const u8 *)tbl + sizeof(*tbl); + const u8 *end =3D (const u8 *)tbl + tbl->length; + const u8 *p; + + for (p =3D aml; p + sizeof(sig) < end; p++) { + u64 region_addr, region_size; + int consumed; + + if (memcmp(p, sig, sizeof(sig)) !=3D 0) + continue; + + p +=3D sizeof(sig); + consumed =3D aml_parse_int(p, end, ®ion_addr); + if (!consumed || !region_addr) + continue; + + p +=3D consumed; + consumed =3D aml_parse_int(p, end, ®ion_size); + if (!consumed || region_size < DELL5285_GNVS_MIN_SIZE) + continue; + + *addr =3D (phys_addr_t)region_addr; + *size =3D (u32)region_size; + return true; + } + return false; +} + +/** + * dell5285_gnvs_find - Locate the GNVS OperationRegion by scanning DSDT a= nd SSDTs. + * @addr: Output: physical base address of the GNVS region. + * @size: Output: byte length of the GNVS region. + * + * Returns true if the GNVS region was found in any ACPI table. + */ +static bool dell5285_gnvs_find(phys_addr_t *addr, u32 *size) +{ + struct acpi_table_header *tbl; + u32 i; + + /* DSDT */ + if (ACPI_SUCCESS(acpi_get_table(ACPI_SIG_DSDT, 1, &tbl))) { + bool found =3D dell5285_gnvs_from_table(tbl, addr, size); + + acpi_put_table(tbl); + if (found) + return true; + } + + /* SSDTs (instance numbers start at 1, stop at first failure) */ + for (i =3D 1; i <=3D 32; i++) { + bool found; + + if (ACPI_FAILURE(acpi_get_table(ACPI_SIG_SSDT, i, &tbl))) + break; + found =3D dell5285_gnvs_from_table(tbl, addr, size); + acpi_put_table(tbl); + if (found) + return true; + } + + return false; +} + +static const struct dmi_system_id dell5285_gnvs_dmi[] =3D { + { + .matches =3D { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Latitude 5285"), + }, + }, + { } +}; + +static void dell5285_gnvs_fix(void) +{ + phys_addr_t gnvs_addr; + u32 gnvs_size; + void *gnvs; + + if (!dmi_check_system(dell5285_gnvs_dmi)) + return; + + if (!dell5285_gnvs_find(&gnvs_addr, &gnvs_size)) { + pr_err("int3472-tps68470: Dell 5285: GNVS OperationRegion not found in D= SDT/SSDTs\n"); + return; + } + + gnvs =3D acpi_os_map_memory(gnvs_addr, gnvs_size); + if (!gnvs) { + pr_err("int3472-tps68470: Dell 5285: failed to map GNVS at %pa\n", + &gnvs_addr); + return; + } + + pr_info("int3472-tps68470: Dell 5285 GNVS fix at %pa: C0TP=3D0x%02x L0CL= =3D0x%02x L1CL=3D0x%02x -> 0x02\n", + &gnvs_addr, + *(u8 *)(gnvs + DELL5285_C0TP_OFF), + *(u8 *)(gnvs + DELL5285_L0CL_OFF), + *(u8 *)(gnvs + DELL5285_L1CL_OFF)); + + *(u8 *)(gnvs + DELL5285_C0TP_OFF) =3D 0x02; + *(u8 *)(gnvs + DELL5285_L0CL_OFF) =3D 0x02; + *(u8 *)(gnvs + DELL5285_L1CL_OFF) =3D 0x02; + + acpi_os_unmap_memory(gnvs, gnvs_size); +} + static int skl_int3472_tps68470_probe(struct i2c_client *client) { struct acpi_device *adev =3D ACPI_COMPANION(&client->dev); @@ -155,6 +354,8 @@ static int skl_int3472_tps68470_probe(struct i2c_client= *client) if (!adev) return -ENODEV; =20 + dell5285_gnvs_fix(); + n_consumers =3D skl_int3472_fill_clk_pdata(&client->dev, &clk_pdata); if (n_consumers < 0) return n_consumers; --=20 2.51.0 From nobody Fri Apr 3 02:57:00 2026 Received: from mail-dl1-f48.google.com (mail-dl1-f48.google.com [74.125.82.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97079363091 for ; Tue, 24 Mar 2026 21:42:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388536; cv=none; b=IvScCqryeA7NTW42yeCyPCalR8k9ZfF0ONGdXKAg3P/n8yS7N1gfoUVv4bXu4l5678SBz3ivvmer6VpmlDEq+7OJ8d63xyYXbFQZnU7g0q5Mfyh4QN5m4raP4GfxHkRtUZ7KgUXNyGUFq9xE/048+BhjoxdrbntMDdX8iHlM5k4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388536; c=relaxed/simple; bh=Ee57EugqJBkqQgM9cOCn5nat+dNqMMp/HGLAUfLk3vU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dsvH9iogiLgma73AR/C2WpVtxgek0AoOQl7DpLZnnbrkHpzXYgE9LFvoZaPYV711m2vD3ZgvZQCpEzYoVIy27vrtBmd7wokDL47GZiu0GFbUt6vH2dbPADkVezuge5ir72GbY6wQn83RwQPYaeEQOGeRj/CrxCQqd7/3O944624= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nd9I4P9F; arc=none smtp.client-ip=74.125.82.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nd9I4P9F" Received: by mail-dl1-f48.google.com with SMTP id a92af1059eb24-126ea4e9694so11148006c88.1 for ; Tue, 24 Mar 2026 14:42:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774388534; x=1774993334; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gAGnFJM2vdOXc5jzyYPjoXklMCuveWdc+fFF8+tCFwY=; b=nd9I4P9FakUADAj3njyLpzD72wKWLAtUZsVJlbgXJ1TH2usaSpDzCMog6Pd+uwACSE Mqw8IzIMDEaGUXWt3ENIo4q39YmC301HelDfta2VtjuvlKbmaGAxuA8sA1jLdSeAIkV1 4Fdw6KfdBIJ4S2oMOS4GbLRSSatz0YwYV6HIzweDzX/li7/szGmKLDdmRgIXirixKjVd u6HTFXHqJBXQFkERTnQ+cfeuVibFsWz+giGgS1HmBRcFUwDMBeiNQoGsIrLUO43ioqXH dlHNTg1Yvf7Cpm+BfvQDxZzSeoDw41FuNJgpTZ5lM0q2qaAgbiRV1JW9ka1ubPmSlBQk 27PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388534; x=1774993334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=gAGnFJM2vdOXc5jzyYPjoXklMCuveWdc+fFF8+tCFwY=; b=DzhEBK1XXkQPsi5bjJ5DC1uGwme4zkrdUytATfBbBghdHbjw7c/b/0UUFtG3/hU5NY heh/G7f3CSGMnvSvtFVHxun16DZ+EPnubjiHYoIjUpVkE3UGKxUAuQ8qoHuaQtmzhut9 40vybAaUv3omzFbvtoQFp3U2PaP2+FwVI3VmXQZEG/GHFhuutGxqC33LFR6EAPCc7P+u Q3PBZ9OouVsf/faTyST6hz+vK8CG5KRFpJwEXk975jOaEsagcKbTM2kkoxcd+TQrv3Hm gSXevzXxXO/PkryWUkxicoO6jq8PpXY1MwBb2ZPGRQ7bkj5HLihn3Mt48Jdn/PLusgOM nQcA== X-Gm-Message-State: AOJu0YyWmwkztj2i0P9NPX+DMcH/7Nr5vCN+sSXUhj+u/CPHwxhMbYdY wyjIOkhkqTt6u8ZLhieD/a/BwkHts0xhG3mAxRomjHx1T7uY/NmabldKWLn0Xcfdbn0= X-Gm-Gg: ATEYQzzVbSMeIEPNs0CvebR7cyuUtMjqO2tXyDjKfcWBV23jddnIXInui4PwmVpdALL B/8NgBeRE2Ec3eoo6RsyglvjdVZsteeN2Xza6Dr5rcEkN+VWTfOCj1FHsWaWaDkbSDvatIc4a4x Wfefs2aF2A3cDkhHrIm/a+oH2B04wK5H5+FCPVNqpUxLQz3lBOBV+zT0+brF3s5jQpuenAbz0PV 5ey4W6pTCuB5+ODyM0ptN1hHLjigGYB0lsEldwAaw+N5eN4sD52xhh01Tw38ftOu/XuaznWs/xP cVPwbT/k//1qbAuvWn+nBk92OBvUCw/IVZ8zuK0wq6H1EYB/LFidM8iCeJHuP1ycbpTdBLNCl1T b/RLxxG21utLz9ENx9m3xYbhxngYiZWxyNtbdyU0mB7R85/NBhhT7GhGBQZqJwXiS8IC9coKusx 5Bbp8djUAnxTTQ3G2xSgu6Xg== X-Received: by 2002:a05:7022:ba5:b0:128:d967:466c with SMTP id a92af1059eb24-12a96ed373bmr527563c88.24.1774388533506; Tue, 24 Mar 2026 14:42:13 -0700 (PDT) Received: from TC-LAPTOP.lan ([209.76.64.37]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c1536aa870sm3284180eec.2.2026.03.24.14.42.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 14:42:13 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: linux-media@vger.kernel.org, platform-driver-x86@vger.kernel.org, lee@kernel.org, djrscally@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v2 3/3] platform/x86: int3472: tps68470: add board data for Dell Latitude 5285 Date: Tue, 24 Mar 2026 14:41:27 -0700 Message-ID: <20260324214129.17300-4-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324214129.17300-1-tchatard@gmail.com> References: <20260320000937.9177-1-tchatard@gmail.com> <20260324214129.17300-1-tchatard@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Dell Latitude 5285 2-in-1 has two cameras connected through a TPS68470 PMIC/clock/GPIO hub: Front: OV5670 (ACPI INT3479) on I2C4 Back: OV8858 (ACPI INT3477) on I2C2, daisy-chained behind TPS68470 S_I2C port (controlled by reg 0x43 S_I2C_CTL) GPIO mapping (TPS68470): INT3479 (OV5670): GPIO3 =3D reset, GPIO4 =3D powerdown (both active-low) INT3477 (OV8858): GPIO9 =3D s_resetn, GPIO7 =3D s_enable (both active-low) GPIO9 and GPIO7 are the TPS68470 secondary-port GPIOs (SGPO reg 0x22 bits 2 and 0), not regular GPDO outputs. Regulator mapping: CORE -> dvdd / INT3477 ANA -> avdd / INT3477 VIO -> dovdd / INT3477 VSIO -> avdd / INT3479 and vsio / INT3477 (always_on: keeps S_I2C_CTL non-zero from boot so OV8858 is reachable on I2C2 at any time) AUX1 -> dvdd / INT3479 AUX2 -> dovdd / INT3479 Marking VSIO always_on ensures the TPS68470 S_I2C passthrough is active from the moment the PMIC driver probes, eliminating a timing dependency between TPS68470 and ov8858 probe ordering. Signed-off-by: Thierry Chatard --- .../x86/intel/int3472/tps68470_board_data.c | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) diff --git a/drivers/platform/x86/intel/int3472/tps68470_board_data.c b/dri= vers/platform/x86/intel/int3472/tps68470_board_data.c index 71357a036..a5b469dcb 100644 --- a/drivers/platform/x86/intel/int3472/tps68470_board_data.c +++ b/drivers/platform/x86/intel/int3472/tps68470_board_data.c @@ -287,6 +287,162 @@ static const struct int3472_tps68470_board_data dell_= 7212_tps68470_board_data =3D }, }; =20 +/* Settings for Dell Latitude 5285 2-in-1 */ + +static struct regulator_consumer_supply dell_5285_int3477_ana_consumer_sup= plies[] =3D { + REGULATOR_SUPPLY("avdd", "i2c-INT3477:00"), +}; + +static struct regulator_consumer_supply dell_5285_int3477_core_consumer_su= pplies[] =3D { + REGULATOR_SUPPLY("dvdd", "i2c-INT3477:00"), +}; + +static struct regulator_consumer_supply dell_5285_int3477_vio_consumer_sup= plies[] =3D { + REGULATOR_SUPPLY("dovdd", "i2c-INT3477:00"), +}; + +static struct regulator_consumer_supply dell_5285_int3479_vsio_consumer_su= pplies[] =3D { + REGULATOR_SUPPLY("avdd", "i2c-INT3479:00"), + /* S_I2C_CTL: must be enabled for OV8858 I2C daisy-chain access */ + REGULATOR_SUPPLY("vsio", "i2c-INT3477:00"), +}; + +static struct regulator_consumer_supply dell_5285_int3479_aux1_consumer_su= pplies[] =3D { + REGULATOR_SUPPLY("dvdd", "i2c-INT3479:00"), +}; + +static struct regulator_consumer_supply dell_5285_int3479_aux2_consumer_su= pplies[] =3D { + REGULATOR_SUPPLY("dovdd", "i2c-INT3479:00"), +}; + +static const struct regulator_init_data dell_5285_tps68470_core_reg_init_d= ata =3D { + .constraints =3D { + .min_uV =3D 1200000, + .max_uV =3D 1200000, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3477_core_consumer_sup= plies), + .consumer_supplies =3D dell_5285_int3477_core_consumer_supplies, +}; + +static const struct regulator_init_data dell_5285_tps68470_ana_reg_init_da= ta =3D { + .constraints =3D { + .min_uV =3D 2815200, + .max_uV =3D 2815200, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3477_ana_consumer_supp= lies), + .consumer_supplies =3D dell_5285_int3477_ana_consumer_supplies, +}; + +static const struct regulator_init_data dell_5285_tps68470_vcm_reg_init_da= ta =3D { + .constraints =3D { + .min_uV =3D 2815200, + .max_uV =3D 2815200, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D 0, + .consumer_supplies =3D NULL, +}; + +static const struct regulator_init_data dell_5285_tps68470_vio_reg_init_da= ta =3D { + .constraints =3D { + .min_uV =3D 1800600, + .max_uV =3D 1800600, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3477_vio_consumer_supp= lies), + .consumer_supplies =3D dell_5285_int3477_vio_consumer_supplies, +}; + +static const struct regulator_init_data dell_5285_tps68470_vsio_reg_init_d= ata =3D { + .constraints =3D { + .min_uV =3D 1800600, + .max_uV =3D 1800600, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + /* + * Keep S_I2C_CTL enabled from boot so OV8858 I2C daisy-chain + * is accessible before ov8858 driver probes. + */ + .always_on =3D 1, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3479_vsio_consumer_sup= plies), + .consumer_supplies =3D dell_5285_int3479_vsio_consumer_supplies, +}; + +static const struct regulator_init_data dell_5285_tps68470_aux1_reg_init_d= ata =3D { + .constraints =3D { + .min_uV =3D 1213200, + .max_uV =3D 1213200, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3479_aux1_consumer_sup= plies), + .consumer_supplies =3D dell_5285_int3479_aux1_consumer_supplies, +}; + +static const struct regulator_init_data dell_5285_tps68470_aux2_reg_init_d= ata =3D { + .constraints =3D { + .min_uV =3D 1800600, + .max_uV =3D 1800600, + .apply_uV =3D 1, + .valid_ops_mask =3D REGULATOR_CHANGE_STATUS, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3479_aux2_consumer_sup= plies), + .consumer_supplies =3D dell_5285_int3479_aux2_consumer_supplies, +}; + +static const struct tps68470_regulator_platform_data dell_5285_tps68470_pd= ata =3D { + .reg_init_data =3D { + [TPS68470_CORE] =3D &dell_5285_tps68470_core_reg_init_data, + [TPS68470_ANA] =3D &dell_5285_tps68470_ana_reg_init_data, + [TPS68470_VCM] =3D &dell_5285_tps68470_vcm_reg_init_data, + [TPS68470_VIO] =3D &dell_5285_tps68470_vio_reg_init_data, + [TPS68470_VSIO] =3D &dell_5285_tps68470_vsio_reg_init_data, + [TPS68470_AUX1] =3D &dell_5285_tps68470_aux1_reg_init_data, + [TPS68470_AUX2] =3D &dell_5285_tps68470_aux2_reg_init_data, + }, +}; + +static struct gpiod_lookup_table dell_5285_int3477_gpios =3D { + .dev_id =3D "i2c-INT3477:00", + .table =3D { + /* + * TPS68470 GPIO9 =3D s_resetn (secondary camera reset, active-low) + * TPS68470 GPIO7 =3D s_enable (secondary camera enable/powerdown) + * These logic outputs are specifically designed for secondary + * camera control on the TPS68470. Matches Surface Go pattern. + */ + GPIO_LOOKUP("tps68470-gpio", 9, "reset", GPIO_ACTIVE_LOW), + GPIO_LOOKUP("tps68470-gpio", 7, "powerdown", GPIO_ACTIVE_LOW), + { } + } +}; + +static struct gpiod_lookup_table dell_5285_int3479_gpios =3D { + .dev_id =3D "i2c-INT3479:00", + .table =3D { + GPIO_LOOKUP("tps68470-gpio", 3, "reset", GPIO_ACTIVE_LOW), + GPIO_LOOKUP("tps68470-gpio", 4, "powerdown", GPIO_ACTIVE_LOW), + { } + } +}; + +static const struct int3472_tps68470_board_data dell_5285_tps68470_board_d= ata =3D { + .dev_name =3D "i2c-INT3472:05", + .tps68470_regulator_pdata =3D &dell_5285_tps68470_pdata, + .n_gpiod_lookups =3D 2, + .tps68470_gpio_lookup_tables =3D { + &dell_5285_int3477_gpios, + &dell_5285_int3479_gpios, + }, +}; + static const struct dmi_system_id int3472_tps68470_board_data_table[] =3D { { .matches =3D { @@ -316,6 +472,13 @@ static const struct dmi_system_id int3472_tps68470_boa= rd_data_table[] =3D { }, .driver_data =3D (void *)&dell_7212_tps68470_board_data, }, + { + .matches =3D { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Latitude 5285"), + }, + .driver_data =3D (void *)&dell_5285_tps68470_board_data, + }, { } }; =20 --=20 2.51.0 From nobody Fri Apr 3 02:57:00 2026 Received: from mail-dy1-f174.google.com (mail-dy1-f174.google.com [74.125.82.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87D6636215E for ; Tue, 24 Mar 2026 21:42:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388537; cv=none; b=MkYeyTDabh0POAQiNQuep7CuXQT4g2FmOLz/10sRyhzS/7CGR5iJDve7ogtFaVuLuC9Ed3QQCaoAa4qSuqZmYgC7c1mnqOStfzqKnR4hNoxA3GIgwCvuHkyhTZnq6uHGax1q7uw9YYSXUvQdsyQDewIyuHXj5DHHSKrkL5IdUt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388537; c=relaxed/simple; bh=wde4TF8CgNzn8si/JL9P12OCZloroRuFEPIxq/TcvgI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cKGr3eq7OJzjV5aRZ/mU0iIGbUdVEiumW+qcKV5mi2KxJAVD8pePuSrtxbcjZAI2sD0cjWy+rhK4HibXZqUxe+/CieA8W25XIXbJAi7nsPNoH3H1X2cql/KOArVKZP0klb1yAGSz0X2VHFMFS6LeignKky8XGoxSLRfPttxojvs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dLHSwrOG; arc=none smtp.client-ip=74.125.82.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dLHSwrOG" Received: by mail-dy1-f174.google.com with SMTP id 5a478bee46e88-2ba895adfeaso2027029eec.0 for ; Tue, 24 Mar 2026 14:42:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774388536; x=1774993336; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TVHeDChmbK7H9JMCFb+9pqFytvxF0fdzrozCeGR4L7s=; b=dLHSwrOGeT+W1RndkcpEeocleSNzFV/+NM9sjKqUlIGxqRTJ592xFEnC4n6peBvrl5 pdoCq5YyL5N7A2goP3n9dXESTmFaQOJ1B7GupQinWxPXHkqtR+Lo9ZoK7ywDvw78sZGC vrXuFWlqnJhqd+sOWxjifn7y4G/ACZbdbzP+1CI2jk97InT0weCiiqeppcMcJNH/+DUd AjTQs3AYC2zzanpHWnOEslyzSUakbw5PmCeqte43bi1o+EKLTWroLit48l0Acrl/wKHE qHeCPlUAgjWK03lofsMTRr+CiOMlYwt40NQK2wbNM8hvOu1DwEvvBoyeFFsKMB2vZboO aVog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388536; x=1774993336; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=TVHeDChmbK7H9JMCFb+9pqFytvxF0fdzrozCeGR4L7s=; b=jvoVLFOSnjU3WWN0Z/0KriONjpJ27GwxT+SIHi5A4fi8CUGFzt0BMtXIDtxKDiVneO AxhUPZFs2Dw/SHwjdzoTPtODmOMH7+ncg6xkQ5P8RQuSG9F40gaIauA+IJHlmIGP7+u+ plxWTAIpTrcfva480XETSSkvSAXX6gFph0G/4ZOwbl5VWxoJOeq9FzPvCb/rMGoUrnLD x1nK+bp1xK2hsvlTCKK2ebIffz4jLzuM/1Mhqy2+Tg/6FVBMwBLiL75K3cDg+LJ6K9FR OWdI7R8mR43KCqs05cFesPKwOlXoJRGNs1MMvf20VFigsegcEMbFJrk8xHbYr+ho2RM4 ikaA== X-Gm-Message-State: AOJu0YwvNUnoUWGGj4FnJkQVnWJsaQaaNUnYsP1YlbTkQMJixapPJSnt s/KNB8GCCLoM4G+HQ+TtGVJD+5Fq2trEwod/9VzJYYKPV879AdQl2PdmpqNb2NstYsk= X-Gm-Gg: ATEYQzxxK0orsg2fyfwFumWS4mU6MohYmQK4ojWkIbikRU1Cvqxbw3gSiSANJMyhxg3 f6nO/NFR738ZqIa2F8yfyF4Npaocvtx6agWKPYoAIetG60AgrcVBP2WYgeM0IWHL5zm8QdFLlN1 8mmon8JwwDW56c8qJQyZF8I/yKRlhQLac5ALvxhU01R1CRpGEPVSsOBAbqONFmhKbSq8oQReBsU Q6lIR/soVsXSqQwEWiz5OME1fbQcC9fIaalOqL5ZdjWMx1NVxIdj0crvWVHsS+bG1gmcs8gLzqF 3BdONvEtMU2ZbEKBRUO3oC1VBZ56PBYX6FGNrmVSGUcMNo1reY4pgWykjJXdjLY+w1yVwcKOL36 +afYegaEaGGV856QVXixdR/9ydYFaVsSg15kt+VrUZc4UXwYOi+Ky9LiyUUbpYp26GYTyuFv7WA n/Nrcw/o8/b7Nd9PPAJRv3DA== X-Received: by 2002:a05:7300:dc04:b0:2bd:cfce:4c4b with SMTP id 5a478bee46e88-2c15d32b6acmr432688eec.2.1774388535594; Tue, 24 Mar 2026 14:42:15 -0700 (PDT) Received: from TC-LAPTOP.lan ([209.76.64.37]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c1536aa870sm3284180eec.2.2026.03.24.14.42.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 14:42:15 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: linux-media@vger.kernel.org, platform-driver-x86@vger.kernel.org, lee@kernel.org, djrscally@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v2 4/5] media: ipu-bridge: add sensor configuration for OV8858 (INT3477) Date: Tue, 24 Mar 2026 14:41:28 -0700 Message-ID: <20260324214129.17300-5-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324214129.17300-1-tchatard@gmail.com> References: <20260320000937.9177-1-tchatard@gmail.com> <20260324214129.17300-1-tchatard@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Omnivision OV8858 is used as the rear camera in several Intel IPU3-based devices (e.g. Dell Latitude 5285 2-in-1). Its ACPI HID is INT3477. Add a sensor configuration entry with a link frequency of 360 MHz to allow ipu_bridge to create the firmware node for this sensor. Signed-off-by: Thierry Chatard --- drivers/media/pci/intel/ipu-bridge.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index fc6608e33..f51749d0f 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -63,6 +63,8 @@ static const struct ipu_sensor_config ipu_supported_senso= rs[] =3D { IPU_SENSOR_CONFIG("INT33F0", 1, 384000000), /* Omnivision OV2740 */ IPU_SENSOR_CONFIG("INT3474", 1, 180000000), + /* Omnivision OV8858 */ + IPU_SENSOR_CONFIG("INT3477", 1, 360000000), /* Omnivision OV5670 */ IPU_SENSOR_CONFIG("INT3479", 1, 422400000), /* Omnivision OV8865 */ --=20 2.51.0 From nobody Fri Apr 3 02:57:00 2026 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6C1C362125 for ; Tue, 24 Mar 2026 21:42:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388540; cv=none; b=TODXhfVrHjUbMg8+FIMXIzfvUWjXHyFWNzyTh4ucIuZFZEX2C0a21gvl+QAqDmUlqdIghW1iCQ2QxwYVWtHeUaYXvkdL95QItYGC2SFGY7GWvDaeD5ceQqGxgwKNmcj4k1G07AtmU9tHe/OmgPH7RxWrN8iqXGDjuMqdpZGSs7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774388540; c=relaxed/simple; bh=kn4gRyG2CWdohr2zODJVwJLXxsAV9GOcDFXCGFJSgyU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OixFFna2G+YRS/5nbjdDsLMiP7bnC81KuydyI4sK5BeeyNfSrEHeglROgigP14iCukNJKJT4q2BFkzcjukvdjl+YFUn/OIdRcyQckTFFxWdzdATUebS03zhwyoKmn2/Ra4KJa4k3S2HF+coCzlZ+GXfR3tWaWX/L8ljY4TQuLTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kkdD2LIZ; arc=none smtp.client-ip=74.125.82.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kkdD2LIZ" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-2ba9c484e5eso4194053eec.1 for ; Tue, 24 Mar 2026 14:42:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774388538; x=1774993338; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fItzBPGWBSGQf6v7HfvNDUYpHiJWqdhO3Tr8TUmXrPk=; b=kkdD2LIZ4aEz0CpE5rvhgIx0dSaoQyHak0gSs8XerBvnsASADHDWM9CUoaogcpEi6I HqEAVbSmVhItqvo3HhYggrztrOuslhW5p9nIe1fO3QKrwJPVoLbRmp9AFO3KIzTYsSy9 ExvGzIJpTjAXYUiuCiZiN0nw2mL1+Yaus3LQzaWUwQuPa38NLCVTD7DUWp4CkOGoHOMW v25z4je4lJuybWXpJZ6Wrk7R13FUcwj9WLNjIRNMZZzTE6Co7W43yHjq4VzpAVm3hqZn rNzZUbF5PO4Sul1BD8+QdVddGqCdi74omxPZe8+ItkFnB174oaYsaUKwAvVd3iOlES6z SyOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774388538; x=1774993338; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fItzBPGWBSGQf6v7HfvNDUYpHiJWqdhO3Tr8TUmXrPk=; b=FHP4zyVz6ae/ZSIigIWYxeM0hLmplkcyeOsujm/PmAtMzE1dPqzz+YhmIbch9rVR1+ F5N71BDehqJ6NKrCrof9OTD0AEl7GL81peUWvjclq1kcg5V3JJibtMNb4yB7n6iUPMRJ RcD/aO00fP1ykgQzl6rjDumW5L4jxwJzBsYEPxjzbk9FDzgiqNLuK4TeTYmkNzJIAqsL 54xu0bsD7mAmHflzCuu/8or2NLnJRcJBxCGPRo0EoKkSzA8BS1dMZkUhfU4LKUBMayHO HYnjiahNoBGdOMj9ngqg9K6JcbIJY1Z6ktAJMwE1VQZ48+Ns3pZv4VHXf35yX9kwp7Dr 1ebw== X-Gm-Message-State: AOJu0YxjMBm/3vhF9glBivjochYNpxiOEbLMxhbDc52v5tmOjkoL7XuV A51R58KbQ/JRK5v6KCdG3NdRBjpna9Q2b9NDpo4X3N4pvc7jk8RwJWu9yYrhEbopZDI= X-Gm-Gg: ATEYQzz92In9h7MlpwLc/B/SPYf7YO7dZLC4ynJvEShIsgciR+sJ/FIcGkpzn7lcM0D xbq36PsJRev7tf0ur6xZDboLsBdEbiQmH8LD7ChI9a/wa2/+2pDOTbOQL33wCNrFUVmhXrf1QOJ ZruCK7+zWFhW+jajwXd4rgcmQdhSZuugUT/enX2EVDW1l/ssO8C9R8OurrtqmSQ99R9WqT6MHgV iBEOtr5gj28UbDy8gmsRcbzkS1gn3MSZ8qHRm8V76nGVaxdRr/bgdaxlrrM526LAGLFBYR3SD1Z oiSN8cMXrhYkK/pC4CwhbnppLijfDTenM9iP6s7ClJQ9x5Iu1RyevydhHGHmtOHmkLBBbtDtWPX stUO9hXheyRVc7ipbUPRm7pB0kia/kj2LvlMIE1HBru8AsFeZwOe7rsHYYAEtBd4lR/v2ZB/a0o XecacJIziKWAHfkhS2bMBqbA== X-Received: by 2002:a05:7300:fb97:b0:2c0:dc7e:ed0f with SMTP id 5a478bee46e88-2c15d329d54mr514614eec.3.1774388537637; Tue, 24 Mar 2026 14:42:17 -0700 (PDT) Received: from TC-LAPTOP.lan ([209.76.64.37]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c1536aa870sm3284180eec.2.2026.03.24.14.42.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 14:42:17 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: linux-media@vger.kernel.org, platform-driver-x86@vger.kernel.org, lee@kernel.org, djrscally@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v2 5/5] media: ov8858: add ACPI device ID INT3477 and vsio power supply Date: Tue, 24 Mar 2026 14:41:29 -0700 Message-ID: <20260324214129.17300-6-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324214129.17300-1-tchatard@gmail.com> References: <20260320000937.9177-1-tchatard@gmail.com> <20260324214129.17300-1-tchatard@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Omnivision OV8858 appears in ACPI firmware under the HID INT3477 on Intel IPU3-based platforms such as the Dell Latitude 5285 2-in-1. Add INT3477 to the ACPI match table so the driver binds when instantiated by ipu_bridge. On the Dell Latitude 5285 the OV8858 is powered through a TPS68470 PMIC. The TPS68470 VSIO regulator controls the S_I2C_CTL register (0x43) which enables I2C passthrough to the sensor. The board data for this machine maps VSIO to the supply name "vsio" for INT3477. Add "vsio" to ov8858_supply_names[] so the driver requests this regulator at probe time. The existing supply array had a duplicate "dvdd" entry; replace it with the new "vsio" entry and reorder to: avdd, dvdd, dovdd, vsio. Signed-off-by: Thierry Chatard --- drivers/media/i2c/ov8858.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index 3f45f7fab..5bfea237b 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -79,8 +79,9 @@ =20 static const char * const ov8858_supply_names[] =3D { "avdd", /* Analog power */ - "dovdd", /* Digital I/O power */ "dvdd", /* Digital core power */ + "dovdd", /* Digital I/O power */ + "vsio", /* Secondary I2C / S_I2C_CTL enable */ }; =20 struct regval { @@ -1981,11 +1982,18 @@ static const struct of_device_id ov8858_of_match[] = =3D { }; MODULE_DEVICE_TABLE(of, ov8858_of_match); =20 +static const struct acpi_device_id ov8858_acpi_ids[] =3D { + { "INT3477" }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(acpi, ov8858_acpi_ids); + static struct i2c_driver ov8858_i2c_driver =3D { .driver =3D { .name =3D "ov8858", .pm =3D &ov8858_pm_ops, .of_match_table =3D ov8858_of_match, + .acpi_match_table =3D ACPI_PTR(ov8858_acpi_ids), }, .probe =3D ov8858_probe, .remove =3D ov8858_remove, --=20 2.51.0