Lines Matching refs: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()
142 struct usba_udc *udc; in regs_dbg_open() local
148 udc = inode->i_private; in regs_dbg_open()
153 spin_lock_irq(&udc->lock); in regs_dbg_open()
155 data[i] = usba_io_readl(udc->regs + i * 4); in regs_dbg_open()
156 spin_unlock_irq(&udc->lock); in regs_dbg_open()
204 static void usba_ep_init_debugfs(struct usba_udc *udc, in usba_ep_init_debugfs() argument
209 ep_root = debugfs_create_dir(ep->ep.name, udc->debugfs_root); in usba_ep_init_debugfs()
244 dev_err(&ep->udc->pdev->dev, in usba_ep_init_debugfs()
258 static void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
263 root = debugfs_create_dir(udc->gadget.name, NULL); in usba_init_debugfs()
266 udc->debugfs_root = root; in usba_init_debugfs()
268 regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, in usba_init_debugfs()
272 regs = debugfs_create_file_size("regs", 0400, root, udc, in usba_init_debugfs()
277 udc->debugfs_regs = regs; in usba_init_debugfs()
280 usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0)); in usba_init_debugfs()
287 udc->debugfs_root = NULL; in usba_init_debugfs()
288 dev_err(&udc->pdev->dev, "debugfs is not available\n"); in usba_init_debugfs()
291 static void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
293 usba_ep_cleanup_debugfs(to_usba_ep(udc->gadget.ep0)); in usba_cleanup_debugfs()
294 debugfs_remove(udc->debugfs_regs); in usba_cleanup_debugfs()
295 debugfs_remove(udc->debugfs_root); in usba_cleanup_debugfs()
296 udc->debugfs_regs = NULL; in usba_cleanup_debugfs()
297 udc->debugfs_root = NULL; in usba_cleanup_debugfs()
300 static inline void usba_ep_init_debugfs(struct usba_udc *udc, in usba_ep_init_debugfs() argument
311 static inline void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
316 static inline void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
322 static inline u32 usba_int_enb_get(struct usba_udc *udc) in usba_int_enb_get() argument
324 return udc->int_enb_cache; in usba_int_enb_get()
327 static inline void usba_int_enb_set(struct usba_udc *udc, u32 val) in usba_int_enb_set() argument
329 usba_writel(udc, INT_ENB, val); in usba_int_enb_set()
330 udc->int_enb_cache = val; in usba_int_enb_set()
333 static int vbus_is_present(struct usba_udc *udc) in vbus_is_present() argument
335 if (gpio_is_valid(udc->vbus_pin)) in vbus_is_present()
336 return gpio_get_value(udc->vbus_pin) ^ udc->vbus_pin_inverted; in vbus_is_present()
342 static void toggle_bias(struct usba_udc *udc, int is_on) in toggle_bias() argument
344 if (udc->errata && udc->errata->toggle_bias) in toggle_bias()
345 udc->errata->toggle_bias(udc, is_on); in toggle_bias()
348 static void generate_bias_pulse(struct usba_udc *udc) in generate_bias_pulse() argument
350 if (!udc->bias_pulse_needed) in generate_bias_pulse()
353 if (udc->errata && udc->errata->pulse_bias) in generate_bias_pulse()
354 udc->errata->pulse_bias(udc); in generate_bias_pulse()
356 udc->bias_pulse_needed = false; in generate_bias_pulse()
427 static void send_status(struct usba_udc *udc, struct usba_ep *ep) in send_status() argument
436 struct usba_udc *udc = ep->udc; in receive_data() local
475 spin_unlock(&udc->lock); in receive_data()
477 spin_lock(&udc->lock); in receive_data()
484 send_status(udc, ep); in receive_data()
493 struct usba_udc *udc = ep->udc; in request_complete() local
501 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in); in request_complete()
507 spin_unlock(&udc->lock); in request_complete()
509 spin_lock(&udc->lock); in request_complete()
527 struct usba_udc *udc = ep->udc; in usba_ep_enable() local
603 spin_lock_irqsave(&ep->udc->lock, flags); in usba_ep_enable()
614 usba_int_enb_set(udc, usba_int_enb_get(udc) | in usba_ep_enable()
620 usba_int_enb_set(udc, usba_int_enb_get(udc) | in usba_ep_enable()
624 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_enable()
629 (unsigned long)usba_int_enb_get(udc)); in usba_ep_enable()
637 struct usba_udc *udc = ep->udc; in usba_ep_disable() local
643 spin_lock_irqsave(&udc->lock, flags); in usba_ep_disable()
646 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
651 if (udc->gadget.speed != USB_SPEED_UNKNOWN) in usba_ep_disable()
665 usba_int_enb_set(udc, usba_int_enb_get(udc) & in usba_ep_disable()
670 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
701 static int queue_dma(struct usba_udc *udc, struct usba_ep *ep, in queue_dma() argument
719 ret = usb_gadget_map_request(&udc->gadget, &req->req, ep->is_in); in queue_dma()
737 spin_lock_irqsave(&udc->lock, flags); in queue_dma()
745 spin_unlock_irqrestore(&udc->lock, flags); in queue_dma()
755 struct usba_udc *udc = ep->udc; in usba_ep_queue() local
762 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN || in usba_ep_queue()
774 return queue_dma(udc, ep, req, gfp_flags); in usba_ep_queue()
778 spin_lock_irqsave(&udc->lock, flags); in usba_ep_queue()
791 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_queue()
825 dev_err(&ep->udc->pdev->dev, in stop_dma()
837 struct usba_udc *udc = ep->udc; in usba_ep_dequeue() local
845 spin_lock_irqsave(&udc->lock, flags); in usba_ep_dequeue()
853 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
871 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_dequeue()
887 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
895 struct usba_udc *udc = ep->udc; in usba_ep_set_halt() local
913 spin_lock_irqsave(&udc->lock, flags); in usba_ep_set_halt()
932 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_set_halt()
947 struct usba_udc *udc = ep->udc; in usba_ep_fifo_flush() local
949 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_fifo_flush()
966 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_get_frame() local
968 return USBA_BFEXT(FRAME_NUMBER, usba_readl(udc, FNUM)); in usba_udc_get_frame()
973 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_wakeup() local
978 spin_lock_irqsave(&udc->lock, flags); in usba_udc_wakeup()
979 if (udc->devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) { in usba_udc_wakeup()
980 ctrl = usba_readl(udc, CTRL); in usba_udc_wakeup()
981 usba_writel(udc, CTRL, ctrl | USBA_REMOTE_WAKE_UP); in usba_udc_wakeup()
984 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_wakeup()
992 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_set_selfpowered() local
996 spin_lock_irqsave(&udc->lock, flags); in usba_udc_set_selfpowered()
998 udc->devstatus |= 1 << USB_DEVICE_SELF_POWERED; in usba_udc_set_selfpowered()
1000 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in usba_udc_set_selfpowered()
1001 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_set_selfpowered()
1037 static void reset_all_endpoints(struct usba_udc *udc) in reset_all_endpoints() argument
1042 usba_writel(udc, EPT_RST, ~0UL); in reset_all_endpoints()
1044 ep = to_usba_ep(udc->gadget.ep0); in reset_all_endpoints()
1056 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { in reset_all_endpoints()
1058 spin_unlock(&udc->lock); in reset_all_endpoints()
1060 spin_lock(&udc->lock); in reset_all_endpoints()
1065 static struct usba_ep *get_ep_by_addr(struct usba_udc *udc, u16 wIndex) in get_ep_by_addr() argument
1070 return to_usba_ep(udc->gadget.ep0); in get_ep_by_addr()
1072 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in get_ep_by_addr()
1089 static inline void set_protocol_stall(struct usba_udc *udc, struct usba_ep *ep) in set_protocol_stall() argument
1095 static inline int is_stalled(struct usba_udc *udc, struct usba_ep *ep) in is_stalled() argument
1102 static inline void set_address(struct usba_udc *udc, unsigned int addr) in set_address() argument
1107 regval = usba_readl(udc, CTRL); in set_address()
1109 usba_writel(udc, CTRL, regval); in set_address()
1112 static int do_test_mode(struct usba_udc *udc) in do_test_mode() argument
1130 struct device *dev = &udc->pdev->dev; in do_test_mode()
1133 test_mode = udc->test_mode; in do_test_mode()
1136 reset_all_endpoints(udc); in do_test_mode()
1141 usba_writel(udc, TST, USBA_TST_J_MODE); in do_test_mode()
1146 usba_writel(udc, TST, USBA_TST_K_MODE); in do_test_mode()
1154 ep = &udc->usba_ep[0]; in do_test_mode()
1155 usba_writel(udc, TST, in do_test_mode()
1163 set_protocol_stall(udc, ep); in do_test_mode()
1172 ep = &udc->usba_ep[0]; in do_test_mode()
1179 set_protocol_stall(udc, ep); in do_test_mode()
1183 usba_writel(udc, TST, USBA_TST_PKT_MODE); in do_test_mode()
1220 static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep, in handle_ep0_setup() argument
1230 status = cpu_to_le16(udc->devstatus); in handle_ep0_setup()
1238 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1243 if (is_stalled(udc, target)) in handle_ep0_setup()
1260 udc->devstatus in handle_ep0_setup()
1271 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1283 send_status(udc, ep); in handle_ep0_setup()
1290 send_status(udc, ep); in handle_ep0_setup()
1292 udc->test_mode = le16_to_cpu(crq->wIndex); in handle_ep0_setup()
1295 udc->devstatus |= 1 << USB_DEVICE_REMOTE_WAKEUP; in handle_ep0_setup()
1306 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1314 send_status(udc, ep); in handle_ep0_setup()
1322 set_address(udc, le16_to_cpu(crq->wValue)); in handle_ep0_setup()
1323 send_status(udc, ep); in handle_ep0_setup()
1329 spin_unlock(&udc->lock); in handle_ep0_setup()
1330 retval = udc->driver->setup(&udc->gadget, crq); in handle_ep0_setup()
1331 spin_lock(&udc->lock); in handle_ep0_setup()
1342 set_protocol_stall(udc, ep); in handle_ep0_setup()
1346 static void usba_control_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_control_irq() argument
1387 usba_writel(udc, CTRL, (usba_readl(udc, CTRL) in usba_control_irq()
1404 if (do_test_mode(udc)) in usba_control_irq()
1405 set_protocol_stall(udc, ep); in usba_control_irq()
1411 set_protocol_stall(udc, ep); in usba_control_irq()
1440 set_protocol_stall(udc, ep); in usba_control_irq()
1484 set_protocol_stall(udc, ep); in usba_control_irq()
1516 ret = handle_ep0_setup(udc, ep, &crq.crq); in usba_control_irq()
1518 spin_unlock(&udc->lock); in usba_control_irq()
1519 ret = udc->driver->setup(&udc->gadget, &crq.crq); in usba_control_irq()
1520 spin_lock(&udc->lock); in usba_control_irq()
1529 set_protocol_stall(udc, ep); in usba_control_irq()
1534 static void usba_ep_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_ep_irq() argument
1549 dev_warn(&udc->pdev->dev, "ep_irq: queue empty\n"); in usba_ep_irq()
1587 static void usba_dma_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_dma_irq() argument
1601 dev_err(&udc->pdev->dev, in usba_dma_irq()
1603 dev_err(&udc->pdev->dev, in usba_dma_irq()
1629 struct usba_udc *udc = devid; in usba_udc_irq() local
1634 spin_lock(&udc->lock); in usba_udc_irq()
1636 int_enb = usba_int_enb_get(udc); in usba_udc_irq()
1637 status = usba_readl(udc, INT_STA) & (int_enb | USBA_HIGH_SPEED); in usba_udc_irq()
1641 toggle_bias(udc, 0); in usba_udc_irq()
1642 usba_writel(udc, INT_CLR, USBA_DET_SUSPEND); in usba_udc_irq()
1643 usba_int_enb_set(udc, int_enb | USBA_WAKE_UP); in usba_udc_irq()
1644 udc->bias_pulse_needed = true; in usba_udc_irq()
1646 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1647 && udc->driver && udc->driver->suspend) { in usba_udc_irq()
1648 spin_unlock(&udc->lock); in usba_udc_irq()
1649 udc->driver->suspend(&udc->gadget); in usba_udc_irq()
1650 spin_lock(&udc->lock); in usba_udc_irq()
1655 toggle_bias(udc, 1); in usba_udc_irq()
1656 usba_writel(udc, INT_CLR, USBA_WAKE_UP); in usba_udc_irq()
1657 usba_int_enb_set(udc, int_enb & ~USBA_WAKE_UP); in usba_udc_irq()
1662 usba_writel(udc, INT_CLR, USBA_END_OF_RESUME); in usba_udc_irq()
1663 generate_bias_pulse(udc); in usba_udc_irq()
1665 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1666 && udc->driver && udc->driver->resume) { in usba_udc_irq()
1667 spin_unlock(&udc->lock); in usba_udc_irq()
1668 udc->driver->resume(&udc->gadget); in usba_udc_irq()
1669 spin_lock(&udc->lock); in usba_udc_irq()
1679 usba_dma_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1686 for (i = 0; i < udc->num_ep; i++) in usba_udc_irq()
1688 if (ep_is_control(&udc->usba_ep[i])) in usba_udc_irq()
1689 usba_control_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1691 usba_ep_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1698 usba_writel(udc, INT_CLR, USBA_END_OF_RESET); in usba_udc_irq()
1699 generate_bias_pulse(udc); in usba_udc_irq()
1700 reset_all_endpoints(udc); in usba_udc_irq()
1702 if (udc->gadget.speed != USB_SPEED_UNKNOWN && udc->driver) { in usba_udc_irq()
1703 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_udc_irq()
1704 spin_unlock(&udc->lock); in usba_udc_irq()
1705 usb_gadget_udc_reset(&udc->gadget, udc->driver); in usba_udc_irq()
1706 spin_lock(&udc->lock); in usba_udc_irq()
1710 udc->gadget.speed = USB_SPEED_HIGH; in usba_udc_irq()
1712 udc->gadget.speed = USB_SPEED_FULL; in usba_udc_irq()
1714 usb_speed_string(udc->gadget.speed)); in usba_udc_irq()
1716 ep0 = &udc->usba_ep[0]; in usba_udc_irq()
1725 usba_int_enb_set(udc, int_enb | USBA_BF(EPT_INT, 1) | in usba_udc_irq()
1733 dev_dbg(&udc->pdev->dev, in usba_udc_irq()
1737 spin_unlock(&udc->lock); in usba_udc_irq()
1742 static int start_clock(struct usba_udc *udc) in start_clock() argument
1746 if (udc->clocked) in start_clock()
1749 ret = clk_prepare_enable(udc->pclk); in start_clock()
1752 ret = clk_prepare_enable(udc->hclk); in start_clock()
1754 clk_disable_unprepare(udc->pclk); in start_clock()
1758 udc->clocked = true; in start_clock()
1762 static void stop_clock(struct usba_udc *udc) in stop_clock() argument
1764 if (!udc->clocked) in stop_clock()
1767 clk_disable_unprepare(udc->hclk); in stop_clock()
1768 clk_disable_unprepare(udc->pclk); in stop_clock()
1770 udc->clocked = false; in stop_clock()
1773 static int usba_start(struct usba_udc *udc) in usba_start() argument
1778 ret = start_clock(udc); in usba_start()
1782 spin_lock_irqsave(&udc->lock, flags); in usba_start()
1783 toggle_bias(udc, 1); in usba_start()
1784 usba_writel(udc, CTRL, USBA_ENABLE_MASK); in usba_start()
1785 usba_int_enb_set(udc, USBA_END_OF_RESET); in usba_start()
1786 spin_unlock_irqrestore(&udc->lock, flags); in usba_start()
1791 static void usba_stop(struct usba_udc *udc) in usba_stop() argument
1795 spin_lock_irqsave(&udc->lock, flags); in usba_stop()
1796 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_stop()
1797 reset_all_endpoints(udc); in usba_stop()
1800 toggle_bias(udc, 0); in usba_stop()
1801 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_stop()
1802 spin_unlock_irqrestore(&udc->lock, flags); in usba_stop()
1804 stop_clock(udc); in usba_stop()
1809 struct usba_udc *udc = devid; in usba_vbus_irq_thread() local
1815 mutex_lock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1817 vbus = vbus_is_present(udc); in usba_vbus_irq_thread()
1818 if (vbus != udc->vbus_prev) { in usba_vbus_irq_thread()
1820 usba_start(udc); in usba_vbus_irq_thread()
1822 usba_stop(udc); in usba_vbus_irq_thread()
1824 if (udc->driver->disconnect) in usba_vbus_irq_thread()
1825 udc->driver->disconnect(&udc->gadget); in usba_vbus_irq_thread()
1827 udc->vbus_prev = vbus; in usba_vbus_irq_thread()
1830 mutex_unlock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1838 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_start() local
1841 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
1842 udc->devstatus = 1 << USB_DEVICE_SELF_POWERED; in atmel_usba_start()
1843 udc->driver = driver; in atmel_usba_start()
1844 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
1846 mutex_lock(&udc->vbus_mutex); in atmel_usba_start()
1848 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_start()
1849 enable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_start()
1852 udc->vbus_prev = vbus_is_present(udc); in atmel_usba_start()
1853 if (udc->vbus_prev) { in atmel_usba_start()
1854 ret = usba_start(udc); in atmel_usba_start()
1859 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
1863 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_start()
1864 disable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_start()
1866 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
1868 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
1869 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in atmel_usba_start()
1870 udc->driver = NULL; in atmel_usba_start()
1871 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
1877 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_stop() local
1879 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_stop()
1880 disable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_stop()
1882 usba_stop(udc); in atmel_usba_stop()
1884 udc->driver = NULL; in atmel_usba_stop()
1890 static void at91sam9rl_toggle_bias(struct usba_udc *udc, int is_on) in at91sam9rl_toggle_bias() argument
1900 static void at91sam9g45_pulse_bias(struct usba_udc *udc) in at91sam9g45_pulse_bias() argument
1926 struct usba_udc *udc) in atmel_udc_of_init() argument
1941 udc->errata = match->data; in atmel_udc_of_init()
1943 udc->num_ep = 0; in atmel_udc_of_init()
1945 udc->vbus_pin = of_get_named_gpio_flags(np, "atmel,vbus-gpio", 0, in atmel_udc_of_init()
1947 udc->vbus_pin_inverted = (flags & OF_GPIO_ACTIVE_LOW) ? 1 : 0; in atmel_udc_of_init()
1951 udc->num_ep++; in atmel_udc_of_init()
1953 eps = devm_kzalloc(&pdev->dev, sizeof(struct usba_ep) * udc->num_ep, in atmel_udc_of_init()
1958 udc->gadget.ep0 = &eps[0].ep; in atmel_udc_of_init()
1994 ep->ep_regs = udc->regs + USBA_EPT_BASE(i); in atmel_udc_of_init()
1995 ep->dma_regs = udc->regs + USBA_DMA_BASE(i); in atmel_udc_of_init()
1996 ep->fifo = udc->fifo + USBA_FIFO_BASE(i); in atmel_udc_of_init()
1999 ep->udc = udc; in atmel_udc_of_init()
2003 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in atmel_udc_of_init()
2020 struct usba_udc *udc) in atmel_udc_of_init() argument
2027 struct usba_udc *udc) in usba_udc_pdata() argument
2041 udc->gadget.ep0 = &eps[0].ep; in usba_udc_pdata()
2043 udc->vbus_pin = pdata->vbus_pin; in usba_udc_pdata()
2044 udc->vbus_pin_inverted = pdata->vbus_pin_inverted; in usba_udc_pdata()
2045 udc->num_ep = pdata->num_ep; in usba_udc_pdata()
2052 ep->ep_regs = udc->regs + USBA_EPT_BASE(i); in usba_udc_pdata()
2053 ep->dma_regs = udc->regs + USBA_DMA_BASE(i); in usba_udc_pdata()
2054 ep->fifo = udc->fifo + USBA_FIFO_BASE(i); in usba_udc_pdata()
2059 ep->udc = udc; in usba_udc_pdata()
2067 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in usba_udc_pdata()
2077 struct usba_udc *udc; in usba_udc_probe() local
2080 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL); in usba_udc_probe()
2081 if (!udc) in usba_udc_probe()
2084 udc->gadget = usba_gadget_template; in usba_udc_probe()
2085 INIT_LIST_HEAD(&udc->gadget.ep_list); in usba_udc_probe()
2103 spin_lock_init(&udc->lock); in usba_udc_probe()
2104 mutex_init(&udc->vbus_mutex); in usba_udc_probe()
2105 udc->pdev = pdev; in usba_udc_probe()
2106 udc->pclk = pclk; in usba_udc_probe()
2107 udc->hclk = hclk; in usba_udc_probe()
2108 udc->vbus_pin = -ENODEV; in usba_udc_probe()
2111 udc->regs = devm_ioremap(&pdev->dev, regs->start, resource_size(regs)); in usba_udc_probe()
2112 if (!udc->regs) { in usba_udc_probe()
2117 (unsigned long)regs->start, udc->regs); in usba_udc_probe()
2118 udc->fifo = devm_ioremap(&pdev->dev, fifo->start, resource_size(fifo)); in usba_udc_probe()
2119 if (!udc->fifo) { in usba_udc_probe()
2124 (unsigned long)fifo->start, udc->fifo); in usba_udc_probe()
2126 platform_set_drvdata(pdev, udc); in usba_udc_probe()
2135 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_udc_probe()
2139 udc->usba_ep = atmel_udc_of_init(pdev, udc); in usba_udc_probe()
2141 udc->usba_ep = usba_udc_pdata(pdev, udc); in usba_udc_probe()
2143 toggle_bias(udc, 0); in usba_udc_probe()
2145 if (IS_ERR(udc->usba_ep)) in usba_udc_probe()
2146 return PTR_ERR(udc->usba_ep); in usba_udc_probe()
2149 "atmel_usba_udc", udc); in usba_udc_probe()
2155 udc->irq = irq; in usba_udc_probe()
2157 if (gpio_is_valid(udc->vbus_pin)) { in usba_udc_probe()
2158 if (!devm_gpio_request(&pdev->dev, udc->vbus_pin, "atmel_usba_udc")) { in usba_udc_probe()
2159 irq_set_status_flags(gpio_to_irq(udc->vbus_pin), in usba_udc_probe()
2162 gpio_to_irq(udc->vbus_pin), NULL, in usba_udc_probe()
2164 "atmel_usba_udc", udc); in usba_udc_probe()
2166 udc->vbus_pin = -ENODEV; in usba_udc_probe()
2167 dev_warn(&udc->pdev->dev, in usba_udc_probe()
2173 udc->vbus_pin = -EINVAL; in usba_udc_probe()
2177 ret = usb_add_gadget_udc(&pdev->dev, &udc->gadget); in usba_udc_probe()
2182 usba_init_debugfs(udc); in usba_udc_probe()
2183 for (i = 1; i < udc->num_ep; i++) in usba_udc_probe()
2184 usba_ep_init_debugfs(udc, &udc->usba_ep[i]); in usba_udc_probe()
2191 struct usba_udc *udc; in usba_udc_remove() local
2194 udc = platform_get_drvdata(pdev); in usba_udc_remove()
2197 usb_del_gadget_udc(&udc->gadget); in usba_udc_remove()
2199 for (i = 1; i < udc->num_ep; i++) in usba_udc_remove()
2200 usba_ep_cleanup_debugfs(&udc->usba_ep[i]); in usba_udc_remove()
2201 usba_cleanup_debugfs(udc); in usba_udc_remove()
2209 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_suspend() local
2212 if (!udc->driver) in usba_udc_suspend()
2215 mutex_lock(&udc->vbus_mutex); in usba_udc_suspend()
2218 usba_stop(udc); in usba_udc_suspend()
2226 if (gpio_is_valid(udc->vbus_pin)) { in usba_udc_suspend()
2227 usba_stop(udc); in usba_udc_suspend()
2228 enable_irq_wake(gpio_to_irq(udc->vbus_pin)); in usba_udc_suspend()
2232 mutex_unlock(&udc->vbus_mutex); in usba_udc_suspend()
2238 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_resume() local
2241 if (!udc->driver) in usba_udc_resume()
2244 if (device_may_wakeup(dev) && gpio_is_valid(udc->vbus_pin)) in usba_udc_resume()
2245 disable_irq_wake(gpio_to_irq(udc->vbus_pin)); in usba_udc_resume()
2248 mutex_lock(&udc->vbus_mutex); in usba_udc_resume()
2249 udc->vbus_prev = vbus_is_present(udc); in usba_udc_resume()
2250 if (udc->vbus_prev) in usba_udc_resume()
2251 usba_start(udc); in usba_udc_resume()
2252 mutex_unlock(&udc->vbus_mutex); in usba_udc_resume()