usb: host: xhci-plat: prepare operation w/o shared hcd
This patch prepares xhci-plat for the following scenario - If either of the root hubs has no ports, then omit shared hcd - Main hcd can be USB3 if there are no USB2 ports Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20220511220450.85367-5-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0cf1ea040a
commit
e0fe986972
@ -180,7 +180,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
|||||||
struct device *sysdev, *tmpdev;
|
struct device *sysdev, *tmpdev;
|
||||||
struct xhci_hcd *xhci;
|
struct xhci_hcd *xhci;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct usb_hcd *hcd;
|
struct usb_hcd *hcd, *usb3_hcd;
|
||||||
int ret;
|
int ret;
|
||||||
int irq;
|
int irq;
|
||||||
struct xhci_plat_priv *priv = NULL;
|
struct xhci_plat_priv *priv = NULL;
|
||||||
@ -327,21 +327,26 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto disable_usb_phy;
|
goto disable_usb_phy;
|
||||||
|
|
||||||
xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev,
|
if (!xhci_has_one_roothub(xhci)) {
|
||||||
dev_name(&pdev->dev), hcd);
|
xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev,
|
||||||
if (!xhci->shared_hcd) {
|
dev_name(&pdev->dev), hcd);
|
||||||
ret = -ENOMEM;
|
if (!xhci->shared_hcd) {
|
||||||
goto dealloc_usb2_hcd;
|
ret = -ENOMEM;
|
||||||
|
goto dealloc_usb2_hcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
xhci->shared_hcd->tpl_support = hcd->tpl_support;
|
||||||
}
|
}
|
||||||
|
|
||||||
xhci->shared_hcd->tpl_support = hcd->tpl_support;
|
usb3_hcd = xhci_get_usb3_hcd(xhci);
|
||||||
|
if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4)
|
||||||
|
usb3_hcd->can_do_streams = 1;
|
||||||
|
|
||||||
if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
|
if (xhci->shared_hcd) {
|
||||||
xhci->shared_hcd->can_do_streams = 1;
|
ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
|
||||||
|
if (ret)
|
||||||
ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
|
goto put_usb3_hcd;
|
||||||
if (ret)
|
}
|
||||||
goto put_usb3_hcd;
|
|
||||||
|
|
||||||
device_enable_async_suspend(&pdev->dev);
|
device_enable_async_suspend(&pdev->dev);
|
||||||
pm_runtime_put_noidle(&pdev->dev);
|
pm_runtime_put_noidle(&pdev->dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user