Lines Matching defs:udc

89 #define at91_udp_read(udc, reg) \
90 __raw_readl((udc)->udp_baseaddr + (reg))
91 #define at91_udp_write(udc, reg, val) \
92 __raw_writel((val), (udc)->udp_baseaddr + (reg))
100 static const char debug_filename[] = "driver/udc";
114 struct at91_udc *udc = ep->udc;
116 spin_lock_irqsave(&udc->lock, flags);
160 spin_unlock_irqrestore(&udc->lock, flags);
184 struct at91_udc *udc = s->private;
191 udc->vbus ? "present" : "off",
192 udc->enabled
193 ? (udc->vbus ? "active" : "enabled")
195 udc->gadget.is_selfpowered ? "self" : "VBUS",
196 udc->suspended ? ", suspended" : "",
197 udc->driver ? udc->driver->driver.name : "(none)");
200 if (!udc->clocked) {
205 tmp = at91_udp_read(udc, AT91_UDP_FRM_NUM);
211 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
219 tmp = at91_udp_read(udc, AT91_UDP_FADDR);
224 proc_irq_show(s, "imr ", at91_udp_read(udc, AT91_UDP_IMR));
225 proc_irq_show(s, "isr ", at91_udp_read(udc, AT91_UDP_ISR));
227 if (udc->enabled && udc->vbus) {
228 proc_ep_show(s, &udc->ep[0]);
229 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
237 static void create_debug_file(struct at91_udc *udc)
239 udc->pde = proc_create_single_data(debug_filename, 0, NULL,
240 proc_udc_show, udc);
243 static void remove_debug_file(struct at91_udc *udc)
245 if (udc->pde)
251 static inline void create_debug_file(struct at91_udc *udc) {}
252 static inline void remove_debug_file(struct at91_udc *udc) {}
262 struct at91_udc *udc = ep->udc;
273 spin_unlock(&udc->lock);
275 spin_lock(&udc->lock);
280 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask);
475 struct at91_udc *udc;
489 udc = ep->udc;
490 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
524 spin_lock_irqsave(&udc->lock, flags);
542 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
543 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
545 spin_unlock_irqrestore(&udc->lock, flags);
552 struct at91_udc *udc = ep->udc;
555 if (ep == &ep->udc->ep[0])
558 spin_lock_irqsave(&udc->lock, flags);
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);
573 spin_unlock_irqrestore(&udc->lock, flags);
609 struct at91_udc *udc;
627 udc = ep->udc;
629 if (!udc || !udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
637 spin_lock_irqsave(&udc->lock, flags);
655 if (!udc->req_pending) {
664 if (udc->wait_for_config_ack) {
665 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
668 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
678 udc->req_pending = 0;
697 at91_udp_write(udc, AT91_UDP_IER, ep->int_mask);
700 spin_unlock_irqrestore(&udc->lock, flags);
709 struct at91_udc *udc;
715 udc = ep->udc;
717 spin_lock_irqsave(&udc->lock, flags);
727 spin_unlock_irqrestore(&udc->lock, flags);
732 spin_unlock_irqrestore(&udc->lock, flags);
739 struct at91_udc *udc = ep->udc;
745 if (!_ep || ep->is_iso || !ep->udc->clocked)
749 spin_lock_irqsave(&udc->lock, flags);
767 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
768 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
774 spin_unlock_irqrestore(&udc->lock, flags);
793 struct at91_udc *udc = to_udc(gadget);
797 return at91_udp_read(udc, AT91_UDP_FRM_NUM) & AT91_UDP_NUM;
802 struct at91_udc *udc = to_udc(gadget);
807 spin_lock_irqsave(&udc->lock, flags);
809 if (!udc->clocked || !udc->suspended)
814 glbstate = at91_udp_read(udc, AT91_UDP_GLB_STAT);
818 at91_udp_write(udc, AT91_UDP_GLB_STAT, glbstate);
821 spin_unlock_irqrestore(&udc->lock, flags);
826 static void udc_reinit(struct at91_udc *udc)
830 INIT_LIST_HEAD(&udc->gadget.ep_list);
831 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
832 udc->gadget.quirk_stall_not_supp = 1;
835 struct at91_ep *ep = &udc->ep[i];
838 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
843 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i);
849 static void reset_gadget(struct at91_udc *udc)
851 struct usb_gadget_driver *driver = udc->driver;
854 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
856 udc->gadget.speed = USB_SPEED_UNKNOWN;
857 udc->suspended = 0;
860 struct at91_ep *ep = &udc->ep[i];
866 spin_unlock(&udc->lock);
867 usb_gadget_udc_reset(&udc->gadget, driver);
868 spin_lock(&udc->lock);
871 udc_reinit(udc);
874 static void stop_activity(struct at91_udc *udc)
876 struct usb_gadget_driver *driver = udc->driver;
879 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
881 udc->gadget.speed = USB_SPEED_UNKNOWN;
882 udc->suspended = 0;
885 struct at91_ep *ep = &udc->ep[i];
890 spin_unlock(&udc->lock);
891 driver->disconnect(&udc->gadget);
892 spin_lock(&udc->lock);
895 udc_reinit(udc);
898 static void clk_on(struct at91_udc *udc)
900 if (udc->clocked)
902 udc->clocked = 1;
904 clk_enable(udc->iclk);
905 clk_enable(udc->fclk);
908 static void clk_off(struct at91_udc *udc)
910 if (!udc->clocked)
912 udc->clocked = 0;
913 udc->gadget.speed = USB_SPEED_UNKNOWN;
914 clk_disable(udc->fclk);
915 clk_disable(udc->iclk);
922 static void pullup(struct at91_udc *udc, int is_on)
924 if (!udc->enabled || !udc->vbus)
929 clk_on(udc);
930 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
931 at91_udp_write(udc, AT91_UDP_TXVC, 0);
933 stop_activity(udc);
934 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
935 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
936 clk_off(udc);
939 if (udc->caps && udc->caps->pullup)
940 udc->caps->pullup(udc, is_on);
946 struct at91_udc *udc = to_udc(gadget);
950 spin_lock_irqsave(&udc->lock, flags);
951 udc->vbus = (is_active != 0);
952 if (udc->driver)
953 pullup(udc, is_active);
955 pullup(udc, 0);
956 spin_unlock_irqrestore(&udc->lock, flags);
962 struct at91_udc *udc = to_udc(gadget);
965 spin_lock_irqsave(&udc->lock, flags);
966 udc->enabled = is_on = !!is_on;
967 pullup(udc, is_on);
968 spin_unlock_irqrestore(&udc->lock, flags);
974 struct at91_udc *udc = to_udc(gadget);
977 spin_lock_irqsave(&udc->lock, flags);
979 spin_unlock_irqrestore(&udc->lock, flags);
1047 static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr)
1076 udc->wait_for_addr_ack = 0;
1077 udc->wait_for_config_ack = 0;
1094 udc->req_pending = 1;
1103 udc->addr = w_value;
1104 udc->wait_for_addr_ack = 1;
1105 udc->req_pending = 0;
1111 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_CONFG;
1113 udc->wait_for_config_ack = (tmp == 0);
1115 udc->wait_for_config_ack = (tmp != 0);
1116 if (udc->wait_for_config_ack)
1127 tmp = (udc->gadget.is_selfpowered << USB_DEVICE_SELF_POWERED);
1128 if (at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_ESR)
1139 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1141 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1147 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1149 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1176 ep = &udc->ep[tmp];
1199 ep = &udc->ep[tmp];
1218 ep = &udc->ep[tmp];
1231 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask);
1232 at91_udp_write(udc, AT91_UDP_RST_EP, 0);
1247 if (udc->driver) {
1248 spin_unlock(&udc->lock);
1249 status = udc->driver->setup(&udc->gadget, &pkt.r);
1250 spin_lock(&udc->lock);
1260 udc->req_pending = 0;
1270 udc->req_pending = 0;
1273 static void handle_ep0(struct at91_udc *udc)
1275 struct at91_ep *ep0 = &udc->ep[0];
1282 udc->req_pending = 0;
1291 udc->req_pending = 0;
1292 handle_setup(udc, ep0, csr);
1309 udc->req_pending = 0;
1320 udc->req_pending = 0;
1327 if (udc->wait_for_addr_ack) {
1330 at91_udp_write(udc, AT91_UDP_FADDR,
1331 AT91_UDP_FEN | udc->addr);
1332 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT);
1334 if (udc->addr)
1336 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp);
1338 udc->wait_for_addr_ack = 0;
1339 VDBG("address %d\n", udc->addr);
1359 udc->req_pending = 0;
1361 } else if (udc->req_pending) {
1381 udc->req_pending = 0;
1398 struct at91_udc *udc = _udc;
1403 spin_lock_irqsave(&udc->lock, flags);
1405 if (!udc->clocked) {
1406 clk_on(udc);
1413 status = at91_udp_read(udc, AT91_UDP_ISR)
1414 & at91_udp_read(udc, AT91_UDP_IMR);
1420 at91_udp_write(udc, AT91_UDP_IDR, ~MINIMUS_INTERRUPTUS);
1421 at91_udp_write(udc, AT91_UDP_IER, MINIMUS_INTERRUPTUS);
1423 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1424 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1426 udc->addr = 0;
1427 reset_gadget(udc);
1430 at91_udp_write(udc, AT91_UDP_CSR(0),
1432 udc->gadget.speed = USB_SPEED_FULL;
1433 udc->suspended = 0;
1434 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_EP(0));
1445 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXSUSP);
1446 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXRSM);
1447 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXSUSP);
1449 if (udc->suspended)
1451 udc->suspended = 1;
1459 if (udc->driver && udc->driver->suspend) {
1460 spin_unlock(&udc->lock);
1461 udc->driver->suspend(&udc->gadget);
1462 spin_lock(&udc->lock);
1467 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM);
1468 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXSUSP);
1469 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM);
1471 if (!udc->suspended)
1473 udc->suspended = 0;
1480 if (udc->driver && udc->driver->resume) {
1481 spin_unlock(&udc->lock);
1482 udc->driver->resume(&udc->gadget);
1483 spin_lock(&udc->lock);
1490 struct at91_ep *ep = &udc->ep[1];
1493 handle_ep0(udc);
1504 clk_off(udc);
1506 spin_unlock_irqrestore(&udc->lock, flags);
1513 static void at91_vbus_update(struct at91_udc *udc, unsigned value)
1515 if (value != udc->vbus)
1516 at91_vbus_session(&udc->gadget, value);
1521 struct at91_udc *udc = _udc;
1525 at91_vbus_update(udc, gpiod_get_value(udc->board.vbus_pin));
1532 struct at91_udc *udc = container_of(work, struct at91_udc,
1535 at91_vbus_update(udc, gpiod_get_value_cansleep(udc->board.vbus_pin));
1537 if (!timer_pending(&udc->vbus_timer))
1538 mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT);
1543 struct at91_udc *udc = from_timer(udc, t, vbus_timer);
1550 schedule_work(&udc->vbus_timer_work);
1556 struct at91_udc *udc;
1558 udc = container_of(gadget, struct at91_udc, gadget);
1559 udc->driver = driver;
1560 udc->gadget.dev.of_node = udc->pdev->dev.of_node;
1561 udc->enabled = 1;
1562 udc->gadget.is_selfpowered = 1;
1569 struct at91_udc *udc;
1572 udc = container_of(gadget, struct at91_udc, gadget);
1573 spin_lock_irqsave(&udc->lock, flags);
1574 udc->enabled = 0;
1575 at91_udp_write(udc, AT91_UDP_IDR, ~0);
1576 spin_unlock_irqrestore(&udc->lock, flags);
1578 udc->driver = NULL;
1587 struct at91_udc *udc = platform_get_drvdata(dev);
1591 spin_lock_irqsave(&udc->lock, flags);
1593 spin_unlock_irqrestore(&udc->lock, flags);
1596 static int at91rm9200_udc_init(struct at91_udc *udc)
1602 ep = &udc->ep[i];
1618 if (!udc->board.pullup_pin) {
1623 gpiod_direction_output(udc->board.pullup_pin,
1624 gpiod_is_active_low(udc->board.pullup_pin));
1629 static void at91rm9200_udc_pullup(struct at91_udc *udc, int is_on)
1631 gpiod_set_value(udc->board.pullup_pin, is_on);
1639 static int at91sam9260_udc_init(struct at91_udc *udc)
1645 ep = &udc->ep[i];
1660 static void at91sam9260_udc_pullup(struct at91_udc *udc, int is_on)
1662 u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC);
1669 at91_udp_write(udc, AT91_UDP_TXVC, txvc);
1677 static int at91sam9261_udc_init(struct at91_udc *udc)
1683 ep = &udc->ep[i];
1698 udc->matrix = syscon_regmap_lookup_by_phandle(udc->pdev->dev.of_node,
1700 return PTR_ERR_OR_ZERO(udc->matrix);
1703 static void at91sam9261_udc_pullup(struct at91_udc *udc, int is_on)
1710 regmap_update_bits(udc->matrix, AT91SAM9261_MATRIX_USBPUCR,
1719 static int at91sam9263_udc_init(struct at91_udc *udc)
1725 ep = &udc->ep[i];
1751 .compatible = "atmel,at91rm9200-udc",
1755 .compatible = "atmel,at91sam9260-udc",
1759 .compatible = "atmel,at91sam9261-udc",
1763 .compatible = "atmel,at91sam9263-udc",
1770 static void at91udc_of_init(struct at91_udc *udc, struct device_node *np)
1772 struct at91_udc_data *board = &udc->board;
1793 udc->caps = match->data;
1799 struct at91_udc *udc;
1804 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
1805 if (!udc)
1809 udc->gadget.dev.parent = dev;
1810 at91udc_of_init(udc, pdev->dev.of_node);
1811 udc->pdev = pdev;
1812 udc->enabled = 0;
1813 spin_lock_init(&udc->lock);
1815 udc->gadget.ops = &at91_udc_ops;
1816 udc->gadget.ep0 = &udc->ep[0].ep;
1817 udc->gadget.name = driver_name;
1818 udc->gadget.dev.init_name = "gadget";
1821 ep = &udc->ep[i];
1825 ep->udc = udc;
1831 udc->udp_baseaddr = devm_platform_ioremap_resource(pdev, 0);
1832 if (IS_ERR(udc->udp_baseaddr))
1833 return PTR_ERR(udc->udp_baseaddr);
1835 if (udc->caps && udc->caps->init) {
1836 retval = udc->caps->init(udc);
1841 udc_reinit(udc);
1844 udc->iclk = devm_clk_get(dev, "pclk");
1845 if (IS_ERR(udc->iclk))
1846 return PTR_ERR(udc->iclk);
1848 udc->fclk = devm_clk_get(dev, "hclk");
1849 if (IS_ERR(udc->fclk))
1850 return PTR_ERR(udc->fclk);
1853 clk_set_rate(udc->fclk, 48000000);
1854 retval = clk_prepare(udc->fclk);
1858 retval = clk_prepare_enable(udc->iclk);
1862 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
1863 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
1865 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
1866 clk_disable(udc->iclk);
1869 udc->udp_irq = retval = platform_get_irq(pdev, 0);
1872 retval = devm_request_irq(dev, udc->udp_irq, at91_udc_irq, 0,
1873 driver_name, udc);
1875 DBG("request irq %d failed\n", udc->udp_irq);
1879 if (udc->board.vbus_pin) {
1880 gpiod_direction_input(udc->board.vbus_pin);
1886 udc->vbus = gpiod_get_value_cansleep(udc->board.vbus_pin);
1888 if (udc->board.vbus_polled) {
1889 INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work);
1890 timer_setup(&udc->vbus_timer, at91_vbus_timer, 0);
1891 mod_timer(&udc->vbus_timer,
1895 gpiod_to_irq(udc->board.vbus_pin),
1896 at91_vbus_irq, 0, driver_name, udc);
1899 desc_to_gpio(udc->board.vbus_pin));
1905 udc->vbus = 1;
1907 retval = usb_add_gadget_udc(dev, &udc->gadget);
1910 dev_set_drvdata(dev, udc);
1912 create_debug_file(udc);
1918 clk_unprepare(udc->iclk);
1920 clk_unprepare(udc->fclk);
1929 struct at91_udc *udc = platform_get_drvdata(pdev);
1934 usb_del_gadget_udc(&udc->gadget);
1935 if (udc->driver) {
1941 spin_lock_irqsave(&udc->lock, flags);
1942 pullup(udc, 0);
1943 spin_unlock_irqrestore(&udc->lock, flags);
1946 remove_debug_file(udc);
1947 clk_unprepare(udc->fclk);
1948 clk_unprepare(udc->iclk);
1954 struct at91_udc *udc = platform_get_drvdata(pdev);
1955 int wake = udc->driver && device_may_wakeup(&pdev->dev);
1963 if ((!udc->suspended && udc->addr)
1966 spin_lock_irqsave(&udc->lock, flags);
1967 pullup(udc, 0);
1969 spin_unlock_irqrestore(&udc->lock, flags);
1971 enable_irq_wake(udc->udp_irq);
1973 udc->active_suspend = wake;
1974 if (udc->board.vbus_pin && !udc->board.vbus_polled && wake)
1975 enable_irq_wake(gpiod_to_irq(udc->board.vbus_pin));
1981 struct at91_udc *udc = platform_get_drvdata(pdev);
1984 if (udc->board.vbus_pin && !udc->board.vbus_polled &&
1985 udc->active_suspend)
1986 disable_irq_wake(gpiod_to_irq(udc->board.vbus_pin));
1989 if (udc->active_suspend)
1990 disable_irq_wake(udc->udp_irq);
1992 spin_lock_irqsave(&udc->lock, flags);
1993 pullup(udc, 1);
1994 spin_unlock_irqrestore(&udc->lock, flags);
2017 MODULE_DESCRIPTION("AT91 udc driver");