Message ID | 20211230141722.512395-3-hdegoede@redhat.com |
---|---|
State | Awaiting Upstream |
Headers | show |
Series | ACPI / pdx86: Add support for x86 Android tablets with broken DSDTs | expand |
On Thu, Dec 30, 2021 at 03:17:21PM +0100, Hans de Goede wrote: > x86 ACPI devices which ship with only Android as their factory image > usually declare a whole bunch of bogus I2C devices in their ACPI tables. > > Instantiating I2C clients for these bogus devices causes various issues, > e.g. GPIO/IRQ resource conflicts because sometimes drivers do bind to them. > The Android x86 kernel fork shipped on these devices has some special code > to remove these bogus devices, instead of just fixing the DSDT <sigh>. > > Use the new acpi_quirk_skip_i2c_client_enumeration() helper to identify > known boards / acpi devices with this issue, and skip enumerating these. > > Note these boards typically do actually have I2C devices, just > different ones then the ones described in their DSDT. The devices > which are actually present are manually instantiated by the > drivers/platform/x86/x86-android-tablets.c kernel module. > > Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Wolfram Sang <wsa@kernel.org>
diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c index c87ce2276007..85ed4c1d4924 100644 --- a/drivers/i2c/i2c-core-acpi.c +++ b/drivers/i2c/i2c-core-acpi.c @@ -257,6 +257,13 @@ static void i2c_acpi_register_device(struct i2c_adapter *adapter, struct acpi_device *adev, struct i2c_board_info *info) { + /* + * Skip registration on boards where the ACPI tables are + * known to contain bogus I2C devices. + */ + if (acpi_quirk_skip_i2c_client_enumeration(adev)) + return; + adev->power.flags.ignore_parent = true; acpi_device_set_enumerated(adev);