static int ehci_usb_remove(struct udevice *dev) { struct msm_ehci_priv *p = dev_get_priv(dev); struct usb_ehci *ehci = p->ehci; int ret; ret = ehci_deregister(dev); if (ret) return ret; /* Stop controller. */ clrbits_le32(&ehci->usbcmd, CMD_RUN); reset_usb_phy(p); ret = board_prepare_usb(USB_INIT_DEVICE); /* Board specific hook */ if (ret < 0) return ret; /* Reset controller */ setbits_le32(&ehci->usbcmd, CMD_RESET); /* Wait for reset */ if (wait_for_bit_le32(&ehci->usbcmd, CMD_RESET, false, 30, false)) { printf("Stuck on USB reset.\n"); return -ETIMEDOUT; } return 0; }
/* * Destroy the appropriate control structures corresponding * the EHCI host controller. */ int ehci_hcd_stop(int index) { struct exynos_ehci *ctx = &exynos; reset_usb_phy(ctx->usb); return 0; }