• 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

42 #include <mach/udc.h>
66 struct pxa_udc *udc = s->private;
71 if (!udc->driver)
78 udc->driver ? udc->driver->driver.name : "(none)");
80 tmp = udc_readl(udc, UDCCR);
99 udc_readl(udc, UDCICR0), udc_readl(udc, UDCICR1));
101 udc_readl(udc, UDCISR0), udc_readl(udc, UDCISR1));
102 pos += seq_printf(s, "udcfnr=%d\n", udc_readl(udc, UDCFNR));
105 udc->stats.irqs_reset, udc->stats.irqs_suspend,
106 udc->stats.irqs_resume, udc->stats.irqs_reconfig);
115 struct pxa_udc *udc = s->private;
121 if (!udc->driver)
126 ep = &udc->pxa_ep[i];
150 struct pxa_udc *udc = s->private;
156 if (!udc->driver)
159 ep = &udc->pxa_ep[0];
170 ep = &udc->pxa_ep[i];
171 tmp = i? udc_ep_readl(ep, UDCCR) : udc_readl(udc, UDCCR);
228 static void pxa_init_debugfs(struct pxa_udc *udc)
232 root = debugfs_create_dir(udc->gadget.name, NULL);
236 state = debugfs_create_file("udcstate", 0400, root, udc,
240 queues = debugfs_create_file("queues", 0400, root, udc,
244 eps = debugfs_create_file("epstate", 0400, root, udc,
249 udc->debugfs_root = root;
250 udc->debugfs_state = state;
251 udc->debugfs_queues = queues;
252 udc->debugfs_eps = eps;
261 dev_err(udc->dev, "debugfs is not available\n");
264 static void pxa_cleanup_debugfs(struct pxa_udc *udc)
266 debugfs_remove(udc->debugfs_eps);
267 debugfs_remove(udc->debugfs_queues);
268 debugfs_remove(udc->debugfs_state);
269 debugfs_remove(udc->debugfs_root);
270 udc->debugfs_eps = NULL;
271 udc->debugfs_queues = NULL;
272 udc->debugfs_state = NULL;
273 udc->debugfs_root = NULL;
277 static inline void pxa_init_debugfs(struct pxa_udc *udc)
281 static inline void pxa_cleanup_debugfs(struct pxa_udc *udc)
313 * @udc: pxa udc
336 static struct pxa_ep *find_pxa_ep(struct pxa_udc *udc,
341 int cfg = udc->config;
342 int iface = udc->last_interface;
343 int alt = udc->last_alternate;
345 if (udc_usb_ep == &udc->udc_usb_ep[0])
346 return &udc->pxa_ep[0];
349 ep = &udc->pxa_ep[i];
358 * @udc: pxa udc
366 static void update_pxa_ep_matches(struct pxa_udc *udc)
372 udc_usb_ep = &udc->udc_usb_ep[i];
374 udc_usb_ep->pxa_ep = find_pxa_ep(udc, udc_usb_ep);
380 * @ep: udc endpoint
384 struct pxa_udc *udc = ep->dev;
386 u32 udcicr0 = udc_readl(udc, UDCICR0);
387 u32 udcicr1 = udc_readl(udc, UDCICR1);
390 udc_writel(udc, UDCICR0, udcicr0 | (3 << (index * 2)));
392 udc_writel(udc, UDCICR1, udcicr1 | (3 << ((index - 16) * 2)));
397 * @ep: udc endpoint
401 struct pxa_udc *udc = ep->dev;
403 u32 udcicr0 = udc_readl(udc, UDCICR0);
404 u32 udcicr1 = udc_readl(udc, UDCICR1);
407 udc_writel(udc, UDCICR0, udcicr0 & ~(3 << (index * 2)));
409 udc_writel(udc, UDCICR1, udcicr1 & ~(3 << ((index - 16) * 2)));
414 * @udc: udc device
419 static inline void udc_set_mask_UDCCR(struct pxa_udc *udc, int mask)
421 u32 udccr = udc_readl(udc, UDCCR);
422 udc_writel(udc, UDCCR,
428 * @udc: udc device
433 static inline void udc_clear_mask_UDCCR(struct pxa_udc *udc, int mask)
435 u32 udccr = udc_readl(udc, UDCCR);
436 udc_writel(udc, UDCCR,
442 * @udc: udc device
458 * ep_count_bytes_remain - get how many bytes in udc endpoint
459 * @ep: udc endpoint
472 * @ep: udc endpoint
495 * @ep: udc endpoint
528 * @dev: udc device
531 static void set_ep0state(struct pxa_udc *udc, int state)
533 struct pxa_ep *ep = &udc->pxa_ep[0];
534 char *old_stname = EP0_STNAME(udc);
536 udc->ep0state = state;
538 EP0_STNAME(udc), udc_ep_readl(ep, UDCCSR),
544 * @dev: udc device
604 * @dev: udc device
1371 * before udc is enabled. After udc enable, no physical endpoint configuration
1380 struct pxa_udc *udc;
1413 udc = ep->dev;
1415 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1477 * @udc: udc device
1484 static void dplus_pullup(struct pxa_udc *udc, int on)
1487 if (gpio_is_valid(udc->mach->gpio_pullup))
1488 gpio_set_value(udc->mach->gpio_pullup,
1489 !udc->mach->gpio_pullup_inverted);
1490 if (udc->mach->udc_command)
1491 udc->mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
1493 if (gpio_is_valid(udc->mach->gpio_pullup))
1494 gpio_set_value(udc->mach->gpio_pullup,
1495 udc->mach->gpio_pullup_inverted);
1496 if (udc->mach->udc_command)
1497 udc->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1499 udc->pullup_on = on;
1508 struct pxa_udc *udc = to_gadget_udc(_gadget);
1510 return (udc_readl(udc, UDCFNR) & 0x7ff);
1514 * pxa_udc_wakeup - Force udc device out of suspend
1521 struct pxa_udc *udc = to_gadget_udc(_gadget);
1524 if ((udc_readl(udc, UDCCR) & UDCCR_DWRE) == 0)
1526 udc_set_mask_UDCCR(udc, UDCCR_UDR);
1530 static void udc_enable(struct pxa_udc *udc);
1531 static void udc_disable(struct pxa_udc *udc);
1535 * @udc: udc device
1546 static int should_enable_udc(struct pxa_udc *udc)
1550 put_on = ((udc->pullup_on) && (udc->driver));
1551 put_on &= ((udc->vbus_sensed) || (!udc->transceiver));
1557 * @udc: udc device
1567 static int should_disable_udc(struct pxa_udc *udc)
1571 put_off = ((!udc->pullup_on) || (!udc->driver));
1572 put_off |= ((!udc->vbus_sensed) && (udc->transceiver));
1582 * Returns 0 if OK, -EOPNOTSUPP if udc driver doesn't handle D+ pullup
1586 struct pxa_udc *udc = to_gadget_udc(_gadget);
1588 if (!gpio_is_valid(udc->mach->gpio_pullup) && !udc->mach->udc_command)
1591 dplus_pullup(udc, is_active);
1593 if (should_enable_udc(udc))
1594 udc_enable(udc);
1595 if (should_disable_udc(udc))
1596 udc_disable(udc);
1600 static void udc_enable(struct pxa_udc *udc);
1601 static void udc_disable(struct pxa_udc *udc);
1604 * pxa_udc_vbus_session - Called by external transceiver to enable/disable udc
1606 * @is_active: 0 if should disable the udc, 1 if should enable
1608 * Enables the udc, and optionnaly activates D+ pullup resistor. Or disables the
1609 * udc, and deactivates D+ pullup resistor.
1615 struct pxa_udc *udc = to_gadget_udc(_gadget);
1617 udc->vbus_sensed = is_active;
1618 if (should_enable_udc(udc))
1619 udc_enable(udc);
1620 if (should_disable_udc(udc))
1621 udc_disable(udc);
1636 * Returns 0 or -EOPNOTSUPP if no transceiver is handling the udc
1640 struct pxa_udc *udc;
1642 udc = to_gadget_udc(_gadget);
1643 if (udc->transceiver)
1644 return otg_set_power(udc->transceiver, mA);
1657 * udc_disable - disable udc device controller
1658 * @udc: udc device
1661 * Disables the udc device : disables clocks, udc interrupts, control endpoint
1664 static void udc_disable(struct pxa_udc *udc)
1666 if (!udc->enabled)
1669 udc_writel(udc, UDCICR0, 0);
1670 udc_writel(udc, UDCICR1, 0);
1672 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1673 clk_disable(udc->clk);
1675 ep0_idle(udc);
1676 udc->gadget.speed = USB_SPEED_UNKNOWN;
1678 udc->enabled = 0;
1682 * udc_init_data - Initialize udc device data structures
1683 * @dev: udc device
1715 * udc_enable - Enables the udc device
1716 * @dev: udc device
1718 * Enables the udc device : enables clocks, udc interrupts, control endpoint
1721 static void udc_enable(struct pxa_udc *udc)
1723 if (udc->enabled)
1726 udc_writel(udc, UDCICR0, 0);
1727 udc_writel(udc, UDCICR1, 0);
1728 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1730 clk_enable(udc->clk);
1732 ep0_idle(udc);
1733 udc->gadget.speed = USB_SPEED_FULL;
1734 memset(&udc->stats, 0, sizeof(udc->stats));
1736 udc_set_mask_UDCCR(udc, UDCCR_UDE);
1737 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM);
1739 if (udc_readl(udc, UDCCR) & UDCCR_EMCE)
1740 dev_err(udc->dev, "Configuration errors, udc disabled\n");
1748 udc_writel(udc, UDCICR1,
1753 pio_irq_enable(&udc->pxa_ep[0]);
1755 udc->enabled = 1;
1767 * Note that the udc is not automatically enabled. Check function
1774 struct pxa_udc *udc = the_controller;
1780 if (!udc)
1782 if (udc->driver)
1786 udc->driver = driver;
1787 udc->gadget.dev.driver = &driver->driver;
1788 dplus_pullup(udc, 1);
1790 retval = device_add(&udc->gadget.dev);
1792 dev_err(udc->dev, "device_add error %d\n", retval);
1795 retval = driver->bind(&udc->gadget);
1797 dev_err(udc->dev, "bind to driver %s --> error %d\n",
1801 dev_dbg(udc->dev, "registered gadget driver '%s'\n",
1804 if (udc->transceiver) {
1805 retval = otg_set_peripheral(udc->transceiver, &udc->gadget);
1807 dev_err(udc->dev, "can't bind to transceiver\n");
1812 if (should_enable_udc(udc))
1813 udc_enable(udc);
1818 driver->unbind(&udc->gadget);
1820 device_del(&udc->gadget.dev);
1822 udc->driver = NULL;
1823 udc->gadget.dev.driver = NULL;
1830 * stop_activity - Stops udc endpoints
1831 * @udc: udc device
1834 * Disables all udc endpoints (even control endpoint), report disconnect to
1837 static void stop_activity(struct pxa_udc *udc, struct usb_gadget_driver *driver)
1842 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1844 udc->gadget.speed = USB_SPEED_UNKNOWN;
1847 pxa_ep_disable(&udc->udc_usb_ep[i].usb_ep);
1850 driver->disconnect(&udc->gadget);
1861 struct pxa_udc *udc = the_controller;
1863 if (!udc)
1865 if (!driver || driver != udc->driver || !driver->unbind)
1868 stop_activity(udc, driver);
1869 udc_disable(udc);
1870 dplus_pullup(udc, 0);
1872 driver->unbind(&udc->gadget);
1873 udc->driver = NULL;
1875 device_del(&udc->gadget.dev);
1876 dev_info(udc->dev, "unregistered gadget driver '%s'\n",
1879 if (udc->transceiver)
1880 return otg_set_peripheral(udc->transceiver, NULL);
1887 * @udc: udc device
1890 static void handle_ep0_ctrl_req(struct pxa_udc *udc,
1893 struct pxa_ep *ep = &udc->pxa_ep[0];
1935 set_ep0state(udc, IN_DATA_STAGE);
1937 set_ep0state(udc, OUT_DATA_STAGE);
1943 i = udc->driver->setup(&udc->gadget, &u.r);
1954 set_ep0state(udc, STALL);
1960 * @udc: udc device
2006 static void handle_ep0(struct pxa_udc *udc, int fifo_irq, int opc_irq)
2009 struct pxa_ep *ep = &udc->pxa_ep[0];
2018 EP0_STNAME(udc), req, udccsr0, udc_ep_readl(ep, UDCBCR),
2025 ep0_idle(udc);
2030 set_ep0state(udc, SETUP_STAGE);
2033 switch (udc->ep0state) {
2045 handle_ep0_ctrl_req(udc, req);
2071 ep0_idle(udc);
2077 ep0_idle(udc);
2147 * @udc: udc device
2153 static void pxa27x_change_configuration(struct pxa_udc *udc, int config)
2157 dev_dbg(udc->dev, "config=%d\n", config);
2159 udc->config = config;
2160 udc->last_interface = 0;
2161 udc->last_alternate = 0;
2169 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2170 udc->driver->setup(&udc->gadget, &req);
2171 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2176 * @udc: udc device
2183 static void pxa27x_change_interface(struct pxa_udc *udc, int iface, int alt)
2187 dev_dbg(udc->dev, "interface=%d, alternate setting=%d\n", iface, alt);
2189 udc->last_interface = iface;
2190 udc->last_alternate = alt;
2198 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2199 udc->driver->setup(&udc->gadget, &req);
2200 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2206 * @udc: dev pxa_udc device structure
2210 static void irq_handle_data(int irq, struct pxa_udc *udc)
2214 u32 udcisr0 = udc_readl(udc, UDCISR0) & UDCCISR0_EP_MASK;
2215 u32 udcisr1 = udc_readl(udc, UDCISR1) & UDCCISR1_EP_MASK;
2218 udc->pxa_ep[0].stats.irqs++;
2219 udc_writel(udc, UDCISR0, UDCISR_INT(0, UDCISR_INT_MASK));
2220 handle_ep0(udc, !!(udcisr0 & UDCICR_FIFOERR),
2229 udc_writel(udc, UDCISR0, UDCISR_INT(i, UDCISR_INT_MASK));
2231 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2232 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2233 ep = &udc->pxa_ep[i];
2240 udc_writel(udc, UDCISR1, UDCISR_INT(i - 16, UDCISR_INT_MASK));
2244 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2245 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2246 ep = &udc->pxa_ep[i];
2256 * @udc: udc device
2258 static void irq_udc_suspend(struct pxa_udc *udc)
2260 udc_writel(udc, UDCISR1, UDCISR1_IRSU);
2261 udc->stats.irqs_suspend++;
2263 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2264 && udc->driver && udc->driver->suspend)
2265 udc->driver->suspend(&udc->gadget);
2266 ep0_idle(udc);
2271 * @udc: udc device
2273 static void irq_udc_resume(struct pxa_udc *udc)
2275 udc_writel(udc, UDCISR1, UDCISR1_IRRU);
2276 udc->stats.irqs_resume++;
2278 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2279 && udc->driver && udc->driver->resume)
2280 udc->driver->resume(&udc->gadget);
2285 * @udc: udc device
2287 static void irq_udc_reconfig(struct pxa_udc *udc)
2290 u32 udccr = udc_readl(udc, UDCCR);
2292 udc_writel(udc, UDCISR1, UDCISR1_IRCC);
2293 udc->stats.irqs_reconfig++;
2296 config_change = (config != udc->config);
2297 pxa27x_change_configuration(udc, config);
2301 pxa27x_change_interface(udc, interface, alternate);
2304 update_pxa_ep_matches(udc);
2305 udc_set_mask_UDCCR(udc, UDCCR_SMAC);
2310 * @udc: udc device
2312 static void irq_udc_reset(struct pxa_udc *udc)
2314 u32 udccr = udc_readl(udc, UDCCR);
2315 struct pxa_ep *ep = &udc->pxa_ep[0];
2317 dev_info(udc->dev, "USB reset\n");
2318 udc_writel(udc, UDCISR1, UDCISR1_IRRS);
2319 udc->stats.irqs_reset++;
2322 dev_dbg(udc->dev, "USB reset start\n");
2323 stop_activity(udc, udc->driver);
2325 udc->gadget.speed = USB_SPEED_FULL;
2326 memset(&udc->stats, 0, sizeof udc->stats);
2330 ep0_idle(udc);
2336 * @_dev: udc device
2338 * Handles all udc interrupts
2342 struct pxa_udc *udc = _dev;
2343 u32 udcisr0 = udc_readl(udc, UDCISR0);
2344 u32 udcisr1 = udc_readl(udc, UDCISR1);
2345 u32 udccr = udc_readl(udc, UDCCR);
2348 dev_vdbg(udc->dev, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
2353 irq_udc_suspend(udc);
2355 irq_udc_resume(udc);
2357 irq_udc_reconfig(udc);
2359 irq_udc_reset(udc);
2362 irq_handle_data(irq, udc);
2415 * pxa_udc_probe - probes the udc device
2418 * Perform basic init : allocates udc clock, creates sysfs files, requests
2424 struct pxa_udc *udc = &memory;
2430 udc->irq = platform_get_irq(pdev, 0);
2431 if (udc->irq < 0)
2432 return udc->irq;
2434 udc->dev = &pdev->dev;
2435 udc->mach = pdev->dev.platform_data;
2436 udc->transceiver = otg_get_transceiver();
2438 gpio = udc->mach->gpio_pullup;
2443 udc->mach->gpio_pullup_inverted);
2451 udc->clk = clk_get(&pdev->dev, NULL);
2452 if (IS_ERR(udc->clk)) {
2453 retval = PTR_ERR(udc->clk);
2458 udc->regs = ioremap(regs->start, resource_size(regs));
2459 if (!udc->regs) {
2464 device_initialize(&udc->gadget.dev);
2465 udc->gadget.dev.parent = &pdev->dev;
2466 udc->gadget.dev.dma_mask = NULL;
2467 udc->vbus_sensed = 0;
2469 the_controller = udc;
2470 platform_set_drvdata(pdev, udc);
2471 udc_init_data(udc);
2472 pxa_eps_setup(udc);
2475 retval = request_irq(udc->irq, pxa_udc_irq,
2476 IRQF_SHARED, driver_name, udc);
2478 dev_err(udc->dev, "%s: can't get irq %i, err %d\n",
2483 pxa_init_debugfs(udc);
2486 iounmap(udc->regs);
2488 clk_put(udc->clk);
2489 udc->clk = NULL;
2495 * pxa_udc_remove - removes the udc device driver
2500 struct pxa_udc *udc = platform_get_drvdata(_dev);
2501 int gpio = udc->mach->gpio_pullup;
2503 usb_gadget_unregister_driver(udc->driver);
2504 free_irq(udc->irq, udc);
2505 pxa_cleanup_debugfs(udc);
2509 otg_put_transceiver(udc->transceiver);
2511 udc->transceiver = NULL;
2514 clk_put(udc->clk);
2515 iounmap(udc->regs);
2522 struct pxa_udc *udc = platform_get_drvdata(_dev);
2524 if (udc_readl(udc, UDCCR) & UDCCR_UDE)
2525 udc_disable(udc);
2536 * pxa_udc_suspend - Suspend udc device
2540 * Suspends udc : saves configuration registers (UDCCR*), then disables the udc
2546 struct pxa_udc *udc = platform_get_drvdata(_dev);
2549 ep = &udc->pxa_ep[0];
2550 udc->udccsr0 = udc_ep_readl(ep, UDCCSR);
2552 ep = &udc->pxa_ep[i];
2559 udc_disable(udc);
2560 udc->pullup_resume = udc->pullup_on;
2561 dplus_pullup(udc, 0);
2567 * pxa_udc_resume - Resume udc device
2570 * Resumes udc : restores configuration registers (UDCCR*), then enables the udc
2576 struct pxa_udc *udc = platform_get_drvdata(_dev);
2579 ep = &udc->pxa_ep[0];
2580 udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME));
2582 ep = &udc->pxa_ep[i];
2589 dplus_pullup(udc, udc->pullup_resume);
2590 if (should_enable_udc(udc))
2591 udc_enable(udc);
2608 MODULE_ALIAS("platform:pxa27x-udc");
2612 .name = "pxa27x-udc",