• 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

93 static const char debug_filename[] = "driver/udc";
176 struct at91_udc *udc = s->private;
183 udc->vbus ? "present" : "off",
184 udc->enabled
185 ? (udc->vbus ? "active" : "enabled")
187 udc->selfpowered ? "self" : "VBUS",
188 udc->suspended ? ", suspended" : "",
189 udc->driver ? udc->driver->driver.name : "(none)");
192 if (!udc->clocked) {
197 tmp = at91_udp_read(udc, AT91_UDP_FRM_NUM);
203 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
211 tmp = at91_udp_read(udc, AT91_UDP_FADDR);
216 proc_irq_show(s, "imr ", at91_udp_read(udc, AT91_UDP_IMR));
217 proc_irq_show(s, "isr ", at91_udp_read(udc, AT91_UDP_ISR));
219 if (udc->enabled && udc->vbus) {
220 proc_ep_show(s, &udc->ep[0]);
221 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
241 static void create_debug_file(struct at91_udc *udc)
246 udc->pde = pde;
251 pde->data = udc;
254 static void remove_debug_file(struct at91_udc *udc)
256 if (udc->pde)
262 static inline void create_debug_file(struct at91_udc *udc) {}
263 static inline void remove_debug_file(struct at91_udc *udc) {}
273 struct at91_udc *udc = ep->udc;
289 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask);
474 struct at91_udc *dev = ep->udc;
552 struct at91_udc *udc = ep->udc;
555 if (ep == &ep->udc->ep[0])
567 if (ep->udc->clocked) {
568 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
569 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
646 dev = ep->udc;
747 struct at91_udc *udc = ep->udc;
753 if (!_ep || ep->is_iso || !ep->udc->clocked)
775 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
776 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
803 struct at91_udc *udc = to_udc(gadget);
807 return at91_udp_read(udc, AT91_UDP_FRM_NUM) & AT91_UDP_NUM;
812 struct at91_udc *udc = to_udc(gadget);
820 if (!udc->clocked || !udc->suspended)
825 glbstate = at91_udp_read(udc, AT91_UDP_GLB_STAT);
829 at91_udp_write(udc, AT91_UDP_GLB_STAT, glbstate);
837 static void udc_reinit(struct at91_udc *udc)
841 INIT_LIST_HEAD(&udc->gadget.ep_list);
842 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
845 struct at91_ep *ep = &udc->ep[i];
848 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
853 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i);
859 static void stop_activity(struct at91_udc *udc)
861 struct usb_gadget_driver *driver = udc->driver;
864 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
866 udc->gadget.speed = USB_SPEED_UNKNOWN;
867 udc->suspended = 0;
870 struct at91_ep *ep = &udc->ep[i];
875 driver->disconnect(&udc->gadget);
877 udc_reinit(udc);
880 static void clk_on(struct at91_udc *udc)
882 if (udc->clocked)
884 udc->clocked = 1;
885 clk_enable(udc->iclk);
886 clk_enable(udc->fclk);
889 static void clk_off(struct at91_udc *udc)
891 if (!udc->clocked)
893 udc->clocked = 0;
894 udc->gadget.speed = USB_SPEED_UNKNOWN;
895 clk_disable(udc->fclk);
896 clk_disable(udc->iclk);
903 static void pullup(struct at91_udc *udc, int is_on)
905 if (!udc->enabled || !udc->vbus)
910 clk_on(udc);
911 at91_udp_write(udc, AT91_UDP_TXVC, 0);
913 at91_set_gpio_value(udc->board.pullup_pin, 1);
915 u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC);
918 at91_udp_write(udc, AT91_UDP_TXVC, txvc);
927 stop_activity(udc);
928 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
930 at91_set_gpio_value(udc->board.pullup_pin, 0);
932 u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC);
935 at91_udp_write(udc, AT91_UDP_TXVC, txvc);
943 clk_off(udc);
950 struct at91_udc *udc = to_udc(gadget);
955 udc->vbus = (is_active != 0);
956 if (udc->driver)
957 pullup(udc, is_active);
959 pullup(udc, 0);
966 struct at91_udc *udc = to_udc(gadget);
970 udc->enabled = is_on = !!is_on;
971 pullup(udc, is_on);
978 struct at91_udc *udc = to_udc(gadget);
982 udc->selfpowered = (is_on != 0);
1045 static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1074 udc->wait_for_addr_ack = 0;
1075 udc->wait_for_config_ack = 0;
1092 udc->req_pending = 1;
1101 udc->addr = w_value;
1102 udc->wait_for_addr_ack = 1;
1103 udc->req_pending = 0;
1109 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_CONFG;
1111 udc->wait_for_config_ack = (tmp == 0);
1113 udc->wait_for_config_ack = (tmp != 0);
1114 if (udc->wait_for_config_ack)
1125 tmp = (udc->selfpowered << USB_DEVICE_SELF_POWERED);
1126 if (at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_ESR)
1137 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1139 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1145 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1147 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1174 ep = &udc->ep[tmp];
1197 ep = &udc->ep[tmp];
1216 ep = &udc->ep[tmp];
1229 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
1230 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
1245 if (udc->driver)
1246 status = udc->driver->setup(&udc->gadget, &pkt.r);
1255 udc->req_pending = 0;
1265 udc->req_pending = 0;
1269 static void handle_ep0(struct at91_udc *udc)
1271 struct at91_ep *ep0 = &udc->ep[0];
1278 udc->req_pending = 0;
1287 udc->req_pending = 0;
1288 handle_setup(udc, ep0, csr);
1305 udc->req_pending = 0;
1316 udc->req_pending = 0;
1323 if (udc->wait_for_addr_ack) {
1326 at91_udp_write(udc, AT91_UDP_FADDR,
1327 AT91_UDP_FEN | udc->addr);
1328 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1330 if (udc->addr)
1332 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1334 udc->wait_for_addr_ack = 0;
1335 VDBG("address %d\n", udc->addr);
1355 udc->req_pending = 0;
1357 } else if (udc->req_pending) {
1377 udc->req_pending = 0;
1394 struct at91_udc *udc = _udc;
1400 status = at91_udp_read(udc, AT91_UDP_ISR)
1401 & at91_udp_read(udc, AT91_UDP_IMR);
1407 at91_udp_write(udc, AT91_UDP_IDR, ~MINIMUS_INTERRUPTUS);
1408 at91_udp_write(udc, AT91_UDP_IER, MINIMUS_INTERRUPTUS);
1410 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1411 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1413 udc->addr = 0;
1414 stop_activity(udc);
1417 at91_udp_write(udc, AT91_UDP_CSR(0),
1419 udc->gadget.speed = USB_SPEED_FULL;
1420 udc->suspended = 0;
1421 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_EP(0));
1432 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXSUSP);
1433 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXRSM);
1434 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXSUSP);
1436 if (udc->suspended)
1438 udc->suspended = 1;
1446 if (udc->driver && udc->driver->suspend)
1447 udc->driver->suspend(&udc->gadget);
1451 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
1452 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXSUSP);
1453 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
1455 if (!udc->suspended)
1457 udc->suspended = 0;
1464 if (udc->driver && udc->driver->resume)
1465 udc->driver->resume(&udc->gadget);
1471 struct at91_ep *ep = &udc->ep[1];
1474 handle_ep0(udc);
1509 .udc = &controller,
1518 .udc = &controller,
1528 .udc = &controller,
1539 .udc = &controller,
1548 .udc = &controller,
1558 .udc = &controller,
1568 struct at91_udc *udc = _udc;
1573 value = at91_get_gpio_value(udc->board.vbus_pin);
1574 if (value != udc->vbus)
1575 at91_vbus_session(&udc->gadget, value);
1582 struct at91_udc *udc = &controller;
1593 if (udc->driver) {
1598 udc->driver = driver;
1599 udc->gadget.dev.driver = &driver->driver;
1600 udc->gadget.dev.driver_data = &driver->driver;
1601 udc->enabled = 1;
1602 udc->selfpowered = 1;
1604 retval = driver->bind(&udc->gadget);
1607 udc->driver = NULL;
1608 udc->gadget.dev.driver = NULL;
1609 udc->gadget.dev.driver_data = NULL;
1610 udc->enabled = 0;
1611 udc->selfpowered = 0;
1616 pullup(udc, 1);
1626 struct at91_udc *udc = &controller;
1628 if (!driver || driver != udc->driver || !driver->unbind)
1632 udc->enabled = 0;
1633 at91_udp_write(udc, AT91_UDP_IDR, ~0);
1634 pullup(udc, 0);
1637 driver->unbind(&udc->gadget);
1638 udc->driver = NULL;
1656 struct at91_udc *udc;
1688 udc = &controller;
1689 udc->gadget.dev.parent = dev;
1690 udc->board = *(struct at91_udc_data *) dev->platform_data;
1691 udc->pdev = pdev;
1692 udc->enabled = 0;
1694 udc->udp_baseaddr = ioremap(res->start, res->end - res->start + 1);
1695 if (!udc->udp_baseaddr) {
1700 udc_reinit(udc);
1703 udc->iclk = clk_get(dev, "udc_clk");
1704 udc->fclk = clk_get(dev, "udpck");
1705 if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk)) {
1711 retval = device_register(&udc->gadget.dev);
1716 clk_enable(udc->iclk);
1717 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
1718 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
1720 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
1721 clk_disable(udc->iclk);
1724 udc->udp_irq = platform_get_irq(pdev, 0);
1725 if (request_irq(udc->udp_irq, at91_udc_irq,
1726 IRQF_DISABLED, driver_name, udc)) {
1727 DBG("request irq %d failed\n", udc->udp_irq);
1731 if (udc->board.vbus_pin > 0) {
1736 udc->vbus = at91_get_gpio_value(udc->board.vbus_pin);
1737 if (request_irq(udc->board.vbus_pin, at91_vbus_irq,
1738 IRQF_DISABLED, driver_name, udc)) {
1740 udc->board.vbus_pin);
1741 free_irq(udc->udp_irq, udc);
1747 udc->vbus = 1;
1749 dev_set_drvdata(dev, udc);
1751 create_debug_file(udc);
1757 device_unregister(&udc->gadget.dev);
1766 struct at91_udc *udc = platform_get_drvdata(pdev);
1771 if (udc->driver)
1774 pullup(udc, 0);
1777 remove_debug_file(udc);
1778 if (udc->board.vbus_pin > 0)
1779 free_irq(udc->board.vbus_pin, udc);
1780 free_irq(udc->udp_irq, udc);
1781 device_unregister(&udc->gadget.dev);
1783 iounmap(udc->udp_baseaddr);
1787 clk_put(udc->iclk);
1788 clk_put(udc->fclk);
1796 struct at91_udc *udc = platform_get_drvdata(pdev);
1797 int wake = udc->driver && device_may_wakeup(&pdev->dev);
1804 if ((!udc->suspended && udc->addr)
1807 pullup(udc, 0);
1810 enable_irq_wake(udc->udp_irq);
1812 udc->active_suspend = wake;
1813 if (udc->board.vbus_pin > 0 && wake)
1814 enable_irq_wake(udc->board.vbus_pin);
1820 struct at91_udc *udc = platform_get_drvdata(pdev);
1822 if (udc->board.vbus_pin > 0 && udc->active_suspend)
1823 disable_irq_wake(udc->board.vbus_pin);
1826 if (udc->active_suspend)
1827 disable_irq_wake(udc->udp_irq);
1829 pullup(udc, 1);
1860 MODULE_DESCRIPTION("AT91 udc driver");