Lines Matching full:udc
48 spin_lock_irq(&ep->udc->lock); in queue_dbg_open()
55 spin_unlock_irq(&ep->udc->lock); in queue_dbg_open()
61 spin_unlock_irq(&ep->udc->lock); in queue_dbg_open()
141 struct usba_udc *udc; in regs_dbg_open() local
147 udc = inode->i_private; in regs_dbg_open()
152 spin_lock_irq(&udc->lock); in regs_dbg_open()
154 data[i] = readl_relaxed(udc->regs + i * 4); in regs_dbg_open()
155 spin_unlock_irq(&udc->lock); in regs_dbg_open()
203 static void usba_ep_init_debugfs(struct usba_udc *udc, in usba_ep_init_debugfs() argument
208 ep_root = debugfs_create_dir(ep->ep.name, udc->debugfs_root); in usba_ep_init_debugfs()
224 static void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
229 root = debugfs_create_dir(udc->gadget.name, usb_debug_root); in usba_init_debugfs()
230 udc->debugfs_root = root; in usba_init_debugfs()
232 regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, in usba_init_debugfs()
236 debugfs_create_file_size("regs", 0400, root, udc, in usba_init_debugfs()
241 usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0)); in usba_init_debugfs()
244 static void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
246 usba_ep_cleanup_debugfs(to_usba_ep(udc->gadget.ep0)); in usba_cleanup_debugfs()
247 debugfs_remove_recursive(udc->debugfs_root); in usba_cleanup_debugfs()
250 static inline void usba_ep_init_debugfs(struct usba_udc *udc, in usba_ep_init_debugfs() argument
261 static inline void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
266 static inline void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
323 static int usba_config_fifo_table(struct usba_udc *udc) in usba_config_fifo_table() argument
332 udc->fifo_cfg = NULL; in usba_config_fifo_table()
336 udc->fifo_cfg = mode_1_cfg; in usba_config_fifo_table()
340 udc->fifo_cfg = mode_2_cfg; in usba_config_fifo_table()
344 udc->fifo_cfg = mode_3_cfg; in usba_config_fifo_table()
348 udc->fifo_cfg = mode_4_cfg; in usba_config_fifo_table()
357 static inline u32 usba_int_enb_get(struct usba_udc *udc) in usba_int_enb_get() argument
359 return udc->int_enb_cache; in usba_int_enb_get()
362 static inline void usba_int_enb_set(struct usba_udc *udc, u32 mask) in usba_int_enb_set() argument
366 val = udc->int_enb_cache | mask; in usba_int_enb_set()
367 usba_writel(udc, INT_ENB, val); in usba_int_enb_set()
368 udc->int_enb_cache = val; in usba_int_enb_set()
371 static inline void usba_int_enb_clear(struct usba_udc *udc, u32 mask) in usba_int_enb_clear() argument
375 val = udc->int_enb_cache & ~mask; in usba_int_enb_clear()
376 usba_writel(udc, INT_ENB, val); in usba_int_enb_clear()
377 udc->int_enb_cache = val; in usba_int_enb_clear()
380 static int vbus_is_present(struct usba_udc *udc) in vbus_is_present() argument
382 if (udc->vbus_pin) in vbus_is_present()
383 return gpiod_get_value(udc->vbus_pin); in vbus_is_present()
389 static void toggle_bias(struct usba_udc *udc, int is_on) in toggle_bias() argument
391 if (udc->errata && udc->errata->toggle_bias) in toggle_bias()
392 udc->errata->toggle_bias(udc, is_on); in toggle_bias()
395 static void generate_bias_pulse(struct usba_udc *udc) in generate_bias_pulse() argument
397 if (!udc->bias_pulse_needed) in generate_bias_pulse()
400 if (udc->errata && udc->errata->pulse_bias) in generate_bias_pulse()
401 udc->errata->pulse_bias(udc); in generate_bias_pulse()
403 udc->bias_pulse_needed = false; in generate_bias_pulse()
476 static void send_status(struct usba_udc *udc, struct usba_ep *ep) in send_status() argument
485 struct usba_udc *udc = ep->udc; in receive_data() local
524 spin_unlock(&udc->lock); in receive_data()
526 spin_lock(&udc->lock); in receive_data()
533 send_status(udc, ep); in receive_data()
542 struct usba_udc *udc = ep->udc; in request_complete() local
550 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in); in request_complete()
556 spin_unlock(&udc->lock); in request_complete()
558 spin_lock(&udc->lock); in request_complete()
576 struct usba_udc *udc = ep->udc; in usba_ep_enable() local
636 spin_lock_irqsave(&ep->udc->lock, flags); in usba_ep_enable()
647 usba_int_enb_set(udc, USBA_BF(EPT_INT, 1 << ep->index) | in usba_ep_enable()
652 usba_int_enb_set(udc, USBA_BF(EPT_INT, 1 << ep->index)); in usba_ep_enable()
655 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_enable()
660 (unsigned long)usba_int_enb_get(udc)); in usba_ep_enable()
668 struct usba_udc *udc = ep->udc; in usba_ep_disable() local
674 spin_lock_irqsave(&udc->lock, flags); in usba_ep_disable()
677 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
690 usba_int_enb_clear(udc, USBA_BF(EPT_INT, 1 << ep->index)); in usba_ep_disable()
694 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
725 static int queue_dma(struct usba_udc *udc, struct usba_ep *ep, in queue_dma() argument
743 ret = usb_gadget_map_request(&udc->gadget, &req->req, ep->is_in); in queue_dma()
761 spin_lock_irqsave(&udc->lock, flags); in queue_dma()
769 spin_unlock_irqrestore(&udc->lock, flags); in queue_dma()
779 struct usba_udc *udc = ep->udc; in usba_ep_queue() local
786 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN || in usba_ep_queue()
798 return queue_dma(udc, ep, req, gfp_flags); in usba_ep_queue()
802 spin_lock_irqsave(&udc->lock, flags); in usba_ep_queue()
815 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_queue()
849 dev_err(&ep->udc->pdev->dev, in stop_dma()
861 struct usba_udc *udc = ep->udc; in usba_ep_dequeue() local
870 spin_lock_irqsave(&udc->lock, flags); in usba_ep_dequeue()
880 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
898 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_dequeue()
914 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
922 struct usba_udc *udc = ep->udc; in usba_ep_set_halt() local
940 spin_lock_irqsave(&udc->lock, flags); in usba_ep_set_halt()
959 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_set_halt()
974 struct usba_udc *udc = ep->udc; in usba_ep_fifo_flush() local
976 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_fifo_flush()
993 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_get_frame() local
995 return USBA_BFEXT(FRAME_NUMBER, usba_readl(udc, FNUM)); in usba_udc_get_frame()
1000 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_wakeup() local
1005 spin_lock_irqsave(&udc->lock, flags); in usba_udc_wakeup()
1006 if (udc->devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) { in usba_udc_wakeup()
1007 ctrl = usba_readl(udc, CTRL); in usba_udc_wakeup()
1008 usba_writel(udc, CTRL, ctrl | USBA_REMOTE_WAKE_UP); in usba_udc_wakeup()
1011 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_wakeup()
1019 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_set_selfpowered() local
1023 spin_lock_irqsave(&udc->lock, flags); in usba_udc_set_selfpowered()
1025 udc->devstatus |= 1 << USB_DEVICE_SELF_POWERED; in usba_udc_set_selfpowered()
1027 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in usba_udc_set_selfpowered()
1028 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_set_selfpowered()
1066 if (ep->udc->ep_prealloc) in atmel_usba_match_ep()
1072 if (ep->udc->ep_prealloc) in atmel_usba_match_ep()
1083 if (ep->udc->ep_prealloc) in atmel_usba_match_ep()
1132 * Called with interrupts disabled and udc->lock held.
1134 static void reset_all_endpoints(struct usba_udc *udc) in reset_all_endpoints() argument
1139 usba_writel(udc, EPT_RST, ~0UL); in reset_all_endpoints()
1141 ep = to_usba_ep(udc->gadget.ep0); in reset_all_endpoints()
1148 static struct usba_ep *get_ep_by_addr(struct usba_udc *udc, u16 wIndex) in get_ep_by_addr() argument
1153 return to_usba_ep(udc->gadget.ep0); in get_ep_by_addr()
1155 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in get_ep_by_addr()
1171 /* Called with interrupts disabled and udc->lock held */
1172 static inline void set_protocol_stall(struct usba_udc *udc, struct usba_ep *ep) in set_protocol_stall() argument
1178 static inline int is_stalled(struct usba_udc *udc, struct usba_ep *ep) in is_stalled() argument
1185 static inline void set_address(struct usba_udc *udc, unsigned int addr) in set_address() argument
1190 regval = usba_readl(udc, CTRL); in set_address()
1192 usba_writel(udc, CTRL, regval); in set_address()
1195 static int do_test_mode(struct usba_udc *udc) in do_test_mode() argument
1213 struct device *dev = &udc->pdev->dev; in do_test_mode()
1216 test_mode = udc->test_mode; in do_test_mode()
1219 reset_all_endpoints(udc); in do_test_mode()
1224 usba_writel(udc, TST, USBA_TST_J_MODE); in do_test_mode()
1229 usba_writel(udc, TST, USBA_TST_K_MODE); in do_test_mode()
1237 ep = &udc->usba_ep[0]; in do_test_mode()
1238 usba_writel(udc, TST, in do_test_mode()
1246 set_protocol_stall(udc, ep); in do_test_mode()
1255 ep = &udc->usba_ep[0]; in do_test_mode()
1262 set_protocol_stall(udc, ep); in do_test_mode()
1266 usba_writel(udc, TST, USBA_TST_PKT_MODE); in do_test_mode()
1303 static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep, in handle_ep0_setup() argument
1313 status = cpu_to_le16(udc->devstatus); in handle_ep0_setup()
1321 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1326 if (is_stalled(udc, target)) in handle_ep0_setup()
1343 udc->devstatus in handle_ep0_setup()
1354 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1366 send_status(udc, ep); in handle_ep0_setup()
1373 send_status(udc, ep); in handle_ep0_setup()
1375 udc->test_mode = le16_to_cpu(crq->wIndex); in handle_ep0_setup()
1378 udc->devstatus |= 1 << USB_DEVICE_REMOTE_WAKEUP; in handle_ep0_setup()
1389 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1397 send_status(udc, ep); in handle_ep0_setup()
1405 set_address(udc, le16_to_cpu(crq->wValue)); in handle_ep0_setup()
1406 send_status(udc, ep); in handle_ep0_setup()
1412 spin_unlock(&udc->lock); in handle_ep0_setup()
1413 retval = udc->driver->setup(&udc->gadget, crq); in handle_ep0_setup()
1414 spin_lock(&udc->lock); in handle_ep0_setup()
1420 pr_err("udc: %s: Invalid setup request: %02x.%02x v%04x i%04x l%d, " in handle_ep0_setup()
1425 set_protocol_stall(udc, ep); in handle_ep0_setup()
1429 static void usba_control_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_control_irq() argument
1470 usba_writel(udc, CTRL, (usba_readl(udc, CTRL) in usba_control_irq()
1487 if (do_test_mode(udc)) in usba_control_irq()
1488 set_protocol_stall(udc, ep); in usba_control_irq()
1491 pr_err("udc: %s: TXCOMP: Invalid endpoint state %d, " in usba_control_irq()
1494 set_protocol_stall(udc, ep); in usba_control_irq()
1520 pr_err("udc: %s: RXRDY: Invalid endpoint state %d, " in usba_control_irq()
1523 set_protocol_stall(udc, ep); in usba_control_irq()
1565 pr_warn("udc: Invalid packet length %u (expected %zu)\n", in usba_control_irq()
1567 set_protocol_stall(udc, ep); in usba_control_irq()
1599 ret = handle_ep0_setup(udc, ep, &crq.crq); in usba_control_irq()
1601 spin_unlock(&udc->lock); in usba_control_irq()
1602 ret = udc->driver->setup(&udc->gadget, &crq.crq); in usba_control_irq()
1603 spin_lock(&udc->lock); in usba_control_irq()
1612 set_protocol_stall(udc, ep); in usba_control_irq()
1617 static void usba_ep_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_ep_irq() argument
1632 dev_warn(&udc->pdev->dev, "ep_irq: queue empty\n"); in usba_ep_irq()
1670 static void usba_dma_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_dma_irq() argument
1684 dev_err(&udc->pdev->dev, in usba_dma_irq()
1686 dev_err(&udc->pdev->dev, in usba_dma_irq()
1710 static int start_clock(struct usba_udc *udc);
1711 static void stop_clock(struct usba_udc *udc);
1715 struct usba_udc *udc = devid; in usba_udc_irq() local
1720 spin_lock(&udc->lock); in usba_udc_irq()
1722 int_enb = usba_int_enb_get(udc); in usba_udc_irq()
1723 status = usba_readl(udc, INT_STA) & (int_enb | USBA_HIGH_SPEED); in usba_udc_irq()
1727 usba_writel(udc, INT_CLR, USBA_DET_SUSPEND|USBA_WAKE_UP); in usba_udc_irq()
1728 usba_int_enb_set(udc, USBA_WAKE_UP); in usba_udc_irq()
1729 usba_int_enb_clear(udc, USBA_DET_SUSPEND); in usba_udc_irq()
1730 udc->suspended = true; in usba_udc_irq()
1731 toggle_bias(udc, 0); in usba_udc_irq()
1732 udc->bias_pulse_needed = true; in usba_udc_irq()
1733 stop_clock(udc); in usba_udc_irq()
1735 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1736 && udc->driver && udc->driver->suspend) { in usba_udc_irq()
1737 spin_unlock(&udc->lock); in usba_udc_irq()
1738 udc->driver->suspend(&udc->gadget); in usba_udc_irq()
1739 spin_lock(&udc->lock); in usba_udc_irq()
1744 start_clock(udc); in usba_udc_irq()
1745 toggle_bias(udc, 1); in usba_udc_irq()
1746 usba_writel(udc, INT_CLR, USBA_WAKE_UP); in usba_udc_irq()
1751 udc->suspended = false; in usba_udc_irq()
1752 usba_writel(udc, INT_CLR, USBA_END_OF_RESUME); in usba_udc_irq()
1753 usba_int_enb_clear(udc, USBA_WAKE_UP); in usba_udc_irq()
1754 usba_int_enb_set(udc, USBA_DET_SUSPEND); in usba_udc_irq()
1755 generate_bias_pulse(udc); in usba_udc_irq()
1757 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1758 && udc->driver && udc->driver->resume) { in usba_udc_irq()
1759 spin_unlock(&udc->lock); in usba_udc_irq()
1760 udc->driver->resume(&udc->gadget); in usba_udc_irq()
1761 spin_lock(&udc->lock); in usba_udc_irq()
1769 usba_int_enb_set(udc, USBA_DET_SUSPEND); in usba_udc_irq()
1773 usba_dma_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1780 usba_int_enb_set(udc, USBA_DET_SUSPEND); in usba_udc_irq()
1782 for (i = 0; i < udc->num_ep; i++) in usba_udc_irq()
1784 if (ep_is_control(&udc->usba_ep[i])) in usba_udc_irq()
1785 usba_control_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1787 usba_ep_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1795 usba_writel(udc, INT_CLR, in usba_udc_irq()
1798 generate_bias_pulse(udc); in usba_udc_irq()
1799 reset_all_endpoints(udc); in usba_udc_irq()
1801 if (udc->gadget.speed != USB_SPEED_UNKNOWN && udc->driver) { in usba_udc_irq()
1802 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_udc_irq()
1803 spin_unlock(&udc->lock); in usba_udc_irq()
1804 usb_gadget_udc_reset(&udc->gadget, udc->driver); in usba_udc_irq()
1805 spin_lock(&udc->lock); in usba_udc_irq()
1809 udc->gadget.speed = USB_SPEED_HIGH; in usba_udc_irq()
1811 udc->gadget.speed = USB_SPEED_FULL; in usba_udc_irq()
1813 usb_speed_string(udc->gadget.speed)); in usba_udc_irq()
1815 ep0 = &udc->usba_ep[0]; in usba_udc_irq()
1826 udc->suspended = false; in usba_udc_irq()
1827 usba_int_enb_clear(udc, USBA_WAKE_UP); in usba_udc_irq()
1829 usba_int_enb_set(udc, USBA_BF(EPT_INT, 1) | in usba_udc_irq()
1837 dev_err(&udc->pdev->dev, in usba_udc_irq()
1841 for (i = 1; i < udc->num_ep; i++) { in usba_udc_irq()
1842 ep = &udc->usba_ep[i]; in usba_udc_irq()
1846 dev_err(&udc->pdev->dev, in usba_udc_irq()
1852 spin_unlock(&udc->lock); in usba_udc_irq()
1857 static int start_clock(struct usba_udc *udc) in start_clock() argument
1861 if (udc->clocked) in start_clock()
1864 pm_stay_awake(&udc->pdev->dev); in start_clock()
1866 ret = clk_prepare_enable(udc->pclk); in start_clock()
1869 ret = clk_prepare_enable(udc->hclk); in start_clock()
1871 clk_disable_unprepare(udc->pclk); in start_clock()
1875 udc->clocked = true; in start_clock()
1879 static void stop_clock(struct usba_udc *udc) in stop_clock() argument
1881 if (!udc->clocked) in stop_clock()
1884 clk_disable_unprepare(udc->hclk); in stop_clock()
1885 clk_disable_unprepare(udc->pclk); in stop_clock()
1887 udc->clocked = false; in stop_clock()
1889 pm_relax(&udc->pdev->dev); in stop_clock()
1892 static int usba_start(struct usba_udc *udc) in usba_start() argument
1897 ret = start_clock(udc); in usba_start()
1901 if (udc->suspended) in usba_start()
1904 spin_lock_irqsave(&udc->lock, flags); in usba_start()
1905 toggle_bias(udc, 1); in usba_start()
1906 usba_writel(udc, CTRL, USBA_ENABLE_MASK); in usba_start()
1908 usba_writel(udc, INT_ENB, 0); in usba_start()
1909 udc->int_enb_cache = 0; in usba_start()
1910 usba_writel(udc, INT_CLR, in usba_start()
1914 usba_int_enb_set(udc, USBA_END_OF_RESET); in usba_start()
1915 spin_unlock_irqrestore(&udc->lock, flags); in usba_start()
1920 static void usba_stop(struct usba_udc *udc) in usba_stop() argument
1924 if (udc->suspended) in usba_stop()
1927 spin_lock_irqsave(&udc->lock, flags); in usba_stop()
1928 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_stop()
1929 reset_all_endpoints(udc); in usba_stop()
1932 toggle_bias(udc, 0); in usba_stop()
1933 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_stop()
1934 spin_unlock_irqrestore(&udc->lock, flags); in usba_stop()
1936 stop_clock(udc); in usba_stop()
1941 struct usba_udc *udc = devid; in usba_vbus_irq_thread() local
1947 mutex_lock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1949 vbus = vbus_is_present(udc); in usba_vbus_irq_thread()
1950 if (vbus != udc->vbus_prev) { in usba_vbus_irq_thread()
1952 usba_start(udc); in usba_vbus_irq_thread()
1954 udc->suspended = false; in usba_vbus_irq_thread()
1955 if (udc->driver->disconnect) in usba_vbus_irq_thread()
1956 udc->driver->disconnect(&udc->gadget); in usba_vbus_irq_thread()
1958 usba_stop(udc); in usba_vbus_irq_thread()
1960 udc->vbus_prev = vbus; in usba_vbus_irq_thread()
1963 mutex_unlock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1969 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_pullup() local
1973 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_pullup()
1974 ctrl = usba_readl(udc, CTRL); in atmel_usba_pullup()
1979 usba_writel(udc, CTRL, ctrl); in atmel_usba_pullup()
1980 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_pullup()
1989 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_start() local
1992 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
1993 udc->devstatus = 1 << USB_DEVICE_SELF_POWERED; in atmel_usba_start()
1994 udc->driver = driver; in atmel_usba_start()
1995 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
1997 mutex_lock(&udc->vbus_mutex); in atmel_usba_start()
1999 if (udc->vbus_pin) in atmel_usba_start()
2000 enable_irq(gpiod_to_irq(udc->vbus_pin)); in atmel_usba_start()
2003 udc->vbus_prev = vbus_is_present(udc); in atmel_usba_start()
2004 if (udc->vbus_prev) { in atmel_usba_start()
2005 ret = usba_start(udc); in atmel_usba_start()
2010 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
2014 if (udc->vbus_pin) in atmel_usba_start()
2015 disable_irq(gpiod_to_irq(udc->vbus_pin)); in atmel_usba_start()
2017 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
2019 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
2020 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in atmel_usba_start()
2021 udc->driver = NULL; in atmel_usba_start()
2022 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
2028 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_stop() local
2030 if (udc->vbus_pin) in atmel_usba_stop()
2031 disable_irq(gpiod_to_irq(udc->vbus_pin)); in atmel_usba_stop()
2033 udc->suspended = false; in atmel_usba_stop()
2034 usba_stop(udc); in atmel_usba_stop()
2036 udc->driver = NULL; in atmel_usba_stop()
2041 static void at91sam9rl_toggle_bias(struct usba_udc *udc, int is_on) in at91sam9rl_toggle_bias() argument
2043 regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, in at91sam9rl_toggle_bias()
2047 static void at91sam9g45_pulse_bias(struct usba_udc *udc) in at91sam9g45_pulse_bias() argument
2049 regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, 0); in at91sam9g45_pulse_bias()
2050 regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, in at91sam9g45_pulse_bias()
2118 { .compatible = "atmel,at91sam9rl-udc", .data = &udc_at91sam9rl_cfg },
2119 { .compatible = "atmel,at91sam9g45-udc", .data = &udc_at91sam9g45_cfg },
2120 { .compatible = "atmel,sama5d3-udc", .data = &udc_sama5d3_cfg },
2121 { .compatible = "microchip,sam9x60-udc", .data = &udc_sam9x60_cfg },
2135 struct usba_udc *udc) in atmel_udc_of_init() argument
2149 udc->ep_prealloc = udc_config->ep_prealloc; in atmel_udc_of_init()
2150 udc->errata = udc_config->errata; in atmel_udc_of_init()
2151 if (udc->errata) { in atmel_udc_of_init()
2157 udc->pmc = syscon_node_to_regmap(pp); in atmel_udc_of_init()
2159 if (IS_ERR(udc->pmc)) in atmel_udc_of_init()
2160 return ERR_CAST(udc->pmc); in atmel_udc_of_init()
2163 udc->num_ep = 0; in atmel_udc_of_init()
2165 udc->vbus_pin = devm_gpiod_get_optional(&pdev->dev, "atmel,vbus", in atmel_udc_of_init()
2167 if (IS_ERR(udc->vbus_pin)) in atmel_udc_of_init()
2168 return ERR_CAST(udc->vbus_pin); in atmel_udc_of_init()
2171 udc->num_ep = udc_config->num_ep; in atmel_udc_of_init()
2173 udc->num_ep = usba_config_fifo_table(udc); in atmel_udc_of_init()
2176 eps = devm_kcalloc(&pdev->dev, udc->num_ep, sizeof(struct usba_ep), in atmel_udc_of_init()
2181 udc->gadget.ep0 = &eps[0].ep; in atmel_udc_of_init()
2186 while (i < udc->num_ep) { in atmel_udc_of_init()
2191 ep->index = fifo_mode ? udc->fifo_cfg[i].hw_ep_num : i; in atmel_udc_of_init()
2200 if (ep->fifo_size < udc->fifo_cfg[i].fifo_size) in atmel_udc_of_init()
2204 ep->fifo_size = udc->fifo_cfg[i].fifo_size; in atmel_udc_of_init()
2209 if (ep->nr_banks < udc->fifo_cfg[i].nr_banks) in atmel_udc_of_init()
2213 ep->nr_banks = udc->fifo_cfg[i].nr_banks; in atmel_udc_of_init()
2222 ep->ep_regs = udc->regs + USBA_EPT_BASE(i); in atmel_udc_of_init()
2223 ep->dma_regs = udc->regs + USBA_DMA_BASE(i); in atmel_udc_of_init()
2224 ep->fifo = udc->fifo + USBA_FIFO_BASE(i); in atmel_udc_of_init()
2227 ep->udc = udc; in atmel_udc_of_init()
2257 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in atmel_udc_of_init()
2277 struct usba_udc *udc; in usba_udc_probe() local
2280 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL); in usba_udc_probe()
2281 if (!udc) in usba_udc_probe()
2284 udc->gadget = usba_gadget_template; in usba_udc_probe()
2285 INIT_LIST_HEAD(&udc->gadget.ep_list); in usba_udc_probe()
2287 udc->regs = devm_platform_get_and_ioremap_resource(pdev, CTRL_IOMEM_ID, &res); in usba_udc_probe()
2288 if (IS_ERR(udc->regs)) in usba_udc_probe()
2289 return PTR_ERR(udc->regs); in usba_udc_probe()
2291 res, udc->regs); in usba_udc_probe()
2293 udc->fifo = devm_platform_get_and_ioremap_resource(pdev, FIFO_IOMEM_ID, &res); in usba_udc_probe()
2294 if (IS_ERR(udc->fifo)) in usba_udc_probe()
2295 return PTR_ERR(udc->fifo); in usba_udc_probe()
2296 dev_info(&pdev->dev, "FIFO at %pR mapped at %p\n", res, udc->fifo); in usba_udc_probe()
2309 spin_lock_init(&udc->lock); in usba_udc_probe()
2310 mutex_init(&udc->vbus_mutex); in usba_udc_probe()
2311 udc->pdev = pdev; in usba_udc_probe()
2312 udc->pclk = pclk; in usba_udc_probe()
2313 udc->hclk = hclk; in usba_udc_probe()
2315 platform_set_drvdata(pdev, udc); in usba_udc_probe()
2324 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_udc_probe()
2327 udc->usba_ep = atmel_udc_of_init(pdev, udc); in usba_udc_probe()
2329 toggle_bias(udc, 0); in usba_udc_probe()
2331 if (IS_ERR(udc->usba_ep)) in usba_udc_probe()
2332 return PTR_ERR(udc->usba_ep); in usba_udc_probe()
2335 "atmel_usba_udc", udc); in usba_udc_probe()
2341 udc->irq = irq; in usba_udc_probe()
2343 if (udc->vbus_pin) { in usba_udc_probe()
2344 irq_set_status_flags(gpiod_to_irq(udc->vbus_pin), IRQ_NOAUTOEN); in usba_udc_probe()
2346 gpiod_to_irq(udc->vbus_pin), NULL, in usba_udc_probe()
2348 "atmel_usba_udc", udc); in usba_udc_probe()
2350 udc->vbus_pin = NULL; in usba_udc_probe()
2351 dev_warn(&udc->pdev->dev, in usba_udc_probe()
2357 ret = usb_add_gadget_udc(&pdev->dev, &udc->gadget); in usba_udc_probe()
2362 usba_init_debugfs(udc); in usba_udc_probe()
2363 for (i = 1; i < udc->num_ep; i++) in usba_udc_probe()
2364 usba_ep_init_debugfs(udc, &udc->usba_ep[i]); in usba_udc_probe()
2371 struct usba_udc *udc; in usba_udc_remove() local
2374 udc = platform_get_drvdata(pdev); in usba_udc_remove()
2377 usb_del_gadget_udc(&udc->gadget); in usba_udc_remove()
2379 for (i = 1; i < udc->num_ep; i++) in usba_udc_remove()
2380 usba_ep_cleanup_debugfs(&udc->usba_ep[i]); in usba_udc_remove()
2381 usba_cleanup_debugfs(udc); in usba_udc_remove()
2387 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_suspend() local
2390 if (!udc->driver) in usba_udc_suspend()
2393 mutex_lock(&udc->vbus_mutex); in usba_udc_suspend()
2396 udc->suspended = false; in usba_udc_suspend()
2397 usba_stop(udc); in usba_udc_suspend()
2405 if (udc->vbus_pin) { in usba_udc_suspend()
2407 usba_stop(udc); in usba_udc_suspend()
2408 enable_irq_wake(gpiod_to_irq(udc->vbus_pin)); in usba_udc_suspend()
2411 enable_irq_wake(udc->irq); in usba_udc_suspend()
2414 mutex_unlock(&udc->vbus_mutex); in usba_udc_suspend()
2420 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_resume() local
2423 if (!udc->driver) in usba_udc_resume()
2427 if (udc->vbus_pin) in usba_udc_resume()
2428 disable_irq_wake(gpiod_to_irq(udc->vbus_pin)); in usba_udc_resume()
2430 disable_irq_wake(udc->irq); in usba_udc_resume()
2434 mutex_lock(&udc->vbus_mutex); in usba_udc_resume()
2435 udc->vbus_prev = vbus_is_present(udc); in usba_udc_resume()
2436 if (udc->vbus_prev) in usba_udc_resume()
2437 usba_start(udc); in usba_udc_resume()
2438 mutex_unlock(&udc->vbus_mutex); in usba_udc_resume()
2457 MODULE_DESCRIPTION("Atmel USBA UDC driver");