xhci-pci: Make xhci-pci-renesas a proper modular driver
authorBen Hutchings <ben@decadent.org.uk>
Wed, 31 Jul 2024 20:32:29 +0000 (22:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Aug 2024 10:51:38 +0000 (12:51 +0200)
commit25f51b76f90f10f9bf2fbc05fc51cf685da7ccad
treef86cccc1838c1f41d04f775513d183cdffb54e4c
parentf358602425486fce2eac1a9592444c9840557754
xhci-pci: Make xhci-pci-renesas a proper modular driver

If CONFIG_USB_XHCI_PCI_RENESAS is enabled, xhci-pci conditionally
calls into the xhci-pci-renesas module, which means both modules must
be loaded to use any xHCI PCI controller.

The MODULE_FIRMWARE declaration in the base xhci-pci module causes
initramfs-tools to check for and warn about missing firmware for the
Renesas xHCI controllers, when any xHCI PCI controller is present.
And because of the previous oddity, simply moving this declaration to
xhci-pci-renesas wouldn't help.

To fix this, reverse the relationship between the modules:

- Remove the quirk for the Renesas xHCIs, and the driver_data
  structure used only for them
- In xhci-pci:
  - Rename xhci_pci_probe() to xhci_pci_common_probe()
  - Export xhci_pci_common_probe() and xhci_pci_remove()
  - Use a new probe function that rejects the Renesas xHCIs and then
    calls the common probe function
- In xhci-pci-renesas:
  - Stop exporting renesas_xhci_check_request_fw()
  - Add a probe function that calls renesas_xhci_check_request_fw()
    followed by xhci_pci_common_probe()
  - Add and register a new pci_driver matching only the Renesas xHCIs
    and using its own probe function, but with other operations the
    same as in xhci-pci
- Make CONFIG_USB_XHCI_PCI_RENESAS depend on CONFIG_USB_XHCI_PCI,
  not the other way around

Finally, move the MODULE_FIRMWARE declaration to xhci-pci-renesas.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Tested-by: Cyril Brulebois <cyril@debamax.com>
Link: https://lore.kernel.org/r/ZqqfXYRJf7kGaqus@decadent.org.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/Kconfig
drivers/usb/host/xhci-pci-renesas.c
drivers/usb/host/xhci-pci.c
drivers/usb/host/xhci-pci.h
drivers/usb/host/xhci.h