rtc: rtc-lp8788: use devm_rtc_device_register()
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / usb / chipidea / udc.c
index e502e4807812f86e0073b047a10eb78ce34bcabf..519ead2443c5630baaacaa4e1023e8ec766a2e39 100644 (file)
@@ -435,6 +435,8 @@ static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
                mReq->ptr->page[i] = cpu_to_le32(page);
        }
 
+       wmb();
+
        if (!list_empty(&mEp->qh.queue)) {
                struct ci13xxx_req *mReqPrev;
                int n = hw_ep_bit(mEp->num, mEp->dir);
@@ -538,6 +540,12 @@ __acquires(mEp->lock)
                struct ci13xxx_req *mReq = \
                        list_entry(mEp->qh.queue.next,
                                   struct ci13xxx_req, queue);
+
+               if (mReq->zptr) {
+                       dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma);
+                       mReq->zptr = NULL;
+               }
+
                list_del_init(&mReq->queue);
                mReq->req.status = -ESHUTDOWN;
 
@@ -1630,16 +1638,6 @@ static irqreturn_t udc_irq(struct ci13xxx *ci)
        return retval;
 }
 
-/**
- * udc_release: driver release function
- * @dev: device
- *
- * Currently does nothing
- */
-static void udc_release(struct device *dev)
-{
-}
-
 /**
  * udc_start: initialize gadget role
  * @ci: chipidea controller
@@ -1659,12 +1657,6 @@ static int udc_start(struct ci13xxx *ci)
 
        INIT_LIST_HEAD(&ci->gadget.ep_list);
 
-       dev_set_name(&ci->gadget.dev, "gadget");
-       ci->gadget.dev.dma_mask = dev->dma_mask;
-       ci->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask;
-       ci->gadget.dev.parent   = dev;
-       ci->gadget.dev.release  = udc_release;
-
        /* alloc resources */
        ci->qh_pool = dma_pool_create("ci13xxx_qh", dev,
                                       sizeof(struct ci13xxx_qh),
@@ -1702,17 +1694,11 @@ static int udc_start(struct ci13xxx *ci)
                        goto put_transceiver;
        }
 
-       retval = device_register(&ci->gadget.dev);
-       if (retval) {
-               put_device(&ci->gadget.dev);
-               goto put_transceiver;
-       }
-
        if (!IS_ERR_OR_NULL(ci->transceiver)) {
                retval = otg_set_peripheral(ci->transceiver->otg,
                                                &ci->gadget);
                if (retval)
-                       goto unreg_device;
+                       goto put_transceiver;
        }
 
        retval = usb_add_gadget_udc(dev, &ci->gadget);
@@ -1732,8 +1718,6 @@ remove_trans:
        }
 
        dev_err(dev, "error = %i\n", retval);
-unreg_device:
-       device_unregister(&ci->gadget.dev);
 put_transceiver:
        if (!IS_ERR_OR_NULL(ci->transceiver) && ci->global_phy)
                usb_put_phy(ci->transceiver);
@@ -1768,7 +1752,6 @@ static void udc_stop(struct ci13xxx *ci)
                if (ci->global_phy)
                        usb_put_phy(ci->transceiver);
        }
-       device_unregister(&ci->gadget.dev);
        /* my kobject is dynamic, I swear! */
        memset(&ci->gadget, 0, sizeof(ci->gadget));
 }