From nobody Tue Jun 16 08:53:30 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 490A13537EB for ; Sat, 25 Apr 2026 16:31:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134714; cv=none; b=iwI20miVMGFBe1/ite0yEpTcW2ILt8vw/RlvBvBdAcTbDuLC5l/Tao0LRzxd3nJkdwrFKcBw4arC7cP16EvGwhglLPuuZ50o9XSFl5QF7qR1gtzr7DVBW+4oMChfBKFJHCKhNfwhBWVRtJqo2Pp4gCP57ZFSTkI7qbtjnH13ehQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134714; c=relaxed/simple; bh=jGEqquZ2fD8KfC6B3eKEDe79Xup6NmyDIFmkXgCEm9k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qY7Hcg8opEs19k2IDE6PyTYKLSoQn0LJoBkKgrliq1O0lWmKtWmBmJcBMt0Kf28A25iXNW8D0xPqLl5rJ6Ke2PTPfFaZwEzBNv8MQS3zlGQq5D0AbC2FYlHWjEpEOfjQLjimcyLyUmL5/QNQR34+Y59Lhaf2q/vh1qBP2sYsK/4= 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=KURwR5NG; arc=none smtp.client-ip=74.125.82.178 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="KURwR5NG" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2c15849aa2cso11799615eec.0 for ; Sat, 25 Apr 2026 09:31:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777134712; x=1777739512; 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=Njwz4GpR6Lsmc9++a5m2bWV+NAXHXBWZE5m0XlH/aas=; b=KURwR5NGT6bSpqYoi14m9Pz+aBbbQ0mXMjKg61wLYPsY8ZP/lY8rZKvnAjNfGQOl/d +MWsxeR87JHVZk6ZfpVeDoUcK8LBPEMQpf1YeKBfmh053HWckxGYbZyGlDFH0txrPnPL iqnazAKB0sdTUG6vrKHNwUB+EOEgkaUN/UQoTSnELa7BA03mqWBd+7xRjNpunUAZHQQH jBzFK76BOgMf0tcIExn673j8UuSR8Ii+YNJKPfcJ/biVytj2ZpdDoj+xCst0rDbRyHRp md6EundHMrCNW5htCyP8p1y1JRsD2/dnenLTOEpYEoFaCHHY5LF6YcG7whrwCcryxUfI 9U5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777134712; x=1777739512; 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=Njwz4GpR6Lsmc9++a5m2bWV+NAXHXBWZE5m0XlH/aas=; b=Vo/uohoM4l+OzwIcWTs5LSOamXvU77cMUDW9WqUeSV99bpXiS+mGEgxaqB+cFH+MNs ssckdYjq7TvPL3usM+4NXJCk0YTX/rlFP7kg28iCb8TpMl//kJMj3RAEiatQkOSjwNvw pdsM0uQc5M114vz67UfhjFTEhaKGGeBWAI4JYG3lbMrioLQl0kSIfa65U059Nc8BoVfv Ch/gXpBRJuByeCeGRormELAdV4mrpXkDG0CQXAxP/btGuVtRJfU8BcH9/svSjA5Fv0t4 3V1MRTWJn87v8znXrR+cNm88rbZiIb7YSBT+5BLWTIysqG0dQNrqaOKBYlRfqF5FYYsc ESkQ== X-Gm-Message-State: AOJu0YxVIqrX9v8dPxeGOURspYRCaDxVOaVJ40rL9aSULDY38n2LgsAw W1bRnkCVHa5mKp6JR/TFHeHF4sSAKPT6Iz9up3s4sXs1Ah4erv3pfIamPW46teA+ X-Gm-Gg: AeBDieuLEG/iALQKTWjY8PietPBy55bTFR4T+GecNsmGppNIMMI+DE/bvWo7tgOk/E5 8S6XTElCIb1KelXg36cMutwrzC2alTNOGALoNK4+USfgZ//5boD/Cm7oezXNEaXQDsg+XDV+4FY FrnDp4inuifnFbVfwCuYUrd+rIZxF1WVsm6Hs5F3xve3xYRUgQR3Di/naAgylv6VQzT+BtZBt5J 2VEqhbVGASNRJu6o3yK1LsKlYoM+Jpg0xZoio2L0OPA7PqgIhSuOgK1xXCeVTnKavxBuaj0nElJ pTUvI+tYjT7/WfuK90W9lTQvcevIqC1H4pyuDTBet57KHHYmxRS6UXvk45ue8/mnxVB+2RAWmub rhfd2P3zAZd19fOS/n67YNXz7E/VPpuIdsAP9Ep9CLJRwc2szJlaSoVPX7Ycsc0rbsX2qi5PRh4 k1OeeEvxYGDdcVRZ9pPWT4jKQHyNjyLio61g== X-Received: by 2002:a05:7301:658a:b0:2e2:9c65:ef6c with SMTP id 5a478bee46e88-2e4646cdc9amr19222555eec.4.1777134712186; Sat, 25 Apr 2026 09:31:52 -0700 (PDT) Received: from TC-LAPTOP.lan ([66.143.226.29]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e53a4a8bd2sm35922547eec.11.2026.04.25.09.31.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 09:31:51 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: hansg@kernel.org, lee@kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, djrscally@gmail.com, linux-media@vger.kernel.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v6 1/5] platform/x86: intel_lpss: add resource conflict quirk for Dell Latitude 5285 Date: Sat, 25 Apr 2026 09:31:41 -0700 Message-ID: <20260425163145.8474-2-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260425163145.8474-1-tchatard@gmail.com> References: <20260425163145.8474-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 | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/mfd/intel-lpss-acpi.c b/drivers/mfd/intel-lpss-acpi.c index 63406026d..f08b41970 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,16 @@ 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 +184,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 +204,18 @@ 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 (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 Tue Jun 16 08:53:30 2026 Received: from mail-dy1-f177.google.com (mail-dy1-f177.google.com [74.125.82.177]) (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 AAC3A35DA56 for ; Sat, 25 Apr 2026 16:31:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134717; cv=none; b=CDwJmJPVnpWYOR/mGT+ClxwRRjjx7u/QiCRisN2JBhc2qDg24uSNH0RVn4SifYudRQCLx7+IDKkVF2PHV/z+fH/viE84cPYDXrzGyVeCyca4wBuysgdP1ctjAshWCd/FfVetwxB7TZOPxwqpN8h1R6DduZUmGMkXf34gEoBGOvg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134717; c=relaxed/simple; bh=FIxvoDwbLwQtSP5P+8VTM35kemls7O4jg6bqp3j/4/c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=udl60aNYZjbXs5G0aQ2kWXClI0BOrtB7sUT1cbAALcarG+wf6EaBZxGf4idjUG9+Z46iZJHGPUYNevnhp3ANAppbJJ6oIO9gGw4r/sIHfwEUyeoPTx8tCsPfv52NWNIQua7gmRVMF/v3xfNtkqVg7/VlyAdb09oJpuNBHgZVJTQ= 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=RrWta9iy; arc=none smtp.client-ip=74.125.82.177 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="RrWta9iy" Received: by mail-dy1-f177.google.com with SMTP id 5a478bee46e88-2b4520f6b32so12403294eec.0 for ; Sat, 25 Apr 2026 09:31:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777134714; x=1777739514; 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=qT+tPItvsjHY7RItgndIerm7VL1olTQZXKAgVp9YrJc=; b=RrWta9iyBcyTApi0O+zjHc5+MfBZ3qpwfN3oVtlxWuJ8TEngCQAgdFOPiXKS47hDvF qtP3DnJK1V6TLLyAs7UlNEZnQZTVCvK5haEcmW7fiL5iNj7AidxkSJElwoOLEBd1RiH4 w0DtP24QQ+8VNWsV9JQ5sS+Mh7xDP5WTCvEosX5aMlkmL4qmxFSA7KyOW6hT3WV419AJ LN8ijDe2DJhHN25tEUVQnnKhrwEEsDJJQ+9rJq8qncemqHQk28cfbjEgoMn8BpbndMbO N2i5Yg/ViorS5mYcFqIb1yU7gD5Op3TdyeXIQmVPIVJ1xezflcVKoH0WClzDZK0ReYKo eZ1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777134714; x=1777739514; 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=qT+tPItvsjHY7RItgndIerm7VL1olTQZXKAgVp9YrJc=; b=PoGoZVqsSlfMuT2QPmC466YABtLRuypBxTwG3Hivym1fHTGF5Nd24h5qzQGqkmEWSL E8ck9KD8+yQZjk/fTEnOqdR/uEzKQ4p/D5A8ePVCWRaEz/GptwPibnWyMSXGQQodEjGp nQauf0WMfcebGxKo45tZrFJjmmsJklq8jT5EawIZj8tznyWwDj8gRdnGLUiCpDjEYXK3 9bqVFdG5wXd4TZm7aYOisPv++33SbEs3sa5L+qeV+KLXwhAH8bTj1FESnNOFgHnlYs+d qsvfCGQowapsazqDQD8cR54I95A2gvoPCIiY2djMbwMqmK9zBQT9esRt8r5t8nLfYja3 WfoA== X-Gm-Message-State: AOJu0YwnaRsqp4INZhfobFny23ZXRu6je4b2u96C7lLpljRovBmADWDU QBcN33EnPx2VGyDGduJjeWK+OIJikjZZDX29UsyF/NP2DQlnnHrh2Su1jaC44/E3 X-Gm-Gg: AeBDietBe6Do9wicDNZVhN3at3p2mGy5WKU+rDtvI4lzD6dGIOTxtqh12gslYclxYEm bNoY1nHOhXoyeKro1i/GEWCox6+kDe3igliCm4D5j1KBAQcpI+OjzJKsvP7K0sMyhUSinnGADOx BFXOPKr4yOq9McbUfMqEaJ5kdJMb41s7ZWn4+wcJIEmSyZ0ruNDQ1eefjNWx5UBjTPcBWTGKXyb 9Blc1cKDnuQt3pK1UVLt9gj++8ylYVitx/5yh7JnUSp9LpZTWei2rVHFbGL4i0HU8RqHPJKyEmZ Asm7XklzltXvjDimv1kZGAjG8p13wjR5eA+4w8ulFySohHXrhjoWFZV8LnMLQ4NsPvczBISOLDc B2dbFHe0HX/bjmwKo+EM6j2E99E88Dp1mpnOMOzR3a8JogWG4ykfKJbBDUu+OpgGBoxfrgCJYmR 0XHny9REBrHERgfhLKqkLrYdz9ZMuLt3mb7Q== X-Received: by 2002:a05:7301:4d0d:b0:2ea:5057:a316 with SMTP id 5a478bee46e88-2ea5057b896mr7857173eec.13.1777134714407; Sat, 25 Apr 2026 09:31:54 -0700 (PDT) Received: from TC-LAPTOP.lan ([66.143.226.29]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e53a4a8bd2sm35922547eec.11.2026.04.25.09.31.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 09:31:54 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: hansg@kernel.org, lee@kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, djrscally@gmail.com, linux-media@vger.kernel.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v6 2/5] platform/x86: int3472: tps68470: fix clock consumer registration for Dell Latitude 5285 Date: Sat, 25 Apr 2026 09:31:42 -0700 Message-ID: <20260425163145.8474-3-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260425163145.8474-1-tchatard@gmail.com> References: <20260425163145.8474-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 BIOS on the Dell Latitude 5285 leaves GNVS field C0TP at zero. With C0TP=3D0 the ACPI _DEP method on INT3479 (OV5670, front camera) resolves to PCI0 instead of the INT3472 (TPS68470 PMIC) device. Because for_each_acpi_consumer_dev() walks the _DEP reverse-mapping, INT3479 is invisible to it: the clock consumer lookup entry for the front camera is never registered with the tps68470-clk driver, and the OV5670 sensor driver cannot acquire its MCLK. Fix this without touching ACPI tables by adding optional static clock consumer fields to struct int3472_tps68470_board_data: unsigned int n_clk_consumers; const struct tps68470_clk_consumer *clk_consumers; When board data is present and n_clk_consumers is non-zero, probe uses the static list instead of for_each_acpi_consumer_dev() to populate tps68470-clk platform data. Platforms that do not set these fields continue to use the existing ACPI traversal path unchanged. The board_data lookup is moved before the clock-pdata allocation so that it is available for both the static and dynamic paths. Signed-off-by: Thierry Chatard --- drivers/platform/x86/intel/int3472/tps68470.c | 113 +++++++++++------- drivers/platform/x86/intel/int3472/tps68470.h | 10 ++ 2 files changed, 79 insertions(+), 44 deletions(-) diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platfo= rm/x86/intel/int3472/tps68470.c index a496075c0..92da2ba80 100644 --- a/drivers/platform/x86/intel/int3472/tps68470.c +++ b/drivers/platform/x86/intel/int3472/tps68470.c @@ -147,17 +147,41 @@ static int skl_int3472_tps68470_probe(struct i2c_clie= nt *client) struct tps68470_clk_platform_data *clk_pdata; struct mfd_cell *cells; struct regmap *regmap; + struct gpiod_lookup_table * const *tables; int n_consumers; int device_type; int ret; - int i; + unsigned int i; =20 if (!adev) return -ENODEV; =20 - n_consumers =3D skl_int3472_fill_clk_pdata(&client->dev, &clk_pdata); - if (n_consumers < 0) - return n_consumers; + /* + * Look up board data before building clock platform data. On + * platforms where a sensor's ACPI _DEP does not list the INT3472 + * device, for_each_acpi_consumer_dev() misses that sensor and its + * clock consumer entry is never registered. Board data can supply + * a static consumer list to use instead, bypassing the broken _DEP + * traversal. + */ + board_data =3D int3472_tps68470_get_board_data(dev_name(&client->dev)); + + if (board_data && board_data->n_clk_consumers) { + clk_pdata =3D devm_kzalloc(&client->dev, + struct_size(clk_pdata, consumers, + board_data->n_clk_consumers), + GFP_KERNEL); + if (!clk_pdata) + return -ENOMEM; + clk_pdata->n_consumers =3D board_data->n_clk_consumers; + for (i =3D 0; i < board_data->n_clk_consumers; i++) + clk_pdata->consumers[i] =3D board_data->clk_consumers[i]; + n_consumers =3D board_data->n_clk_consumers; + } else { + n_consumers =3D skl_int3472_fill_clk_pdata(&client->dev, &clk_pdata); + if (n_consumers < 0) + return n_consumers; + } =20 regmap =3D devm_regmap_init_i2c(client, &tps68470_regmap_config); if (IS_ERR(regmap)) { @@ -176,52 +200,53 @@ static int skl_int3472_tps68470_probe(struct i2c_clie= nt *client) device_type =3D skl_int3472_tps68470_calc_type(adev); switch (device_type) { case DESIGNED_FOR_WINDOWS: - board_data =3D int3472_tps68470_get_board_data(dev_name(&client->dev)); - if (!board_data) - return dev_err_probe(&client->dev, -ENODEV, "No board-data found for th= is model\n"); - - cells =3D kzalloc_objs(*cells, TPS68470_WIN_MFD_CELL_COUNT); - if (!cells) - return -ENOMEM; - - /* - * The order of the cells matters here! The clk must be first - * because the regulator depends on it. The gpios must be last, - * acpi_gpiochip_add() calls acpi_dev_clear_dependencies() and - * the clk + regulators must be ready when this happens. - */ - cells[0].name =3D "tps68470-clk"; - cells[0].platform_data =3D clk_pdata; - cells[0].pdata_size =3D struct_size(clk_pdata, consumers, n_consumers); - cells[1].name =3D "tps68470-regulator"; - cells[1].platform_data =3D (void *)board_data->tps68470_regulator_pdata; - cells[1].pdata_size =3D sizeof(struct tps68470_regulator_platform_data); - cells[2].name =3D "tps68470-gpio"; - - for (i =3D 0; i < board_data->n_gpiod_lookups; i++) - gpiod_add_lookup_table(board_data->tps68470_gpio_lookup_tables[i]); - - ret =3D devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, - cells, TPS68470_WIN_MFD_CELL_COUNT, - NULL, 0, NULL); - kfree(cells); - - if (ret) { - for (i =3D 0; i < board_data->n_gpiod_lookups; i++) - gpiod_remove_lookup_table(board_data->tps68470_gpio_lookup_tables[i]); - } - break; case DESIGNED_FOR_CHROMEOS: - ret =3D devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, - tps68470_cros, ARRAY_SIZE(tps68470_cros), - NULL, 0, NULL); - break; + return devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, + tps68470_cros, + ARRAY_SIZE(tps68470_cros), + NULL, 0, NULL); default: dev_err(&client->dev, "Failed to add MFD devices\n"); return device_type; } =20 + if (!board_data) + return dev_err_probe(&client->dev, -ENODEV, + "No board-data found for this model\n"); + + cells =3D kzalloc_objs(*cells, TPS68470_WIN_MFD_CELL_COUNT); + if (!cells) + return -ENOMEM; + + /* + * The order of the cells matters here! The clk must be first + * because the regulator depends on it. The gpios must be last, + * acpi_gpiochip_add() calls acpi_dev_clear_dependencies() and + * the clk + regulators must be ready when this happens. + */ + cells[0].name =3D "tps68470-clk"; + cells[0].platform_data =3D clk_pdata; + cells[0].pdata_size =3D struct_size(clk_pdata, consumers, n_consumers); + cells[1].name =3D "tps68470-regulator"; + cells[1].platform_data =3D (void *)board_data->tps68470_regulator_pdata; + cells[1].pdata_size =3D sizeof(struct tps68470_regulator_platform_data); + cells[2].name =3D "tps68470-gpio"; + + tables =3D board_data->tps68470_gpio_lookup_tables; + for (i =3D 0; i < board_data->n_gpiod_lookups; i++) + gpiod_add_lookup_table(tables[i]); + + ret =3D devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, + cells, TPS68470_WIN_MFD_CELL_COUNT, + NULL, 0, NULL); + kfree(cells); + + if (ret) { + for (i =3D 0; i < board_data->n_gpiod_lookups; i++) + gpiod_remove_lookup_table(tables[i]); + } + /* * No acpi_dev_clear_dependencies() here, since the acpi_gpiochip_add() * for the GPIO cell already does this. @@ -233,7 +258,7 @@ static int skl_int3472_tps68470_probe(struct i2c_client= *client) static void skl_int3472_tps68470_remove(struct i2c_client *client) { const struct int3472_tps68470_board_data *board_data; - int i; + unsigned int i; =20 board_data =3D int3472_tps68470_get_board_data(dev_name(&client->dev)); if (board_data) { diff --git a/drivers/platform/x86/intel/int3472/tps68470.h b/drivers/platfo= rm/x86/intel/int3472/tps68470.h index 35915e701..1d3d67459 100644 --- a/drivers/platform/x86/intel/int3472/tps68470.h +++ b/drivers/platform/x86/intel/int3472/tps68470.h @@ -12,11 +12,21 @@ #define _INTEL_SKL_INT3472_TPS68470_H =20 struct gpiod_lookup_table; +struct tps68470_clk_consumer; struct tps68470_regulator_platform_data; =20 struct int3472_tps68470_board_data { const char *dev_name; const struct tps68470_regulator_platform_data *tps68470_regulator_pdata; + /* + * Static clock consumers. When n_clk_consumers is non-zero these + * are used in place of for_each_acpi_consumer_dev() to build the + * tps68470-clk platform data. Needed on platforms where a sensor's + * ACPI _DEP does not list the INT3472 device, causing that sensor + * to be missed by the ACPI dependency traversal. + */ + unsigned int n_clk_consumers; + const struct tps68470_clk_consumer *clk_consumers; unsigned int n_gpiod_lookups; struct gpiod_lookup_table *tps68470_gpio_lookup_tables[]; }; --=20 2.51.0 From nobody Tue Jun 16 08:53:30 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 68B4836164D for ; Sat, 25 Apr 2026 16:31:57 +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=1777134718; cv=none; b=pEJR77YexZkTK09FIhdi+nY7i5d9Bao7c2gCN5kvcG0ytsrEgEgqxKLrqvsae+G1eR7eepT8DlH53ykxrA2vEiqjXMIPTITXei9UK/T7aCHNbwZL2u+dGcSgVJs/2su9lhMHAwc2/Crkd05ttBU26x0f6nfTd/rBB+EzYVcJXHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134718; c=relaxed/simple; bh=tQVCUWPnmz+z7EC2JTxwJEAG8ApFHBzBlwu6BgQuJ4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BcNHQ+XWY2B3vlc4D/4OwzC5Mill4D64cA7+1EJArnUOb82bZEEebLv8AmNoCanKrXb55hAUz9YxhN42yKsW5Vf8AI+LLqbUqSxvwg7BXSYrPIuvvIM2An6YnsZ+5JmJVD+nunrDGc6ZXaKgjbw9owoD3XvEhLiJ6VoET0nMjpo= 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=P/EFiqXD; 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="P/EFiqXD" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-2d868d014a5so8671093eec.1 for ; Sat, 25 Apr 2026 09:31:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777134716; x=1777739516; 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=mWN0v5UH0k+rxliqf8aJrBdp3hf7DtwmTD7oZK678to=; b=P/EFiqXD1u6ma3wcxy4CIMr0iTw1+cPQkNBkYK2Vv0HjhPG4lXqMCD6+xYAybcxkzo fZ83jy1p2SX+zK0Dy3ynVFtJTWc+B9qY/QidQyn+PnmfyInXLw4nZ+hhE27Eii4Kqnk7 0aBrPTCJaHzgyq9nR44uh3XeoWBZOXkmCdOsAwIKQd25jArQxJOk6uAN7SwDffEBN/m5 c/7ZmJyePIT+vs1ltBBq7EBDMWZwT1CNca6DE7/yITGt87PHVVoi0RbnGIHA9000IU60 p6IxqShiJYqR05GlZW1PVd9VauNKAk7y0UN7GKZKbzDR2yHPZF4IzhLEc6DwwffEW+DP xwew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777134716; x=1777739516; 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=mWN0v5UH0k+rxliqf8aJrBdp3hf7DtwmTD7oZK678to=; b=lbFZ7V0ssg25DTB2zlv3py02FGKI0oDDGvv6aFQ9gkKaN2LvXPNOP3Zg11gG7bizDv cYTLlbopWAyrXgp6NNSJMA4NuiEpmUuW7I4jspZcwb1l5/YwZEnzIBxGnwyzc+aneWul 4NSOi8QTwXcBCgCOaODqApGR0bWPsLWmeWE9FqpsitabjEELu+MowDX8z042tDT5yfEV onj2jVIv0+JFc3X/KlD4L69rueZMyaL4aUGbdteVQ2dvhvUAQnR7YA38ITH3H61rSTHg WFlvQ/+gvxGnMfC4T6Mnm2lexiJZIPzDGJHn03o9tDZP5D6uO865EyAHkpiDo17vRVaD FSyQ== X-Gm-Message-State: AOJu0YzV4amga9H1nXPQPc/zV3fX7nzkslINAjeyiQO4wwfV5J2JUeNq mVZJw7YMJk/earxswx3xlsfk7VwbAipKPeHb0HYbWQE7dp0Ja5iPUJCANcCNiUjP X-Gm-Gg: AeBDietgCeXNuLJKXcrLodiTdEO3AdZMSatKa5JSWTTJ0JLq/59zOU7khZA0u77dfAv uLFaZql4f8J3QxrGEg6atE2YUQppjkGRLOg0TD0L7mfU1+dWxP5RTjkHE5Z879ZHxhgDG7zG6eO vaK96mKdBD0gw7t97x53wIjo1M9AfqrqelxV28z9rQllPiOkr9Fx4qIL5moUD+kkXmHczLMsJFM RbWSymfCYQbkQ7dShMKARiifV6JIzD4dFelRVXfy1rNYsVWYsyhrPMC3gazqDtibAEvVPS8fLQf DdzHzcJTzps2E6wsBzws9CI0hz2BCP/M+qCB20ns3Oj4Zi9aPsDOSBRl5SSVr57WT03oF2Gscdk +hMJJMBexbtAQEcVmF2G4Sg3ZiLGngOMv0IsWMKUsOtNf6TiQ7wX7fI5sjWlJzOLpD+4eGt/IsA uzsVvDDhkfdi73nT4/nFnl9dJYwBjrWaB9Zw== X-Received: by 2002:a05:693c:2b04:b0:2e2:a4ba:84ae with SMTP id 5a478bee46e88-2e479017499mr19781483eec.25.1777134716446; Sat, 25 Apr 2026 09:31:56 -0700 (PDT) Received: from TC-LAPTOP.lan ([66.143.226.29]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e53a4a8bd2sm35922547eec.11.2026.04.25.09.31.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 09:31:56 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: hansg@kernel.org, lee@kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, djrscally@gmail.com, linux-media@vger.kernel.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v6 3/5] platform/x86: int3472: tps68470: add board data for Dell Latitude 5285 Date: Sat, 25 Apr 2026 09:31:43 -0700 Message-ID: <20260425163145.8474-4-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260425163145.8474-1-tchatard@gmail.com> References: <20260425163145.8474-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 -> generic (kept always_on; no direct consumers) VSIO -> dovdd / INT3477: enabling VSIO sets S_I2C_CTL (reg 0x43), opening the I2C passthrough to OV8858; the ov8858 driver enables dovdd at probe time, which naturally activates the passthrough before any I2C transaction to the sensor. AUX1 -> dvdd / INT3479 AUX2 -> dovdd / INT3479 A static clock consumer list is provided for both sensors (INT3477 and INT3479) to work around the broken ACPI _DEP on INT3479 described in the previous patch. Signed-off-by: Thierry Chatard --- .../x86/intel/int3472/tps68470_board_data.c | 170 +++++++++++++++++- 1 file changed, 167 insertions(+), 3 deletions(-) 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..6961e2926 100644 --- a/drivers/platform/x86/intel/int3472/tps68470_board_data.c +++ b/drivers/platform/x86/intel/int3472/tps68470_board_data.c @@ -74,8 +74,12 @@ static const struct regulator_init_data surface_go_tps68= 470_vcm_reg_init_data =3D .consumer_supplies =3D int347a_vcm_consumer_supplies, }; =20 -/* Ensure the always-on VIO regulator has the same voltage as VSIO */ -static const struct regulator_init_data surface_go_tps68470_vio_reg_init_d= ata =3D { +/* + * Keep VIO always_on. Its voltage must exactly match VSIO on any board + * using the TPS68470 I2C pass-through, and must never have direct consume= rs + * (all I2C-path outputs are gated through VSIO). + */ +static const struct regulator_init_data generic_tps68470_vio_reg_init_data= =3D { .constraints =3D { .min_uV =3D 1800600, .max_uV =3D 1800600, @@ -122,7 +126,7 @@ static const struct tps68470_regulator_platform_data su= rface_go_tps68470_pdata =3D [TPS68470_CORE] =3D &surface_go_tps68470_core_reg_init_data, [TPS68470_ANA] =3D &surface_go_tps68470_ana_reg_init_data, [TPS68470_VCM] =3D &surface_go_tps68470_vcm_reg_init_data, - [TPS68470_VIO] =3D &surface_go_tps68470_vio_reg_init_data, + [TPS68470_VIO] =3D &generic_tps68470_vio_reg_init_data, [TPS68470_VSIO] =3D &surface_go_tps68470_vsio_reg_init_data, [TPS68470_AUX1] =3D &surface_go_tps68470_aux1_reg_init_data, [TPS68470_AUX2] =3D &surface_go_tps68470_aux2_reg_init_data, @@ -287,6 +291,159 @@ static const struct int3472_tps68470_board_data dell_= 7212_tps68470_board_data =3D }, }; =20 +/* Settings for Dell Latitude 5285 2-in-1 */ + +/* + * The BIOS leaves GNVS field C0TP at zero, which causes INT3479's _DEP to + * resolve to PCI0 instead of the INT3472 device. Provide a static clock + * consumer list so probe registers MCLK lookups for both sensors regardle= ss + * of the broken _DEP traversal. + */ +static const struct tps68470_clk_consumer dell_5285_clk_consumers[] =3D { + { .consumer_dev_name =3D "i2c-INT3477:00" }, /* OV8858 rear camera */ + { .consumer_dev_name =3D "i2c-INT3479:00" }, /* OV5670 front camera */ +}; + +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"), +}; + +/* + * VSIO controls the S_I2C_CTL passthrough; its voltage must match VIO + * (both 1800600 uV). dovdd/INT3477 enables the passthrough when OV8858 + * opens its I2C path. avdd/INT3479 provides the OV5670 analog supply. + */ +static struct regulator_consumer_supply dell_5285_int3477_vsio_consumer_su= pplies[] =3D { + REGULATOR_SUPPLY("dovdd", "i2c-INT3477:00"), + REGULATOR_SUPPLY("avdd", "i2c-INT3479: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_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, + }, + .num_consumer_supplies =3D ARRAY_SIZE(dell_5285_int3477_vsio_consumer_sup= plies), + .consumer_supplies =3D dell_5285_int3477_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 &generic_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_clk_consumers =3D ARRAY_SIZE(dell_5285_clk_consumers), + .clk_consumers =3D dell_5285_clk_consumers, + .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 +473,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 Tue Jun 16 08:53:30 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.169]) (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 38EF23644A6 for ; Sat, 25 Apr 2026 16:31:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134720; cv=none; b=tDBabfHBCynyECNzX6qsGznWXBkvxtvGUGnKM8ZBTh1+wT4Ihft0CgZrJxhYKu0TpVvRLMqTUZog3AiqZoGRsS1NVoZjVhkJrhwfPTB7UDwi5OZ4GvfEt6QuVmuaByJDYjONeQGpbC5cbkME+8Hf4fC0/syyHmKM+watDFs+57U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134720; c=relaxed/simple; bh=wde4TF8CgNzn8si/JL9P12OCZloroRuFEPIxq/TcvgI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ssjWZNUjJ8pRek6qj2tbchtruXqryfcZiz89rGVIxQasAJarBZ8soOVEV2awM12Fkpykn3pkU5mud4aedZWJro0Bm4XFegSQEd1ojFBmg3bK+mSh+DobK7+MHuzDcL2SFFZSIwO7uYjxpnV/UGSsKIjwV2hc2/qBQVoisfWZncY= 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=BRM/pyJF; arc=none smtp.client-ip=74.125.82.169 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="BRM/pyJF" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-2e221a71e19so8653465eec.0 for ; Sat, 25 Apr 2026 09:31:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777134718; x=1777739518; 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=BRM/pyJF4Wc5DelUIb5mB3NelzylN5o7Pxtc+CnZcWyGGR2q4/0nLRf1rx6wjETAoD +/x5Eks8WJ44n9nAnaLgQyTcxki8B2/Ea7nsUR+Wljuw556oHou1dnsblQ3OovU3Y2/l TMFAEZV3w6ruazM7b/7MVb7nMKKZl6usJJWHiNjGZ0qIrAYvf2n700hWYUnKY0IqwZyC Q6v504UtN7eAG0AdSAz8idUzP0UfN+WHB5kp/uVIx83kOmoWt0L6rP2POUqwU7rBbdGI hI1QQ7hnFXJcRDgcM3Hw5gIeF6lHnzyHvE9ERn2OuTfPLzx0fBHaeqeNVpLbP/xj0r/D mNXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777134718; x=1777739518; 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=cycHs6OvOzOzhSZpItVUHmajqrT4Twb8lfq06eA6eqdPiQlzeFMTblBkabNwhrO796 5/cXN0jP3JUrCgdNjhsv7CJLvVsW5tyiUfgqswCx25sJaxcdye0sO2ZO/zYhHIf3tOer lfRg6tFCWy28gyVfy9eRC6pL+a5O7RPaDYzKMWtzkOmQwJsJk9NJiwEsdQcFG/7agAER ky/cFBQ2MsEB6iutffZfALIGYlBl3ZJXuZKywgNMxO4s+P/7a98oNE3R4MDVG6EmPPHR Uu9grZAAnbBUAZ7uciZWKwxSPo72Z+s8b6PpZxQ0OoN6rUuf8akwo/45C3Pagfkyl11+ S5Lw== X-Gm-Message-State: AOJu0YzFTyIhLarL7OoGK0CKkre1WcrY+YJvlAopgv1SLZ3RlZ1+fyVO cI5dELsJtxh+F1IlBilq7yByJNRjnEwT+VWaJ5WIE+R24MrUj52JxAeNrlLrECOP X-Gm-Gg: AeBDietQbxTN21FF0JfwuVaZFBTcgih9F+HD61HDkDmd9/cBoKItB6BDjdMG1vq1212 hNQfmJi1DPY3/uY+tahXbxBuuzh+Z0+CqPWjCyo9tJ1wAboBjr5mi7+q8sBBAu/Tc9Asos0hM98 Z0An1HcRvwjv2F8rOq//hZere680+2MsrdveqMhIhfLFyQHFZWiQl4EQ84u2T0ZSYeVbSDYv700 zbAjDCotrnxUsSLWIdC4TDnhuS/ewQ4AUG7KhP9I1Yrjnon5PYz2i/0i9rzIG2Nn0aWkXCMiFyf xFWLp54D2Mvcr5RWMmzYuU6WsHy5BO2GN+Na/YkzB7ojFh65kMU8dlTIaAlg2MvLghfGUaQss0y lVCIlLsSgrleR/g5tdMQPC2JYH7UW2AJPdp9TzhzG4o/vtwfcdyeFlX3j8nxA6MwxyloujlBEwf rOJw8wMLU3wOqhgiY7n7j3z3h2if4Wygo2pgNEf4NtbmLk X-Received: by 2002:a05:7300:2393:b0:2d9:6f2f:9f6f with SMTP id 5a478bee46e88-2e483d82ddbmr21223138eec.24.1777134718278; Sat, 25 Apr 2026 09:31:58 -0700 (PDT) Received: from TC-LAPTOP.lan ([66.143.226.29]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e53a4a8bd2sm35922547eec.11.2026.04.25.09.31.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 09:31:58 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: hansg@kernel.org, lee@kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, djrscally@gmail.com, linux-media@vger.kernel.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v6 4/5] media: ipu-bridge: add sensor configuration for OV8858 (INT3477) Date: Sat, 25 Apr 2026 09:31:44 -0700 Message-ID: <20260425163145.8474-5-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260425163145.8474-1-tchatard@gmail.com> References: <20260425163145.8474-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 Tue Jun 16 08:53:30 2026 Received: from mail-dy1-f182.google.com (mail-dy1-f182.google.com [74.125.82.182]) (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 88105366DD3 for ; Sat, 25 Apr 2026 16:32:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134722; cv=none; b=AhquI6VKzzrnZ++fKiQqM3tV8kluqpBph7AYo7MywYpBa8jkJgHK363mfV/vTxAiiCJk3+gYA07mfrXfQ82pSy0TsdFmEjxQjkA2ypnh5oFyowImUDbLYdfZBkcg9Lh2/BAL7MIiLpAvIMrm1Cf6zkF/WQ3byAlewKjxrHguMOg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777134722; c=relaxed/simple; bh=JeFAGlclU046JIgSg4OVyBoSGPhLkEXsWzJ0ES221g0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hOBJgCr6frYf3aOr1xccs01I8BwjYp3WvOyFXscfl0XQ4u9Cp7+kYyb0lbEoNAPrKQeIku6RVyJyagNkFGICyzkXBQQq/QEc56ijmfd26wIOIm6ITVjOzzqpI7dLpY1sRoKz+z8w8UTDqbXpcHtCYReR9N9H0QlA4ugSBGC1xIw= 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=HlGCA5xV; arc=none smtp.client-ip=74.125.82.182 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="HlGCA5xV" Received: by mail-dy1-f182.google.com with SMTP id 5a478bee46e88-2d8ffdc31d0so266023eec.0 for ; Sat, 25 Apr 2026 09:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777134720; x=1777739520; 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=CDF8n/DtizrT4QllCHI1cUw7JqDkCzaU+Ja6VBXSysk=; b=HlGCA5xVch97pywvv4d7rQOR/7J261BZd9UbKLz18Y+I9fB64uG06scuzCdEHgPXlS D2sNts09R836qNfWLP/FefeZOHMhw6y1Ds2zfxw6CTJP3ZeomYmEr2+BEgCl5lDiCo0m +Ph7Su17ZEC7BtXGaOr0l8s2R6XNUBKOI9A/IogqJWP85PBHlyyd/KsvIx/C+BkaBHu5 c5MC4sWuK6Sd5Xh9KZU3PlOLBw9v5OJUY2xvBLFxIMLphJcuOz4WSryQhb0f4JkGRpxT 8vRTIC94qV8bMPWKlc9nXvVQttnL7T7imaz/P27P3t5a5baoQO77Ou5AaQQ9PB3DiCjL gUOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777134720; x=1777739520; 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=CDF8n/DtizrT4QllCHI1cUw7JqDkCzaU+Ja6VBXSysk=; b=My+aC3LHXVZY+OhAN3ma3INcmM8PgIA3/3zPUq+USbQibSPURekBzCZq4/vriAvWa6 cTx4X68Eel2DzFPQqKA8iq6vBN9XNiVnLRQv0uFWM2gi2GJ3J4GunpcRbvDTxwS2EUpw yShIOWIQED/n+TFCt/U/n9LZtMWE+EbvNIYqB5NQ7k7rrFUMUAV+64GcltOc60VZVkti Hiat4QlTrlCcdyBCQDOnS03rClK0oAhjryFU4TNW/v0Y3JkZ1zupDSsz7Trwao19OkVz yKf5TDUJI8alSUcdNL4ukCDz8h/2nYpgmg9iu4a4Bk9JqlNfMfNTvLOjdRq/5jrmfQhy qYiw== X-Gm-Message-State: AOJu0Yw+mOMdgqSlY5lUFrGUpcxCMW1Yj9e98fJbj2tprey2APHjj31I e5b0PPq1ortCHFdcQl9Xa7BFmgcHZ9KtEH5nvAv1lC+ftewaHtMIFtzvtYwQNfQb X-Gm-Gg: AeBDiesxl9nV/biHIdScwAdEkVKP8sPg6N5SASuwbfSO0Ca2e9t0T9tHZpYEdxjhxnK TA+3Br2cOIe8yxbTreRonXazs24Vm+F6Rq41U+q5HO4SrAOiURQLn+cKNg8pCOHYbciAnsk5VSQ H1pwUFy79oYcShCtlY2uGwpTUAVP39EMeRiJ0AMJ2kcnux9PoyqUBZrQuvalmIzpqbVx5skQZKc vKf+9kRuqtTHV+yRypop8eMbQVfPCGK9hK/lQir7TwtVd0MVa8MN2shjaRQhnFoek1yls7XApsc 6h9E1svUwXtMhwRu9Bs0XbH1Foh0FldFlKl4RUQDkhTaExHWi1s4u1ANPCWlwYRBCii+qyxsxMM +CnMhDcWYN5YV+Llf6xYTk0Y3wavtq/6Spn9AqVk2wrFKkxiP9T4dLiHx+tZCZgx7Htf0s1SIoY 5wx/4HCPNcJeRPI8P0+Cu4AzLyr2sWy0Pc5Q== X-Received: by 2002:a05:7301:6096:b0:2e1:f72:3f18 with SMTP id 5a478bee46e88-2e4648c5f75mr22676084eec.1.1777134720156; Sat, 25 Apr 2026 09:32:00 -0700 (PDT) Received: from TC-LAPTOP.lan ([66.143.226.29]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2e53a4a8bd2sm35922547eec.11.2026.04.25.09.31.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Apr 2026 09:31:59 -0700 (PDT) From: Thierry Chatard To: linux-kernel@vger.kernel.org Cc: hansg@kernel.org, lee@kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, djrscally@gmail.com, linux-media@vger.kernel.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, Thierry Chatard Subject: [PATCH v6 5/5] media: ov8858: add ACPI device ID INT3477 Date: Sat, 25 Apr 2026 09:31:45 -0700 Message-ID: <20260425163145.8474-6-tchatard@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260425163145.8474-1-tchatard@gmail.com> References: <20260425163145.8474-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. The supply names are reordered to dvdd before dovdd so that core power is stable before the I2C passthrough opens (on this platform dovdd maps to the VSIO/S_I2C_CTL regulator, which gates I2C access to the sensor). Signed-off-by: Thierry Chatard --- drivers/media/i2c/ov8858.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index 3f45f7fab..a1fa0be52 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -79,8 +79,8 @@ =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 */ }; =20 struct regval { @@ -1981,11 +1981,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 ov8858_acpi_ids, }, .probe =3D ov8858_probe, .remove =3D ov8858_remove, --=20 2.51.0