]> git.sur5r.net Git - u-boot/blobdiff - drivers/usb/gadget/ci_udc.c
usb: ci_udc: fix interaction with CONFIG_USB_ETH_CDC
[u-boot] / drivers / usb / gadget / ci_udc.c
index b18bee43ad894ed886076ac126a23fa42a6761e5..c3f6467b7db404e5434f2aee8caddd2cf2c5cdff 100644 (file)
@@ -226,8 +226,11 @@ static void ci_ep_free_request(struct usb_ep *ep, struct usb_request *req)
        int num;
 
        num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
-       if (num == 0)
+       if (num == 0) {
+               if (!controller.ep0_req)
+                       return;
                controller.ep0_req = 0;
+       }
 
        if (ci_req->b_buf)
                free(ci_req->b_buf);
@@ -909,6 +912,9 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
 {
        udc_disconnect();
 
+       driver->unbind(&controller.gadget);
+       controller.driver = NULL;
+
        ci_ep_free_request(&controller.ep[0].ep, &controller.ep0_req->req);
        free(controller.items_mem);
        free(controller.epts);