Hi,
Sandeep Maheswaram [off-list ref] writes:
quoted
quoted
@@ -11,6 +11,14 @@
#include <linux/platform_device.h>
#include "core.h"
+#include "../host/xhci.h"
+#include "../host/xhci-plat.h"
+
+static int xhci_dwc3_suspend_quirk(struct usb_hcd *hcd);
+
+static const struct xhci_plat_priv xhci_plat_dwc3_xhci = {
+ .suspend_quirk = xhci_dwc3_suspend_quirk,
+};
we're passing data using device_properties, why do you want this here?
Similar implemenation was done in
drivers/usb/cdns3/host.c<https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/usb/cdns3/host.c?h=next-20210503>
then it seems we have two places to correct :-)
quoted
quoted
@@ -127,6 +142,50 @@ int dwc3_host_init(struct dwc3 *dwc)
return ret;
}
+static void dwc3_set_phy_mode(struct usb_hcd *hcd)
+{
+
+ int i, num_ports;
+ u32 reg;
+ unsigned int ss_phy_mode = 0;
+ struct dwc3 *dwc = dev_get_drvdata(hcd->self.controller->parent);
+ struct xhci_hcd *xhci_hcd = hcd_to_xhci(hcd);
+
+ dwc->hs_phy_mode = 0;
+
+ reg = readl(&xhci_hcd->cap_regs->hcs_params1);
+ num_ports = HCS_MAX_PORTS(reg);
there's a big assumption here that xhci is still alive. Why isn't this
quirk implemented in xhci-plat itself?
quoted
+int xhci_dwc3_suspend_quirk(struct usb_hcd *hcd)
who calls this?
This will be called from
xhci_plat_suspend->xhci_priv_suspend_quirk->xhci_dwc3_suspend_quirk
So xhci.ko calls a function from dwc3.ko? That sounds odd, doesn't it?
It really looks like we're just finding ways to bypass the driver
layering, rather than working with it.
--
balbi