Lines Matching full:udc

90 #define at91_udp_read(udc, reg) \  argument
91 __raw_readl((udc)->udp_baseaddr + (reg))
92 #define at91_udp_write(udc, reg, val) \ argument
93 __raw_writel((val), (udc)->udp_baseaddr + (reg))
101 static const char debug_filename[] = "driver/udc";
115 struct at91_udc *udc = ep->udc; in proc_ep_show() local
117 spin_lock_irqsave(&udc->lock, flags); in proc_ep_show()
161 spin_unlock_irqrestore(&udc->lock, flags); in proc_ep_show()
185 struct at91_udc *udc = s->private; in proc_udc_show() local
192 udc->vbus ? "present" : "off", in proc_udc_show()
193 udc->enabled in proc_udc_show()
194 ? (udc->vbus ? "active" : "enabled") in proc_udc_show()
196 udc->gadget.is_selfpowered ? "self" : "VBUS", in proc_udc_show()
197 udc->suspended ? ", suspended" : "", in proc_udc_show()
198 udc->driver ? udc->driver->driver.name : "(none)"); in proc_udc_show()
201 if (!udc->clocked) { in proc_udc_show()
206 tmp = at91_udp_read(udc, AT91_UDP_FRM_NUM); in proc_udc_show()
212 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT); in proc_udc_show()
220 tmp = at91_udp_read(udc, AT91_UDP_FADDR); in proc_udc_show()
225 proc_irq_show(s, "imr ", at91_udp_read(udc, AT91_UDP_IMR)); in proc_udc_show()
226 proc_irq_show(s, "isr ", at91_udp_read(udc, AT91_UDP_ISR)); in proc_udc_show()
228 if (udc->enabled && udc->vbus) { in proc_udc_show()
229 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
230 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in proc_udc_show()
238 static void create_debug_file(struct at91_udc *udc) in create_debug_file() argument
240 udc->pde = proc_create_single_data(debug_filename, 0, NULL, in create_debug_file()
241 proc_udc_show, udc); in create_debug_file()
244 static void remove_debug_file(struct at91_udc *udc) in remove_debug_file() argument
246 if (udc->pde) in remove_debug_file()
252 static inline void create_debug_file(struct at91_udc *udc) {} in create_debug_file() argument
253 static inline void remove_debug_file(struct at91_udc *udc) {} in remove_debug_file() argument
263 struct at91_udc *udc = ep->udc; in done() local
274 spin_unlock(&udc->lock); in done()
276 spin_lock(&udc->lock); in done()
281 at91_udp_write(udc, AT91_UDP_IDR, ep->int_mask); in done()
476 struct at91_udc *udc; in at91_ep_enable() local
490 udc = ep->udc; in at91_ep_enable()
491 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) { in at91_ep_enable()
525 spin_lock_irqsave(&udc->lock, flags); in at91_ep_enable()
543 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_enable()
544 at91_udp_write(udc, AT91_UDP_RST_EP, 0); in at91_ep_enable()
546 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_enable()
553 struct at91_udc *udc = ep->udc; in at91_ep_disable() local
556 if (ep == &ep->udc->ep[0]) in at91_ep_disable()
559 spin_lock_irqsave(&udc->lock, flags); in at91_ep_disable()
568 if (ep->udc->clocked) { in at91_ep_disable()
569 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_disable()
570 at91_udp_write(udc, AT91_UDP_RST_EP, 0); in at91_ep_disable()
574 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_disable()
610 struct at91_udc *udc; in at91_ep_queue() local
628 udc = ep->udc; in at91_ep_queue()
630 if (!udc || !udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) { in at91_ep_queue()
638 spin_lock_irqsave(&udc->lock, flags); in at91_ep_queue()
656 if (!udc->req_pending) { in at91_ep_queue()
665 if (udc->wait_for_config_ack) { in at91_ep_queue()
666 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT); in at91_ep_queue()
669 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp); in at91_ep_queue()
679 udc->req_pending = 0; in at91_ep_queue()
698 at91_udp_write(udc, AT91_UDP_IER, ep->int_mask); in at91_ep_queue()
701 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_queue()
710 struct at91_udc *udc; in at91_ep_dequeue() local
716 udc = ep->udc; in at91_ep_dequeue()
718 spin_lock_irqsave(&udc->lock, flags); in at91_ep_dequeue()
728 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_dequeue()
733 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_dequeue()
740 struct at91_udc *udc = ep->udc; in at91_ep_set_halt() local
746 if (!_ep || ep->is_iso || !ep->udc->clocked) in at91_ep_set_halt()
750 spin_lock_irqsave(&udc->lock, flags); in at91_ep_set_halt()
768 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in at91_ep_set_halt()
769 at91_udp_write(udc, AT91_UDP_RST_EP, 0); in at91_ep_set_halt()
775 spin_unlock_irqrestore(&udc->lock, flags); in at91_ep_set_halt()
794 struct at91_udc *udc = to_udc(gadget); in at91_get_frame() local
798 return at91_udp_read(udc, AT91_UDP_FRM_NUM) & AT91_UDP_NUM; in at91_get_frame()
803 struct at91_udc *udc = to_udc(gadget); in at91_wakeup() local
808 spin_lock_irqsave(&udc->lock, flags); in at91_wakeup()
810 if (!udc->clocked || !udc->suspended) in at91_wakeup()
815 glbstate = at91_udp_read(udc, AT91_UDP_GLB_STAT); in at91_wakeup()
819 at91_udp_write(udc, AT91_UDP_GLB_STAT, glbstate); in at91_wakeup()
822 spin_unlock_irqrestore(&udc->lock, flags); in at91_wakeup()
827 static void udc_reinit(struct at91_udc *udc) in udc_reinit() argument
831 INIT_LIST_HEAD(&udc->gadget.ep_list); in udc_reinit()
832 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list); in udc_reinit()
833 udc->gadget.quirk_stall_not_supp = 1; in udc_reinit()
836 struct at91_ep *ep = &udc->ep[i]; in udc_reinit()
839 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in udc_reinit()
844 ep->creg = (void __iomem *) udc->udp_baseaddr + AT91_UDP_CSR(i); in udc_reinit()
850 static void reset_gadget(struct at91_udc *udc) in reset_gadget() argument
852 struct usb_gadget_driver *driver = udc->driver; in reset_gadget()
855 if (udc->gadget.speed == USB_SPEED_UNKNOWN) in reset_gadget()
857 udc->gadget.speed = USB_SPEED_UNKNOWN; in reset_gadget()
858 udc->suspended = 0; in reset_gadget()
861 struct at91_ep *ep = &udc->ep[i]; in reset_gadget()
867 spin_unlock(&udc->lock); in reset_gadget()
868 usb_gadget_udc_reset(&udc->gadget, driver); in reset_gadget()
869 spin_lock(&udc->lock); in reset_gadget()
872 udc_reinit(udc); in reset_gadget()
875 static void stop_activity(struct at91_udc *udc) in stop_activity() argument
877 struct usb_gadget_driver *driver = udc->driver; in stop_activity()
880 if (udc->gadget.speed == USB_SPEED_UNKNOWN) in stop_activity()
882 udc->gadget.speed = USB_SPEED_UNKNOWN; in stop_activity()
883 udc->suspended = 0; in stop_activity()
886 struct at91_ep *ep = &udc->ep[i]; in stop_activity()
891 spin_unlock(&udc->lock); in stop_activity()
892 driver->disconnect(&udc->gadget); in stop_activity()
893 spin_lock(&udc->lock); in stop_activity()
896 udc_reinit(udc); in stop_activity()
899 static void clk_on(struct at91_udc *udc) in clk_on() argument
901 if (udc->clocked) in clk_on()
903 udc->clocked = 1; in clk_on()
905 clk_enable(udc->iclk); in clk_on()
906 clk_enable(udc->fclk); in clk_on()
909 static void clk_off(struct at91_udc *udc) in clk_off() argument
911 if (!udc->clocked) in clk_off()
913 udc->clocked = 0; in clk_off()
914 udc->gadget.speed = USB_SPEED_UNKNOWN; in clk_off()
915 clk_disable(udc->fclk); in clk_off()
916 clk_disable(udc->iclk); in clk_off()
923 static void pullup(struct at91_udc *udc, int is_on) in pullup() argument
925 if (!udc->enabled || !udc->vbus) in pullup()
930 clk_on(udc); in pullup()
931 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM); in pullup()
932 at91_udp_write(udc, AT91_UDP_TXVC, 0); in pullup()
934 stop_activity(udc); in pullup()
935 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM); in pullup()
936 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); in pullup()
937 clk_off(udc); in pullup()
940 if (udc->caps && udc->caps->pullup) in pullup()
941 udc->caps->pullup(udc, is_on); in pullup()
947 struct at91_udc *udc = to_udc(gadget); in at91_vbus_session() local
951 spin_lock_irqsave(&udc->lock, flags); in at91_vbus_session()
952 udc->vbus = (is_active != 0); in at91_vbus_session()
953 if (udc->driver) in at91_vbus_session()
954 pullup(udc, is_active); in at91_vbus_session()
956 pullup(udc, 0); in at91_vbus_session()
957 spin_unlock_irqrestore(&udc->lock, flags); in at91_vbus_session()
963 struct at91_udc *udc = to_udc(gadget); in at91_pullup() local
966 spin_lock_irqsave(&udc->lock, flags); in at91_pullup()
967 udc->enabled = is_on = !!is_on; in at91_pullup()
968 pullup(udc, is_on); in at91_pullup()
969 spin_unlock_irqrestore(&udc->lock, flags); in at91_pullup()
975 struct at91_udc *udc = to_udc(gadget); in at91_set_selfpowered() local
978 spin_lock_irqsave(&udc->lock, flags); in at91_set_selfpowered()
980 spin_unlock_irqrestore(&udc->lock, flags); in at91_set_selfpowered()
1048 static void handle_setup(struct at91_udc *udc, struct at91_ep *ep, u32 csr) in handle_setup() argument
1077 udc->wait_for_addr_ack = 0; in handle_setup()
1078 udc->wait_for_config_ack = 0; in handle_setup()
1095 udc->req_pending = 1; in handle_setup()
1104 udc->addr = w_value; in handle_setup()
1105 udc->wait_for_addr_ack = 1; in handle_setup()
1106 udc->req_pending = 0; in handle_setup()
1112 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_CONFG; in handle_setup()
1114 udc->wait_for_config_ack = (tmp == 0); in handle_setup()
1116 udc->wait_for_config_ack = (tmp != 0); in handle_setup()
1117 if (udc->wait_for_config_ack) in handle_setup()
1128 tmp = (udc->gadget.is_selfpowered << USB_DEVICE_SELF_POWERED); in handle_setup()
1129 if (at91_udp_read(udc, AT91_UDP_GLB_STAT) & AT91_UDP_ESR) in handle_setup()
1140 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT); in handle_setup()
1142 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp); in handle_setup()
1148 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT); in handle_setup()
1150 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp); in handle_setup()
1177 ep = &udc->ep[tmp]; in handle_setup()
1200 ep = &udc->ep[tmp]; in handle_setup()
1219 ep = &udc->ep[tmp]; in handle_setup()
1232 at91_udp_write(udc, AT91_UDP_RST_EP, ep->int_mask); in handle_setup()
1233 at91_udp_write(udc, AT91_UDP_RST_EP, 0); in handle_setup()
1248 if (udc->driver) { in handle_setup()
1249 spin_unlock(&udc->lock); in handle_setup()
1250 status = udc->driver->setup(&udc->gadget, &pkt.r); in handle_setup()
1251 spin_lock(&udc->lock); in handle_setup()
1261 udc->req_pending = 0; in handle_setup()
1271 udc->req_pending = 0; in handle_setup()
1274 static void handle_ep0(struct at91_udc *udc) in handle_ep0() argument
1276 struct at91_ep *ep0 = &udc->ep[0]; in handle_ep0()
1283 udc->req_pending = 0; in handle_ep0()
1292 udc->req_pending = 0; in handle_ep0()
1293 handle_setup(udc, ep0, csr); in handle_ep0()
1310 udc->req_pending = 0; in handle_ep0()
1321 udc->req_pending = 0; in handle_ep0()
1328 if (udc->wait_for_addr_ack) { in handle_ep0()
1331 at91_udp_write(udc, AT91_UDP_FADDR, in handle_ep0()
1332 AT91_UDP_FEN | udc->addr); in handle_ep0()
1333 tmp = at91_udp_read(udc, AT91_UDP_GLB_STAT); in handle_ep0()
1335 if (udc->addr) in handle_ep0()
1337 at91_udp_write(udc, AT91_UDP_GLB_STAT, tmp); in handle_ep0()
1339 udc->wait_for_addr_ack = 0; in handle_ep0()
1340 VDBG("address %d\n", udc->addr); in handle_ep0()
1360 udc->req_pending = 0; in handle_ep0()
1362 } else if (udc->req_pending) { in handle_ep0()
1382 udc->req_pending = 0; in handle_ep0()
1399 struct at91_udc *udc = _udc; in at91_udc_irq() local
1404 spin_lock_irqsave(&udc->lock, flags); in at91_udc_irq()
1406 if (!udc->clocked) { in at91_udc_irq()
1407 clk_on(udc); in at91_udc_irq()
1414 status = at91_udp_read(udc, AT91_UDP_ISR) in at91_udc_irq()
1415 & at91_udp_read(udc, AT91_UDP_IMR); in at91_udc_irq()
1421 at91_udp_write(udc, AT91_UDP_IDR, ~MINIMUS_INTERRUPTUS); in at91_udc_irq()
1422 at91_udp_write(udc, AT91_UDP_IER, MINIMUS_INTERRUPTUS); in at91_udc_irq()
1424 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES); in at91_udc_irq()
1425 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES); in at91_udc_irq()
1427 udc->addr = 0; in at91_udc_irq()
1428 reset_gadget(udc); in at91_udc_irq()
1431 at91_udp_write(udc, AT91_UDP_CSR(0), in at91_udc_irq()
1433 udc->gadget.speed = USB_SPEED_FULL; in at91_udc_irq()
1434 udc->suspended = 0; in at91_udc_irq()
1435 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_EP(0)); in at91_udc_irq()
1446 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXSUSP); in at91_udc_irq()
1447 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXRSM); in at91_udc_irq()
1448 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXSUSP); in at91_udc_irq()
1450 if (udc->suspended) in at91_udc_irq()
1452 udc->suspended = 1; in at91_udc_irq()
1460 if (udc->driver && udc->driver->suspend) { in at91_udc_irq()
1461 spin_unlock(&udc->lock); in at91_udc_irq()
1462 udc->driver->suspend(&udc->gadget); in at91_udc_irq()
1463 spin_lock(&udc->lock); in at91_udc_irq()
1468 at91_udp_write(udc, AT91_UDP_IDR, AT91_UDP_RXRSM); in at91_udc_irq()
1469 at91_udp_write(udc, AT91_UDP_IER, AT91_UDP_RXSUSP); in at91_udc_irq()
1470 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_RXRSM); in at91_udc_irq()
1472 if (!udc->suspended) in at91_udc_irq()
1474 udc->suspended = 0; in at91_udc_irq()
1481 if (udc->driver && udc->driver->resume) { in at91_udc_irq()
1482 spin_unlock(&udc->lock); in at91_udc_irq()
1483 udc->driver->resume(&udc->gadget); in at91_udc_irq()
1484 spin_lock(&udc->lock); in at91_udc_irq()
1491 struct at91_ep *ep = &udc->ep[1]; in at91_udc_irq()
1494 handle_ep0(udc); in at91_udc_irq()
1505 clk_off(udc); in at91_udc_irq()
1507 spin_unlock_irqrestore(&udc->lock, flags); in at91_udc_irq()
1514 static void at91_vbus_update(struct at91_udc *udc, unsigned value) in at91_vbus_update() argument
1516 if (value != udc->vbus) in at91_vbus_update()
1517 at91_vbus_session(&udc->gadget, value); in at91_vbus_update()
1522 struct at91_udc *udc = _udc; in at91_vbus_irq() local
1526 at91_vbus_update(udc, gpiod_get_value(udc->board.vbus_pin)); in at91_vbus_irq()
1533 struct at91_udc *udc = container_of(work, struct at91_udc, in at91_vbus_timer_work() local
1536 at91_vbus_update(udc, gpiod_get_value_cansleep(udc->board.vbus_pin)); in at91_vbus_timer_work()
1538 if (!timer_pending(&udc->vbus_timer)) in at91_vbus_timer_work()
1539 mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT); in at91_vbus_timer_work()
1544 struct at91_udc *udc = from_timer(udc, t, vbus_timer); in at91_vbus_timer() local
1551 schedule_work(&udc->vbus_timer_work); in at91_vbus_timer()
1557 struct at91_udc *udc; in at91_start() local
1559 udc = container_of(gadget, struct at91_udc, gadget); in at91_start()
1560 udc->driver = driver; in at91_start()
1561 udc->gadget.dev.of_node = udc->pdev->dev.of_node; in at91_start()
1562 udc->enabled = 1; in at91_start()
1563 udc->gadget.is_selfpowered = 1; in at91_start()
1570 struct at91_udc *udc; in at91_stop() local
1573 udc = container_of(gadget, struct at91_udc, gadget); in at91_stop()
1574 spin_lock_irqsave(&udc->lock, flags); in at91_stop()
1575 udc->enabled = 0; in at91_stop()
1576 at91_udp_write(udc, AT91_UDP_IDR, ~0); in at91_stop()
1577 spin_unlock_irqrestore(&udc->lock, flags); in at91_stop()
1579 udc->driver = NULL; in at91_stop()
1588 struct at91_udc *udc = platform_get_drvdata(dev); in at91udc_shutdown() local
1592 spin_lock_irqsave(&udc->lock, flags); in at91udc_shutdown()
1594 spin_unlock_irqrestore(&udc->lock, flags); in at91udc_shutdown()
1597 static int at91rm9200_udc_init(struct at91_udc *udc) in at91rm9200_udc_init() argument
1603 ep = &udc->ep[i]; in at91rm9200_udc_init()
1619 if (!udc->board.pullup_pin) { in at91rm9200_udc_init()
1624 gpiod_direction_output(udc->board.pullup_pin, in at91rm9200_udc_init()
1625 gpiod_is_active_low(udc->board.pullup_pin)); in at91rm9200_udc_init()
1630 static void at91rm9200_udc_pullup(struct at91_udc *udc, int is_on) in at91rm9200_udc_pullup() argument
1632 gpiod_set_value(udc->board.pullup_pin, is_on); in at91rm9200_udc_pullup()
1640 static int at91sam9260_udc_init(struct at91_udc *udc) in at91sam9260_udc_init() argument
1646 ep = &udc->ep[i]; in at91sam9260_udc_init()
1661 static void at91sam9260_udc_pullup(struct at91_udc *udc, int is_on) in at91sam9260_udc_pullup() argument
1663 u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC); in at91sam9260_udc_pullup()
1670 at91_udp_write(udc, AT91_UDP_TXVC, txvc); in at91sam9260_udc_pullup()
1678 static int at91sam9261_udc_init(struct at91_udc *udc) in at91sam9261_udc_init() argument
1684 ep = &udc->ep[i]; in at91sam9261_udc_init()
1699 udc->matrix = syscon_regmap_lookup_by_phandle(udc->pdev->dev.of_node, in at91sam9261_udc_init()
1701 return PTR_ERR_OR_ZERO(udc->matrix); in at91sam9261_udc_init()
1704 static void at91sam9261_udc_pullup(struct at91_udc *udc, int is_on) in at91sam9261_udc_pullup() argument
1711 regmap_update_bits(udc->matrix, AT91SAM9261_MATRIX_USBPUCR, in at91sam9261_udc_pullup()
1720 static int at91sam9263_udc_init(struct at91_udc *udc) in at91sam9263_udc_init() argument
1726 ep = &udc->ep[i]; in at91sam9263_udc_init()
1752 .compatible = "atmel,at91rm9200-udc",
1756 .compatible = "atmel,at91sam9260-udc",
1760 .compatible = "atmel,at91sam9261-udc",
1764 .compatible = "atmel,at91sam9263-udc",
1771 static void at91udc_of_init(struct at91_udc *udc, struct device_node *np) in at91udc_of_init() argument
1773 struct at91_udc_data *board = &udc->board; in at91udc_of_init()
1794 udc->caps = match->data; in at91udc_of_init()
1800 struct at91_udc *udc; in at91udc_probe() local
1805 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL); in at91udc_probe()
1806 if (!udc) in at91udc_probe()
1810 udc->gadget.dev.parent = dev; in at91udc_probe()
1811 at91udc_of_init(udc, pdev->dev.of_node); in at91udc_probe()
1812 udc->pdev = pdev; in at91udc_probe()
1813 udc->enabled = 0; in at91udc_probe()
1814 spin_lock_init(&udc->lock); in at91udc_probe()
1816 udc->gadget.ops = &at91_udc_ops; in at91udc_probe()
1817 udc->gadget.ep0 = &udc->ep[0].ep; in at91udc_probe()
1818 udc->gadget.name = driver_name; in at91udc_probe()
1819 udc->gadget.dev.init_name = "gadget"; in at91udc_probe()
1822 ep = &udc->ep[i]; in at91udc_probe()
1826 ep->udc = udc; in at91udc_probe()
1832 udc->udp_baseaddr = devm_platform_ioremap_resource(pdev, 0); in at91udc_probe()
1833 if (IS_ERR(udc->udp_baseaddr)) in at91udc_probe()
1834 return PTR_ERR(udc->udp_baseaddr); in at91udc_probe()
1836 if (udc->caps && udc->caps->init) { in at91udc_probe()
1837 retval = udc->caps->init(udc); in at91udc_probe()
1842 udc_reinit(udc); in at91udc_probe()
1845 udc->iclk = devm_clk_get(dev, "pclk"); in at91udc_probe()
1846 if (IS_ERR(udc->iclk)) in at91udc_probe()
1847 return PTR_ERR(udc->iclk); in at91udc_probe()
1849 udc->fclk = devm_clk_get(dev, "hclk"); in at91udc_probe()
1850 if (IS_ERR(udc->fclk)) in at91udc_probe()
1851 return PTR_ERR(udc->fclk); in at91udc_probe()
1854 clk_set_rate(udc->fclk, 48000000); in at91udc_probe()
1855 retval = clk_prepare(udc->fclk); in at91udc_probe()
1859 retval = clk_prepare_enable(udc->iclk); in at91udc_probe()
1863 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); in at91udc_probe()
1864 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); in at91udc_probe()
1866 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); in at91udc_probe()
1867 clk_disable(udc->iclk); in at91udc_probe()
1869 /* request UDC and maybe VBUS irqs */ in at91udc_probe()
1870 udc->udp_irq = retval = platform_get_irq(pdev, 0); in at91udc_probe()
1873 retval = devm_request_irq(dev, udc->udp_irq, at91_udc_irq, 0, in at91udc_probe()
1874 driver_name, udc); in at91udc_probe()
1876 DBG("request irq %d failed\n", udc->udp_irq); in at91udc_probe()
1880 if (udc->board.vbus_pin) { in at91udc_probe()
1881 gpiod_direction_input(udc->board.vbus_pin); in at91udc_probe()
1887 udc->vbus = gpiod_get_value_cansleep(udc->board.vbus_pin); in at91udc_probe()
1889 if (udc->board.vbus_polled) { in at91udc_probe()
1890 INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work); in at91udc_probe()
1891 timer_setup(&udc->vbus_timer, at91_vbus_timer, 0); in at91udc_probe()
1892 mod_timer(&udc->vbus_timer, in at91udc_probe()
1896 gpiod_to_irq(udc->board.vbus_pin), in at91udc_probe()
1897 at91_vbus_irq, 0, driver_name, udc); in at91udc_probe()
1900 desc_to_gpio(udc->board.vbus_pin)); in at91udc_probe()
1906 udc->vbus = 1; in at91udc_probe()
1908 retval = usb_add_gadget_udc(dev, &udc->gadget); in at91udc_probe()
1911 dev_set_drvdata(dev, udc); in at91udc_probe()
1913 create_debug_file(udc); in at91udc_probe()
1919 clk_unprepare(udc->iclk); in at91udc_probe()
1921 clk_unprepare(udc->fclk); in at91udc_probe()
1930 struct at91_udc *udc = platform_get_drvdata(pdev); in at91udc_remove() local
1935 usb_del_gadget_udc(&udc->gadget); in at91udc_remove()
1936 if (udc->driver) { in at91udc_remove()
1942 spin_lock_irqsave(&udc->lock, flags); in at91udc_remove()
1943 pullup(udc, 0); in at91udc_remove()
1944 spin_unlock_irqrestore(&udc->lock, flags); in at91udc_remove()
1947 remove_debug_file(udc); in at91udc_remove()
1948 clk_unprepare(udc->fclk); in at91udc_remove()
1949 clk_unprepare(udc->iclk); in at91udc_remove()
1955 struct at91_udc *udc = platform_get_drvdata(pdev); in at91udc_suspend() local
1956 int wake = udc->driver && device_may_wakeup(&pdev->dev); in at91udc_suspend()
1964 if ((!udc->suspended && udc->addr) in at91udc_suspend()
1967 spin_lock_irqsave(&udc->lock, flags); in at91udc_suspend()
1968 pullup(udc, 0); in at91udc_suspend()
1970 spin_unlock_irqrestore(&udc->lock, flags); in at91udc_suspend()
1972 enable_irq_wake(udc->udp_irq); in at91udc_suspend()
1974 udc->active_suspend = wake; in at91udc_suspend()
1975 if (udc->board.vbus_pin && !udc->board.vbus_polled && wake) in at91udc_suspend()
1976 enable_irq_wake(gpiod_to_irq(udc->board.vbus_pin)); in at91udc_suspend()
1982 struct at91_udc *udc = platform_get_drvdata(pdev); in at91udc_resume() local
1985 if (udc->board.vbus_pin && !udc->board.vbus_polled && in at91udc_resume()
1986 udc->active_suspend) in at91udc_resume()
1987 disable_irq_wake(gpiod_to_irq(udc->board.vbus_pin)); in at91udc_resume()
1990 if (udc->active_suspend) in at91udc_resume()
1991 disable_irq_wake(udc->udp_irq); in at91udc_resume()
1993 spin_lock_irqsave(&udc->lock, flags); in at91udc_resume()
1994 pullup(udc, 1); in at91udc_resume()
1995 spin_unlock_irqrestore(&udc->lock, flags); in at91udc_resume()
2018 MODULE_DESCRIPTION("AT91 udc driver");