Lines Matching defs:dwc

59  * @dwc: pointer to our context structure
66 int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode)
70 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
85 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
92 * @dwc: pointer to our context structure
98 int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)
103 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
108 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
112 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
120 dev_vdbg(dwc->dev, "link state change request timed out\n");
127 * @dwc: pointer to our context structure
146 int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc)
154 if (!dwc->needs_fifo_resize)
157 ram1_depth = DWC3_RAM1_DEPTH(dwc->hwparams.hwparams7);
158 mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
170 struct dwc3_ep *dep = dwc->eps[num];
203 dev_vdbg(dwc->dev, "%s: Fifo Addr %04x Size %d\n",
206 dwc3_writel(dwc->regs, DWC3_GTXFIFOSIZ(fifo_number),
218 struct dwc3 *dwc = dep->dwc;
241 usb_gadget_unmap_request(&dwc->gadget, &req->request,
244 dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n",
248 spin_unlock(&dwc->lock);
250 spin_lock(&dwc->lock);
279 int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
282 struct dwc3_ep *dep = dwc->eps[ep];
286 dev_vdbg(dwc->dev, "%s: cmd '%s' params %08x %08x %08x\n",
291 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR0(ep), params->param0);
292 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR1(ep), params->param1);
293 dwc3_writel(dwc->regs, DWC3_DEPCMDPAR2(ep), params->param2);
295 dwc3_writel(dwc->regs, DWC3_DEPCMD(ep), cmd | DWC3_DEPCMD_CMDACT);
297 reg = dwc3_readl(dwc->regs, DWC3_DEPCMD(ep));
299 dev_vdbg(dwc->dev, "Command Complete --> %d\n",
326 struct dwc3 *dwc = dep->dwc;
334 dep->trb_pool = dma_alloc_coherent(dwc->dev,
338 dev_err(dep->dwc->dev, "failed to allocate trb pool for %s\n",
348 struct dwc3 *dwc = dep->dwc;
350 dma_free_coherent(dwc->dev, sizeof(struct dwc3_trb) * DWC3_TRB_NUM,
357 static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep)
368 if (dwc->start_config_issued)
370 dwc->start_config_issued = true;
374 return dwc3_send_gadget_ep_cmd(dwc, 0, cmd, &params);
380 static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
424 return dwc3_send_gadget_ep_cmd(dwc, dep->number,
428 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
436 return dwc3_send_gadget_ep_cmd(dwc, dep->number,
451 struct dwc3 *dwc = dep->dwc;
456 ret = dwc3_gadget_start_config(dwc, dep);
461 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc);
469 ret = dwc3_gadget_set_xfer_resource(dwc, dep);
478 reg = dwc3_readl(dwc->regs, DWC3_DALEPENA);
480 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
501 static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum);
502 static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep)
507 dwc3_stop_active_transfer(dwc, dep->number);
526 struct dwc3 *dwc = dep->dwc;
529 dwc3_remove_requests(dwc, dep);
531 reg = dwc3_readl(dwc->regs, DWC3_DALEPENA);
533 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
564 struct dwc3 *dwc;
579 dwc = dep->dwc;
595 dev_err(dwc->dev, "invalid endpoint transfer type\n");
599 dev_WARN_ONCE(dwc->dev, true, "%s is already enabled\n",
604 dev_vdbg(dwc->dev, "Enabling %s\n", dep->name);
606 spin_lock_irqsave(&dwc->lock, flags);
608 spin_unlock_irqrestore(&dwc->lock, flags);
616 struct dwc3 *dwc;
626 dwc = dep->dwc;
629 dev_WARN_ONCE(dwc->dev, true, "%s is already disabled\n",
638 spin_lock_irqsave(&dwc->lock, flags);
640 spin_unlock_irqrestore(&dwc->lock, flags);
650 struct dwc3 *dwc = dep->dwc;
654 dev_err(dwc->dev, "not enough memory\n");
681 struct dwc3 *dwc = dep->dwc;
686 dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n",
874 struct dwc3 *dwc = dep->dwc;
879 dev_vdbg(dwc->dev, "%s: endpoint busy\n", dep->name);
917 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params);
919 dev_dbg(dwc->dev, "failed to send STARTTRANSFER command\n");
926 usb_gadget_unmap_request(&dwc->gadget, &req->request,
933 dep->res_trans_idx = dwc3_gadget_ep_get_transfer_index(dwc,
943 struct dwc3 *dwc = dep->dwc;
963 ret = usb_gadget_map_request(&dwc->gadget, &req->request,
993 struct dwc3 *dwc = dep->dwc;
995 dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
1008 struct dwc3 *dwc = dep->dwc;
1015 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
1020 dev_vdbg(dwc->dev, "queing request %p to %s length %d\n",
1023 spin_lock_irqsave(&dwc->lock, flags);
1025 spin_unlock_irqrestore(&dwc->lock, flags);
1037 struct dwc3 *dwc = dep->dwc;
1042 spin_lock_irqsave(&dwc->lock, flags);
1056 dwc3_stop_active_transfer(dwc, dep->number);
1059 dev_err(dwc->dev, "request %p was not queued to %s\n",
1069 spin_unlock_irqrestore(&dwc->lock, flags);
1077 struct dwc3 *dwc = dep->dwc;
1089 dwc->ep0state = EP0_SETUP_PHASE;
1092 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1095 dev_err(dwc->dev, "failed to %s STALL on %s\n",
1104 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1107 dev_err(dwc->dev, "failed to %s STALL on %s\n",
1120 struct dwc3 *dwc = dep->dwc;
1126 spin_lock_irqsave(&dwc->lock, flags);
1129 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name);
1136 spin_unlock_irqrestore(&dwc->lock, flags);
1144 struct dwc3 *dwc = dep->dwc;
1147 spin_lock_irqsave(&dwc->lock, flags);
1149 spin_unlock_irqrestore(&dwc->lock, flags);
1188 struct dwc3 *dwc = gadget_to_dwc(g);
1191 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
1197 struct dwc3 *dwc = gadget_to_dwc(g);
1209 spin_lock_irqsave(&dwc->lock, flags);
1217 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
1221 dev_dbg(dwc->dev, "no wakeup on SuperSpeed\n");
1233 dev_dbg(dwc->dev, "can't wakeup from link state %d\n",
1239 ret = dwc3_gadget_set_link_state(dwc, DWC3_LINK_STATE_RECOV);
1241 dev_err(dwc->dev, "failed to put link in Recovery\n");
1247 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1253 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
1261 dev_err(dwc->dev, "failed to send remote wakeup\n");
1266 spin_unlock_irqrestore(&dwc->lock, flags);
1274 struct dwc3 *dwc = gadget_to_dwc(g);
1277 spin_lock_irqsave(&dwc->lock, flags);
1278 dwc->is_selfpowered = !!is_selfpowered;
1279 spin_unlock_irqrestore(&dwc->lock, flags);
1284 static void dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on)
1289 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1298 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1301 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
1315 dev_vdbg(dwc->dev, "gadget %s data soft-%s\n",
1316 dwc->gadget_driver
1317 ? dwc->gadget_driver->function : "no-function",
1323 struct dwc3 *dwc = gadget_to_dwc(g);
1328 spin_lock_irqsave(&dwc->lock, flags);
1329 dwc3_gadget_run_stop(dwc, is_on);
1330 spin_unlock_irqrestore(&dwc->lock, flags);
1338 struct dwc3 *dwc = gadget_to_dwc(g);
1344 spin_lock_irqsave(&dwc->lock, flags);
1346 if (dwc->gadget_driver) {
1347 dev_err(dwc->dev, "%s is already bound to %s\n",
1348 dwc->gadget.name,
1349 dwc->gadget_driver->driver.name);
1354 dwc->gadget_driver = driver;
1355 dwc->gadget.dev.driver = &driver->driver;
1357 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
1359 reg |= dwc->maximum_speed;
1360 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
1362 dwc->start_config_issued = false;
1367 dep = dwc->eps[0];
1370 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1374 dep = dwc->eps[1];
1377 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1382 dwc->ep0state = EP0_SETUP_PHASE;
1383 dwc3_ep0_out_start(dwc);
1385 spin_unlock_irqrestore(&dwc->lock, flags);
1390 __dwc3_gadget_ep_disable(dwc->eps[0]);
1393 spin_unlock_irqrestore(&dwc->lock, flags);
1401 struct dwc3 *dwc = gadget_to_dwc(g);
1404 spin_lock_irqsave(&dwc->lock, flags);
1406 __dwc3_gadget_ep_disable(dwc->eps[0]);
1407 __dwc3_gadget_ep_disable(dwc->eps[1]);
1409 dwc->gadget_driver = NULL;
1410 dwc->gadget.dev.driver = NULL;
1412 spin_unlock_irqrestore(&dwc->lock, flags);
1427 static int __devinit dwc3_gadget_init_endpoints(struct dwc3 *dwc)
1432 INIT_LIST_HEAD(&dwc->gadget.ep_list);
1437 dev_err(dwc->dev, "can't allocate endpoint %d\n",
1442 dep->dwc = dwc;
1444 dwc->eps[epnum] = dep;
1455 dwc->gadget.ep0 = &dep->endpoint;
1463 &dwc->gadget.ep_list);
1477 static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)
1483 dep = dwc->eps[epnum];
1499 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
1525 dev_err(dwc->dev, "%s's TRB (%p) still owned by HW\n",
1531 dev_err(dwc->dev, "incomplete IN transfer %s\n",
1565 static void dwc3_endpoint_transfer_complete(struct dwc3 *dwc,
1575 clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status);
1583 if (dwc->revision < DWC3_REVISION_183A) {
1588 struct dwc3_ep *dep = dwc->eps[i];
1597 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1598 reg |= dwc->u1u2;
1599 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1601 dwc->u1u2 = 0;
1605 static void dwc3_gadget_start_isoc(struct dwc3 *dwc,
1611 dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n",
1627 struct dwc3 *dwc = dep->dwc;
1639 dwc3_cleanup_done_reqs(dwc, dep, &mod_ev, -ESHUTDOWN);
1664 static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
1670 dep = dwc->eps[epnum];
1672 dev_vdbg(dwc->dev, "%s: %s\n", dep->name,
1676 dwc3_ep0_interrupt(dwc, event);
1685 dev_dbg(dwc->dev, "%s is an Isochronous endpoint\n",
1690 dwc3_endpoint_transfer_complete(dwc, dep, event, 1);
1694 dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n",
1699 dwc3_endpoint_transfer_complete(dwc, dep, event, 0);
1703 dwc3_gadget_start_isoc(dwc, dep, event);
1707 dev_vdbg(dwc->dev, "%s: reason %s\n",
1717 dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
1724 dev_err(dwc->dev, "Stream event for non-Bulk %s\n",
1731 dev_vdbg(dwc->dev, "Stream %d found and started\n",
1738 dev_dbg(dwc->dev, "Couldn't find suitable stream\n");
1742 dev_dbg(dwc->dev, "%s FIFO Overrun\n", dep->name);
1750 static void dwc3_disconnect_gadget(struct dwc3 *dwc)
1752 if (dwc->gadget_driver && dwc->gadget_driver->disconnect) {
1753 spin_unlock(&dwc->lock);
1754 dwc->gadget_driver->disconnect(&dwc->gadget);
1755 spin_lock(&dwc->lock);
1759 static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum)
1766 dep = dwc->eps[epnum];
1774 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params);
1780 static void dwc3_stop_active_transfers(struct dwc3 *dwc)
1787 dep = dwc->eps[epnum];
1791 dwc3_remove_requests(dwc, dep);
1795 static void dwc3_clear_stall_all_ep(struct dwc3 *dwc)
1804 dep = dwc->eps[epnum];
1812 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1818 static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc)
1820 dev_vdbg(dwc->dev, "%s\n", __func__);
1826 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1828 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1831 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1834 dwc3_stop_active_transfers(dwc);
1835 dwc3_disconnect_gadget(dwc);
1836 dwc->start_config_issued = false;
1838 dwc->gadget.speed = USB_SPEED_UNKNOWN;
1839 dwc->setup_packet_pending = false;
1842 static void dwc3_gadget_usb3_phy_power(struct dwc3 *dwc, int on)
1846 reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
1853 dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
1856 static void dwc3_gadget_usb2_phy_power(struct dwc3 *dwc, int on)
1860 reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
1867 dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
1870 static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
1874 dev_vdbg(dwc->dev, "%s\n", __func__);
1902 if (dwc->revision < DWC3_REVISION_188A) {
1903 if (dwc->setup_packet_pending)
1904 dwc3_gadget_disconnect_interrupt(dwc);
1908 dwc->dev_state = DWC3_DEFAULT_STATE;
1911 dwc3_gadget_usb2_phy_power(dwc, true);
1912 dwc3_gadget_usb3_phy_power(dwc, true);
1914 if (dwc->gadget.speed != USB_SPEED_UNKNOWN)
1915 dwc3_disconnect_gadget(dwc);
1917 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
1919 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
1920 dwc->test_mode = false;
1922 dwc3_stop_active_transfers(dwc);
1923 dwc3_clear_stall_all_ep(dwc);
1924 dwc->start_config_issued = false;
1927 reg = dwc3_readl(dwc->regs, DWC3_DCFG);
1929 dwc3_writel(dwc->regs, DWC3_DCFG, reg);
1932 static void dwc3_update_ram_clk_sel(struct dwc3 *dwc, u32 speed)
1952 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
1954 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
1957 static void dwc3_gadget_disable_phy(struct dwc3 *dwc, u8 speed)
1961 dwc3_gadget_usb2_phy_power(dwc, false);
1966 dwc3_gadget_usb3_phy_power(dwc, false);
1971 static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
1979 dev_vdbg(dwc->dev, "%s\n", __func__);
1983 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
1985 dwc->speed = speed;
1987 dwc3_update_ram_clk_sel(dwc, speed);
2004 if (dwc->revision < DWC3_REVISION_190A)
2005 dwc3_gadget_reset_interrupt(dwc);
2008 dwc->gadget.ep0->maxpacket = 512;
2009 dwc->gadget.speed = USB_SPEED_SUPER;
2013 dwc->gadget.ep0->maxpacket = 64;
2014 dwc->gadget.speed = USB_SPEED_HIGH;
2019 dwc->gadget.ep0->maxpacket = 64;
2020 dwc->gadget.speed = USB_SPEED_FULL;
2024 dwc->gadget.ep0->maxpacket = 8;
2025 dwc->gadget.speed = USB_SPEED_LOW;
2030 dwc3_gadget_disable_phy(dwc, dwc->gadget.speed);
2032 dep = dwc->eps[0];
2035 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2039 dep = dwc->eps[1];
2042 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2055 static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc)
2057 dev_vdbg(dwc->dev, "%s\n", __func__);
2064 dwc->gadget_driver->resume(&dwc->gadget);
2067 static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
2090 if (dwc->revision < DWC3_REVISION_183A) {
2095 switch (dwc->link_state) {
2098 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
2104 if (!dwc->u1u2)
2105 dwc->u1u2 = reg & u1u2;
2109 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
2118 dwc->link_state = next;
2120 dev_vdbg(dwc->dev, "%s link %d\n", __func__, dwc->link_state);
2123 static void dwc3_gadget_interrupt(struct dwc3 *dwc,
2128 dwc3_gadget_disconnect_interrupt(dwc);
2131 dwc3_gadget_reset_interrupt(dwc);
2134 dwc3_gadget_conndone_interrupt(dwc);
2137 dwc3_gadget_wakeup_interrupt(dwc);
2140 dwc3_gadget_linksts_change_interrupt(dwc, event->event_info);
2143 dev_vdbg(dwc->dev, "End of Periodic Frame\n");
2146 dev_vdbg(dwc->dev, "Start of Periodic Frame\n");
2149 dev_vdbg(dwc->dev, "Erratic Error\n");
2152 dev_vdbg(dwc->dev, "Command Complete\n");
2155 dev_vdbg(dwc->dev, "Overflow\n");
2158 dev_dbg(dwc->dev, "UNKNOWN IRQ %d\n", event->type);
2162 static void dwc3_process_event_entry(struct dwc3 *dwc,
2168 return dwc3_endpoint_interrupt(dwc, &event->depevt);
2173 dwc3_gadget_interrupt(dwc, &event->devt);
2177 dev_err(dwc->dev, "UNKNOWN IRQ type %d\n", event->raw);
2181 static irqreturn_t dwc3_process_event_buf(struct dwc3 *dwc, u32 buf)
2187 count = dwc3_readl(dwc->regs, DWC3_GEVNTCOUNT(buf));
2192 evt = dwc->ev_buffs[buf];
2200 dwc3_process_event_entry(dwc, &event);
2211 dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(buf), 4);
2219 struct dwc3 *dwc = _dwc;
2223 spin_lock(&dwc->lock);
2225 for (i = 0; i < dwc->num_event_buffers; i++) {
2228 status = dwc3_process_event_buf(dwc, i);
2233 spin_unlock(&dwc->lock);
2240 * @dwc: pointer to our controller context structure
2244 int __devinit dwc3_gadget_init(struct dwc3 *dwc)
2250 dwc->ctrl_req = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ctrl_req),
2251 &dwc->ctrl_req_addr, GFP_KERNEL);
2252 if (!dwc->ctrl_req) {
2253 dev_err(dwc->dev, "failed to allocate ctrl request\n");
2258 dwc->ep0_trb = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
2259 &dwc->ep0_trb_addr, GFP_KERNEL);
2260 if (!dwc->ep0_trb) {
2261 dev_err(dwc->dev, "failed to allocate ep0 trb\n");
2266 dwc->setup_buf = kzalloc(sizeof(*dwc->setup_buf) * 2,
2268 if (!dwc->setup_buf) {
2269 dev_err(dwc->dev, "failed to allocate setup buffer\n");
2274 dwc->ep0_bounce = dma_alloc_coherent(dwc->dev,
2275 512, &dwc->ep0_bounce_addr, GFP_KERNEL);
2276 if (!dwc->ep0_bounce) {
2277 dev_err(dwc->dev, "failed to allocate ep0 bounce buffer\n");
2282 dev_set_name(&dwc->gadget.dev, "gadget");
2284 dwc->gadget.ops = &dwc3_gadget_ops;
2285 dwc->gadget.max_speed = USB_SPEED_SUPER;
2286 dwc->gadget.speed = USB_SPEED_UNKNOWN;
2287 dwc->gadget.dev.parent = dwc->dev;
2288 dwc->gadget.sg_supported = true;
2290 dma_set_coherent_mask(&dwc->gadget.dev, dwc->dev->coherent_dma_mask);
2292 dwc->gadget.dev.dma_parms = dwc->dev->dma_parms;
2293 dwc->gadget.dev.dma_mask = dwc->dev->dma_mask;
2294 dwc->gadget.dev.release = dwc3_gadget_release;
2295 dwc->gadget.name = "dwc3-gadget";
2302 ret = dwc3_gadget_init_endpoints(dwc);
2306 irq = platform_get_irq(to_platform_device(dwc->dev), 0);
2309 "dwc3", dwc);
2311 dev_err(dwc->dev, "failed to request irq #%d --> %d\n",
2326 dwc3_writel(dwc->regs, DWC3_DEVTEN, reg);
2328 ret = device_register(&dwc->gadget.dev);
2330 dev_err(dwc->dev, "failed to register gadget device\n");
2331 put_device(&dwc->gadget.dev);
2335 ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
2337 dev_err(dwc->dev, "failed to register udc\n");
2344 device_unregister(&dwc->gadget.dev);
2347 dwc3_writel(dwc->regs, DWC3_DEVTEN, 0x00);
2348 free_irq(irq, dwc);
2351 dwc3_gadget_free_endpoints(dwc);
2354 dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce,
2355 dwc->ep0_bounce_addr);
2358 kfree(dwc->setup_buf);
2361 dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
2362 dwc->ep0_trb, dwc->ep0_trb_addr);
2365 dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req),
2366 dwc->ctrl_req, dwc->ctrl_req_addr);
2372 void dwc3_gadget_exit(struct dwc3 *dwc)
2376 usb_del_gadget_udc(&dwc->gadget);
2377 irq = platform_get_irq(to_platform_device(dwc->dev), 0);
2379 dwc3_writel(dwc->regs, DWC3_DEVTEN, 0x00);
2380 free_irq(irq, dwc);
2382 dwc3_gadget_free_endpoints(dwc);
2384 dma_free_coherent(dwc->dev, 512, dwc->ep0_bounce,
2385 dwc->ep0_bounce_addr);
2387 kfree(dwc->setup_buf);
2389 dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
2390 dwc->ep0_trb, dwc->ep0_trb_addr);
2392 dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req),
2393 dwc->ctrl_req, dwc->ctrl_req_addr);
2395 device_unregister(&dwc->gadget.dev);