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>
Showing
- drivers/acpi/glue.c 13 additions, 26 deletionsdrivers/acpi/glue.c
- drivers/ata/libata-acpi.c 1 addition, 0 deletionsdrivers/ata/libata-acpi.c
- drivers/pci/pci-acpi.c 7 additions, 1 deletiondrivers/pci/pci-acpi.c
- drivers/pnp/pnpacpi/core.c 7 additions, 1 deletiondrivers/pnp/pnpacpi/core.c
- drivers/scsi/scsi_lib.c 6 additions, 1 deletiondrivers/scsi/scsi_lib.c
- drivers/usb/core/usb-acpi.c 7 additions, 2 deletionsdrivers/usb/core/usb-acpi.c
- include/acpi/acpi_bus.h 2 additions, 1 deletioninclude/acpi/acpi_bus.h
Loading
Please register or sign in to comment