mirror of https://gitee.com/openkylin/linux.git
usb: host: xhci-plat: add .suspend_quirk for struct xhci_plat_priv
Some platforms (eg cdns3) may have special sequences between xhci_bus_suspend and xhci_suspend, add .suspend_quick for it. Reviewed-by: Jun Li <jun.li@nxp.com> Signed-off-by: Peter Chen <peter.chen@nxp.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20200918131752.16488-3-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
46034a999c
commit
5e0e54ff89
|
@ -54,6 +54,16 @@ static int xhci_priv_init_quirk(struct usb_hcd *hcd)
|
|||
return priv->init_quirk(hcd);
|
||||
}
|
||||
|
||||
static int xhci_priv_suspend_quirk(struct usb_hcd *hcd)
|
||||
{
|
||||
struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
|
||||
|
||||
if (!priv->suspend_quirk)
|
||||
return 0;
|
||||
|
||||
return priv->suspend_quirk(hcd);
|
||||
}
|
||||
|
||||
static int xhci_priv_resume_quirk(struct usb_hcd *hcd)
|
||||
{
|
||||
struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
|
||||
|
@ -401,7 +411,11 @@ static int __maybe_unused xhci_plat_suspend(struct device *dev)
|
|||
{
|
||||
struct usb_hcd *hcd = dev_get_drvdata(dev);
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
int ret;
|
||||
|
||||
ret = xhci_priv_suspend_quirk(hcd);
|
||||
if (ret)
|
||||
return ret;
|
||||
/*
|
||||
* xhci_suspend() needs `do_wakeup` to know whether host is allowed
|
||||
* to do wakeup during suspend. Since xhci_plat_suspend is currently
|
||||
|
@ -438,6 +452,11 @@ static int __maybe_unused xhci_plat_runtime_suspend(struct device *dev)
|
|||
{
|
||||
struct usb_hcd *hcd = dev_get_drvdata(dev);
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
int ret;
|
||||
|
||||
ret = xhci_priv_suspend_quirk(hcd);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return xhci_suspend(xhci, true);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ struct xhci_plat_priv {
|
|||
unsigned long long quirks;
|
||||
void (*plat_start)(struct usb_hcd *);
|
||||
int (*init_quirk)(struct usb_hcd *);
|
||||
int (*suspend_quirk)(struct usb_hcd *);
|
||||
int (*resume_quirk)(struct usb_hcd *);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue