Skip to content

Commit

Permalink
usb: core: hcd: Let usb_add_hcd() indicate if roothub has to be regis…
Browse files Browse the repository at this point in the history
…tered

No functional change. Add __usb_add_hcd() which takes "register_hub"
flag that indicates if roothub has to be registered or not. This is in
preparation for allowing xhci to register roothub after the shared hcd
is created. The interface for usb_add_hcd() is not modified to make sure
there is no USB subsystem wide changes.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
  • Loading branch information
kishon authored and intel-lab-lkp committed Aug 24, 2021
1 parent c8195df commit fe4b845
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
20 changes: 11 additions & 9 deletions drivers/usb/core/hcd.c
Expand Up @@ -2788,13 +2788,14 @@ static void usb_stop_hcd(struct usb_hcd *hcd)
* @hcd: the usb_hcd structure to initialize
* @irqnum: Interrupt line to allocate
* @irqflags: Interrupt type flags
* @register_hub: Flag to indicate if roothub has to be registered.
*
* Finish the remaining parts of generic HCD initialization: allocate the
* buffers of consistent memory, register the bus, request the IRQ line,
* and call the driver's reset() and start() routines.
*/
int usb_add_hcd(struct usb_hcd *hcd,
unsigned int irqnum, unsigned long irqflags)
int __usb_add_hcd(struct usb_hcd *hcd, unsigned int irqnum, unsigned long irqflags,
bool register_hub)
{
int retval;
struct usb_device *rhdev;
Expand Down Expand Up @@ -2959,12 +2960,13 @@ int usb_add_hcd(struct usb_hcd *hcd,
}

/* starting here, usbcore will pay attention to this root hub */
retval = register_root_hub(hcd);
if (retval != 0)
goto err_register_root_hub;

if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
usb_hcd_poll_rh_status(hcd);
if (register_hub) {
retval = register_root_hub(hcd);
if (retval != 0)
goto err_register_root_hub;
if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
usb_hcd_poll_rh_status(hcd);
}

return retval;

Expand All @@ -2988,7 +2990,7 @@ int usb_add_hcd(struct usb_hcd *hcd,

return retval;
}
EXPORT_SYMBOL_GPL(usb_add_hcd);
EXPORT_SYMBOL_GPL(__usb_add_hcd);

/**
* usb_remove_hcd - shutdown processing for generic HCDs
Expand Down
8 changes: 6 additions & 2 deletions include/linux/usb/hcd.h
Expand Up @@ -468,15 +468,19 @@ extern struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd);
extern void usb_put_hcd(struct usb_hcd *hcd);
extern int usb_hcd_is_primary_hcd(struct usb_hcd *hcd);
extern int usb_add_hcd(struct usb_hcd *hcd,
unsigned int irqnum, unsigned long irqflags);
extern int __usb_add_hcd(struct usb_hcd *hcd, unsigned int irqnum, unsigned long irqflags,
bool register_hub);
extern void usb_remove_hcd(struct usb_hcd *hcd);
extern int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1);
int usb_hcd_setup_local_mem(struct usb_hcd *hcd, phys_addr_t phys_addr,
dma_addr_t dma, size_t size);

struct platform_device;
extern void usb_hcd_platform_shutdown(struct platform_device *dev);

#define usb_add_hcd(hcd, irqnum, irqflags) \
__usb_add_hcd(hcd, irqnum, irqflags, true)

#ifdef CONFIG_USB_HCD_TEST_MODE
extern int ehset_single_step_set_feature(struct usb_hcd *hcd, int port);
#else
Expand Down

0 comments on commit fe4b845

Please sign in to comment.