• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/usb/gadget/

Lines Matching refs:udc

2  * omap_udc.c -- for OMAP full speed udc; most chips support OTG.
156 struct omap_udc *udc;
201 udc = ep->udc;
202 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
207 spin_lock_irqsave(&udc->lock, flags);
219 UDC_CTRL_REG = udc->clr_halt;
224 list_add(&ep->iso, &udc->iso);
238 spin_unlock_irqrestore(&udc->lock, flags);
256 spin_lock_irqsave(&ep->udc->lock, flags);
265 spin_unlock_irqrestore(&ep->udc->lock, flags);
316 dev_warn(ep->udc->gadget.dev.parent,
321 return dma_alloc_coherent(ep->udc->gadget.dev.parent,
380 rec->dev = ep->udc->gadget.dev.parent;
408 dma_unmap_single(ep->udc->gadget.dev.parent,
416 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
432 spin_unlock(&ep->udc->lock);
434 spin_lock(&ep->udc->lock);
772 static void dma_irq(struct omap_udc *udc, u16 irq_src)
780 ep = &udc->ep[16 + UDC_DMA_TX_SRC(dman_stat)];
799 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)];
817 ep = &udc->ep[UDC_DMA_RX_SRC(dman_stat)];
1001 struct omap_udc *udc;
1033 udc = ep->udc;
1034 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
1040 ep->udc->gadget.dev.parent,
1049 ep->udc->gadget.dev.parent,
1061 spin_lock_irqsave(&udc->lock, flags);
1073 if (!udc->ep0_pending || !list_empty (&ep->queue)) {
1074 spin_unlock_irqrestore(&udc->lock, flags);
1079 is_in = udc->ep0_in;
1086 if (udc->ep0_set_config) {
1090 if (!udc->ep0_reset_config)
1106 udc->ep0_pending = 0;
1114 if (udc->ep0_setup)
1143 spin_unlock_irqrestore(&udc->lock, flags);
1157 spin_lock_irqsave(&ep->udc->lock, flags);
1165 spin_unlock_irqrestore(&ep->udc->lock, flags);
1179 spin_unlock_irqrestore(&ep->udc->lock, flags);
1191 spin_lock_irqsave(&ep->udc->lock, flags);
1195 if (!ep->udc->ep0_pending)
1198 if (ep->udc->ep0_set_config) {
1203 ep->udc->ep0_pending = 0;
1240 UDC_CTRL_REG = ep->udc->clr_halt;
1252 spin_unlock_irqrestore(&ep->udc->lock, flags);
1284 struct omap_udc *udc;
1288 udc = container_of(gadget, struct omap_udc, gadget);
1290 spin_lock_irqsave(&udc->lock, flags);
1291 if (udc->devstat & UDC_SUS) {
1295 if (udc->devstat & (UDC_B_HNP_ENABLE|UDC_R_WK_OK)) {
1302 } else if (!(udc->devstat & UDC_ATT)) {
1303 if (udc->transceiver)
1304 retval = otg_start_srp(udc->transceiver);
1306 spin_unlock_irqrestore(&udc->lock, flags);
1314 struct omap_udc *udc;
1318 udc = container_of(gadget, struct omap_udc, gadget);
1319 spin_lock_irqsave(&udc->lock, flags);
1326 spin_unlock_irqrestore(&udc->lock, flags);
1331 static int can_pullup(struct omap_udc *udc)
1333 return udc->driver && udc->softconnect && udc->vbus_active;
1336 static void pullup_enable(struct omap_udc *udc)
1338 udc->gadget.dev.parent->power.power_state = PMSG_ON;
1339 udc->gadget.dev.power.power_state = PMSG_ON;
1348 static void pullup_disable(struct omap_udc *udc)
1358 static struct omap_udc *udc;
1362 if (udc == NULL || udc->dc_clk == NULL || udc->hhc_clk == NULL)
1366 clk_enable(udc->dc_clk);
1367 clk_enable(udc->hhc_clk);
1370 clk_disable(udc->hhc_clk);
1371 clk_disable(udc->dc_clk);
1381 struct omap_udc *udc;
1384 udc = container_of(gadget, struct omap_udc, gadget);
1385 spin_lock_irqsave(&udc->lock, flags);
1387 udc->vbus_active = (is_active != 0);
1395 if (udc->dc_clk != NULL && is_active) {
1396 if (!udc->clk_requested) {
1398 udc->clk_requested = 1;
1401 if (can_pullup(udc))
1402 pullup_enable(udc);
1404 pullup_disable(udc);
1405 if (udc->dc_clk != NULL && !is_active) {
1406 if (udc->clk_requested) {
1408 udc->clk_requested = 0;
1411 spin_unlock_irqrestore(&udc->lock, flags);
1417 struct omap_udc *udc;
1419 udc = container_of(gadget, struct omap_udc, gadget);
1420 if (udc->transceiver)
1421 return otg_set_power(udc->transceiver, mA);
1427 struct omap_udc *udc;
1430 udc = container_of(gadget, struct omap_udc, gadget);
1431 spin_lock_irqsave(&udc->lock, flags);
1432 udc->softconnect = (is_on != 0);
1433 if (can_pullup(udc))
1434 pullup_enable(udc);
1436 pullup_disable(udc);
1437 spin_unlock_irqrestore(&udc->lock, flags);
1452 /* dequeue ALL requests; caller holds udc->lock */
1473 /* caller holds udc->lock */
1474 static void udc_quiesce(struct omap_udc *udc)
1478 udc->gadget.speed = USB_SPEED_UNKNOWN;
1479 nuke(&udc->ep[0], -ESHUTDOWN);
1480 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list)
1486 static void update_otg(struct omap_udc *udc)
1490 if (!udc->gadget.is_otg)
1498 udc->gadget.b_hnp_enable = !!(devstat & UDC_B_HNP_ENABLE);
1499 udc->gadget.a_hnp_support = !!(devstat & UDC_A_HNP_SUPPORT);
1500 udc->gadget.a_alt_hnp_support = !!(devstat & UDC_A_ALT_HNP_SUPPORT);
1505 if (udc->gadget.b_hnp_enable)
1510 static void ep0_irq(struct omap_udc *udc, u16 irq_src)
1512 struct omap_ep *ep0 = &udc->ep[0];
1549 if (udc->ep0_in) {
1556 if (!req && udc->ep0_pending) {
1561 udc->ep0_pending = 0;
1586 if (!udc->ep0_in) {
1593 udc->ep0_pending = 0;
1607 udc->ep0_pending = 0;
1651 udc->ep0_in = (u.r.bRequestType & USB_DIR_IN) != 0;
1652 udc->ep0_set_config = 0;
1653 udc->ep0_pending = 1;
1658 /* udc needs to know when ep != 0 is valid */
1663 udc->ep0_set_config = 1;
1664 udc->ep0_reset_config = (w_value == 0);
1667 /* update udc NOW since gadget driver may start
1671 if (udc->ep0_reset_config)
1675 update_otg(udc);
1684 ep = &udc->ep[w_index & 0xf];
1692 UDC_CTRL_REG = udc->clr_halt;
1713 ep = &udc->ep[w_index & 0xf];
1737 udc->ep0_pending = 0;
1749 ep = &udc->ep[w_index & 0xf];
1783 if (!udc->ep0_in && w_length) {
1811 udc->ep0_setup = 1;
1812 spin_unlock(&udc->lock);
1813 status = udc->driver->setup (&udc->gadget, &u.r);
1814 spin_lock(&udc->lock);
1815 udc->ep0_setup = 0;
1822 if (udc->ep0_set_config) {
1823 if (udc->ep0_reset_config)
1829 udc->ep0_pending = 0;
1838 static void devstate_irq(struct omap_udc *udc, u16 irq_src)
1843 change = devstat ^ udc->devstat;
1844 udc->devstat = devstat;
1847 udc_quiesce(udc);
1854 udc->gadget.speed = USB_SPEED_FULL;
1856 if (!udc->transceiver)
1857 pullup_enable(udc);
1859 } else if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
1860 udc->gadget.speed = USB_SPEED_UNKNOWN;
1861 if (!udc->transceiver)
1862 pullup_disable(udc);
1864 udc->driver->driver.name);
1865 if (udc->driver->disconnect) {
1866 spin_unlock(&udc->lock);
1867 udc->driver->disconnect(&udc->gadget);
1868 spin_lock(&udc->lock);
1878 udc->gadget.speed = USB_SPEED_FULL;
1880 udc->driver->driver.name);
1888 if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
1891 update_otg(udc);
1893 if (udc->gadget.speed == USB_SPEED_FULL
1894 && udc->driver->suspend) {
1895 spin_unlock(&udc->lock);
1896 udc->driver->suspend(&udc->gadget);
1897 spin_lock(&udc->lock);
1899 if (udc->transceiver)
1900 otg_set_suspend(udc->transceiver, 1);
1903 if (udc->transceiver)
1904 otg_set_suspend(udc->transceiver, 0);
1905 if (udc->gadget.speed == USB_SPEED_FULL
1906 && udc->driver->resume) {
1907 spin_unlock(&udc->lock);
1908 udc->driver->resume(&udc->gadget);
1909 spin_lock(&udc->lock);
1916 update_otg(udc);
1930 struct omap_udc *udc = _udc;
1935 spin_lock_irqsave(&udc->lock, flags);
1962 spin_unlock_irqrestore(&udc->lock, flags);
1976 spin_lock_irqsave(&ep->udc->lock, flags);
1996 spin_unlock_irqrestore(&ep->udc->lock, flags);
2005 struct omap_udc *udc = _dev;
2009 spin_lock_irqsave(&udc->lock, flags);
2018 ep = &udc->ep[epnum];
2054 ep = &udc->ep[16 + epnum];
2073 spin_unlock_irqrestore(&udc->lock, flags);
2080 struct omap_udc *udc = _dev;
2085 spin_lock_irqsave(&udc->lock, flags);
2088 list_for_each_entry (ep, &udc->iso, iso) {
2133 spin_unlock_irqrestore(&udc->lock, flags);
2159 if (!udc)
2167 spin_lock_irqsave(&udc->lock, flags);
2168 if (udc->driver) {
2169 spin_unlock_irqrestore(&udc->lock, flags);
2174 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
2181 udc->ep0_pending = 0;
2182 udc->ep[0].irqs = 0;
2183 udc->softconnect = 1;
2187 udc->driver = driver;
2188 udc->gadget.dev.driver = &driver->driver;
2189 spin_unlock_irqrestore(&udc->lock, flags);
2191 if (udc->dc_clk != NULL)
2194 status = driver->bind (&udc->gadget);
2197 udc->gadget.dev.driver = NULL;
2198 udc->driver = NULL;
2206 if (udc->transceiver) {
2207 status = otg_set_peripheral(udc->transceiver, &udc->gadget);
2211 driver->unbind (&udc->gadget);
2212 udc->gadget.dev.driver = NULL;
2213 udc->driver = NULL;
2218 if (can_pullup(udc))
2219 pullup_enable (udc);
2221 pullup_disable (udc);
2228 omap_vbus_session(&udc->gadget, 1);
2231 if (udc->dc_clk != NULL)
2242 if (!udc)
2244 if (!driver || driver != udc->driver || !driver->unbind)
2247 if (udc->dc_clk != NULL)
2251 omap_vbus_session(&udc->gadget, 0);
2253 if (udc->transceiver)
2254 (void) otg_set_peripheral(udc->transceiver, NULL);
2256 pullup_disable(udc);
2258 spin_lock_irqsave(&udc->lock, flags);
2259 udc_quiesce(udc);
2260 spin_unlock_irqrestore(&udc->lock, flags);
2262 driver->unbind(&udc->gadget);
2263 udc->gadget.dev.driver = NULL;
2264 udc->driver = NULL;
2266 if (udc->dc_clk != NULL)
2280 static const char proc_filename[] = "driver/udc";
2435 spin_lock_irqsave(&udc->lock, flags);
2451 udc->driver ? udc->driver->driver.name : "(none)",
2453 udc->transceiver
2454 ? udc->transceiver->label
2483 spin_unlock_irqrestore(&udc->lock, flags);
2560 proc_ep_show(s, &udc->ep[0]);
2562 list_for_each_entry (ep, &udc->gadget.ep_list,
2569 spin_unlock_irqrestore(&udc->lock, flags);
2624 ep = &udc->ep[addr & 0xf];
2693 ep->udc = udc;
2698 list_add_tail (&ep->ep.ep_list, &udc->gadget.ep_list);
2705 complete(udc->done);
2706 kfree (udc);
2707 udc = NULL;
2726 udc = kzalloc(sizeof(*udc), GFP_KERNEL);
2727 if (!udc)
2730 spin_lock_init (&udc->lock);
2732 udc->gadget.ops = &omap_gadget_ops;
2733 udc->gadget.ep0 = &udc->ep[0].ep;
2734 INIT_LIST_HEAD(&udc->gadget.ep_list);
2735 INIT_LIST_HEAD(&udc->iso);
2736 udc->gadget.speed = USB_SPEED_UNKNOWN;
2737 udc->gadget.name = driver_name;
2739 device_initialize(&udc->gadget.dev);
2740 strcpy (udc->gadget.dev.bus_id, "gadget");
2741 udc->gadget.dev.release = omap_udc_release;
2742 udc->gadget.dev.parent = &odev->dev;
2744 udc->gadget.dev.dma_mask = odev->dev.dma_mask;
2746 udc->transceiver = xceiv;
2751 list_del_init(&udc->ep[0].ep.ep_list);
2972 // "udc" is now valid
2973 pullup_disable(udc);
2975 udc->gadget.is_otg = (config->otg != 0);
2980 udc->clr_halt = UDC_RESET_EP | UDC_CLRDATA_TOGGLE;
2982 udc->clr_halt = UDC_RESET_EP;
2986 IRQF_SAMPLE_RANDOM, driver_name, udc);
2995 IRQF_SAMPLE_RANDOM, "omap_udc pio", udc);
3003 IRQF_DISABLED, "omap_udc iso", udc);
3011 udc->dc_clk = dc_clk;
3012 udc->hhc_clk = hhc_clk;
3018 udc->dc_clk = dc_clk;
3019 udc->hhc_clk = hhc_clk;
3023 status = device_add(&udc->gadget.dev);
3029 free_irq(pdev->resource[2].start, udc);
3033 free_irq(pdev->resource[1].start, udc);
3036 kfree (udc);
3037 udc = NULL;
3060 if (!udc)
3062 if (udc->driver)
3065 udc->done = &done;
3067 pullup_disable(udc);
3068 if (udc->transceiver) {
3069 put_device(udc->transceiver->dev);
3070 udc->transceiver = NULL;
3077 free_irq(pdev->resource[3].start, udc);
3079 free_irq(pdev->resource[2].start, udc);
3080 free_irq(pdev->resource[1].start, udc);
3082 if (udc->dc_clk) {
3083 if (udc->clk_requested)
3085 clk_put(udc->hhc_clk);
3086 clk_put(udc->dc_clk);
3092 device_unregister(&udc->gadget.dev);
3120 omap_pullup(&udc->gadget, 0);
3123 udc->gadget.dev.power.power_state = PMSG_SUSPEND;
3124 udc->gadget.dev.parent->power.power_state = PMSG_SUSPEND;
3131 omap_pullup(&udc->gadget, 1);
3135 return omap_wakeup(&udc->gadget);