• Mika Westerberg's avatar
    i2c / ACPI: Do not touch an I2C device if it belongs to another adapter · 318ce278
    Mika Westerberg authored
    When enumerating I2C devices connected to an I2C adapter we scan the whole
    namespace (as it is possible to have devices anywhere in that namespace,
    not just below the I2C adapter device) and add each found device to the I2C
    bus in question.
    
    Now after commit 525e6fab ("i2c / ACPI: add support for ACPI
    reconfigure notifications") checking of the adapter handle to the one found
    in the I2cSerialBus() resource was moved to happen after resources of the
    I2C device has been parsed. This means that if the I2cSerialBus() resource
    points to an adapter that does not exists in the system we still parse
    those resources. This is problematic in particular because
    acpi_dev_resource_interrupt() tries to configure GSI if the device also has
    an Interrupt() resource. Failing to do that results errrors like this to be
    printed on the console:
    
      [   10.409490] ERROR: Unable to locate IOAPIC for GSI 37
    
    To fix this we pass the I2C adapter to i2c_acpi_get_info() and make sure
    the handle matches the one in the I2cSerialBus() resource before doing
    anything else to the device.
    Reported-by: default avatarNicolai Stange <nicstange@gmail.com>
    Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Reviewed-by: default avatarNicolai Stange <nicstange@gmail.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    318ce278
i2c-core.c 93.3 KB