Lines Matching refs:udc
47 spin_lock_irq(&ep->udc->lock); in queue_dbg_open()
54 spin_unlock_irq(&ep->udc->lock); in queue_dbg_open()
60 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] = usba_io_readl(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()
243 dev_err(&ep->udc->pdev->dev, in usba_ep_init_debugfs()
257 static void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
262 root = debugfs_create_dir(udc->gadget.name, NULL); in usba_init_debugfs()
265 udc->debugfs_root = root; in usba_init_debugfs()
267 regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM, in usba_init_debugfs()
271 regs = debugfs_create_file_size("regs", 0400, root, udc, in usba_init_debugfs()
276 udc->debugfs_regs = regs; in usba_init_debugfs()
279 usba_ep_init_debugfs(udc, to_usba_ep(udc->gadget.ep0)); in usba_init_debugfs()
286 udc->debugfs_root = NULL; in usba_init_debugfs()
287 dev_err(&udc->pdev->dev, "debugfs is not available\n"); in usba_init_debugfs()
290 static void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
292 usba_ep_cleanup_debugfs(to_usba_ep(udc->gadget.ep0)); in usba_cleanup_debugfs()
293 debugfs_remove(udc->debugfs_regs); in usba_cleanup_debugfs()
294 debugfs_remove(udc->debugfs_root); in usba_cleanup_debugfs()
295 udc->debugfs_regs = NULL; in usba_cleanup_debugfs()
296 udc->debugfs_root = NULL; in usba_cleanup_debugfs()
299 static inline void usba_ep_init_debugfs(struct usba_udc *udc, in usba_ep_init_debugfs() argument
310 static inline void usba_init_debugfs(struct usba_udc *udc) in usba_init_debugfs() argument
315 static inline void usba_cleanup_debugfs(struct usba_udc *udc) in usba_cleanup_debugfs() argument
321 static inline u32 usba_int_enb_get(struct usba_udc *udc) in usba_int_enb_get() argument
323 return udc->int_enb_cache; in usba_int_enb_get()
326 static inline void usba_int_enb_set(struct usba_udc *udc, u32 val) in usba_int_enb_set() argument
328 usba_writel(udc, INT_ENB, val); in usba_int_enb_set()
329 udc->int_enb_cache = val; in usba_int_enb_set()
332 static int vbus_is_present(struct usba_udc *udc) in vbus_is_present() argument
334 if (gpio_is_valid(udc->vbus_pin)) in vbus_is_present()
335 return gpio_get_value(udc->vbus_pin) ^ udc->vbus_pin_inverted; in vbus_is_present()
341 static void toggle_bias(struct usba_udc *udc, int is_on) in toggle_bias() argument
343 if (udc->errata && udc->errata->toggle_bias) in toggle_bias()
344 udc->errata->toggle_bias(udc, is_on); in toggle_bias()
347 static void generate_bias_pulse(struct usba_udc *udc) in generate_bias_pulse() argument
349 if (!udc->bias_pulse_needed) in generate_bias_pulse()
352 if (udc->errata && udc->errata->pulse_bias) in generate_bias_pulse()
353 udc->errata->pulse_bias(udc); in generate_bias_pulse()
355 udc->bias_pulse_needed = false; in generate_bias_pulse()
426 static void send_status(struct usba_udc *udc, struct usba_ep *ep) in send_status() argument
435 struct usba_udc *udc = ep->udc; in receive_data() local
474 spin_unlock(&udc->lock); in receive_data()
476 spin_lock(&udc->lock); in receive_data()
483 send_status(udc, ep); in receive_data()
492 struct usba_udc *udc = ep->udc; in request_complete() local
500 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in); in request_complete()
506 spin_unlock(&udc->lock); in request_complete()
508 spin_lock(&udc->lock); in request_complete()
526 struct usba_udc *udc = ep->udc; in usba_ep_enable() local
602 spin_lock_irqsave(&ep->udc->lock, flags); in usba_ep_enable()
613 usba_int_enb_set(udc, usba_int_enb_get(udc) | in usba_ep_enable()
619 usba_int_enb_set(udc, usba_int_enb_get(udc) | in usba_ep_enable()
623 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_enable()
628 (unsigned long)usba_int_enb_get(udc)); in usba_ep_enable()
636 struct usba_udc *udc = ep->udc; in usba_ep_disable() local
642 spin_lock_irqsave(&udc->lock, flags); in usba_ep_disable()
645 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
650 if (udc->gadget.speed != USB_SPEED_UNKNOWN) in usba_ep_disable()
664 usba_int_enb_set(udc, usba_int_enb_get(udc) & in usba_ep_disable()
669 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_disable()
700 static int queue_dma(struct usba_udc *udc, struct usba_ep *ep, in queue_dma() argument
718 ret = usb_gadget_map_request(&udc->gadget, &req->req, ep->is_in); in queue_dma()
736 spin_lock_irqsave(&udc->lock, flags); in queue_dma()
744 spin_unlock_irqrestore(&udc->lock, flags); in queue_dma()
754 struct usba_udc *udc = ep->udc; in usba_ep_queue() local
761 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN || in usba_ep_queue()
773 return queue_dma(udc, ep, req, gfp_flags); in usba_ep_queue()
777 spin_lock_irqsave(&udc->lock, flags); in usba_ep_queue()
790 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_queue()
824 dev_err(&ep->udc->pdev->dev, in stop_dma()
836 struct usba_udc *udc = ep->udc; in usba_ep_dequeue() local
844 spin_lock_irqsave(&udc->lock, flags); in usba_ep_dequeue()
852 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
870 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_dequeue()
886 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_dequeue()
894 struct usba_udc *udc = ep->udc; in usba_ep_set_halt() local
912 spin_lock_irqsave(&udc->lock, flags); in usba_ep_set_halt()
931 spin_unlock_irqrestore(&udc->lock, flags); in usba_ep_set_halt()
946 struct usba_udc *udc = ep->udc; in usba_ep_fifo_flush() local
948 usba_writel(udc, EPT_RST, 1 << ep->index); in usba_ep_fifo_flush()
965 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_get_frame() local
967 return USBA_BFEXT(FRAME_NUMBER, usba_readl(udc, FNUM)); in usba_udc_get_frame()
972 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_wakeup() local
977 spin_lock_irqsave(&udc->lock, flags); in usba_udc_wakeup()
978 if (udc->devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) { in usba_udc_wakeup()
979 ctrl = usba_readl(udc, CTRL); in usba_udc_wakeup()
980 usba_writel(udc, CTRL, ctrl | USBA_REMOTE_WAKE_UP); in usba_udc_wakeup()
983 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_wakeup()
991 struct usba_udc *udc = to_usba_udc(gadget); in usba_udc_set_selfpowered() local
995 spin_lock_irqsave(&udc->lock, flags); in usba_udc_set_selfpowered()
997 udc->devstatus |= 1 << USB_DEVICE_SELF_POWERED; in usba_udc_set_selfpowered()
999 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in usba_udc_set_selfpowered()
1000 spin_unlock_irqrestore(&udc->lock, flags); in usba_udc_set_selfpowered()
1036 static void reset_all_endpoints(struct usba_udc *udc) in reset_all_endpoints() argument
1041 usba_writel(udc, EPT_RST, ~0UL); in reset_all_endpoints()
1043 ep = to_usba_ep(udc->gadget.ep0); in reset_all_endpoints()
1055 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) { in reset_all_endpoints()
1057 spin_unlock(&udc->lock); in reset_all_endpoints()
1059 spin_lock(&udc->lock); in reset_all_endpoints()
1064 static struct usba_ep *get_ep_by_addr(struct usba_udc *udc, u16 wIndex) in get_ep_by_addr() argument
1069 return to_usba_ep(udc->gadget.ep0); in get_ep_by_addr()
1071 list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { in get_ep_by_addr()
1088 static inline void set_protocol_stall(struct usba_udc *udc, struct usba_ep *ep) in set_protocol_stall() argument
1094 static inline int is_stalled(struct usba_udc *udc, struct usba_ep *ep) in is_stalled() argument
1101 static inline void set_address(struct usba_udc *udc, unsigned int addr) in set_address() argument
1106 regval = usba_readl(udc, CTRL); in set_address()
1108 usba_writel(udc, CTRL, regval); in set_address()
1111 static int do_test_mode(struct usba_udc *udc) in do_test_mode() argument
1129 struct device *dev = &udc->pdev->dev; in do_test_mode()
1132 test_mode = udc->test_mode; in do_test_mode()
1135 reset_all_endpoints(udc); in do_test_mode()
1140 usba_writel(udc, TST, USBA_TST_J_MODE); in do_test_mode()
1145 usba_writel(udc, TST, USBA_TST_K_MODE); in do_test_mode()
1153 ep = &udc->usba_ep[0]; in do_test_mode()
1154 usba_writel(udc, TST, in do_test_mode()
1162 set_protocol_stall(udc, ep); in do_test_mode()
1171 ep = &udc->usba_ep[0]; in do_test_mode()
1178 set_protocol_stall(udc, ep); in do_test_mode()
1182 usba_writel(udc, TST, USBA_TST_PKT_MODE); in do_test_mode()
1219 static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep, in handle_ep0_setup() argument
1229 status = cpu_to_le16(udc->devstatus); in handle_ep0_setup()
1237 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1242 if (is_stalled(udc, target)) in handle_ep0_setup()
1259 udc->devstatus in handle_ep0_setup()
1270 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1282 send_status(udc, ep); in handle_ep0_setup()
1289 send_status(udc, ep); in handle_ep0_setup()
1291 udc->test_mode = le16_to_cpu(crq->wIndex); in handle_ep0_setup()
1294 udc->devstatus |= 1 << USB_DEVICE_REMOTE_WAKEUP; in handle_ep0_setup()
1305 target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex)); in handle_ep0_setup()
1313 send_status(udc, ep); in handle_ep0_setup()
1321 set_address(udc, le16_to_cpu(crq->wValue)); in handle_ep0_setup()
1322 send_status(udc, ep); in handle_ep0_setup()
1328 spin_unlock(&udc->lock); in handle_ep0_setup()
1329 retval = udc->driver->setup(&udc->gadget, crq); in handle_ep0_setup()
1330 spin_lock(&udc->lock); in handle_ep0_setup()
1341 set_protocol_stall(udc, ep); in handle_ep0_setup()
1345 static void usba_control_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_control_irq() argument
1386 usba_writel(udc, CTRL, (usba_readl(udc, CTRL) in usba_control_irq()
1403 if (do_test_mode(udc)) in usba_control_irq()
1404 set_protocol_stall(udc, ep); in usba_control_irq()
1410 set_protocol_stall(udc, ep); in usba_control_irq()
1439 set_protocol_stall(udc, ep); in usba_control_irq()
1483 set_protocol_stall(udc, ep); in usba_control_irq()
1515 ret = handle_ep0_setup(udc, ep, &crq.crq); in usba_control_irq()
1517 spin_unlock(&udc->lock); in usba_control_irq()
1518 ret = udc->driver->setup(&udc->gadget, &crq.crq); in usba_control_irq()
1519 spin_lock(&udc->lock); in usba_control_irq()
1528 set_protocol_stall(udc, ep); in usba_control_irq()
1533 static void usba_ep_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_ep_irq() argument
1548 dev_warn(&udc->pdev->dev, "ep_irq: queue empty\n"); in usba_ep_irq()
1586 static void usba_dma_irq(struct usba_udc *udc, struct usba_ep *ep) in usba_dma_irq() argument
1600 dev_err(&udc->pdev->dev, in usba_dma_irq()
1602 dev_err(&udc->pdev->dev, in usba_dma_irq()
1628 struct usba_udc *udc = devid; in usba_udc_irq() local
1633 spin_lock(&udc->lock); in usba_udc_irq()
1635 int_enb = usba_int_enb_get(udc); in usba_udc_irq()
1636 status = usba_readl(udc, INT_STA) & (int_enb | USBA_HIGH_SPEED); in usba_udc_irq()
1640 toggle_bias(udc, 0); in usba_udc_irq()
1641 usba_writel(udc, INT_CLR, USBA_DET_SUSPEND); in usba_udc_irq()
1642 usba_int_enb_set(udc, int_enb | USBA_WAKE_UP); in usba_udc_irq()
1643 udc->bias_pulse_needed = true; in usba_udc_irq()
1645 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1646 && udc->driver && udc->driver->suspend) { in usba_udc_irq()
1647 spin_unlock(&udc->lock); in usba_udc_irq()
1648 udc->driver->suspend(&udc->gadget); in usba_udc_irq()
1649 spin_lock(&udc->lock); in usba_udc_irq()
1654 toggle_bias(udc, 1); in usba_udc_irq()
1655 usba_writel(udc, INT_CLR, USBA_WAKE_UP); in usba_udc_irq()
1656 usba_int_enb_set(udc, int_enb & ~USBA_WAKE_UP); in usba_udc_irq()
1661 usba_writel(udc, INT_CLR, USBA_END_OF_RESUME); in usba_udc_irq()
1662 generate_bias_pulse(udc); in usba_udc_irq()
1664 if (udc->gadget.speed != USB_SPEED_UNKNOWN in usba_udc_irq()
1665 && udc->driver && udc->driver->resume) { in usba_udc_irq()
1666 spin_unlock(&udc->lock); in usba_udc_irq()
1667 udc->driver->resume(&udc->gadget); in usba_udc_irq()
1668 spin_lock(&udc->lock); in usba_udc_irq()
1678 usba_dma_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1685 for (i = 0; i < udc->num_ep; i++) in usba_udc_irq()
1687 if (ep_is_control(&udc->usba_ep[i])) in usba_udc_irq()
1688 usba_control_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1690 usba_ep_irq(udc, &udc->usba_ep[i]); in usba_udc_irq()
1697 usba_writel(udc, INT_CLR, USBA_END_OF_RESET); in usba_udc_irq()
1698 generate_bias_pulse(udc); in usba_udc_irq()
1699 reset_all_endpoints(udc); in usba_udc_irq()
1701 if (udc->gadget.speed != USB_SPEED_UNKNOWN && udc->driver) { in usba_udc_irq()
1702 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_udc_irq()
1703 spin_unlock(&udc->lock); in usba_udc_irq()
1704 usb_gadget_udc_reset(&udc->gadget, udc->driver); in usba_udc_irq()
1705 spin_lock(&udc->lock); in usba_udc_irq()
1709 udc->gadget.speed = USB_SPEED_HIGH; in usba_udc_irq()
1711 udc->gadget.speed = USB_SPEED_FULL; in usba_udc_irq()
1713 usb_speed_string(udc->gadget.speed)); in usba_udc_irq()
1715 ep0 = &udc->usba_ep[0]; in usba_udc_irq()
1724 usba_int_enb_set(udc, int_enb | USBA_BF(EPT_INT, 1) | in usba_udc_irq()
1732 dev_dbg(&udc->pdev->dev, in usba_udc_irq()
1736 spin_unlock(&udc->lock); in usba_udc_irq()
1741 static int start_clock(struct usba_udc *udc) in start_clock() argument
1745 if (udc->clocked) in start_clock()
1748 ret = clk_prepare_enable(udc->pclk); in start_clock()
1751 ret = clk_prepare_enable(udc->hclk); in start_clock()
1753 clk_disable_unprepare(udc->pclk); in start_clock()
1757 udc->clocked = true; in start_clock()
1761 static void stop_clock(struct usba_udc *udc) in stop_clock() argument
1763 if (!udc->clocked) in stop_clock()
1766 clk_disable_unprepare(udc->hclk); in stop_clock()
1767 clk_disable_unprepare(udc->pclk); in stop_clock()
1769 udc->clocked = false; in stop_clock()
1772 static int usba_start(struct usba_udc *udc) in usba_start() argument
1777 ret = start_clock(udc); in usba_start()
1781 spin_lock_irqsave(&udc->lock, flags); in usba_start()
1782 toggle_bias(udc, 1); in usba_start()
1783 usba_writel(udc, CTRL, USBA_ENABLE_MASK); in usba_start()
1784 usba_int_enb_set(udc, USBA_END_OF_RESET); in usba_start()
1785 spin_unlock_irqrestore(&udc->lock, flags); in usba_start()
1790 static void usba_stop(struct usba_udc *udc) in usba_stop() argument
1794 spin_lock_irqsave(&udc->lock, flags); in usba_stop()
1795 udc->gadget.speed = USB_SPEED_UNKNOWN; in usba_stop()
1796 reset_all_endpoints(udc); in usba_stop()
1799 toggle_bias(udc, 0); in usba_stop()
1800 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_stop()
1801 spin_unlock_irqrestore(&udc->lock, flags); in usba_stop()
1803 stop_clock(udc); in usba_stop()
1808 struct usba_udc *udc = devid; in usba_vbus_irq_thread() local
1814 mutex_lock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1816 vbus = vbus_is_present(udc); in usba_vbus_irq_thread()
1817 if (vbus != udc->vbus_prev) { in usba_vbus_irq_thread()
1819 usba_start(udc); in usba_vbus_irq_thread()
1821 usba_stop(udc); in usba_vbus_irq_thread()
1823 if (udc->driver->disconnect) in usba_vbus_irq_thread()
1824 udc->driver->disconnect(&udc->gadget); in usba_vbus_irq_thread()
1826 udc->vbus_prev = vbus; in usba_vbus_irq_thread()
1829 mutex_unlock(&udc->vbus_mutex); in usba_vbus_irq_thread()
1837 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_start() local
1840 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
1841 udc->devstatus = 1 << USB_DEVICE_SELF_POWERED; in atmel_usba_start()
1842 udc->driver = driver; in atmel_usba_start()
1843 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
1845 mutex_lock(&udc->vbus_mutex); in atmel_usba_start()
1847 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_start()
1848 enable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_start()
1851 udc->vbus_prev = vbus_is_present(udc); in atmel_usba_start()
1852 if (udc->vbus_prev) { in atmel_usba_start()
1853 ret = usba_start(udc); in atmel_usba_start()
1858 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
1862 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_start()
1863 disable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_start()
1865 mutex_unlock(&udc->vbus_mutex); in atmel_usba_start()
1867 spin_lock_irqsave(&udc->lock, flags); in atmel_usba_start()
1868 udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in atmel_usba_start()
1869 udc->driver = NULL; in atmel_usba_start()
1870 spin_unlock_irqrestore(&udc->lock, flags); in atmel_usba_start()
1876 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); in atmel_usba_stop() local
1878 if (gpio_is_valid(udc->vbus_pin)) in atmel_usba_stop()
1879 disable_irq(gpio_to_irq(udc->vbus_pin)); in atmel_usba_stop()
1881 usba_stop(udc); in atmel_usba_stop()
1883 udc->driver = NULL; in atmel_usba_stop()
1889 static void at91sam9rl_toggle_bias(struct usba_udc *udc, int is_on) in at91sam9rl_toggle_bias() argument
1899 static void at91sam9g45_pulse_bias(struct usba_udc *udc) in at91sam9g45_pulse_bias() argument
1925 struct usba_udc *udc) in atmel_udc_of_init() argument
1940 udc->errata = match->data; in atmel_udc_of_init()
1942 udc->num_ep = 0; in atmel_udc_of_init()
1944 udc->vbus_pin = of_get_named_gpio_flags(np, "atmel,vbus-gpio", 0, in atmel_udc_of_init()
1946 udc->vbus_pin_inverted = (flags & OF_GPIO_ACTIVE_LOW) ? 1 : 0; in atmel_udc_of_init()
1950 udc->num_ep++; in atmel_udc_of_init()
1952 eps = devm_kzalloc(&pdev->dev, sizeof(struct usba_ep) * udc->num_ep, in atmel_udc_of_init()
1957 udc->gadget.ep0 = &eps[0].ep; in atmel_udc_of_init()
1997 ep->ep_regs = udc->regs + USBA_EPT_BASE(i); in atmel_udc_of_init()
1998 ep->dma_regs = udc->regs + USBA_DMA_BASE(i); in atmel_udc_of_init()
1999 ep->fifo = udc->fifo + USBA_FIFO_BASE(i); in atmel_udc_of_init()
2002 ep->udc = udc; in atmel_udc_of_init()
2017 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in atmel_udc_of_init()
2034 struct usba_udc *udc) in atmel_udc_of_init() argument
2041 struct usba_udc *udc) in usba_udc_pdata() argument
2055 udc->gadget.ep0 = &eps[0].ep; in usba_udc_pdata()
2057 udc->vbus_pin = pdata->vbus_pin; in usba_udc_pdata()
2058 udc->vbus_pin_inverted = pdata->vbus_pin_inverted; in usba_udc_pdata()
2059 udc->num_ep = pdata->num_ep; in usba_udc_pdata()
2066 ep->ep_regs = udc->regs + USBA_EPT_BASE(i); in usba_udc_pdata()
2067 ep->dma_regs = udc->regs + USBA_DMA_BASE(i); in usba_udc_pdata()
2068 ep->fifo = udc->fifo + USBA_FIFO_BASE(i); in usba_udc_pdata()
2073 ep->udc = udc; in usba_udc_pdata()
2092 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in usba_udc_pdata()
2102 struct usba_udc *udc; in usba_udc_probe() local
2105 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL); in usba_udc_probe()
2106 if (!udc) in usba_udc_probe()
2109 udc->gadget = usba_gadget_template; in usba_udc_probe()
2110 INIT_LIST_HEAD(&udc->gadget.ep_list); in usba_udc_probe()
2128 spin_lock_init(&udc->lock); in usba_udc_probe()
2129 mutex_init(&udc->vbus_mutex); in usba_udc_probe()
2130 udc->pdev = pdev; in usba_udc_probe()
2131 udc->pclk = pclk; in usba_udc_probe()
2132 udc->hclk = hclk; in usba_udc_probe()
2133 udc->vbus_pin = -ENODEV; in usba_udc_probe()
2136 udc->regs = devm_ioremap(&pdev->dev, regs->start, resource_size(regs)); in usba_udc_probe()
2137 if (!udc->regs) { in usba_udc_probe()
2142 (unsigned long)regs->start, udc->regs); in usba_udc_probe()
2143 udc->fifo = devm_ioremap(&pdev->dev, fifo->start, resource_size(fifo)); in usba_udc_probe()
2144 if (!udc->fifo) { in usba_udc_probe()
2149 (unsigned long)fifo->start, udc->fifo); in usba_udc_probe()
2151 platform_set_drvdata(pdev, udc); in usba_udc_probe()
2160 usba_writel(udc, CTRL, USBA_DISABLE_MASK); in usba_udc_probe()
2164 udc->usba_ep = atmel_udc_of_init(pdev, udc); in usba_udc_probe()
2166 udc->usba_ep = usba_udc_pdata(pdev, udc); in usba_udc_probe()
2168 toggle_bias(udc, 0); in usba_udc_probe()
2170 if (IS_ERR(udc->usba_ep)) in usba_udc_probe()
2171 return PTR_ERR(udc->usba_ep); in usba_udc_probe()
2174 "atmel_usba_udc", udc); in usba_udc_probe()
2180 udc->irq = irq; in usba_udc_probe()
2182 if (gpio_is_valid(udc->vbus_pin)) { in usba_udc_probe()
2183 if (!devm_gpio_request(&pdev->dev, udc->vbus_pin, "atmel_usba_udc")) { in usba_udc_probe()
2184 irq_set_status_flags(gpio_to_irq(udc->vbus_pin), in usba_udc_probe()
2187 gpio_to_irq(udc->vbus_pin), NULL, in usba_udc_probe()
2189 "atmel_usba_udc", udc); in usba_udc_probe()
2191 udc->vbus_pin = -ENODEV; in usba_udc_probe()
2192 dev_warn(&udc->pdev->dev, in usba_udc_probe()
2198 udc->vbus_pin = -EINVAL; in usba_udc_probe()
2202 ret = usb_add_gadget_udc(&pdev->dev, &udc->gadget); in usba_udc_probe()
2207 usba_init_debugfs(udc); in usba_udc_probe()
2208 for (i = 1; i < udc->num_ep; i++) in usba_udc_probe()
2209 usba_ep_init_debugfs(udc, &udc->usba_ep[i]); in usba_udc_probe()
2216 struct usba_udc *udc; in usba_udc_remove() local
2219 udc = platform_get_drvdata(pdev); in usba_udc_remove()
2222 usb_del_gadget_udc(&udc->gadget); in usba_udc_remove()
2224 for (i = 1; i < udc->num_ep; i++) in usba_udc_remove()
2225 usba_ep_cleanup_debugfs(&udc->usba_ep[i]); in usba_udc_remove()
2226 usba_cleanup_debugfs(udc); in usba_udc_remove()
2234 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_suspend() local
2237 if (!udc->driver) in usba_udc_suspend()
2240 mutex_lock(&udc->vbus_mutex); in usba_udc_suspend()
2243 usba_stop(udc); in usba_udc_suspend()
2251 if (gpio_is_valid(udc->vbus_pin)) { in usba_udc_suspend()
2252 usba_stop(udc); in usba_udc_suspend()
2253 enable_irq_wake(gpio_to_irq(udc->vbus_pin)); in usba_udc_suspend()
2257 mutex_unlock(&udc->vbus_mutex); in usba_udc_suspend()
2263 struct usba_udc *udc = dev_get_drvdata(dev); in usba_udc_resume() local
2266 if (!udc->driver) in usba_udc_resume()
2269 if (device_may_wakeup(dev) && gpio_is_valid(udc->vbus_pin)) in usba_udc_resume()
2270 disable_irq_wake(gpio_to_irq(udc->vbus_pin)); in usba_udc_resume()
2273 mutex_lock(&udc->vbus_mutex); in usba_udc_resume()
2274 udc->vbus_prev = vbus_is_present(udc); in usba_udc_resume()
2275 if (udc->vbus_prev) in usba_udc_resume()
2276 usba_start(udc); in usba_udc_resume()
2277 mutex_unlock(&udc->vbus_mutex); in usba_udc_resume()