Lines Matching defs:udc

92 	struct pxa_udc *udc = s->private;
95 if (!udc->driver)
103 udc->driver ? udc->driver->driver.name : "(none)");
105 tmp = udc_readl(udc, UDCCR);
124 udc_readl(udc, UDCICR0), udc_readl(udc, UDCICR1));
126 udc_readl(udc, UDCISR0), udc_readl(udc, UDCISR1));
127 seq_printf(s, "udcfnr=%d\n", udc_readl(udc, UDCFNR));
129 udc->stats.irqs_reset, udc->stats.irqs_suspend,
130 udc->stats.irqs_resume, udc->stats.irqs_reconfig);
138 struct pxa_udc *udc = s->private;
143 if (!udc->driver)
148 ep = &udc->pxa_ep[i];
171 struct pxa_udc *udc = s->private;
176 if (!udc->driver)
179 ep = &udc->pxa_ep[0];
191 ep = &udc->pxa_ep[i];
192 tmp = i? udc_ep_readl(ep, UDCCR) : udc_readl(udc, UDCCR);
206 static void pxa_init_debugfs(struct pxa_udc *udc)
210 root = debugfs_create_dir(udc->gadget.name, usb_debug_root);
211 debugfs_create_file("udcstate", 0400, root, udc, &state_dbg_fops);
212 debugfs_create_file("queues", 0400, root, udc, &queues_dbg_fops);
213 debugfs_create_file("epstate", 0400, root, udc, &eps_dbg_fops);
216 static void pxa_cleanup_debugfs(struct pxa_udc *udc)
218 debugfs_lookup_and_remove(udc->gadget.name, usb_debug_root);
222 static inline void pxa_init_debugfs(struct pxa_udc *udc)
226 static inline void pxa_cleanup_debugfs(struct pxa_udc *udc)
258 * @udc: pxa udc
281 static struct pxa_ep *find_pxa_ep(struct pxa_udc *udc,
286 int cfg = udc->config;
287 int iface = udc->last_interface;
288 int alt = udc->last_alternate;
290 if (udc_usb_ep == &udc->udc_usb_ep[0])
291 return &udc->pxa_ep[0];
294 ep = &udc->pxa_ep[i];
303 * @udc: pxa udc
311 static void update_pxa_ep_matches(struct pxa_udc *udc)
317 udc_usb_ep = &udc->udc_usb_ep[i];
319 udc_usb_ep->pxa_ep = find_pxa_ep(udc, udc_usb_ep);
325 * @ep: udc endpoint
329 struct pxa_udc *udc = ep->dev;
331 u32 udcicr0 = udc_readl(udc, UDCICR0);
332 u32 udcicr1 = udc_readl(udc, UDCICR1);
335 udc_writel(udc, UDCICR0, udcicr0 | (3 << (index * 2)));
337 udc_writel(udc, UDCICR1, udcicr1 | (3 << ((index - 16) * 2)));
342 * @ep: udc endpoint
346 struct pxa_udc *udc = ep->dev;
348 u32 udcicr0 = udc_readl(udc, UDCICR0);
349 u32 udcicr1 = udc_readl(udc, UDCICR1);
352 udc_writel(udc, UDCICR0, udcicr0 & ~(3 << (index * 2)));
354 udc_writel(udc, UDCICR1, udcicr1 & ~(3 << ((index - 16) * 2)));
359 * @udc: udc device
364 static inline void udc_set_mask_UDCCR(struct pxa_udc *udc, int mask)
366 u32 udccr = udc_readl(udc, UDCCR);
367 udc_writel(udc, UDCCR,
373 * @udc: udc device
378 static inline void udc_clear_mask_UDCCR(struct pxa_udc *udc, int mask)
380 u32 udccr = udc_readl(udc, UDCCR);
381 udc_writel(udc, UDCCR,
387 * @ep: udc endpoint
403 * ep_count_bytes_remain - get how many bytes in udc endpoint
404 * @ep: udc endpoint
417 * @ep: udc endpoint
440 * @ep: udc endpoint
473 * @udc: udc device
476 static void set_ep0state(struct pxa_udc *udc, int state)
478 struct pxa_ep *ep = &udc->pxa_ep[0];
479 char *old_stname = EP0_STNAME(udc);
481 udc->ep0state = state;
483 EP0_STNAME(udc), udc_ep_readl(ep, UDCCSR),
489 * @dev: udc device
548 * @dev: udc device
1311 * before udc is enabled. After udc enable, no physical endpoint configuration
1320 struct pxa_udc *udc;
1353 udc = ep->dev;
1355 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1417 * @udc: udc device
1424 static void dplus_pullup(struct pxa_udc *udc, int on)
1426 if (udc->gpiod) {
1427 gpiod_set_value(udc->gpiod, on);
1428 } else if (udc->udc_command) {
1430 udc->udc_command(PXA2XX_UDC_CMD_CONNECT);
1432 udc->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1434 udc->pullup_on = on;
1443 struct pxa_udc *udc = to_gadget_udc(_gadget);
1445 return (udc_readl(udc, UDCFNR) & 0x7ff);
1449 * pxa_udc_wakeup - Force udc device out of suspend
1456 struct pxa_udc *udc = to_gadget_udc(_gadget);
1459 if ((udc_readl(udc, UDCCR) & UDCCR_DWRE) == 0)
1461 udc_set_mask_UDCCR(udc, UDCCR_UDR);
1465 static void udc_enable(struct pxa_udc *udc);
1466 static void udc_disable(struct pxa_udc *udc);
1470 * @udc: udc device
1480 static int should_enable_udc(struct pxa_udc *udc)
1484 put_on = ((udc->pullup_on) && (udc->driver));
1485 put_on &= ((udc->vbus_sensed) || (IS_ERR_OR_NULL(udc->transceiver)));
1491 * @udc: udc device
1501 static int should_disable_udc(struct pxa_udc *udc)
1505 put_off = ((!udc->pullup_on) || (!udc->driver));
1506 put_off |= ((!udc->vbus_sensed) && (!IS_ERR_OR_NULL(udc->transceiver)));
1517 * Returns 0 if OK, -EOPNOTSUPP if udc driver doesn't handle D+ pullup
1521 struct pxa_udc *udc = to_gadget_udc(_gadget);
1523 if (!udc->gpiod && !udc->udc_command)
1526 dplus_pullup(udc, is_active);
1528 if (should_enable_udc(udc))
1529 udc_enable(udc);
1530 if (should_disable_udc(udc))
1531 udc_disable(udc);
1536 * pxa_udc_vbus_session - Called by external transceiver to enable/disable udc
1538 * @is_active: 0 if should disable the udc, 1 if should enable
1540 * Enables the udc, and optionnaly activates D+ pullup resistor. Or disables the
1541 * udc, and deactivates D+ pullup resistor.
1547 struct pxa_udc *udc = to_gadget_udc(_gadget);
1549 udc->vbus_sensed = is_active;
1550 if (should_enable_udc(udc))
1551 udc_enable(udc);
1552 if (should_disable_udc(udc))
1553 udc_disable(udc);
1568 * Returns 0 or -EOPNOTSUPP if no transceiver is handling the udc
1572 struct pxa_udc *udc;
1574 udc = to_gadget_udc(_gadget);
1575 if (!IS_ERR_OR_NULL(udc->transceiver))
1576 return usb_phy_set_power(udc->transceiver, mA);
1626 * udc_disable - disable udc device controller
1627 * @udc: udc device
1630 * Disables the udc device : disables clocks, udc interrupts, control endpoint
1633 static void udc_disable(struct pxa_udc *udc)
1635 if (!udc->enabled)
1638 udc_writel(udc, UDCICR0, 0);
1639 udc_writel(udc, UDCICR1, 0);
1641 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1643 ep0_idle(udc);
1644 udc->gadget.speed = USB_SPEED_UNKNOWN;
1645 clk_disable(udc->clk);
1647 udc->enabled = 0;
1651 * udc_init_data - Initialize udc device data structures
1652 * @dev: udc device
1688 * udc_enable - Enables the udc device
1689 * @udc: udc device
1691 * Enables the udc device : enables clocks, udc interrupts, control endpoint
1694 static void udc_enable(struct pxa_udc *udc)
1696 if (udc->enabled)
1699 clk_enable(udc->clk);
1700 udc_writel(udc, UDCICR0, 0);
1701 udc_writel(udc, UDCICR1, 0);
1702 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1704 ep0_idle(udc);
1705 udc->gadget.speed = USB_SPEED_FULL;
1706 memset(&udc->stats, 0, sizeof(udc->stats));
1708 pxa_eps_setup(udc);
1709 udc_set_mask_UDCCR(udc, UDCCR_UDE);
1710 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM);
1712 if (udc_readl(udc, UDCCR) & UDCCR_EMCE)
1713 dev_err(udc->dev, "Configuration errors, udc disabled\n");
1721 udc_writel(udc, UDCICR1,
1726 pio_irq_enable(&udc->pxa_ep[0]);
1728 udc->enabled = 1;
1741 * Note that the udc is not automatically enabled. Check function
1749 struct pxa_udc *udc = to_pxa(g);
1753 udc->driver = driver;
1755 if (!IS_ERR_OR_NULL(udc->transceiver)) {
1756 retval = otg_set_peripheral(udc->transceiver->otg,
1757 &udc->gadget);
1759 dev_err(udc->dev, "can't bind to transceiver\n");
1764 if (should_enable_udc(udc))
1765 udc_enable(udc);
1769 udc->driver = NULL;
1774 * stop_activity - Stops udc endpoints
1775 * @udc: udc device
1777 * Disables all udc endpoints (even control endpoint), report disconnect to
1780 static void stop_activity(struct pxa_udc *udc)
1784 udc->gadget.speed = USB_SPEED_UNKNOWN;
1787 pxa_ep_disable(&udc->udc_usb_ep[i].usb_ep);
1798 struct pxa_udc *udc = to_pxa(g);
1800 stop_activity(udc);
1801 udc_disable(udc);
1803 udc->driver = NULL;
1805 if (!IS_ERR_OR_NULL(udc->transceiver))
1806 return otg_set_peripheral(udc->transceiver->otg, NULL);
1812 * @udc: udc device
1815 static void handle_ep0_ctrl_req(struct pxa_udc *udc,
1818 struct pxa_ep *ep = &udc->pxa_ep[0];
1860 set_ep0state(udc, IN_DATA_STAGE);
1862 set_ep0state(udc, OUT_DATA_STAGE);
1868 i = udc->driver->setup(&udc->gadget, &u.r);
1879 set_ep0state(udc, STALL);
1885 * @udc: udc device
1931 static void handle_ep0(struct pxa_udc *udc, int fifo_irq, int opc_irq)
1934 struct pxa_ep *ep = &udc->pxa_ep[0];
1943 EP0_STNAME(udc), req, udccsr0, udc_ep_readl(ep, UDCBCR),
1950 ep0_idle(udc);
1955 set_ep0state(udc, SETUP_STAGE);
1958 switch (udc->ep0state) {
1970 handle_ep0_ctrl_req(udc, req);
1996 ep0_idle(udc);
2002 ep0_idle(udc);
2072 * @udc: udc device
2078 static void pxa27x_change_configuration(struct pxa_udc *udc, int config)
2082 dev_dbg(udc->dev, "config=%d\n", config);
2084 udc->config = config;
2085 udc->last_interface = 0;
2086 udc->last_alternate = 0;
2094 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2095 udc->driver->setup(&udc->gadget, &req);
2096 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2101 * @udc: udc device
2108 static void pxa27x_change_interface(struct pxa_udc *udc, int iface, int alt)
2112 dev_dbg(udc->dev, "interface=%d, alternate setting=%d\n", iface, alt);
2114 udc->last_interface = iface;
2115 udc->last_alternate = alt;
2123 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2124 udc->driver->setup(&udc->gadget, &req);
2125 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2131 * @udc: dev pxa_udc device structure
2135 static void irq_handle_data(int irq, struct pxa_udc *udc)
2139 u32 udcisr0 = udc_readl(udc, UDCISR0) & UDCCISR0_EP_MASK;
2140 u32 udcisr1 = udc_readl(udc, UDCISR1) & UDCCISR1_EP_MASK;
2143 udc->pxa_ep[0].stats.irqs++;
2144 udc_writel(udc, UDCISR0, UDCISR_INT(0, UDCISR_INT_MASK));
2145 handle_ep0(udc, !!(udcisr0 & UDCICR_FIFOERR),
2154 udc_writel(udc, UDCISR0, UDCISR_INT(i, UDCISR_INT_MASK));
2156 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2157 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2158 ep = &udc->pxa_ep[i];
2165 udc_writel(udc, UDCISR1, UDCISR_INT(i - 16, UDCISR_INT_MASK));
2169 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2170 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2171 ep = &udc->pxa_ep[i];
2181 * @udc: udc device
2183 static void irq_udc_suspend(struct pxa_udc *udc)
2185 udc_writel(udc, UDCISR1, UDCISR1_IRSU);
2186 udc->stats.irqs_suspend++;
2188 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2189 && udc->driver && udc->driver->suspend)
2190 udc->driver->suspend(&udc->gadget);
2191 ep0_idle(udc);
2196 * @udc: udc device
2198 static void irq_udc_resume(struct pxa_udc *udc)
2200 udc_writel(udc, UDCISR1, UDCISR1_IRRU);
2201 udc->stats.irqs_resume++;
2203 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2204 && udc->driver && udc->driver->resume)
2205 udc->driver->resume(&udc->gadget);
2210 * @udc: udc device
2212 static void irq_udc_reconfig(struct pxa_udc *udc)
2215 u32 udccr = udc_readl(udc, UDCCR);
2217 udc_writel(udc, UDCISR1, UDCISR1_IRCC);
2218 udc->stats.irqs_reconfig++;
2221 config_change = (config != udc->config);
2222 pxa27x_change_configuration(udc, config);
2226 pxa27x_change_interface(udc, interface, alternate);
2229 update_pxa_ep_matches(udc);
2230 udc_set_mask_UDCCR(udc, UDCCR_SMAC);
2235 * @udc: udc device
2237 static void irq_udc_reset(struct pxa_udc *udc)
2239 u32 udccr = udc_readl(udc, UDCCR);
2240 struct pxa_ep *ep = &udc->pxa_ep[0];
2242 dev_info(udc->dev, "USB reset\n");
2243 udc_writel(udc, UDCISR1, UDCISR1_IRRS);
2244 udc->stats.irqs_reset++;
2247 dev_dbg(udc->dev, "USB reset start\n");
2248 stop_activity(udc);
2250 udc->gadget.speed = USB_SPEED_FULL;
2251 memset(&udc->stats, 0, sizeof udc->stats);
2255 ep0_idle(udc);
2261 * @_dev: udc device
2263 * Handles all udc interrupts
2267 struct pxa_udc *udc = _dev;
2268 u32 udcisr0 = udc_readl(udc, UDCISR0);
2269 u32 udcisr1 = udc_readl(udc, UDCISR1);
2270 u32 udccr = udc_readl(udc, UDCCR);
2273 dev_vdbg(udc->dev, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
2278 irq_udc_suspend(udc);
2280 irq_udc_resume(udc);
2282 irq_udc_reconfig(udc);
2284 irq_udc_reset(udc);
2287 irq_handle_data(irq, udc);
2341 { .compatible = "marvell,pxa270-udc" },
2348 * pxa_udc_probe - probes the udc device
2351 * Perform basic init : allocates udc clock, creates sysfs files, requests
2356 struct pxa_udc *udc = &memory;
2370 udc->gpiod = gpio_to_desc(mach->gpio_pullup);
2372 udc->udc_command = mach->udc_command;
2374 udc->gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_ASIS);
2377 udc->regs = devm_platform_ioremap_resource(pdev, 0);
2378 if (IS_ERR(udc->regs))
2379 return PTR_ERR(udc->regs);
2380 udc->irq = platform_get_irq(pdev, 0);
2381 if (udc->irq < 0)
2382 return udc->irq;
2384 udc->dev = &pdev->dev;
2386 udc->transceiver =
2387 devm_usb_get_phy_by_phandle(udc->dev, "phys", 0);
2388 if (IS_ERR(udc->transceiver))
2389 return PTR_ERR(udc->transceiver);
2391 udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
2394 if (IS_ERR(udc->gpiod)) {
2396 PTR_ERR(udc->gpiod));
2397 return PTR_ERR(udc->gpiod);
2399 if (udc->gpiod)
2400 gpiod_direction_output(udc->gpiod, 0);
2402 udc->clk = devm_clk_get(&pdev->dev, NULL);
2403 if (IS_ERR(udc->clk))
2404 return PTR_ERR(udc->clk);
2406 retval = clk_prepare(udc->clk);
2410 udc->vbus_sensed = 0;
2412 the_controller = udc;
2413 platform_set_drvdata(pdev, udc);
2414 udc_init_data(udc);
2417 retval = devm_request_irq(&pdev->dev, udc->irq, pxa_udc_irq,
2418 IRQF_SHARED, driver_name, udc);
2420 dev_err(udc->dev, "%s: can't get irq %i, err %d\n",
2421 driver_name, udc->irq, retval);
2425 if (!IS_ERR_OR_NULL(udc->transceiver))
2426 usb_register_notifier(udc->transceiver, &pxa27x_udc_phy);
2427 retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
2431 pxa_init_debugfs(udc);
2432 if (should_enable_udc(udc))
2433 udc_enable(udc);
2437 if (!IS_ERR_OR_NULL(udc->transceiver))
2438 usb_unregister_notifier(udc->transceiver, &pxa27x_udc_phy);
2440 clk_unprepare(udc->clk);
2445 * pxa_udc_remove - removes the udc device driver
2450 struct pxa_udc *udc = platform_get_drvdata(_dev);
2452 usb_del_gadget_udc(&udc->gadget);
2453 pxa_cleanup_debugfs(udc);
2455 if (!IS_ERR_OR_NULL(udc->transceiver)) {
2456 usb_unregister_notifier(udc->transceiver, &pxa27x_udc_phy);
2457 usb_put_phy(udc->transceiver);
2460 udc->transceiver = NULL;
2462 clk_unprepare(udc->clk);
2467 struct pxa_udc *udc = platform_get_drvdata(_dev);
2469 if (udc_readl(udc, UDCCR) & UDCCR_UDE)
2470 udc_disable(udc);
2475 * pxa_udc_suspend - Suspend udc device
2479 * Suspends udc : saves configuration registers (UDCCR*), then disables the udc
2484 struct pxa_udc *udc = platform_get_drvdata(_dev);
2487 ep = &udc->pxa_ep[0];
2488 udc->udccsr0 = udc_ep_readl(ep, UDCCSR);
2490 udc_disable(udc);
2491 udc->pullup_resume = udc->pullup_on;
2492 dplus_pullup(udc, 0);
2494 if (udc->driver)
2495 udc->driver->disconnect(&udc->gadget);
2501 * pxa_udc_resume - Resume udc device
2504 * Resumes udc : restores configuration registers (UDCCR*), then enables the udc
2509 struct pxa_udc *udc = platform_get_drvdata(_dev);
2512 ep = &udc->pxa_ep[0];
2513 udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME));
2515 dplus_pullup(udc, udc->pullup_resume);
2516 if (should_enable_udc(udc))
2517 udc_enable(udc);
2534 MODULE_ALIAS("platform:pxa27x-udc");
2538 .name = "pxa27x-udc",