lkml.org 
[lkml]   [2022]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v19 4/5] usb: core: hcd: Create platform devices for onboard hubs in probe()
    Date
    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 v19:
    - none

    Changes in v18:
    - none

    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(+)

    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];
    --
    2.34.1.575.g55b058a8bb-goog
    \
     
     \ /
      Last update: 2022-01-12 20:13    [W:2.168 / U:0.272 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site