• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/usb/gadget/

Lines Matching refs:udc

2  * omap_udc.c -- for OMAP full speed udc; most chips support OTG.
161 struct omap_udc *udc;
206 udc = ep->udc;
207 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
212 spin_lock_irqsave(&udc->lock, flags);
224 omap_writew(udc->clr_halt, UDC_CTRL);
229 list_add(&ep->iso, &udc->iso);
243 spin_unlock_irqrestore(&udc->lock, flags);
261 spin_lock_irqsave(&ep->udc->lock, flags);
270 spin_unlock_irqrestore(&ep->udc->lock, flags);
316 dma_unmap_single(ep->udc->gadget.dev.parent,
324 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
340 spin_unlock(&ep->udc->lock);
342 spin_lock(&ep->udc->lock);
677 static void dma_irq(struct omap_udc *udc, u16 irq_src)
685 ep = &udc->ep[16 + UDC_DMA_TX_SRC(dman_stat)];
704 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)];
722 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)];
918 struct omap_udc *udc;
952 udc = ep->udc;
953 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
959 ep->udc->gadget.dev.parent,
968 ep->udc->gadget.dev.parent,
980 spin_lock_irqsave(&udc->lock, flags);
996 if (!udc->ep0_pending || !list_empty (&ep->queue)) {
997 spin_unlock_irqrestore(&udc->lock, flags);
1002 is_in = udc->ep0_in;
1009 if (udc->ep0_set_config) {
1013 if (!udc->ep0_reset_config)
1029 udc->ep0_pending = 0;
1037 if (udc->ep0_setup)
1066 spin_unlock_irqrestore(&udc->lock, flags);
1080 spin_lock_irqsave(&ep->udc->lock, flags);
1088 spin_unlock_irqrestore(&ep->udc->lock, flags);
1102 spin_unlock_irqrestore(&ep->udc->lock, flags);
1114 spin_lock_irqsave(&ep->udc->lock, flags);
1118 if (!ep->udc->ep0_pending)
1121 if (ep->udc->ep0_set_config) {
1126 ep->udc->ep0_pending = 0;
1163 omap_writew(ep->udc->clr_halt, UDC_CTRL);
1175 spin_unlock_irqrestore(&ep->udc->lock, flags);
1204 struct omap_udc *udc;
1208 udc = container_of(gadget, struct omap_udc, gadget);
1210 spin_lock_irqsave(&udc->lock, flags);
1211 if (udc->devstat & UDC_SUS) {
1215 if (udc->devstat & (UDC_B_HNP_ENABLE|UDC_R_WK_OK)) {
1222 } else if (!(udc->devstat & UDC_ATT)) {
1223 if (udc->transceiver)
1224 retval = otg_start_srp(udc->transceiver);
1226 spin_unlock_irqrestore(&udc->lock, flags);
1234 struct omap_udc *udc;
1238 udc = container_of(gadget, struct omap_udc, gadget);
1239 spin_lock_irqsave(&udc->lock, flags);
1246 spin_unlock_irqrestore(&udc->lock, flags);
1251 static int can_pullup(struct omap_udc *udc)
1253 return udc->driver && udc->softconnect && udc->vbus_active;
1256 static void pullup_enable(struct omap_udc *udc)
1263 if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx()) {
1273 static void pullup_disable(struct omap_udc *udc)
1277 if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx()) {
1290 static struct omap_udc *udc;
1294 if (udc == NULL || udc->dc_clk == NULL || udc->hhc_clk == NULL)
1298 clk_enable(udc->dc_clk);
1299 clk_enable(udc->hhc_clk);
1302 clk_disable(udc->hhc_clk);
1303 clk_disable(udc->dc_clk);
1313 struct omap_udc *udc;
1317 udc = container_of(gadget, struct omap_udc, gadget);
1318 spin_lock_irqsave(&udc->lock, flags);
1320 udc->vbus_active = (is_active != 0);
1330 if (udc->dc_clk != NULL && is_active) {
1331 if (!udc->clk_requested) {
1333 udc->clk_requested = 1;
1336 if (can_pullup(udc))
1337 pullup_enable(udc);
1339 pullup_disable(udc);
1340 if (udc->dc_clk != NULL && !is_active) {
1341 if (udc->clk_requested) {
1343 udc->clk_requested = 0;
1346 spin_unlock_irqrestore(&udc->lock, flags);
1352 struct omap_udc *udc;
1354 udc = container_of(gadget, struct omap_udc, gadget);
1355 if (udc->transceiver)
1356 return otg_set_power(udc->transceiver, mA);
1362 struct omap_udc *udc;
1365 udc = container_of(gadget, struct omap_udc, gadget);
1366 spin_lock_irqsave(&udc->lock, flags);
1367 udc->softconnect = (is_on != 0);
1368 if (can_pullup(udc))
1369 pullup_enable(udc);
1371 pullup_disable(udc);
1372 spin_unlock_irqrestore(&udc->lock, flags);
1387 /* dequeue ALL requests; caller holds udc->lock */
1408 /* caller holds udc->lock */
1409 static void udc_quiesce(struct omap_udc *udc)
1413 udc->gadget.speed = USB_SPEED_UNKNOWN;
1414 nuke(&udc->ep[0], -ESHUTDOWN);
1415 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list)
1421 static void update_otg(struct omap_udc *udc)
1425 if (!gadget_is_otg(&udc->gadget))
1433 udc->gadget.b_hnp_enable = !!(devstat & UDC_B_HNP_ENABLE);
1434 udc->gadget.a_hnp_support = !!(devstat & UDC_A_HNP_SUPPORT);
1435 udc->gadget.a_alt_hnp_support = !!(devstat & UDC_A_ALT_HNP_SUPPORT);
1440 if (udc->gadget.b_hnp_enable) {
1450 static void ep0_irq(struct omap_udc *udc, u16 irq_src)
1452 struct omap_ep *ep0 = &udc->ep[0];
1489 if (udc->ep0_in) {
1496 if (!req && udc->ep0_pending) {
1501 udc->ep0_pending = 0;
1526 if (!udc->ep0_in) {
1533 udc->ep0_pending = 0;
1548 udc->ep0_pending = 0;
1592 udc->ep0_in = (u.r.bRequestType & USB_DIR_IN) != 0;
1593 udc->ep0_set_config = 0;
1594 udc->ep0_pending = 1;
1599 /* udc needs to know when ep != 0 is valid */
1604 udc->ep0_set_config = 1;
1605 udc->ep0_reset_config = (w_value == 0);
1608 /* update udc NOW since gadget driver may start
1612 if (udc->ep0_reset_config)
1616 update_otg(udc);
1625 ep = &udc->ep[w_index & 0xf];
1633 omap_writew(udc->clr_halt, UDC_CTRL);
1654 ep = &udc->ep[w_index & 0xf];
1678 udc->ep0_pending = 0;
1690 ep = &udc->ep[w_index & 0xf];
1724 if (!udc->ep0_in && w_length) {
1752 udc->ep0_setup = 1;
1753 spin_unlock(&udc->lock);
1754 status = udc->driver->setup (&udc->gadget, &u.r);
1755 spin_lock(&udc->lock);
1756 udc->ep0_setup = 0;
1763 if (udc->ep0_set_config) {
1764 if (udc->ep0_reset_config)
1770 udc->ep0_pending = 0;
1779 static void devstate_irq(struct omap_udc *udc, u16 irq_src)
1784 change = devstat ^ udc->devstat;
1785 udc->devstat = devstat;
1788 udc_quiesce(udc);
1795 udc->gadget.speed = USB_SPEED_FULL;
1797 if (!udc->transceiver)
1798 pullup_enable(udc);
1800 } else if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
1801 udc->gadget.speed = USB_SPEED_UNKNOWN;
1802 if (!udc->transceiver)
1803 pullup_disable(udc);
1805 udc->driver->driver.name);
1806 if (udc->driver->disconnect) {
1807 spin_unlock(&udc->lock);
1808 udc->driver->disconnect(&udc->gadget);
1809 spin_lock(&udc->lock);
1819 udc->gadget.speed = USB_SPEED_FULL;
1821 udc->driver->driver.name);
1830 if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
1833 update_otg(udc);
1835 if (udc->gadget.speed == USB_SPEED_FULL
1836 && udc->driver->suspend) {
1837 spin_unlock(&udc->lock);
1838 udc->driver->suspend(&udc->gadget);
1839 spin_lock(&udc->lock);
1841 if (udc->transceiver)
1842 otg_set_suspend(udc->transceiver, 1);
1845 if (udc->transceiver)
1846 otg_set_suspend(udc->transceiver, 0);
1847 if (udc->gadget.speed == USB_SPEED_FULL
1848 && udc->driver->resume) {
1849 spin_unlock(&udc->lock);
1850 udc->driver->resume(&udc->gadget);
1851 spin_lock(&udc->lock);
1858 update_otg(udc);
1872 struct omap_udc *udc = _udc;
1877 spin_lock_irqsave(&udc->lock, flags);
1904 spin_unlock_irqrestore(&udc->lock, flags);
1918 spin_lock_irqsave(&ep->udc->lock, flags);
1938 spin_unlock_irqrestore(&ep->udc->lock, flags);
1947 struct omap_udc *udc = _dev;
1951 spin_lock_irqsave(&udc->lock, flags);
1960 ep = &udc->ep[epnum];
1996 ep = &udc->ep[16 + epnum];
2015 spin_unlock_irqrestore(&udc->lock, flags);
2022 struct omap_udc *udc = _dev;
2027 spin_lock_irqsave(&udc->lock, flags);
2030 list_for_each_entry (ep, &udc->iso, iso) {
2080 spin_unlock_irqrestore(&udc->lock, flags);
2107 if (!udc)
2115 spin_lock_irqsave(&udc->lock, flags);
2116 if (udc->driver) {
2117 spin_unlock_irqrestore(&udc->lock, flags);
2122 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
2129 udc->ep0_pending = 0;
2130 udc->ep[0].irqs = 0;
2131 udc->softconnect = 1;
2135 udc->driver = driver;
2136 udc->gadget.dev.driver = &driver->driver;
2137 spin_unlock_irqrestore(&udc->lock, flags);
2139 if (udc->dc_clk != NULL)
2142 status = driver->bind (&udc->gadget);
2145 udc->gadget.dev.driver = NULL;
2146 udc->driver = NULL;
2154 if (udc->transceiver) {
2155 status = otg_set_peripheral(udc->transceiver, &udc->gadget);
2159 driver->unbind (&udc->gadget);
2160 udc->gadget.dev.driver = NULL;
2161 udc->driver = NULL;
2166 if (can_pullup(udc))
2167 pullup_enable (udc);
2169 pullup_disable (udc);
2176 omap_vbus_session(&udc->gadget, 1);
2179 if (udc->dc_clk != NULL)
2190 if (!udc)
2192 if (!driver || driver != udc->driver || !driver->unbind)
2195 if (udc->dc_clk != NULL)
2199 omap_vbus_session(&udc->gadget, 0);
2201 if (udc->transceiver)
2202 (void) otg_set_peripheral(udc->transceiver, NULL);
2204 pullup_disable(udc);
2206 spin_lock_irqsave(&udc->lock, flags);
2207 udc_quiesce(udc);
2208 spin_unlock_irqrestore(&udc->lock, flags);
2210 driver->unbind(&udc->gadget);
2211 udc->gadget.dev.driver = NULL;
2212 udc->driver = NULL;
2214 if (udc->dc_clk != NULL)
2228 static const char proc_filename[] = "driver/udc";
2390 spin_lock_irqsave(&udc->lock, flags);
2406 udc->driver ? udc->driver->driver.name : "(none)",
2408 udc->transceiver
2409 ? udc->transceiver->label
2438 spin_unlock_irqrestore(&udc->lock, flags);
2515 proc_ep_show(s, &udc->ep[0]);
2517 list_for_each_entry (ep, &udc->gadget.ep_list,
2524 spin_unlock_irqrestore(&udc->lock, flags);
2576 ep = &udc->ep[addr & 0xf];
2645 ep->udc = udc;
2650 list_add_tail (&ep->ep.ep_list, &udc->gadget.ep_list);
2657 complete(udc->done);
2658 kfree (udc);
2659 udc = NULL;
2678 udc = kzalloc(sizeof(*udc), GFP_KERNEL);
2679 if (!udc)
2682 spin_lock_init (&udc->lock);
2684 udc->gadget.ops = &omap_gadget_ops;
2685 udc->gadget.ep0 = &udc->ep[0].ep;
2686 INIT_LIST_HEAD(&udc->gadget.ep_list);
2687 INIT_LIST_HEAD(&udc->iso);
2688 udc->gadget.speed = USB_SPEED_UNKNOWN;
2689 udc->gadget.name = driver_name;
2691 device_initialize(&udc->gadget.dev);
2692 dev_set_name(&udc->gadget.dev, "gadget");
2693 udc->gadget.dev.release = omap_udc_release;
2694 udc->gadget.dev.parent = &odev->dev;
2696 udc->gadget.dev.dma_mask = odev->dev.dma_mask;
2698 udc->transceiver = xceiv;
2703 list_del_init(&udc->ep[0].ep.ep_list);
2934 // "udc" is now valid
2935 pullup_disable(udc);
2937 udc->gadget.is_otg = (config->otg != 0);
2942 udc->clr_halt = UDC_RESET_EP | UDC_CLRDATA_TOGGLE;
2944 udc->clr_halt = UDC_RESET_EP;
2948 IRQF_SAMPLE_RANDOM, driver_name, udc);
2957 IRQF_SAMPLE_RANDOM, "omap_udc pio", udc);
2965 IRQF_DISABLED, "omap_udc iso", udc);
2973 udc->dc_clk = dc_clk;
2974 udc->hhc_clk = hhc_clk;
2980 udc->dc_clk = dc_clk;
2981 udc->hhc_clk = hhc_clk;
2985 status = device_add(&udc->gadget.dev);
2991 free_irq(pdev->resource[2].start, udc);
2995 free_irq(pdev->resource[1].start, udc);
2998 kfree (udc);
2999 udc = NULL;
3022 if (!udc)
3024 if (udc->driver)
3027 udc->done = &done;
3029 pullup_disable(udc);
3030 if (udc->transceiver) {
3031 otg_put_transceiver(udc->transceiver);
3032 udc->transceiver = NULL;
3039 free_irq(pdev->resource[3].start, udc);
3041 free_irq(pdev->resource[2].start, udc);
3042 free_irq(pdev->resource[1].start, udc);
3044 if (udc->dc_clk) {
3045 if (udc->clk_requested)
3047 clk_put(udc->hhc_clk);
3048 clk_put(udc->dc_clk);
3054 device_unregister(&udc->gadget.dev);
3082 omap_pullup(&udc->gadget, 0);
3091 omap_pullup(&udc->gadget, 1);
3095 return omap_wakeup(&udc->gadget);