Commit 435cc113 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Greg Kroah-Hartman

usb: host: xhci-plat: set resume_quirk() for R-Car controllers

This patch sets resume_quirk() for R-Car controllers to re-download
the firmware in resume timing. Otherwise, if the controller's power
is down in suspend timing, the firmware in the controller goes away,
and then the controller doesn't work after resume.
Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 98c0a3ff
...@@ -103,18 +103,21 @@ static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen2 = { ...@@ -103,18 +103,21 @@ static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen2 = {
.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V1, .firmware_name = XHCI_RCAR_FIRMWARE_NAME_V1,
.init_quirk = xhci_rcar_init_quirk, .init_quirk = xhci_rcar_init_quirk,
.plat_start = xhci_rcar_start, .plat_start = xhci_rcar_start,
.resume_quirk = xhci_rcar_resume_quirk,
}; };
static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen3 = { static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen3 = {
.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V2, .firmware_name = XHCI_RCAR_FIRMWARE_NAME_V2,
.init_quirk = xhci_rcar_init_quirk, .init_quirk = xhci_rcar_init_quirk,
.plat_start = xhci_rcar_start, .plat_start = xhci_rcar_start,
.resume_quirk = xhci_rcar_resume_quirk,
}; };
static const struct xhci_plat_priv xhci_plat_renesas_rcar_r8a7796 = { static const struct xhci_plat_priv xhci_plat_renesas_rcar_r8a7796 = {
.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V3, .firmware_name = XHCI_RCAR_FIRMWARE_NAME_V3,
.init_quirk = xhci_rcar_init_quirk, .init_quirk = xhci_rcar_init_quirk,
.plat_start = xhci_rcar_start, .plat_start = xhci_rcar_start,
.resume_quirk = xhci_rcar_resume_quirk,
}; };
static const struct of_device_id usb_xhci_of_match[] = { static const struct of_device_id usb_xhci_of_match[] = {
......
...@@ -198,3 +198,14 @@ int xhci_rcar_init_quirk(struct usb_hcd *hcd) ...@@ -198,3 +198,14 @@ int xhci_rcar_init_quirk(struct usb_hcd *hcd)
return xhci_rcar_download_firmware(hcd); return xhci_rcar_download_firmware(hcd);
} }
int xhci_rcar_resume_quirk(struct usb_hcd *hcd)
{
int ret;
ret = xhci_rcar_download_firmware(hcd);
if (!ret)
xhci_rcar_start(hcd);
return ret;
}
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#if IS_ENABLED(CONFIG_USB_XHCI_RCAR) #if IS_ENABLED(CONFIG_USB_XHCI_RCAR)
void xhci_rcar_start(struct usb_hcd *hcd); void xhci_rcar_start(struct usb_hcd *hcd);
int xhci_rcar_init_quirk(struct usb_hcd *hcd); int xhci_rcar_init_quirk(struct usb_hcd *hcd);
int xhci_rcar_resume_quirk(struct usb_hcd *hcd);
#else #else
static inline void xhci_rcar_start(struct usb_hcd *hcd) static inline void xhci_rcar_start(struct usb_hcd *hcd)
{ {
...@@ -27,5 +28,10 @@ static inline int xhci_rcar_init_quirk(struct usb_hcd *hcd) ...@@ -27,5 +28,10 @@ static inline int xhci_rcar_init_quirk(struct usb_hcd *hcd)
{ {
return 0; return 0;
} }
static inline int xhci_rcar_resume_quirk(struct usb_hcd *hcd)
{
return 0;
}
#endif #endif
#endif /* _XHCI_RCAR_H */ #endif /* _XHCI_RCAR_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment