| From b76032396d7958f006bccf5fb2535beb5526837c Mon Sep 17 00:00:00 2001 |
| From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Date: Thu, 20 Oct 2016 13:19:19 +0900 |
| Subject: usb: renesas_usbhs: add wait after initialization for R-Car Gen3 |
| |
| From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| |
| commit b76032396d7958f006bccf5fb2535beb5526837c upstream. |
| |
| Since the controller on R-Car Gen3 doesn't have any status registers |
| to detect initialization (LPSTS.SUSPM = 1) and the initialization needs |
| up to 45 usec, this patch adds wait after the initialization. Otherwise, |
| writing other registers (e.g. INTENB0) will fail. |
| |
| Fixes: de18757e272d ("usb: renesas_usbhs: add R-Car Gen3 power control") |
| Cc: <balbi@kernel.org> |
| Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/renesas_usbhs/rcar3.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/usb/renesas_usbhs/rcar3.c |
| +++ b/drivers/usb/renesas_usbhs/rcar3.c |
| @@ -9,6 +9,7 @@ |
| * |
| */ |
| |
| +#include <linux/delay.h> |
| #include <linux/io.h> |
| #include "common.h" |
| #include "rcar3.h" |
| @@ -35,10 +36,13 @@ static int usbhs_rcar3_power_ctrl(struct |
| |
| usbhs_write32(priv, UGCTRL2, UGCTRL2_RESERVED_3 | UGCTRL2_USB0SEL_OTG); |
| |
| - if (enable) |
| + if (enable) { |
| usbhs_bset(priv, LPSTS, LPSTS_SUSPM, LPSTS_SUSPM); |
| - else |
| + /* The controller on R-Car Gen3 needs to wait up to 45 usec */ |
| + udelay(45); |
| + } else { |
| usbhs_bset(priv, LPSTS, LPSTS_SUSPM, 0); |
| + } |
| |
| return 0; |
| } |