• Jarkko Nikula's avatar
    i2c: core: Add function for finding the bus speed from ACPI, take 2 · 5853b22d
    Jarkko Nikula authored
    ACPI 5 specification doesn't have property for the I2C bus speed but
    I2cSerialBus resource descriptor which define each controller-slave
    connection define the maximum speed supported by that connection.
    
    Thus finding the maximum safe speed for the bus is to walk through all
    I2cSerialBus resources that are associated to I2C controller and use the
    speed of slowest connection.
    
    Add function i2c_acpi_find_bus_speed() to the i2c-core that adapter
    drivers can call prior registering itself to core.
    
    This implies two-step walk through the I2cSerialBus resources: call to
    i2c_acpi_find_bus_speed() does the first scan and finds the safe bus
    speed that adapter drivers can set up. Adapter driver registration does
    the second scan when i2c-core creates the I2C slaves by calling the
    i2c_acpi_register_devices(). In that way the bus speed is set in case
    slave device probe gets called during registration and does communication.
    
    Previous version commit 55d38d06 ("i2c: core: Add function for finding
    the bus speed from ACPI") got reverted due merge conflicts from
    commit 525e6fab ("i2c / ACPI: add support for ACPI reconfigure
    notifications").
    
    This version is a bit bigger than previous version but is still sharing
    the lowest and complicated part of I2cSerialBus lookup routines with the
    existing code.
    Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@linux.intel.com>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    5853b22d
i2c-core.c 92.8 KB