• 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

81 #define at91_udp_read(udc, reg) \
82 __raw_readl((udc)->udp_baseaddr + (reg))
83 #define at91_udp_write(udc, reg, val) \
84 __raw_writel((val), (udc)->udp_baseaddr + (reg))
92 static const char debug_filename[] = "driver/udc";
106 struct at91_udc *udc = ep->udc;
108 spin_lock_irqsave(&udc->lock, flags);
152 spin_unlock_irqrestore(&udc->lock, flags);
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) {
242 static void create_debug_file(struct at91_udc *udc)
244 udc->pde = proc_create_data(debug_filename, 0, NULL, &proc_ops, udc);
247 static void remove_debug_file(struct at91_udc *udc)
249 if (udc->pde)
255 static inline void create_debug_file(struct at91_udc *udc) {}
256 static inline void remove_debug_file(struct at91_udc *udc) {}
266 struct at91_udc *udc = ep->udc;
277 spin_unlock(&udc->lock);
279 spin_lock(&udc->lock);
284 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask);
479 struct at91_udc *udc = ep->udc;
494 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
528 spin_lock_irqsave(&udc->lock, flags);
547 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
548 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
550 spin_unlock_irqrestore(&udc->lock, flags);
557 struct at91_udc *udc = ep->udc;
560 if (ep == &ep->udc->ep[0])
563 spin_lock_irqsave(&udc->lock, flags);
572 if (ep->udc->clocked) {
573 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
574 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
578 spin_unlock_irqrestore(&udc->lock, flags);
614 struct at91_udc *udc;
632 udc = ep->udc;
634 if (!udc || !udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
642 spin_lock_irqsave(&udc->lock, flags);
660 if (!udc->req_pending) {
669 if (udc->wait_for_config_ack) {
670 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
673 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
683 udc->req_pending = 0;
702 at91_udp_write(udc, AT91_UDP_IER, ep->int_mask);
705 spin_unlock_irqrestore(&udc->lock, flags);
714 struct at91_udc *udc;
720 udc = ep->udc;
722 spin_lock_irqsave(&udc->lock, flags);
730 spin_unlock_irqrestore(&udc->lock, flags);
735 spin_unlock_irqrestore(&udc->lock, flags);
742 struct at91_udc *udc = ep->udc;
748 if (!_ep || ep->is_iso || !ep->udc->clocked)
752 spin_lock_irqsave(&udc->lock, flags);
770 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
771 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
777 spin_unlock_irqrestore(&udc->lock, flags);
796 struct at91_udc *udc = to_udc(gadget);
800 return at91_udp_read(udc, AT91_UDP_FRM_NUM) & AT91_UDP_NUM;
805 struct at91_udc *udc = to_udc(gadget);
811 spin_lock_irqsave(&udc->lock, flags);
813 if (!udc->clocked || !udc->suspended)
818 glbstate = at91_udp_read(udc, AT91_UDP_GLB_STAT);
822 at91_udp_write(udc, AT91_UDP_GLB_STAT, glbstate);
825 spin_unlock_irqrestore(&udc->lock, flags);
830 static void udc_reinit(struct at91_udc *udc)
834 INIT_LIST_HEAD(&udc->gadget.ep_list);
835 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
838 struct at91_ep *ep = &udc->ep[i];
841 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
846 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i);
852 static void stop_activity(struct at91_udc *udc)
854 struct usb_gadget_driver *driver = udc->driver;
857 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
859 udc->gadget.speed = USB_SPEED_UNKNOWN;
860 udc->suspended = 0;
863 struct at91_ep *ep = &udc->ep[i];
868 spin_unlock(&udc->lock);
869 driver->disconnect(&udc->gadget);
870 spin_lock(&udc->lock);
873 udc_reinit(udc);
876 static void clk_on(struct at91_udc *udc)
878 if (udc->clocked)
880 udc->clocked = 1;
881 clk_enable(udc->iclk);
882 clk_enable(udc->fclk);
885 static void clk_off(struct at91_udc *udc)
887 if (!udc->clocked)
889 udc->clocked = 0;
890 udc->gadget.speed = USB_SPEED_UNKNOWN;
891 clk_disable(udc->fclk);
892 clk_disable(udc->iclk);
899 static void pullup(struct at91_udc *udc, int is_on)
901 int active = !udc->board.pullup_active_low;
903 if (!udc->enabled || !udc->vbus)
908 clk_on(udc);
909 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
910 at91_udp_write(udc, AT91_UDP_TXVC, 0);
912 gpio_set_value(udc->board.pullup_pin, active);
914 u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC);
917 at91_udp_write(udc, AT91_UDP_TXVC, txvc);
926 stop_activity(udc);
927 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
928 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
930 gpio_set_value(udc->board.pullup_pin, !active);
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);
954 spin_lock_irqsave(&udc->lock, flags);
955 udc->vbus = (is_active != 0);
956 if (udc->driver)
957 pullup(udc, is_active);
959 pullup(udc, 0);
960 spin_unlock_irqrestore(&udc->lock, flags);
966 struct at91_udc *udc = to_udc(gadget);
969 spin_lock_irqsave(&udc->lock, flags);
970 udc->enabled = is_on = !!is_on;
971 pullup(udc, is_on);
972 spin_unlock_irqrestore(&udc->lock, flags);
978 struct at91_udc *udc = to_udc(gadget);
981 spin_lock_irqsave(&udc->lock, flags);
982 udc->selfpowered = (is_on != 0);
983 spin_unlock_irqrestore(&udc->lock, flags);
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 spin_unlock(&udc->lock);
1247 status = udc->driver->setup(&udc->gadget, &pkt.r);
1248 spin_lock(&udc->lock);
1258 udc->req_pending = 0;
1268 udc->req_pending = 0;
1272 static void handle_ep0(struct at91_udc *udc)
1274 struct at91_ep *ep0 = &udc->ep[0];
1281 udc->req_pending = 0;
1290 udc->req_pending = 0;
1291 handle_setup(udc, ep0, csr);
1308 udc->req_pending = 0;
1319 udc->req_pending = 0;
1326 if (udc->wait_for_addr_ack) {
1329 at91_udp_write(udc, AT91_UDP_FADDR,
1330 AT91_UDP_FEN | udc->addr);
1331 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1333 if (udc->addr)
1335 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1337 udc->wait_for_addr_ack = 0;
1338 VDBG("address %d\n", udc->addr);
1358 udc->req_pending = 0;
1360 } else if (udc->req_pending) {
1380 udc->req_pending = 0;
1397 struct at91_udc *udc = _udc;
1402 spin_lock_irqsave(&udc->lock, flags);
1404 if (!udc->clocked) {
1405 clk_on(udc);
1412 status = at91_udp_read(udc, AT91_UDP_ISR)
1413 & at91_udp_read(udc, AT91_UDP_IMR);
1419 at91_udp_write(udc, AT91_UDP_IDR, ~MINIMUS_INTERRUPTUS);
1420 at91_udp_write(udc, AT91_UDP_IER, MINIMUS_INTERRUPTUS);
1422 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1423 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1425 udc->addr = 0;
1426 stop_activity(udc);
1429 at91_udp_write(udc, AT91_UDP_CSR(0),
1431 udc->gadget.speed = USB_SPEED_FULL;
1432 udc->suspended = 0;
1433 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_EP(0));
1444 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXSUSP);
1445 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXRSM);
1446 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXSUSP);
1448 if (udc->suspended)
1450 udc->suspended = 1;
1458 if (udc->driver && udc->driver->suspend) {
1459 spin_unlock(&udc->lock);
1460 udc->driver->suspend(&udc->gadget);
1461 spin_lock(&udc->lock);
1466 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
1467 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXSUSP);
1468 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
1470 if (!udc->suspended)
1472 udc->suspended = 0;
1479 if (udc->driver && udc->driver->resume) {
1480 spin_unlock(&udc->lock);
1481 udc->driver->resume(&udc->gadget);
1482 spin_lock(&udc->lock);
1489 struct at91_ep *ep = &udc->ep[1];
1492 handle_ep0(udc);
1503 clk_off(udc);
1505 spin_unlock_irqrestore(&udc->lock, flags);
1532 .udc = &controller,
1541 .udc = &controller,
1551 .udc = &controller,
1562 .udc = &controller,
1571 .udc = &controller,
1581 .udc = &controller,
1589 static void at91_vbus_update(struct at91_udc *udc, unsigned value)
1591 value ^= udc->board.vbus_active_low;
1592 if (value != udc->vbus)
1593 at91_vbus_session(&udc->gadget, value);
1598 struct at91_udc *udc = _udc;
1602 at91_vbus_update(udc, gpio_get_value(udc->board.vbus_pin));
1609 struct at91_udc *udc = container_of(work, struct at91_udc,
1612 at91_vbus_update(udc, gpio_get_value_cansleep(udc->board.vbus_pin));
1614 if (!timer_pending(&udc->vbus_timer))
1615 mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT);
1620 struct at91_udc *udc = (struct at91_udc *)data;
1627 if (!work_pending(&udc->vbus_timer_work))
1628 schedule_work(&udc->vbus_timer_work);
1633 struct at91_udc *udc = &controller;
1645 if (udc->driver) {
1650 udc->driver = driver;
1651 udc->gadget.dev.driver = &driver->driver;
1652 dev_set_drvdata(&udc->gadget.dev, &driver->driver);
1653 udc->enabled = 1;
1654 udc->selfpowered = 1;
1656 retval = driver->bind(&udc->gadget);
1659 udc->driver = NULL;
1660 udc->gadget.dev.driver = NULL;
1661 dev_set_drvdata(&udc->gadget.dev, NULL);
1662 udc->enabled = 0;
1663 udc->selfpowered = 0;
1667 spin_lock_irqsave(&udc->lock, flags);
1668 pullup(udc, 1);
1669 spin_unlock_irqrestore(&udc->lock, flags);
1678 struct at91_udc *udc = &controller;
1681 if (!driver || driver != udc->driver || !driver->unbind)
1684 spin_lock_irqsave(&udc->lock, flags);
1685 udc->enabled = 0;
1686 at91_udp_write(udc, AT91_UDP_IDR, ~0);
1687 pullup(udc, 0);
1688 spin_unlock_irqrestore(&udc->lock, flags);
1690 driver->unbind(&udc->gadget);
1691 udc->gadget.dev.driver = NULL;
1692 dev_set_drvdata(&udc->gadget.dev, NULL);
1693 udc->driver = NULL;
1704 struct at91_udc *udc = platform_get_drvdata(dev);
1708 spin_lock_irqsave(&udc->lock, flags);
1710 spin_unlock_irqrestore(&udc->lock, flags);
1716 struct at91_udc *udc;
1746 udc = &controller;
1747 udc->gadget.dev.parent = dev;
1748 udc->board = *(struct at91_udc_data *) dev->platform_data;
1749 udc->pdev = pdev;
1750 udc->enabled = 0;
1751 spin_lock_init(&udc->lock);
1755 if (udc->board.pullup_pin <= 0) {
1760 retval = gpio_request(udc->board.pullup_pin, "udc_pullup");
1765 gpio_direction_output(udc->board.pullup_pin,
1766 udc->board.pullup_active_low);
1771 udc->ep[0].maxpacket = 64;
1772 udc->ep[3].maxpacket = 64;
1773 udc->ep[4].maxpacket = 512;
1774 udc->ep[5].maxpacket = 512;
1776 udc->ep[3].maxpacket = 64;
1778 udc->ep[0].maxpacket = 64;
1779 udc->ep[3].maxpacket = 64;
1782 udc->udp_baseaddr = ioremap(res->start, resource_size(res));
1783 if (!udc->udp_baseaddr) {
1788 udc_reinit(udc);
1791 udc->iclk = clk_get(dev, "udc_clk");
1792 udc->fclk = clk_get(dev, "udpck");
1793 if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk)) {
1800 retval = device_register(&udc->gadget.dev);
1805 clk_enable(udc->iclk);
1806 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
1807 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
1809 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
1810 clk_disable(udc->iclk);
1813 udc->udp_irq = platform_get_irq(pdev, 0);
1814 retval = request_irq(udc->udp_irq, at91_udc_irq,
1815 IRQF_DISABLED, driver_name, udc);
1817 DBG("request irq %d failed\n", udc->udp_irq);
1820 if (udc->board.vbus_pin > 0) {
1821 retval = gpio_request(udc->board.vbus_pin, "udc_vbus");
1826 gpio_direction_input(udc->board.vbus_pin);
1832 udc->vbus = gpio_get_value_cansleep(udc->board.vbus_pin) ^
1833 udc->board.vbus_active_low;
1835 if (udc->board.vbus_polled) {
1836 INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work);
1837 setup_timer(&udc->vbus_timer, at91_vbus_timer,
1838 (unsigned long)udc);
1839 mod_timer(&udc->vbus_timer,
1842 if (request_irq(udc->board.vbus_pin, at91_vbus_irq,
1843 IRQF_DISABLED, driver_name, udc)) {
1845 udc->board.vbus_pin);
1852 udc->vbus = 1;
1854 dev_set_drvdata(dev, udc);
1856 create_debug_file(udc);
1862 if (udc->board.vbus_pin > 0)
1863 gpio_free(udc->board.vbus_pin);
1865 free_irq(udc->udp_irq, udc);
1867 device_unregister(&udc->gadget.dev);
1869 iounmap(udc->udp_baseaddr);
1872 gpio_free(udc->board.pullup_pin);
1881 struct at91_udc *udc = platform_get_drvdata(pdev);
1887 if (udc->driver)
1890 spin_lock_irqsave(&udc->lock, flags);
1891 pullup(udc, 0);
1892 spin_unlock_irqrestore(&udc->lock, flags);
1895 remove_debug_file(udc);
1896 if (udc->board.vbus_pin > 0) {
1897 free_irq(udc->board.vbus_pin, udc);
1898 gpio_free(udc->board.vbus_pin);
1900 free_irq(udc->udp_irq, udc);
1901 device_unregister(&udc->gadget.dev);
1903 iounmap(udc->udp_baseaddr);
1906 gpio_free(udc->board.pullup_pin);
1911 clk_put(udc->iclk);
1912 clk_put(udc->fclk);
1920 struct at91_udc *udc = platform_get_drvdata(pdev);
1921 int wake = udc->driver && device_may_wakeup(&pdev->dev);
1929 if ((!udc->suspended && udc->addr)
1932 spin_lock_irqsave(&udc->lock, flags);
1933 pullup(udc, 0);
1935 spin_unlock_irqrestore(&udc->lock, flags);
1937 enable_irq_wake(udc->udp_irq);
1939 udc->active_suspend = wake;
1940 if (udc->board.vbus_pin > 0 && !udc->board.vbus_polled && wake)
1941 enable_irq_wake(udc->board.vbus_pin);
1947 struct at91_udc *udc = platform_get_drvdata(pdev);
1950 if (udc->board.vbus_pin > 0 && !udc->board.vbus_polled &&
1951 udc->active_suspend)
1952 disable_irq_wake(udc->board.vbus_pin);
1955 if (udc->active_suspend)
1956 disable_irq_wake(udc->udp_irq);
1958 spin_lock_irqsave(&udc->lock, flags);
1959 pullup(udc, 1);
1960 spin_unlock_irqrestore(&udc->lock, flags);
1992 MODULE_DESCRIPTION("AT91 udc driver");