Merge branch 'master' of git://git.denx.de/u-boot-spi
[platform/kernel/u-boot.git] / drivers / usb / gadget / ci_udc.c
index 05c01ce..bd596ce 100644 (file)
@@ -1,9 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright 2011, Marvell Semiconductor Inc.
  * Lei Wen <leiwen@marvell.com>
  *
- * SPDX-License-Identifier:    GPL-2.0+
- *
  * Back ported to the 8xx platform (from the 8260 platform) by
  * Murray.Jensen@cmst.csiro.au, 27-Jan-01.
  */
@@ -105,6 +104,10 @@ static struct usb_ep_ops ci_ep_ops = {
        .free_request   = ci_ep_free_request,
 };
 
+__weak void ci_init_after_reset(struct ehci_ctrl *ctrl)
+{
+}
+
 /* Init values for USB endpoints. */
 static const struct usb_ep ci_ep_init[5] = {
        [0] = { /* EP 0 */
@@ -888,6 +891,8 @@ static int ci_pullup(struct usb_gadget *gadget, int is_on)
                writel(USBCMD_ITC(MICRO_8FRAME) | USBCMD_RST, &udc->usbcmd);
                udelay(200);
 
+               ci_init_after_reset(controller.ctrl);
+
                writel((unsigned long)controller.epts, &udc->epinitaddr);
 
                /* select DEVICE mode */
@@ -901,7 +906,8 @@ static int ci_pullup(struct usb_gadget *gadget, int is_on)
                writel(0xffffffff, &udc->epflush);
 
                /* Turn on the USB connection by enabling the pullup resistor */
-               writel(USBCMD_ITC(MICRO_8FRAME) | USBCMD_RUN, &udc->usbcmd);
+               setbits_le32(&udc->usbcmd, USBCMD_ITC(MICRO_8FRAME) |
+                            USBCMD_RUN);
        } else {
                udc_disconnect();
        }
@@ -1009,7 +1015,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
        if (driver->speed != USB_SPEED_FULL && driver->speed != USB_SPEED_HIGH)
                return -EINVAL;
 
-#ifdef CONFIG_DM_USB
+#if CONFIG_IS_ENABLED(DM_USB)
        ret = usb_setup_ehci_gadget(&controller.ctrl);
 #else
        ret = usb_lowlevel_init(0, USB_INIT_DEVICE, (void **)&controller.ctrl);