Lines Matching refs:dev

290 	struct pch_udc_dev		*dev;  member
401 static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg) in pch_udc_readl() argument
403 return ioread32(dev->base_addr + reg); in pch_udc_readl()
406 static inline void pch_udc_writel(struct pch_udc_dev *dev, in pch_udc_writel() argument
409 iowrite32(val, dev->base_addr + reg); in pch_udc_writel()
412 static inline void pch_udc_bit_set(struct pch_udc_dev *dev, in pch_udc_bit_set() argument
416 pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg); in pch_udc_bit_set()
419 static inline void pch_udc_bit_clr(struct pch_udc_dev *dev, in pch_udc_bit_clr() argument
423 pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg); in pch_udc_bit_clr()
428 return ioread32(ep->dev->base_addr + ep->offset_addr + reg); in pch_udc_ep_readl()
434 iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg); in pch_udc_ep_writel()
455 static void pch_udc_csr_busy(struct pch_udc_dev *dev) in pch_udc_csr_busy() argument
460 while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY) in pch_udc_csr_busy()
464 dev_err(&dev->pdev->dev, "%s: wait error\n", __func__); in pch_udc_csr_busy()
473 static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val, in pch_udc_write_csr() argument
478 pch_udc_csr_busy(dev); /* Wait till idle */ in pch_udc_write_csr()
479 pch_udc_writel(dev, val, reg); in pch_udc_write_csr()
480 pch_udc_csr_busy(dev); /* Wait till idle */ in pch_udc_write_csr()
490 static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep) in pch_udc_read_csr() argument
494 pch_udc_csr_busy(dev); /* Wait till idle */ in pch_udc_read_csr()
495 pch_udc_readl(dev, reg); /* Dummy read */ in pch_udc_read_csr()
496 pch_udc_csr_busy(dev); /* Wait till idle */ in pch_udc_read_csr()
497 return pch_udc_readl(dev, reg); in pch_udc_read_csr()
504 static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev) in pch_udc_rmt_wakeup() argument
506 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_rmt_wakeup()
508 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_rmt_wakeup()
516 static inline int pch_udc_get_frame(struct pch_udc_dev *dev) in pch_udc_get_frame() argument
518 u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR); in pch_udc_get_frame()
526 static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev) in pch_udc_clear_selfpowered() argument
528 pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP); in pch_udc_clear_selfpowered()
535 static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev) in pch_udc_set_selfpowered() argument
537 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP); in pch_udc_set_selfpowered()
544 static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev) in pch_udc_set_disconnect() argument
546 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD); in pch_udc_set_disconnect()
553 static void pch_udc_clear_disconnect(struct pch_udc_dev *dev) in pch_udc_clear_disconnect() argument
556 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_clear_disconnect()
557 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD); in pch_udc_clear_disconnect()
560 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_clear_disconnect()
563 static void pch_udc_init(struct pch_udc_dev *dev);
570 static void pch_udc_reconnect(struct pch_udc_dev *dev) in pch_udc_reconnect() argument
572 pch_udc_init(dev); in pch_udc_reconnect()
576 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, in pch_udc_reconnect()
580 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_reconnect()
581 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD); in pch_udc_reconnect()
584 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); in pch_udc_reconnect()
594 static inline void pch_udc_vbus_session(struct pch_udc_dev *dev, in pch_udc_vbus_session() argument
599 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_vbus_session()
601 pch_udc_reconnect(dev); in pch_udc_vbus_session()
602 dev->vbus_session = 1; in pch_udc_vbus_session()
604 if (dev->driver && dev->driver->disconnect) { in pch_udc_vbus_session()
605 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_vbus_session()
606 dev->driver->disconnect(&dev->gadget); in pch_udc_vbus_session()
607 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_vbus_session()
609 pch_udc_set_disconnect(dev); in pch_udc_vbus_session()
610 dev->vbus_session = 0; in pch_udc_vbus_session()
612 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_vbus_session()
741 static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir) in pch_udc_set_dma() argument
744 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE); in pch_udc_set_dma()
746 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE); in pch_udc_set_dma()
757 static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir) in pch_udc_clear_dma() argument
760 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE); in pch_udc_clear_dma()
762 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE); in pch_udc_clear_dma()
770 static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev) in pch_udc_set_csr_done() argument
772 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE); in pch_udc_set_csr_done()
780 static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev, in pch_udc_disable_interrupts() argument
783 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask); in pch_udc_disable_interrupts()
791 static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev, in pch_udc_enable_interrupts() argument
794 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask); in pch_udc_enable_interrupts()
802 static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev, in pch_udc_disable_ep_interrupts() argument
805 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask); in pch_udc_disable_ep_interrupts()
813 static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev, in pch_udc_enable_ep_interrupts() argument
816 pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask); in pch_udc_enable_ep_interrupts()
824 static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev) in pch_udc_read_device_interrupts() argument
826 return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR); in pch_udc_read_device_interrupts()
834 static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev, in pch_udc_write_device_interrupts() argument
837 pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR); in pch_udc_write_device_interrupts()
845 static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev) in pch_udc_read_ep_interrupts() argument
847 return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR); in pch_udc_read_ep_interrupts()
855 static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev, in pch_udc_write_ep_interrupts() argument
858 pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR); in pch_udc_write_ep_interrupts()
866 static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev) in pch_udc_read_device_status() argument
868 return pch_udc_readl(dev, UDC_DEVSTS_ADDR); in pch_udc_read_device_status()
930 struct pch_udc_dev *dev = ep->dev; in pch_udc_ep_clear_nak() local
940 dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n", in pch_udc_ep_clear_nak()
949 dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n", in pch_udc_ep_clear_nak()
1000 pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num)); in pch_udc_ep_enable()
1002 pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num)); in pch_udc_ep_enable()
1037 dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__); in pch_udc_wait_ep_stall()
1044 static void pch_udc_init(struct pch_udc_dev *dev) in pch_udc_init() argument
1046 if (NULL == dev) { in pch_udc_init()
1051 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR); in pch_udc_init()
1052 pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR); in pch_udc_init()
1054 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR); in pch_udc_init()
1055 pch_udc_writel(dev, 0x00, UDC_SRST_ADDR); in pch_udc_init()
1058 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK); in pch_udc_init()
1059 pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK); in pch_udc_init()
1062 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_init()
1063 pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_init()
1067 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG | in pch_udc_init()
1070 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG | in pch_udc_init()
1072 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, in pch_udc_init()
1083 static void pch_udc_exit(struct pch_udc_dev *dev) in pch_udc_exit() argument
1086 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK); in pch_udc_exit()
1088 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_exit()
1090 pch_udc_set_disconnect(dev); in pch_udc_exit()
1103 struct pch_udc_dev *dev; in pch_udc_pcd_get_frame() local
1107 dev = container_of(gadget, struct pch_udc_dev, gadget); in pch_udc_pcd_get_frame()
1108 return pch_udc_get_frame(dev); in pch_udc_pcd_get_frame()
1121 struct pch_udc_dev *dev; in pch_udc_pcd_wakeup() local
1126 dev = container_of(gadget, struct pch_udc_dev, gadget); in pch_udc_pcd_wakeup()
1127 spin_lock_irqsave(&dev->lock, flags); in pch_udc_pcd_wakeup()
1128 pch_udc_rmt_wakeup(dev); in pch_udc_pcd_wakeup()
1129 spin_unlock_irqrestore(&dev->lock, flags); in pch_udc_pcd_wakeup()
1145 struct pch_udc_dev *dev; in pch_udc_pcd_selfpowered() local
1150 dev = container_of(gadget, struct pch_udc_dev, gadget); in pch_udc_pcd_selfpowered()
1152 pch_udc_set_selfpowered(dev); in pch_udc_pcd_selfpowered()
1154 pch_udc_clear_selfpowered(dev); in pch_udc_pcd_selfpowered()
1170 struct pch_udc_dev *dev; in pch_udc_pcd_pullup() local
1176 dev = container_of(gadget, struct pch_udc_dev, gadget); in pch_udc_pcd_pullup()
1178 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_pcd_pullup()
1180 pch_udc_reconnect(dev); in pch_udc_pcd_pullup()
1182 if (dev->driver && dev->driver->disconnect) { in pch_udc_pcd_pullup()
1183 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_pcd_pullup()
1184 dev->driver->disconnect(&dev->gadget); in pch_udc_pcd_pullup()
1185 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_pcd_pullup()
1187 pch_udc_set_disconnect(dev); in pch_udc_pcd_pullup()
1189 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_pcd_pullup()
1207 struct pch_udc_dev *dev; in pch_udc_pcd_vbus_session() local
1211 dev = container_of(gadget, struct pch_udc_dev, gadget); in pch_udc_pcd_vbus_session()
1212 pch_udc_vbus_session(dev, is_active); in pch_udc_pcd_vbus_session()
1256 static int pch_vbus_gpio_get_value(struct pch_udc_dev *dev) in pch_vbus_gpio_get_value() argument
1260 if (dev->vbus_gpio.port) in pch_vbus_gpio_get_value()
1261 vbus = gpiod_get_value(dev->vbus_gpio.port) ? 1 : 0; in pch_vbus_gpio_get_value()
1278 struct pch_udc_dev *dev = in pch_vbus_gpio_work_fall() local
1284 if (!dev->vbus_gpio.port) in pch_vbus_gpio_work_fall()
1289 vbus = pch_vbus_gpio_get_value(dev); in pch_vbus_gpio_work_fall()
1292 dev_dbg(&dev->pdev->dev, "VBUS fell"); in pch_vbus_gpio_work_fall()
1293 if (dev->driver in pch_vbus_gpio_work_fall()
1294 && dev->driver->disconnect) { in pch_vbus_gpio_work_fall()
1295 dev->driver->disconnect( in pch_vbus_gpio_work_fall()
1296 &dev->gadget); in pch_vbus_gpio_work_fall()
1298 if (dev->vbus_gpio.intr) in pch_vbus_gpio_work_fall()
1299 pch_udc_init(dev); in pch_vbus_gpio_work_fall()
1301 pch_udc_reconnect(dev); in pch_vbus_gpio_work_fall()
1319 struct pch_udc_dev *dev = in pch_vbus_gpio_work_rise() local
1323 if (!dev->vbus_gpio.port) in pch_vbus_gpio_work_rise()
1327 vbus = pch_vbus_gpio_get_value(dev); in pch_vbus_gpio_work_rise()
1330 dev_dbg(&dev->pdev->dev, "VBUS rose"); in pch_vbus_gpio_work_rise()
1331 pch_udc_reconnect(dev); in pch_vbus_gpio_work_rise()
1347 struct pch_udc_dev *dev = (struct pch_udc_dev *)data; in pch_vbus_gpio_irq() local
1349 if (!dev->vbus_gpio.port || !dev->vbus_gpio.intr) in pch_vbus_gpio_irq()
1352 if (pch_vbus_gpio_get_value(dev)) in pch_vbus_gpio_irq()
1353 schedule_work(&dev->vbus_gpio.irq_work_rise); in pch_vbus_gpio_irq()
1355 schedule_work(&dev->vbus_gpio.irq_work_fall); in pch_vbus_gpio_irq()
1368 static int pch_vbus_gpio_init(struct pch_udc_dev *dev) in pch_vbus_gpio_init() argument
1370 struct device *d = &dev->pdev->dev; in pch_vbus_gpio_init()
1375 dev->vbus_gpio.port = NULL; in pch_vbus_gpio_init()
1376 dev->vbus_gpio.intr = 0; in pch_vbus_gpio_init()
1384 dev->vbus_gpio.port = gpiod; in pch_vbus_gpio_init()
1385 INIT_WORK(&dev->vbus_gpio.irq_work_fall, pch_vbus_gpio_work_fall); in pch_vbus_gpio_init()
1391 "vbus_detect", dev); in pch_vbus_gpio_init()
1393 dev->vbus_gpio.intr = irq_num; in pch_vbus_gpio_init()
1394 INIT_WORK(&dev->vbus_gpio.irq_work_rise, in pch_vbus_gpio_init()
1409 static void pch_vbus_gpio_free(struct pch_udc_dev *dev) in pch_vbus_gpio_free() argument
1411 if (dev->vbus_gpio.intr) in pch_vbus_gpio_free()
1412 free_irq(dev->vbus_gpio.intr, dev); in pch_vbus_gpio_free()
1424 __releases(&dev->lock) in complete_req()
1425 __acquires(&dev->lock) in complete_req()
1427 struct pch_udc_dev *dev; in complete_req() local
1438 dev = ep->dev; in complete_req()
1439 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
1441 spin_unlock(&dev->lock); in complete_req()
1445 spin_lock(&dev->lock); in complete_req()
1473 static void pch_udc_free_dma_chain(struct pch_udc_dev *dev, in pch_udc_free_dma_chain() argument
1486 dma_pool_free(dev->data_requests, td, addr); in pch_udc_free_dma_chain()
1515 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_create_dma_chain()
1525 td = dma_pool_alloc(ep->dev->data_requests, gfp_flags, in pch_udc_create_dma_chain()
1543 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_create_dma_chain()
1585 struct pch_udc_dev *dev = ep->dev; in process_zlp() local
1593 if (dev->set_cfg_not_acked) { in process_zlp()
1594 pch_udc_set_csr_done(dev); in process_zlp()
1595 dev->set_cfg_not_acked = 0; in process_zlp()
1598 if (!dev->stall && dev->waiting_zlp_ack) { in process_zlp()
1599 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX])); in process_zlp()
1600 dev->waiting_zlp_ack = 0; in process_zlp()
1614 pch_udc_clear_dma(ep->dev, DMA_DIR_RX); in pch_udc_start_rxrequest()
1627 pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num); in pch_udc_start_rxrequest()
1628 pch_udc_set_dma(ep->dev, DMA_DIR_RX); in pch_udc_start_rxrequest()
1648 struct pch_udc_dev *dev; in pch_udc_pcd_ep_enable() local
1656 dev = ep->dev; in pch_udc_pcd_ep_enable()
1657 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_ep_enable()
1659 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_pcd_ep_enable()
1662 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc); in pch_udc_pcd_ep_enable()
1664 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_ep_enable()
1665 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_pcd_ep_enable()
1690 spin_lock_irqsave(&ep->dev->lock, iflags); in pch_udc_pcd_ep_disable()
1694 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_ep_disable()
1697 spin_unlock_irqrestore(&ep->dev->lock, iflags); in pch_udc_pcd_ep_disable()
1726 if (!ep->dev->dma_addr) in pch_udc_alloc_request()
1729 dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp, in pch_udc_alloc_request()
1755 struct pch_udc_dev *dev; in pch_udc_free_request() local
1761 dev = ep->dev; in pch_udc_free_request()
1763 dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n", in pch_udc_free_request()
1767 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_free_request()
1768 dma_pool_free(ep->dev->data_requests, req->td_data, in pch_udc_free_request()
1790 struct pch_udc_dev *dev; in pch_udc_pcd_queue() local
1797 dev = ep->dev; in pch_udc_pcd_queue()
1803 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_queue()
1805 spin_lock_irqsave(&dev->lock, iflags); in pch_udc_pcd_queue()
1807 retval = usb_gadget_map_request(&dev->gadget, usbreq, ep->in); in pch_udc_pcd_queue()
1835 pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num)); in pch_udc_pcd_queue()
1843 spin_unlock_irqrestore(&dev->lock, iflags); in pch_udc_pcd_queue()
1869 spin_lock_irqsave(&ep->dev->lock, flags); in pch_udc_pcd_dequeue()
1880 spin_unlock_irqrestore(&ep->dev->lock, flags); in pch_udc_pcd_dequeue()
1905 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_set_halt()
1911 ep->dev->stall = 1; in pch_udc_pcd_set_halt()
1914 ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_set_halt()
1946 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_set_wedge()
1953 ep->dev->stall = 1; in pch_udc_pcd_set_wedge()
1955 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_pcd_set_wedge()
1957 ep->dev->prot_stall = 1; in pch_udc_pcd_set_wedge()
2042 pch_udc_set_dma(ep->dev, DMA_DIR_TX); in pch_udc_start_next_txrequest()
2044 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_start_next_txrequest()
2055 struct pch_udc_dev *dev = ep->dev; in pch_udc_complete_transfer() local
2065 dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) " in pch_udc_complete_transfer()
2080 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_complete_transfer()
2083 pch_udc_disable_ep_interrupts(ep->dev, in pch_udc_complete_transfer()
2095 struct pch_udc_dev *dev = ep->dev; in pch_udc_complete_receiver() local
2104 pch_udc_clear_dma(ep->dev, DMA_DIR_RX); in pch_udc_complete_receiver()
2114 dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x " in pch_udc_complete_receiver()
2126 dev_err(&dev->pdev->dev, "Not complete RX descriptor"); in pch_udc_complete_receiver()
2154 static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num) in pch_udc_svc_data_in() argument
2159 ep = &dev->ep[UDC_EPIN_IDX(ep_num)]; in pch_udc_svc_data_in()
2173 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_in()
2177 if (!dev->prot_stall) { in pch_udc_svc_data_in()
2181 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_in()
2198 static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num) in pch_udc_svc_data_out() argument
2204 ep = &dev->ep[UDC_EPOUT_IDX(ep_num)]; in pch_udc_svc_data_out()
2223 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2227 if (!dev->prot_stall) { in pch_udc_svc_data_out()
2231 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2237 if (ep->dev->prot_stall == 1) { in pch_udc_svc_data_out()
2239 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2246 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_data_out()
2249 static int pch_udc_gadget_setup(struct pch_udc_dev *dev) in pch_udc_gadget_setup() argument
2250 __must_hold(&dev->lock) in pch_udc_gadget_setup()
2255 if (!dev->driver) in pch_udc_gadget_setup()
2258 spin_unlock(&dev->lock); in pch_udc_gadget_setup()
2259 rc = dev->driver->setup(&dev->gadget, &dev->setup_data); in pch_udc_gadget_setup()
2260 spin_lock(&dev->lock); in pch_udc_gadget_setup()
2268 static void pch_udc_svc_control_in(struct pch_udc_dev *dev) in pch_udc_svc_control_in() argument
2274 ep = &dev->ep[UDC_EP0IN_IDX]; in pch_udc_svc_control_in()
2275 ep_out = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_svc_control_in()
2287 if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) { in pch_udc_svc_control_in()
2289 pch_udc_clear_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_in()
2294 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_in()
2308 static void pch_udc_svc_control_out(struct pch_udc_dev *dev) in pch_udc_svc_control_out() argument
2309 __releases(&dev->lock) in pch_udc_svc_control_out()
2310 __acquires(&dev->lock) in pch_udc_svc_control_out()
2316 ep = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_svc_control_out()
2323 dev->stall = 0; in pch_udc_svc_control_out()
2324 dev->ep[UDC_EP0IN_IDX].halted = 0; in pch_udc_svc_control_out()
2325 dev->ep[UDC_EP0OUT_IDX].halted = 0; in pch_udc_svc_control_out()
2326 dev->setup_data = ep->td_stp->request; in pch_udc_svc_control_out()
2328 pch_udc_clear_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_out()
2329 pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]), in pch_udc_svc_control_out()
2330 dev->ep[UDC_EP0IN_IDX].in); in pch_udc_svc_control_out()
2331 if ((dev->setup_data.bRequestType & USB_DIR_IN)) in pch_udc_svc_control_out()
2332 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep; in pch_udc_svc_control_out()
2334 dev->gadget.ep0 = &ep->ep; in pch_udc_svc_control_out()
2336 if ((dev->setup_data.bRequestType == 0x21) && in pch_udc_svc_control_out()
2337 (dev->setup_data.bRequest == 0xFF)) in pch_udc_svc_control_out()
2338 dev->prot_stall = 0; in pch_udc_svc_control_out()
2340 setup_supported = pch_udc_gadget_setup(dev); in pch_udc_svc_control_out()
2342 if (dev->setup_data.bRequestType & USB_DIR_IN) { in pch_udc_svc_control_out()
2351 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX])); in pch_udc_svc_control_out()
2354 if (!(dev->setup_data.bRequestType & USB_DIR_IN)) { in pch_udc_svc_control_out()
2355 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_out()
2360 pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX])); in pch_udc_svc_control_out()
2361 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_control_out()
2363 dev->stall = 0; in pch_udc_svc_control_out()
2364 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_out()
2366 dev->waiting_zlp_ack = 1; in pch_udc_svc_control_out()
2369 UDC_EPSTS_OUT_DATA) && !dev->stall) { in pch_udc_svc_control_out()
2370 pch_udc_clear_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_out()
2374 pch_udc_svc_data_out(dev, PCH_UDC_EP0); in pch_udc_svc_control_out()
2376 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_control_out()
2388 static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num) in pch_udc_postsvc_epinters() argument
2390 struct pch_udc_ep *ep = &dev->ep[UDC_EPIN_IDX(ep_num)]; in pch_udc_postsvc_epinters()
2393 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_postsvc_epinters()
2402 static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr) in pch_udc_read_all_epstatus() argument
2410 ep = &dev->ep[UDC_EPIN_IDX(i)]; in pch_udc_read_all_epstatus()
2416 ep = &dev->ep[UDC_EPOUT_IDX(i)]; in pch_udc_read_all_epstatus()
2428 static void pch_udc_activate_control_ep(struct pch_udc_dev *dev) in pch_udc_activate_control_ep() argument
2434 ep = &dev->ep[UDC_EP0IN_IDX]; in pch_udc_activate_control_ep()
2446 ep = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_activate_control_ep()
2452 pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX); in pch_udc_activate_control_ep()
2463 ep->td_data->dataptr = dev->dma_addr; in pch_udc_activate_control_ep()
2474 static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev) in pch_udc_svc_ur_interrupt() argument
2479 pch_udc_clear_dma(dev, DMA_DIR_TX); in pch_udc_svc_ur_interrupt()
2480 pch_udc_clear_dma(dev, DMA_DIR_RX); in pch_udc_svc_ur_interrupt()
2482 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_svc_ur_interrupt()
2484 pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_svc_ur_interrupt()
2487 ep = &dev->ep[i]; in pch_udc_svc_ur_interrupt()
2491 pch_udc_write_csr(ep->dev, 0x00, i); in pch_udc_svc_ur_interrupt()
2493 dev->stall = 0; in pch_udc_svc_ur_interrupt()
2494 dev->prot_stall = 0; in pch_udc_svc_ur_interrupt()
2495 dev->waiting_zlp_ack = 0; in pch_udc_svc_ur_interrupt()
2496 dev->set_cfg_not_acked = 0; in pch_udc_svc_ur_interrupt()
2500 ep = &dev->ep[i]; in pch_udc_svc_ur_interrupt()
2506 if (dev->driver) { in pch_udc_svc_ur_interrupt()
2507 spin_unlock(&dev->lock); in pch_udc_svc_ur_interrupt()
2508 usb_gadget_udc_reset(&dev->gadget, dev->driver); in pch_udc_svc_ur_interrupt()
2509 spin_lock(&dev->lock); in pch_udc_svc_ur_interrupt()
2518 static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev) in pch_udc_svc_enum_interrupt() argument
2523 dev_stat = pch_udc_read_device_status(dev); in pch_udc_svc_enum_interrupt()
2539 dev->gadget.speed = speed; in pch_udc_svc_enum_interrupt()
2540 pch_udc_activate_control_ep(dev); in pch_udc_svc_enum_interrupt()
2541 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0); in pch_udc_svc_enum_interrupt()
2542 pch_udc_set_dma(dev, DMA_DIR_TX); in pch_udc_svc_enum_interrupt()
2543 pch_udc_set_dma(dev, DMA_DIR_RX); in pch_udc_svc_enum_interrupt()
2544 pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX])); in pch_udc_svc_enum_interrupt()
2547 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US | in pch_udc_svc_enum_interrupt()
2557 static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev) in pch_udc_svc_intf_interrupt() argument
2562 dev_stat = pch_udc_read_device_status(dev); in pch_udc_svc_intf_interrupt()
2563 dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >> in pch_udc_svc_intf_interrupt()
2565 dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >> in pch_udc_svc_intf_interrupt()
2567 dev->set_cfg_not_acked = 1; in pch_udc_svc_intf_interrupt()
2569 memset(&dev->setup_data, 0 , sizeof dev->setup_data); in pch_udc_svc_intf_interrupt()
2570 dev->setup_data.bRequest = USB_REQ_SET_INTERFACE; in pch_udc_svc_intf_interrupt()
2571 dev->setup_data.bRequestType = USB_RECIP_INTERFACE; in pch_udc_svc_intf_interrupt()
2572 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt); in pch_udc_svc_intf_interrupt()
2573 dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf); in pch_udc_svc_intf_interrupt()
2576 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX); in pch_udc_svc_intf_interrupt()
2578 (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT); in pch_udc_svc_intf_interrupt()
2580 (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT); in pch_udc_svc_intf_interrupt()
2581 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX); in pch_udc_svc_intf_interrupt()
2584 pch_udc_ep_clear_stall(&(dev->ep[i])); in pch_udc_svc_intf_interrupt()
2585 dev->ep[i].halted = 0; in pch_udc_svc_intf_interrupt()
2587 dev->stall = 0; in pch_udc_svc_intf_interrupt()
2588 pch_udc_gadget_setup(dev); in pch_udc_svc_intf_interrupt()
2596 static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev) in pch_udc_svc_cfg_interrupt() argument
2601 dev_stat = pch_udc_read_device_status(dev); in pch_udc_svc_cfg_interrupt()
2602 dev->set_cfg_not_acked = 1; in pch_udc_svc_cfg_interrupt()
2603 dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >> in pch_udc_svc_cfg_interrupt()
2606 memset(&dev->setup_data, 0 , sizeof dev->setup_data); in pch_udc_svc_cfg_interrupt()
2607 dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION; in pch_udc_svc_cfg_interrupt()
2608 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg); in pch_udc_svc_cfg_interrupt()
2611 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX); in pch_udc_svc_cfg_interrupt()
2613 (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT); in pch_udc_svc_cfg_interrupt()
2614 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX); in pch_udc_svc_cfg_interrupt()
2617 pch_udc_ep_clear_stall(&(dev->ep[i])); in pch_udc_svc_cfg_interrupt()
2618 dev->ep[i].halted = 0; in pch_udc_svc_cfg_interrupt()
2620 dev->stall = 0; in pch_udc_svc_cfg_interrupt()
2623 pch_udc_gadget_setup(dev); in pch_udc_svc_cfg_interrupt()
2632 static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr) in pch_udc_dev_isr() argument
2638 pch_udc_svc_ur_interrupt(dev); in pch_udc_dev_isr()
2639 dev_dbg(&dev->pdev->dev, "USB_RESET\n"); in pch_udc_dev_isr()
2643 pch_udc_svc_enum_interrupt(dev); in pch_udc_dev_isr()
2644 dev_dbg(&dev->pdev->dev, "USB_ENUM\n"); in pch_udc_dev_isr()
2648 pch_udc_svc_intf_interrupt(dev); in pch_udc_dev_isr()
2651 pch_udc_svc_cfg_interrupt(dev); in pch_udc_dev_isr()
2654 if (dev->driver in pch_udc_dev_isr()
2655 && dev->driver->suspend) { in pch_udc_dev_isr()
2656 spin_unlock(&dev->lock); in pch_udc_dev_isr()
2657 dev->driver->suspend(&dev->gadget); in pch_udc_dev_isr()
2658 spin_lock(&dev->lock); in pch_udc_dev_isr()
2661 vbus = pch_vbus_gpio_get_value(dev); in pch_udc_dev_isr()
2662 if ((dev->vbus_session == 0) in pch_udc_dev_isr()
2664 if (dev->driver && dev->driver->disconnect) { in pch_udc_dev_isr()
2665 spin_unlock(&dev->lock); in pch_udc_dev_isr()
2666 dev->driver->disconnect(&dev->gadget); in pch_udc_dev_isr()
2667 spin_lock(&dev->lock); in pch_udc_dev_isr()
2669 pch_udc_reconnect(dev); in pch_udc_dev_isr()
2670 } else if ((dev->vbus_session == 0) in pch_udc_dev_isr()
2672 && !dev->vbus_gpio.intr) in pch_udc_dev_isr()
2673 schedule_work(&dev->vbus_gpio.irq_work_fall); in pch_udc_dev_isr()
2675 dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n"); in pch_udc_dev_isr()
2679 dev_dbg(&dev->pdev->dev, "SOF\n"); in pch_udc_dev_isr()
2682 dev_dbg(&dev->pdev->dev, "ES\n"); in pch_udc_dev_isr()
2685 dev_dbg(&dev->pdev->dev, "RWKP\n"); in pch_udc_dev_isr()
2695 struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev; in pch_udc_isr() local
2699 dev_intr = pch_udc_read_device_interrupts(dev); in pch_udc_isr()
2700 ep_intr = pch_udc_read_ep_interrupts(dev); in pch_udc_isr()
2704 if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) { in pch_udc_isr()
2705 dev_dbg(&dev->pdev->dev, "UDC: Hung up\n"); in pch_udc_isr()
2707 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR); in pch_udc_isr()
2712 pch_udc_write_device_interrupts(dev, dev_intr); in pch_udc_isr()
2715 pch_udc_write_ep_interrupts(dev, ep_intr); in pch_udc_isr()
2718 spin_lock(&dev->lock); in pch_udc_isr()
2720 pch_udc_dev_isr(dev, dev_intr); in pch_udc_isr()
2722 pch_udc_read_all_epstatus(dev, ep_intr); in pch_udc_isr()
2725 pch_udc_svc_control_in(dev); in pch_udc_isr()
2726 pch_udc_postsvc_epinters(dev, 0); in pch_udc_isr()
2730 pch_udc_svc_control_out(dev); in pch_udc_isr()
2734 pch_udc_svc_data_in(dev, i); in pch_udc_isr()
2735 pch_udc_postsvc_epinters(dev, i); in pch_udc_isr()
2742 pch_udc_svc_data_out(dev, i - in pch_udc_isr()
2745 spin_unlock(&dev->lock); in pch_udc_isr()
2753 static void pch_udc_setup_ep0(struct pch_udc_dev *dev) in pch_udc_setup_ep0() argument
2756 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | in pch_udc_setup_ep0()
2759 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US | in pch_udc_setup_ep0()
2768 static void pch_udc_pcd_reinit(struct pch_udc_dev *dev) in pch_udc_pcd_reinit() argument
2780 dev->gadget.speed = USB_SPEED_UNKNOWN; in pch_udc_pcd_reinit()
2781 INIT_LIST_HEAD(&dev->gadget.ep_list); in pch_udc_pcd_reinit()
2784 memset(dev->ep, 0, sizeof dev->ep); in pch_udc_pcd_reinit()
2786 struct pch_udc_ep *ep = &dev->ep[i]; in pch_udc_pcd_reinit()
2787 ep->dev = dev; in pch_udc_pcd_reinit()
2810 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); in pch_udc_pcd_reinit()
2813 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IDX].ep, UDC_EP0IN_MAX_PKT_SIZE); in pch_udc_pcd_reinit()
2814 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IDX].ep, UDC_EP0OUT_MAX_PKT_SIZE); in pch_udc_pcd_reinit()
2817 list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list); in pch_udc_pcd_reinit()
2818 list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list); in pch_udc_pcd_reinit()
2820 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep; in pch_udc_pcd_reinit()
2821 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); in pch_udc_pcd_reinit()
2832 static int pch_udc_pcd_init(struct pch_udc_dev *dev) in pch_udc_pcd_init() argument
2836 pch_udc_init(dev); in pch_udc_pcd_init()
2837 pch_udc_pcd_reinit(dev); in pch_udc_pcd_init()
2839 ret = pch_vbus_gpio_init(dev); in pch_udc_pcd_init()
2841 pch_udc_exit(dev); in pch_udc_pcd_init()
2849 static int init_dma_pools(struct pch_udc_dev *dev) in init_dma_pools() argument
2856 dev->data_requests = dma_pool_create("data_requests", &dev->pdev->dev, in init_dma_pools()
2858 if (!dev->data_requests) { in init_dma_pools()
2859 dev_err(&dev->pdev->dev, "%s: can't get request data pool\n", in init_dma_pools()
2865 dev->stp_requests = dma_pool_create("setup requests", &dev->pdev->dev, in init_dma_pools()
2867 if (!dev->stp_requests) { in init_dma_pools()
2868 dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n", in init_dma_pools()
2873 td_stp = dma_pool_alloc(dev->stp_requests, GFP_KERNEL, in init_dma_pools()
2874 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys); in init_dma_pools()
2876 dev_err(&dev->pdev->dev, in init_dma_pools()
2880 dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp; in init_dma_pools()
2883 td_data = dma_pool_alloc(dev->data_requests, GFP_KERNEL, in init_dma_pools()
2884 &dev->ep[UDC_EP0OUT_IDX].td_data_phys); in init_dma_pools()
2886 dev_err(&dev->pdev->dev, in init_dma_pools()
2890 dev->ep[UDC_EP0OUT_IDX].td_data = td_data; in init_dma_pools()
2891 dev->ep[UDC_EP0IN_IDX].td_stp = NULL; in init_dma_pools()
2892 dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0; in init_dma_pools()
2893 dev->ep[UDC_EP0IN_IDX].td_data = NULL; in init_dma_pools()
2894 dev->ep[UDC_EP0IN_IDX].td_data_phys = 0; in init_dma_pools()
2896 ep0out_buf = devm_kzalloc(&dev->pdev->dev, UDC_EP0OUT_BUFF_SIZE * 4, in init_dma_pools()
2900 dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf, in init_dma_pools()
2903 return dma_mapping_error(&dev->pdev->dev, dev->dma_addr); in init_dma_pools()
2909 struct pch_udc_dev *dev = to_pch_udc(g); in pch_udc_start() local
2911 dev->driver = driver; in pch_udc_start()
2914 pch_udc_setup_ep0(dev); in pch_udc_start()
2917 if ((pch_vbus_gpio_get_value(dev) != 0) || !dev->vbus_gpio.intr) in pch_udc_start()
2918 pch_udc_clear_disconnect(dev); in pch_udc_start()
2920 dev->connected = 1; in pch_udc_start()
2926 struct pch_udc_dev *dev = to_pch_udc(g); in pch_udc_stop() local
2928 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK); in pch_udc_stop()
2931 dev->driver = NULL; in pch_udc_stop()
2932 dev->connected = 0; in pch_udc_stop()
2935 pch_udc_set_disconnect(dev); in pch_udc_stop()
2966 struct pch_udc_dev *dev = dev_get_drvdata(d); in pch_udc_quark_platform_init() local
2968 dev->bar = PCH_UDC_PCI_BAR_QUARK_X1000; in pch_udc_quark_platform_init()
2974 struct pch_udc_dev *dev = pci_get_drvdata(pdev); in pch_udc_shutdown() local
2976 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK); in pch_udc_shutdown()
2977 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_shutdown()
2980 pch_udc_set_disconnect(dev); in pch_udc_shutdown()
2985 struct pch_udc_dev *dev = pci_get_drvdata(pdev); in pch_udc_remove() local
2987 usb_del_gadget_udc(&dev->gadget); in pch_udc_remove()
2990 if (dev->driver) in pch_udc_remove()
2991 dev_err(&pdev->dev, in pch_udc_remove()
2994 dma_pool_destroy(dev->data_requests); in pch_udc_remove()
2996 if (dev->stp_requests) { in pch_udc_remove()
2998 if (dev->ep[UDC_EP0OUT_IDX].td_stp) { in pch_udc_remove()
2999 dma_pool_free(dev->stp_requests, in pch_udc_remove()
3000 dev->ep[UDC_EP0OUT_IDX].td_stp, in pch_udc_remove()
3001 dev->ep[UDC_EP0OUT_IDX].td_stp_phys); in pch_udc_remove()
3003 if (dev->ep[UDC_EP0OUT_IDX].td_data) { in pch_udc_remove()
3004 dma_pool_free(dev->stp_requests, in pch_udc_remove()
3005 dev->ep[UDC_EP0OUT_IDX].td_data, in pch_udc_remove()
3006 dev->ep[UDC_EP0OUT_IDX].td_data_phys); in pch_udc_remove()
3008 dma_pool_destroy(dev->stp_requests); in pch_udc_remove()
3011 if (dev->dma_addr) in pch_udc_remove()
3012 dma_unmap_single(&dev->pdev->dev, dev->dma_addr, in pch_udc_remove()
3015 pch_vbus_gpio_free(dev); in pch_udc_remove()
3017 pch_udc_exit(dev); in pch_udc_remove()
3022 struct pch_udc_dev *dev = dev_get_drvdata(d); in pch_udc_suspend() local
3024 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK); in pch_udc_suspend()
3025 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL); in pch_udc_suspend()
3043 struct pch_udc_dev *dev; in pch_udc_probe() local
3046 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); in pch_udc_probe()
3047 if (!dev) in pch_udc_probe()
3055 dev->bar = PCH_UDC_PCI_BAR; in pch_udc_probe()
3056 dev->pdev = pdev; in pch_udc_probe()
3057 pci_set_drvdata(pdev, dev); in pch_udc_probe()
3061 retval = platform_init(&pdev->dev); in pch_udc_probe()
3067 retval = pcim_iomap_regions(pdev, BIT(dev->bar), pci_name(pdev)); in pch_udc_probe()
3071 dev->base_addr = pcim_iomap_table(pdev)[dev->bar]; in pch_udc_probe()
3074 retval = pch_udc_pcd_init(dev); in pch_udc_probe()
3080 retval = devm_request_irq(&pdev->dev, pdev->irq, pch_udc_isr, in pch_udc_probe()
3081 IRQF_SHARED, KBUILD_MODNAME, dev); in pch_udc_probe()
3083 dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__, in pch_udc_probe()
3092 spin_lock_init(&dev->lock); in pch_udc_probe()
3093 dev->gadget.ops = &pch_udc_ops; in pch_udc_probe()
3095 retval = init_dma_pools(dev); in pch_udc_probe()
3099 dev->gadget.name = KBUILD_MODNAME; in pch_udc_probe()
3100 dev->gadget.max_speed = USB_SPEED_HIGH; in pch_udc_probe()
3103 pch_udc_set_disconnect(dev); in pch_udc_probe()
3104 retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget); in pch_udc_probe()