Message ID | 20211116120642.v17.3.I7a3a7d9d2126c34079b1cab87aa0b2ec3030f9b7@changeid (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | usb: misc: Add onboard_usb_hub driver | expand |
Hi, On Tue, Nov 16, 2021 at 12:07 PM Matthias Kaehlcke <mka@chromium.org> wrote: > > Call onboard_hub_create/destroy_pdevs() from usb_add/remove_hcd() > for primary HCDs to create/destroy platform devices for onboard > USB hubs that may be connected to the root hub of the controller. > These functions are a NOP unless CONFIG_USB_ONBOARD_HUB=y/m. > > Also add a field to struct usb_hcd to keep track of the onboard hub > platform devices that are owned by the HCD. > > Signed-off-by: Matthias Kaehlcke <mka@chromium.org> > --- > > Changes in v17: > - create the platform devices in the generic HCD code instead of > the xhci_platform driver > - updated subject and commit message to reflect the above change > - dropped initialization of platform device list, which is now > done in onboard_hub_create_pdevs() > > Changes in v16: > - none > > Changes in v15: > - none > > Changes in v14: > - none > > Changes in v13: > - added comment for 'depends on USB_ONBOARD_HUB || !USB_ONBOARD_HUB' > construct > > Changes in v12: > - none > > Changes in v11: > - use onboard_hub_create/destroy_pdevs() to support multiple onboard > hubs that are connected to the same root hub > - moved field/list to keep track of platform devices from struct > usb_hcd to struct xhci_hcd > - updated commit message > > Changes in v10: > - none > > Changes in v9: > - added dependency on USB_ONBOARD_HUB (or !!USB_ONBOARD_HUB) to > USB_XHCI_PLATFORM > > Changes in v8: > - none > > Changes in v7: > - none > > Changes in v6: > - none > > Changes in v5: > - patch added to the series > > drivers/usb/core/hcd.c | 6 ++++++ > include/linux/usb/hcd.h | 1 + > 2 files changed, 7 insertions(+) This looks sane to me, so: Reviewed-by: Douglas Anderson <dianders@chromium.org> That being said, I don't know these functions and can't say with any authority that this is the "right" place to put the onboard_hub_create_pdevs() and onboard_hub_destroy_pdevs(). I'm assuming that Alan, Greg, or someone else on this CC list will scrutinize that more closely and make sure where Matthias picked is OK. -Doug
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 4d326ee12c36..b8220e411e07 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -36,6 +36,7 @@ #include <linux/phy/phy.h> #include <linux/usb.h> #include <linux/usb/hcd.h> +#include <linux/usb/onboard_hub.h> #include <linux/usb/otg.h> #include "usb.h" @@ -2963,6 +2964,9 @@ int usb_add_hcd(struct usb_hcd *hcd, if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) usb_hcd_poll_rh_status(hcd); + if (usb_hcd_is_primary_hcd(hcd)) + onboard_hub_create_pdevs(hcd->self.root_hub, &hcd->onboard_hub_devs); + return retval; err_register_root_hub: @@ -3041,6 +3045,8 @@ void usb_remove_hcd(struct usb_hcd *hcd) if (usb_hcd_is_primary_hcd(hcd)) { if (hcd->irq > 0) free_irq(hcd->irq, hcd); + + onboard_hub_destroy_pdevs(&hcd->onboard_hub_devs); } usb_deregister_bus(&hcd->self); diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 548a028f2dab..4ebc91c09182 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h @@ -198,6 +198,7 @@ struct usb_hcd { struct usb_hcd *shared_hcd; struct usb_hcd *primary_hcd; + struct list_head onboard_hub_devs; #define HCD_BUFFER_POOLS 4 struct dma_pool *pool[HCD_BUFFER_POOLS];
Call onboard_hub_create/destroy_pdevs() from usb_add/remove_hcd() for primary HCDs to create/destroy platform devices for onboard USB hubs that may be connected to the root hub of the controller. These functions are a NOP unless CONFIG_USB_ONBOARD_HUB=y/m. Also add a field to struct usb_hcd to keep track of the onboard hub platform devices that are owned by the HCD. Signed-off-by: Matthias Kaehlcke <mka@chromium.org> --- Changes in v17: - create the platform devices in the generic HCD code instead of the xhci_platform driver - updated subject and commit message to reflect the above change - dropped initialization of platform device list, which is now done in onboard_hub_create_pdevs() Changes in v16: - none Changes in v15: - none Changes in v14: - none Changes in v13: - added comment for 'depends on USB_ONBOARD_HUB || !USB_ONBOARD_HUB' construct Changes in v12: - none Changes in v11: - use onboard_hub_create/destroy_pdevs() to support multiple onboard hubs that are connected to the same root hub - moved field/list to keep track of platform devices from struct usb_hcd to struct xhci_hcd - updated commit message Changes in v10: - none Changes in v9: - added dependency on USB_ONBOARD_HUB (or !!USB_ONBOARD_HUB) to USB_XHCI_PLATFORM Changes in v8: - none Changes in v7: - none Changes in v6: - none Changes in v5: - patch added to the series drivers/usb/core/hcd.c | 6 ++++++ include/linux/usb/hcd.h | 1 + 2 files changed, 7 insertions(+)