ACPI / glue: Add .match() callback to struct acpi_bus_type
USB uses the .find_bridge() callback from struct acpi_bus_type incorrectly, because as a result of the way it is used by USB every device in the system that doesn't have a bus type or parent is passed to usb_acpi_find_device() for inspection. What USB actually needs, though, is to call usb_acpi_find_device() for USB ports that don't have a bus type defined, but have usb_port_device_type as their device type, as well as for USB devices. To fix that replace the struct bus_type pointer in struct acpi_bus_type used for matching devices to specific subsystems with a .match() callback to be used for this purpose and update the users of struct acpi_bus_type, including USB, accordingly. Define the .match() callback routine for USB, usb_acpi_bus_match(), in such a way that it will cover both USB devices and USB ports and remove the now redundant .find_bridge() callback pointer from usb_acpi_bus. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Yinghai Lu <yinghai@kernel.org> Acked-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
@@ -353,8 +353,14 @@ static int __init acpi_pnp_find_device(struct device *dev, acpi_handle * handle)
|
||||
/* complete initialization of a PNPACPI device includes having
|
||||
* pnpdev->dev.archdata.acpi_handle point to its ACPI sibling.
|
||||
*/
|
||||
static bool acpi_pnp_bus_match(struct device *dev)
|
||||
{
|
||||
return dev->bus == &pnp_bus_type;
|
||||
}
|
||||
|
||||
static struct acpi_bus_type __initdata acpi_pnp_bus = {
|
||||
.bus = &pnp_bus_type,
|
||||
.name = "PNP",
|
||||
.match = acpi_pnp_bus_match,
|
||||
.find_device = acpi_pnp_find_device,
|
||||
};
|
||||
|
||||
|
Referens i nytt ärende
Block a user