Re: [PATCH 1/5] platform/x86: intel_lpss: add resource conflict quirk for Dell Latitude 5285
From: Andy Shevchenko
Date: Wed Apr 29 2026 - 05:29:58 EST
On Thu, Mar 19, 2026 at 05:09:29PM -0700, Thierry Chatard wrote:
> 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.
Was there any new version? In any case keep me in Cc list for at lease Intel
LPSS parts.
...
> #include <linux/ioport.h>
> #include <linux/mod_devicetable.h>
> #include <linux/module.h>
> +#include <linux/acpi.h>
> +#include <linux/dmi.h>
Keep that in order.
> #include <linux/pm.h>
> #include <linux/pm_runtime.h>
> #include <linux/platform_device.h>
...
> +/* Same as spt_i2c_info but with QUIRK_IGNORE_RESOURCE_CONFLICTS for Dell 5285
> + * where ACPI GEXP device conflicts with I2C4 (INT3446) MMIO resources.
> + */
/*
* Multi-line comments have to follow the
* style as in this example.
*/
> +static const struct intel_lpss_platform_info spt_i2c_info_ignore_conflicts = {
> + .clk_rate = 120000000,
> + .swnode = &spt_i2c_node,
> + .quirks = QUIRK_IGNORE_RESOURCE_CONFLICTS,
> +};
No, please just add a quirk into .driver_data of DMI below.
...
> + /* 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.
> + */
See about multi-line comment style above.
> + if (data == &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 = &spt_i2c_info_ignore_conflicts;
> + }
No, just take a quirk and apply it after we dup the info,
> info = devm_kmemdup(&pdev->dev, data, sizeof(*info), GFP_KERNEL);
> if (!info)
> return -ENOMEM;
Somewhere here against 'info'. See how PCI counterpart does.
And better is to create ACPI ID table for that (as we do for PCI case) and use
it as a matching material. So, something like
if (DMI matches) {
struct acpi_device_id *id; // maybe even const, don't remember
id = match_acpi_ID();
if (id)
info->quirks = assign the quirk.
}
--
With Best Regards,
Andy Shevchenko