Lines Matching refs:udc

150 	struct omap_udc	*udc;  in omap_ep_enable()  local
194 udc = ep->udc; in omap_ep_enable()
195 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) { in omap_ep_enable()
200 spin_lock_irqsave(&udc->lock, flags); in omap_ep_enable()
212 omap_writew(udc->clr_halt, UDC_CTRL); in omap_ep_enable()
217 list_add(&ep->iso, &udc->iso); in omap_ep_enable()
232 spin_unlock_irqrestore(&udc->lock, flags); in omap_ep_enable()
250 spin_lock_irqsave(&ep->udc->lock, flags); in omap_ep_disable()
259 spin_unlock_irqrestore(&ep->udc->lock, flags); in omap_ep_disable()
294 struct omap_udc *udc = ep->udc; in done() local
305 usb_gadget_unmap_request(&udc->gadget, &req->req, in done()
317 spin_unlock(&ep->udc->lock); in done()
319 spin_lock(&ep->udc->lock); in done()
637 static void dma_irq(struct omap_udc *udc, u16 irq_src) in dma_irq() argument
645 ep = &udc->ep[16 + UDC_DMA_TX_SRC(dman_stat)]; in dma_irq()
664 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)]; in dma_irq()
682 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)]; in dma_irq()
871 struct omap_udc *udc; in omap_ep_queue() local
903 udc = ep->udc; in omap_ep_queue()
904 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) in omap_ep_queue()
908 usb_gadget_map_request(&udc->gadget, &req->req, in omap_ep_queue()
914 spin_lock_irqsave(&udc->lock, flags); in omap_ep_queue()
930 if (!udc->ep0_pending || !list_empty(&ep->queue)) { in omap_ep_queue()
931 spin_unlock_irqrestore(&udc->lock, flags); in omap_ep_queue()
936 is_in = udc->ep0_in; in omap_ep_queue()
943 if (udc->ep0_set_config) { in omap_ep_queue()
947 if (!udc->ep0_reset_config) in omap_ep_queue()
964 udc->ep0_pending = 0; in omap_ep_queue()
973 if (udc->ep0_setup) in omap_ep_queue()
1002 spin_unlock_irqrestore(&udc->lock, flags); in omap_ep_queue()
1016 spin_lock_irqsave(&ep->udc->lock, flags); in omap_ep_dequeue()
1024 spin_unlock_irqrestore(&ep->udc->lock, flags); in omap_ep_dequeue()
1038 spin_unlock_irqrestore(&ep->udc->lock, flags); in omap_ep_dequeue()
1050 spin_lock_irqsave(&ep->udc->lock, flags); in omap_ep_set_halt()
1054 if (!ep->udc->ep0_pending) in omap_ep_set_halt()
1057 if (ep->udc->ep0_set_config) { in omap_ep_set_halt()
1062 ep->udc->ep0_pending = 0; in omap_ep_set_halt()
1099 omap_writew(ep->udc->clr_halt, UDC_CTRL); in omap_ep_set_halt()
1111 spin_unlock_irqrestore(&ep->udc->lock, flags); in omap_ep_set_halt()
1140 struct omap_udc *udc; in omap_wakeup() local
1144 udc = container_of(gadget, struct omap_udc, gadget); in omap_wakeup()
1146 spin_lock_irqsave(&udc->lock, flags); in omap_wakeup()
1147 if (udc->devstat & UDC_SUS) { in omap_wakeup()
1151 if (udc->devstat & (UDC_B_HNP_ENABLE|UDC_R_WK_OK)) { in omap_wakeup()
1158 } else if (!(udc->devstat & UDC_ATT)) { in omap_wakeup()
1159 if (!IS_ERR_OR_NULL(udc->transceiver)) in omap_wakeup()
1160 retval = otg_start_srp(udc->transceiver->otg); in omap_wakeup()
1162 spin_unlock_irqrestore(&udc->lock, flags); in omap_wakeup()
1170 struct omap_udc *udc; in omap_set_selfpowered() local
1175 udc = container_of(gadget, struct omap_udc, gadget); in omap_set_selfpowered()
1176 spin_lock_irqsave(&udc->lock, flags); in omap_set_selfpowered()
1183 spin_unlock_irqrestore(&udc->lock, flags); in omap_set_selfpowered()
1188 static int can_pullup(struct omap_udc *udc) in can_pullup() argument
1190 return udc->driver && udc->softconnect && udc->vbus_active; in can_pullup()
1193 static void pullup_enable(struct omap_udc *udc) in pullup_enable() argument
1200 if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx()) { in pullup_enable()
1210 static void pullup_disable(struct omap_udc *udc) in pullup_disable() argument
1214 if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx()) { in pullup_disable()
1227 static struct omap_udc *udc; variable
1231 if (udc == NULL || udc->dc_clk == NULL || udc->hhc_clk == NULL) in omap_udc_enable_clock()
1235 clk_enable(udc->dc_clk); in omap_udc_enable_clock()
1236 clk_enable(udc->hhc_clk); in omap_udc_enable_clock()
1239 clk_disable(udc->hhc_clk); in omap_udc_enable_clock()
1240 clk_disable(udc->dc_clk); in omap_udc_enable_clock()
1250 struct omap_udc *udc; in omap_vbus_session() local
1254 udc = container_of(gadget, struct omap_udc, gadget); in omap_vbus_session()
1255 spin_lock_irqsave(&udc->lock, flags); in omap_vbus_session()
1257 udc->vbus_active = (is_active != 0); in omap_vbus_session()
1267 if (udc->dc_clk != NULL && is_active) { in omap_vbus_session()
1268 if (!udc->clk_requested) { in omap_vbus_session()
1270 udc->clk_requested = 1; in omap_vbus_session()
1273 if (can_pullup(udc)) in omap_vbus_session()
1274 pullup_enable(udc); in omap_vbus_session()
1276 pullup_disable(udc); in omap_vbus_session()
1277 if (udc->dc_clk != NULL && !is_active) { in omap_vbus_session()
1278 if (udc->clk_requested) { in omap_vbus_session()
1280 udc->clk_requested = 0; in omap_vbus_session()
1283 spin_unlock_irqrestore(&udc->lock, flags); in omap_vbus_session()
1289 struct omap_udc *udc; in omap_vbus_draw() local
1291 udc = container_of(gadget, struct omap_udc, gadget); in omap_vbus_draw()
1292 if (!IS_ERR_OR_NULL(udc->transceiver)) in omap_vbus_draw()
1293 return usb_phy_set_power(udc->transceiver, mA); in omap_vbus_draw()
1299 struct omap_udc *udc; in omap_pullup() local
1302 udc = container_of(gadget, struct omap_udc, gadget); in omap_pullup()
1303 spin_lock_irqsave(&udc->lock, flags); in omap_pullup()
1304 udc->softconnect = (is_on != 0); in omap_pullup()
1305 if (can_pullup(udc)) in omap_pullup()
1306 pullup_enable(udc); in omap_pullup()
1308 pullup_disable(udc); in omap_pullup()
1309 spin_unlock_irqrestore(&udc->lock, flags); in omap_pullup()
1352 static void udc_quiesce(struct omap_udc *udc) in udc_quiesce() argument
1356 udc->gadget.speed = USB_SPEED_UNKNOWN; in udc_quiesce()
1357 nuke(&udc->ep[0], -ESHUTDOWN); in udc_quiesce()
1358 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) in udc_quiesce()
1364 static void update_otg(struct omap_udc *udc) in update_otg() argument
1368 if (!gadget_is_otg(&udc->gadget)) in update_otg()
1376 udc->gadget.b_hnp_enable = !!(devstat & UDC_B_HNP_ENABLE); in update_otg()
1377 udc->gadget.a_hnp_support = !!(devstat & UDC_A_HNP_SUPPORT); in update_otg()
1378 udc->gadget.a_alt_hnp_support = !!(devstat & UDC_A_ALT_HNP_SUPPORT); in update_otg()
1383 if (udc->gadget.b_hnp_enable) { in update_otg()
1393 static void ep0_irq(struct omap_udc *udc, u16 irq_src) in ep0_irq() argument
1395 struct omap_ep *ep0 = &udc->ep[0]; in ep0_irq()
1432 if (udc->ep0_in) { in ep0_irq()
1439 if (!req && udc->ep0_pending) { in ep0_irq()
1444 udc->ep0_pending = 0; in ep0_irq()
1469 if (!udc->ep0_in) { in ep0_irq()
1477 udc->ep0_pending = 0; in ep0_irq()
1492 udc->ep0_pending = 0; in ep0_irq()
1536 udc->ep0_in = (u.r.bRequestType & USB_DIR_IN) != 0; in ep0_irq()
1537 udc->ep0_set_config = 0; in ep0_irq()
1538 udc->ep0_pending = 1; in ep0_irq()
1548 udc->ep0_set_config = 1; in ep0_irq()
1549 udc->ep0_reset_config = (w_value == 0); in ep0_irq()
1556 if (udc->ep0_reset_config) in ep0_irq()
1560 update_otg(udc); in ep0_irq()
1569 ep = &udc->ep[w_index & 0xf]; in ep0_irq()
1577 omap_writew(udc->clr_halt, UDC_CTRL); in ep0_irq()
1598 ep = &udc->ep[w_index & 0xf]; in ep0_irq()
1622 udc->ep0_pending = 0; in ep0_irq()
1634 ep = &udc->ep[w_index & 0xf]; in ep0_irq()
1669 if (!udc->ep0_in && w_length) { in ep0_irq()
1697 udc->ep0_setup = 1; in ep0_irq()
1698 spin_unlock(&udc->lock); in ep0_irq()
1699 status = udc->driver->setup(&udc->gadget, &u.r); in ep0_irq()
1700 spin_lock(&udc->lock); in ep0_irq()
1701 udc->ep0_setup = 0; in ep0_irq()
1708 if (udc->ep0_set_config) { in ep0_irq()
1709 if (udc->ep0_reset_config) in ep0_irq()
1715 udc->ep0_pending = 0; in ep0_irq()
1724 static void devstate_irq(struct omap_udc *udc, u16 irq_src) in devstate_irq() argument
1729 change = devstat ^ udc->devstat; in devstate_irq()
1730 udc->devstat = devstat; in devstate_irq()
1733 udc_quiesce(udc); in devstate_irq()
1740 udc->gadget.speed = USB_SPEED_FULL; in devstate_irq()
1742 if (IS_ERR_OR_NULL(udc->transceiver)) in devstate_irq()
1743 pullup_enable(udc); in devstate_irq()
1745 } else if (udc->gadget.speed != USB_SPEED_UNKNOWN) { in devstate_irq()
1746 udc->gadget.speed = USB_SPEED_UNKNOWN; in devstate_irq()
1747 if (IS_ERR_OR_NULL(udc->transceiver)) in devstate_irq()
1748 pullup_disable(udc); in devstate_irq()
1750 udc->driver->driver.name); in devstate_irq()
1751 if (udc->driver->disconnect) { in devstate_irq()
1752 spin_unlock(&udc->lock); in devstate_irq()
1753 udc->driver->disconnect(&udc->gadget); in devstate_irq()
1754 spin_lock(&udc->lock); in devstate_irq()
1764 udc->gadget.speed = USB_SPEED_FULL; in devstate_irq()
1766 udc->driver->driver.name); in devstate_irq()
1775 if (udc->gadget.speed != USB_SPEED_UNKNOWN) { in devstate_irq()
1779 update_otg(udc); in devstate_irq()
1781 if (udc->gadget.speed == USB_SPEED_FULL in devstate_irq()
1782 && udc->driver->suspend) { in devstate_irq()
1783 spin_unlock(&udc->lock); in devstate_irq()
1784 udc->driver->suspend(&udc->gadget); in devstate_irq()
1785 spin_lock(&udc->lock); in devstate_irq()
1787 if (!IS_ERR_OR_NULL(udc->transceiver)) in devstate_irq()
1789 udc->transceiver, 1); in devstate_irq()
1792 if (!IS_ERR_OR_NULL(udc->transceiver)) in devstate_irq()
1794 udc->transceiver, 0); in devstate_irq()
1795 if (udc->gadget.speed == USB_SPEED_FULL in devstate_irq()
1796 && udc->driver->resume) { in devstate_irq()
1797 spin_unlock(&udc->lock); in devstate_irq()
1798 udc->driver->resume(&udc->gadget); in devstate_irq()
1799 spin_lock(&udc->lock); in devstate_irq()
1806 update_otg(udc); in devstate_irq()
1820 struct omap_udc *udc = _udc; in omap_udc_irq() local
1825 spin_lock_irqsave(&udc->lock, flags); in omap_udc_irq()
1852 spin_unlock_irqrestore(&udc->lock, flags); in omap_udc_irq()
1867 spin_lock_irqsave(&ep->udc->lock, flags); in pio_out_timer()
1887 spin_unlock_irqrestore(&ep->udc->lock, flags); in pio_out_timer()
1896 struct omap_udc *udc = _dev; in omap_udc_pio_irq() local
1900 spin_lock_irqsave(&udc->lock, flags); in omap_udc_pio_irq()
1909 ep = &udc->ep[epnum]; in omap_udc_pio_irq()
1945 ep = &udc->ep[16 + epnum]; in omap_udc_pio_irq()
1964 spin_unlock_irqrestore(&udc->lock, flags); in omap_udc_pio_irq()
1971 struct omap_udc *udc = _dev; in omap_udc_iso_irq() local
1976 spin_lock_irqsave(&udc->lock, flags); in omap_udc_iso_irq()
1979 list_for_each_entry(ep, &udc->iso, iso) { in omap_udc_iso_irq()
2029 spin_unlock_irqrestore(&udc->lock, flags); in omap_udc_iso_irq()
2053 spin_lock_irqsave(&udc->lock, flags); in omap_udc_start()
2055 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { in omap_udc_start()
2062 udc->ep0_pending = 0; in omap_udc_start()
2063 udc->ep[0].irqs = 0; in omap_udc_start()
2064 udc->softconnect = 1; in omap_udc_start()
2068 udc->driver = driver; in omap_udc_start()
2069 spin_unlock_irqrestore(&udc->lock, flags); in omap_udc_start()
2071 if (udc->dc_clk != NULL) in omap_udc_start()
2077 if (!IS_ERR_OR_NULL(udc->transceiver)) { in omap_udc_start()
2078 status = otg_set_peripheral(udc->transceiver->otg, in omap_udc_start()
2079 &udc->gadget); in omap_udc_start()
2082 udc->driver = NULL; in omap_udc_start()
2086 if (can_pullup(udc)) in omap_udc_start()
2087 pullup_enable(udc); in omap_udc_start()
2089 pullup_disable(udc); in omap_udc_start()
2096 omap_vbus_session(&udc->gadget, 1); in omap_udc_start()
2099 if (udc->dc_clk != NULL) in omap_udc_start()
2110 if (udc->dc_clk != NULL) in omap_udc_stop()
2114 omap_vbus_session(&udc->gadget, 0); in omap_udc_stop()
2116 if (!IS_ERR_OR_NULL(udc->transceiver)) in omap_udc_stop()
2117 (void) otg_set_peripheral(udc->transceiver->otg, NULL); in omap_udc_stop()
2119 pullup_disable(udc); in omap_udc_stop()
2121 spin_lock_irqsave(&udc->lock, flags); in omap_udc_stop()
2122 udc_quiesce(udc); in omap_udc_stop()
2123 spin_unlock_irqrestore(&udc->lock, flags); in omap_udc_stop()
2125 udc->driver = NULL; in omap_udc_stop()
2127 if (udc->dc_clk != NULL) in omap_udc_stop()
2303 spin_lock_irqsave(&udc->lock, flags); in proc_udc_show()
2319 udc->driver ? udc->driver->driver.name : "(none)", in proc_udc_show()
2321 udc->transceiver in proc_udc_show()
2322 ? udc->transceiver->label in proc_udc_show()
2349 spin_unlock_irqrestore(&udc->lock, flags); in proc_udc_show()
2426 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
2428 list_for_each_entry(ep, &udc->gadget.ep_list, in proc_udc_show()
2435 spin_unlock_irqrestore(&udc->lock, flags); in proc_udc_show()
2487 ep = &udc->ep[addr & 0xf]; in omap_ep_setup()
2580 ep->udc = udc; in omap_ep_setup()
2586 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in omap_ep_setup()
2593 complete(udc->done); in omap_udc_release()
2594 kfree(udc); in omap_udc_release()
2595 udc = NULL; in omap_udc_release()
2614 udc = kzalloc(sizeof(*udc), GFP_KERNEL); in omap_udc_setup()
2615 if (!udc) in omap_udc_setup()
2618 spin_lock_init(&udc->lock); in omap_udc_setup()
2620 udc->gadget.ops = &omap_gadget_ops; in omap_udc_setup()
2621 udc->gadget.ep0 = &udc->ep[0].ep; in omap_udc_setup()
2622 INIT_LIST_HEAD(&udc->gadget.ep_list); in omap_udc_setup()
2623 INIT_LIST_HEAD(&udc->iso); in omap_udc_setup()
2624 udc->gadget.speed = USB_SPEED_UNKNOWN; in omap_udc_setup()
2625 udc->gadget.max_speed = USB_SPEED_FULL; in omap_udc_setup()
2626 udc->gadget.name = driver_name; in omap_udc_setup()
2627 udc->transceiver = xceiv; in omap_udc_setup()
2632 list_del_init(&udc->ep[0].ep.ep_list); in omap_udc_setup()
2855 pullup_disable(udc); in omap_udc_probe()
2857 udc->gadget.is_otg = (config->otg != 0); in omap_udc_probe()
2862 udc->clr_halt = UDC_RESET_EP | UDC_CLRDATA_TOGGLE; in omap_udc_probe()
2864 udc->clr_halt = UDC_RESET_EP; in omap_udc_probe()
2868 0, driver_name, udc); in omap_udc_probe()
2877 0, "omap_udc pio", udc); in omap_udc_probe()
2885 0, "omap_udc iso", udc); in omap_udc_probe()
2893 udc->dc_clk = dc_clk; in omap_udc_probe()
2894 udc->hhc_clk = hhc_clk; in omap_udc_probe()
2900 status = usb_add_gadget_udc_release(&pdev->dev, &udc->gadget, in omap_udc_probe()
2912 free_irq(pdev->resource[2].start, udc); in omap_udc_probe()
2916 free_irq(pdev->resource[1].start, udc); in omap_udc_probe()
2919 kfree(udc); in omap_udc_probe()
2920 udc = NULL; in omap_udc_probe()
2943 if (!udc) in omap_udc_remove()
2946 usb_del_gadget_udc(&udc->gadget); in omap_udc_remove()
2947 if (udc->driver) in omap_udc_remove()
2950 udc->done = &done; in omap_udc_remove()
2952 pullup_disable(udc); in omap_udc_remove()
2953 if (!IS_ERR_OR_NULL(udc->transceiver)) { in omap_udc_remove()
2954 usb_put_phy(udc->transceiver); in omap_udc_remove()
2955 udc->transceiver = NULL; in omap_udc_remove()
2962 free_irq(pdev->resource[3].start, udc); in omap_udc_remove()
2964 free_irq(pdev->resource[2].start, udc); in omap_udc_remove()
2965 free_irq(pdev->resource[1].start, udc); in omap_udc_remove()
2967 if (udc->dc_clk) { in omap_udc_remove()
2968 if (udc->clk_requested) in omap_udc_remove()
2970 clk_put(udc->hhc_clk); in omap_udc_remove()
2971 clk_put(udc->dc_clk); in omap_udc_remove()
3004 omap_pullup(&udc->gadget, 0); in omap_udc_suspend()
3013 omap_pullup(&udc->gadget, 1); in omap_udc_resume()
3017 return omap_wakeup(&udc->gadget); in omap_udc_resume()