[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20211116120642.v17.3.I7a3a7d9d2126c34079b1cab87aa0b2ec3030f9b7@changeid>
Date: Tue, 16 Nov 2021 12:07:35 -0800
From: Matthias Kaehlcke <mka@...omium.org>
To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Alan Stern <stern@...land.harvard.edu>,
Rob Herring <robh+dt@...nel.org>,
Frank Rowand <frowand.list@...il.com>,
Mathias Nyman <mathias.nyman@...el.com>,
Felipe Balbi <balbi@...nel.org>
Cc: linux-kernel@...r.kernel.org,
Krzysztof Kozlowski <krzk@...nel.org>,
Stephen Boyd <swboyd@...omium.org>,
Peter Chen <peter.chen@...nel.org>, linux-usb@...r.kernel.org,
devicetree@...r.kernel.org,
Douglas Anderson <dianders@...omium.org>,
Roger Quadros <rogerq@...nel.org>,
Michal Simek <michal.simek@...inx.com>,
Ravi Chandra Sadineni <ravisadineni@...omium.org>,
Bastien Nocera <hadess@...ess.net>,
Matthias Kaehlcke <mka@...omium.org>,
Andrey Konovalov <andreyknvl@...il.com>,
Kishon Vijay Abraham I <kishon@...com>,
Li Jun <jun.li@....com>, Peter Chen <peter.chen@....com>,
Sasha Levin <sashal@...nel.org>
Subject: [PATCH v17 3/7] usb: core: hcd: Create platform devices for onboard hubs in probe()
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@...omium.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(+)
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.0.rc1.387.gb447b232ab-goog
Powered by blists - more mailing lists