diff mbox

[U-Boot] sunxi: musb: Properly turn of musb controller before booting

Message ID 1465138488-1514-1-git-send-email-hdegoede@redhat.com
State Accepted
Commit bca4c3c5fcb3d170308e621dadcc5555a1aca1b8
Delegated to: Hans de Goede
Headers show

Commit Message

Hans de Goede June 5, 2016, 2:54 p.m. UTC
Turn of the clock and assert the reset when musb_stop gets called, so that
the os gets the musb controller in a pristine state. This fixes a spurious
VBus error interrupt triggering as soon as the Linux musb driver loads.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/usb/musb-new/sunxi.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Ian Campbell June 12, 2016, 12:27 p.m. UTC | #1
On Sun, 2016-06-05 at 16:54 +0200, Hans de Goede wrote:
> Turn of the clock and assert the reset when musb_stop gets called, so
> that
> the os gets the musb controller in a pristine state. This fixes a
> spurious
> VBus error interrupt triggering as soon as the Linux musb driver
> loads.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Acked-by: Ian Campbell <ijc@hellion.org.uk>
diff mbox

Patch

diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
index 3081afc..c016a0b 100644
--- a/drivers/usb/musb-new/sunxi.c
+++ b/drivers/usb/musb-new/sunxi.c
@@ -340,9 +340,16 @@  int musb_usb_probe(struct udevice *dev)
 int musb_usb_remove(struct udevice *dev)
 {
 	struct musb_host_data *host = dev_get_priv(dev);
+	struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
 
 	musb_stop(host->host);
 
+	sunxi_usb_phy_exit(0);
+#ifdef CONFIG_SUNXI_GEN_SUN6I
+	clrbits_le32(&ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0);
+#endif
+	clrbits_le32(&ccm->ahb_gate0, 1 << AHB_GATE_OFFSET_USB0);
+
 	return 0;
 }