• Z
    ACPI: add module autoloading support for ACPI enumerated devices · 6eb2451f
    Zhang Rui 提交于
    An ACPI enumerated device may have its compatible id strings.
    
    To support the compatible ACPI ids (acpi_device->pnp.ids),
    we introduced acpi_driver_match_device() to match
    the driver->acpi_match_table and acpi_device->pnp.ids.
    
    For those drivers, MODULE_DEVICE_TABLE(acpi, xxx) is used to
    exports the driver module alias in the format of
    "acpi:device_compatible_ids".
    But in the mean time, the current code does not export the
    ACPI compatible strings as part of the module_alias for the
    ACPI enumerated devices, which will break the module autoloading.
    
    Take the following piece of code for example,
    static const struct acpi_device_id xxx_acpi_match[] = {
            { "INTABCD", 0 },
            { }
    };
    MODULE_DEVICE_TABLE(acpi, xxx_acpi_match);
    
    If this piece of code is used in a platform driver for
    an ACPI enumerated platform device, the platform driver module_alias
    is "acpi:INTABCD", but the uevent attribute of its platform device node
    is "platform:INTABCD:00" (PREFIX:platform_device->name).
    If this piece of code is used in an i2c driver for an ACPI enumerated
    i2c device, the i2c driver module_alias is "acpi:INTABCD", but
    the uevent of its i2c device node is "i2c:INTABCD:00" (PREFIX:i2c_client->name).
    If this piece of code is used in an spi driver for an ACPI enumerated
    spi device, the spi driver module_alias is "acpi:INTABCD", but
    the uevent of its spi device node is "spi:INTABCD" (PREFIX:spi_device->modalias).
    
    The reason why the module autoloading is not broken for now is that
    the uevent file of the ACPI device node is "acpi:INTABCD".
    Thus it is the ACPI device node creation that loads the platform/i2c/spi driver.
    
    So this is a problem that will affect us the day when the ACPI bus
    is removed from device model.
    
    This patch introduces two new APIs,
    one for exporting ACPI ids in uevent MODALIAS field,
    and another for exporting ACPI ids in device' modalias sysfs attribute.
    
    For any bus that supports ACPI enumerated devices, it needs to invoke
    these two functions for their uevent and modalias attribute.
    Signed-off-by: NZhang Rui <rui.zhang@intel.com>
    Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    6eb2451f
acpi.h 18.8 KB