Lines Matching defs:dev

276  * @dev:		reference to device struct
291 struct pch_udc_dev *dev;
406 static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
408 return ioread32(dev->base_addr + reg);
411 static inline void pch_udc_writel(struct pch_udc_dev *dev,
414 iowrite32(val, dev->base_addr + reg);
417 static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
421 pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
424 static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
428 pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
433 return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
439 iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
458 * @dev: Reference to pch_udc_dev structure
460 static void pch_udc_csr_busy(struct pch_udc_dev *dev)
465 while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
469 dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
474 * @dev: Reference to pch_udc_dev structure
478 static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
483 pch_udc_csr_busy(dev); /* Wait till idle */
484 pch_udc_writel(dev, val, reg);
485 pch_udc_csr_busy(dev); /* Wait till idle */
490 * @dev: Reference to pch_udc_dev structure
495 static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
499 pch_udc_csr_busy(dev); /* Wait till idle */
500 pch_udc_readl(dev, reg); /* Dummy read */
501 pch_udc_csr_busy(dev); /* Wait till idle */
502 return pch_udc_readl(dev, reg);
507 * @dev: Reference to pch_udc_dev structure
509 static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
511 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
513 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
518 * @dev: Reference to pch_udc_dev structure
521 static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
523 u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
529 * @dev: Reference to pch_udc_regs structure
531 static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
533 pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
538 * @dev: Reference to pch_udc_regs structure
540 static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
542 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
547 * @dev: Reference to pch_udc_regs structure
549 static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
551 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
556 * @dev: Reference to pch_udc_regs structure
558 static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
561 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
562 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
565 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
571 * @dev: Reference to pch_udc_regs structure
573 static void pch_udc_init(struct pch_udc_dev *dev);
574 static void pch_udc_reconnect(struct pch_udc_dev *dev)
576 pch_udc_init(dev);
580 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
584 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
585 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
588 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
593 * @dev: Reference to pch_udc_regs structure
598 static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
603 spin_lock_irqsave(&dev->lock, iflags);
605 pch_udc_reconnect(dev);
606 dev->vbus_session = 1;
608 if (dev->driver && dev->driver->disconnect) {
609 spin_unlock_irqrestore(&dev->lock, iflags);
610 dev->driver->disconnect(&dev->gadget);
611 spin_lock_irqsave(&dev->lock, iflags);
613 pch_udc_set_disconnect(dev);
614 dev->vbus_session = 0;
616 spin_unlock_irqrestore(&dev->lock, iflags);
740 * @dev: Reference to structure of type pch_udc_regs
745 static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
748 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
750 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
756 * @dev: Reference to structure of type pch_udc_regs
761 static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
764 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
766 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
772 * @dev: reference to structure of type pch_udc_regs
774 static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
776 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
781 * @dev: Reference to structure of type pch_udc_regs
784 static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
787 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
792 * @dev: Reference to structure of type pch_udc_regs
795 static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
798 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
803 * @dev: Reference to structure of type pch_udc_regs
806 static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
809 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
814 * @dev: Reference to structure of type pch_udc_regs
817 static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
820 pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
825 * @dev: Reference to structure of type pch_udc_regs
828 static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
830 return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
835 * @dev: Reference to structure of type pch_udc_regs
838 static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
841 pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
846 * @dev: Reference to structure of type pch_udc_regs
849 static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
851 return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
856 * @dev: Reference to structure of type pch_udc_regs
859 static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
862 pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
867 * @dev: Reference to structure of type pch_udc_regs
870 static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
872 return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
934 struct pch_udc_dev *dev = ep->dev;
944 dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
953 dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
1004 pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
1006 pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
1041 dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
1046 * @dev: Rreference to pch_udc_regs structure
1048 static void pch_udc_init(struct pch_udc_dev *dev)
1050 if (NULL == dev) {
1055 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1056 pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR);
1058 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1059 pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
1062 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1063 pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK);
1066 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1067 pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1071 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1074 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1076 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR,
1085 * @dev: Reference to pch_udc_regs structure
1087 static void pch_udc_exit(struct pch_udc_dev *dev)
1090 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1092 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1094 pch_udc_set_disconnect(dev);
1107 struct pch_udc_dev *dev;
1111 dev = container_of(gadget, struct pch_udc_dev, gadget);
1112 return pch_udc_get_frame(dev);
1125 struct pch_udc_dev *dev;
1130 dev = container_of(gadget, struct pch_udc_dev, gadget);
1131 spin_lock_irqsave(&dev->lock, flags);
1132 pch_udc_rmt_wakeup(dev);
1133 spin_unlock_irqrestore(&dev->lock, flags);
1149 struct pch_udc_dev *dev;
1154 dev = container_of(gadget, struct pch_udc_dev, gadget);
1156 pch_udc_set_selfpowered(dev);
1158 pch_udc_clear_selfpowered(dev);
1174 struct pch_udc_dev *dev;
1180 dev = container_of(gadget, struct pch_udc_dev, gadget);
1182 spin_lock_irqsave(&dev->lock, iflags);
1184 pch_udc_reconnect(dev);
1186 if (dev->driver && dev->driver->disconnect) {
1187 spin_unlock_irqrestore(&dev->lock, iflags);
1188 dev->driver->disconnect(&dev->gadget);
1189 spin_lock_irqsave(&dev->lock, iflags);
1191 pch_udc_set_disconnect(dev);
1193 spin_unlock_irqrestore(&dev->lock, iflags);
1211 struct pch_udc_dev *dev;
1215 dev = container_of(gadget, struct pch_udc_dev, gadget);
1216 pch_udc_vbus_session(dev, is_active);
1253 * @dev: Reference to the driver structure
1260 static int pch_vbus_gpio_get_value(struct pch_udc_dev *dev)
1264 if (dev->vbus_gpio.port)
1265 vbus = gpiod_get_value(dev->vbus_gpio.port) ? 1 : 0;
1282 struct pch_udc_dev *dev =
1288 if (!dev->vbus_gpio.port)
1293 vbus = pch_vbus_gpio_get_value(dev);
1296 dev_dbg(&dev->pdev->dev, "VBUS fell");
1297 if (dev->driver
1298 && dev->driver->disconnect) {
1299 dev->driver->disconnect(
1300 &dev->gadget);
1302 if (dev->vbus_gpio.intr)
1303 pch_udc_init(dev);
1305 pch_udc_reconnect(dev);
1323 struct pch_udc_dev *dev =
1327 if (!dev->vbus_gpio.port)
1331 vbus = pch_vbus_gpio_get_value(dev);
1334 dev_dbg(&dev->pdev->dev, "VBUS rose");
1335 pch_udc_reconnect(dev);
1351 struct pch_udc_dev *dev = (struct pch_udc_dev *)data;
1353 if (!dev->vbus_gpio.port || !dev->vbus_gpio.intr)
1356 if (pch_vbus_gpio_get_value(dev))
1357 schedule_work(&dev->vbus_gpio.irq_work_rise);
1359 schedule_work(&dev->vbus_gpio.irq_work_fall);
1388 static int pch_vbus_gpio_add_table(struct pch_udc_dev *dev)
1390 struct device *d = &dev->pdev->dev;
1403 * @dev: Reference to the driver structure
1409 static int pch_vbus_gpio_init(struct pch_udc_dev *dev)
1411 struct device *d = &dev->pdev->dev;
1416 dev->vbus_gpio.port = NULL;
1417 dev->vbus_gpio.intr = 0;
1419 err = pch_vbus_gpio_add_table(dev);
1429 dev->vbus_gpio.port = gpiod;
1430 INIT_WORK(&dev->vbus_gpio.irq_work_fall, pch_vbus_gpio_work_fall);
1436 "vbus_detect", dev);
1438 dev->vbus_gpio.intr = irq_num;
1439 INIT_WORK(&dev->vbus_gpio.irq_work_rise,
1452 * @dev: Reference to the driver structure
1454 static void pch_vbus_gpio_free(struct pch_udc_dev *dev)
1456 if (dev->vbus_gpio.intr)
1457 free_irq(dev->vbus_gpio.intr, dev);
1469 __releases(&dev->lock)
1470 __acquires(&dev->lock)
1472 struct pch_udc_dev *dev;
1483 dev = ep->dev;
1487 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1491 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1497 dma_unmap_single(&dev->pdev->dev, req->dma,
1501 dma_unmap_single(&dev->pdev->dev, req->dma,
1512 spin_unlock(&dev->lock);
1516 spin_lock(&dev->lock);
1538 * @dev: Reference to the driver structure
1544 static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
1557 dma_pool_free(dev->data_requests, td, addr);
1586 pch_udc_free_dma_chain(ep->dev, req);
1599 td = dma_pool_alloc(ep->dev->data_requests, gfp_flags,
1617 pch_udc_free_dma_chain(ep->dev, req);
1659 struct pch_udc_dev *dev = ep->dev;
1667 if (dev->set_cfg_not_acked) {
1668 pch_udc_set_csr_done(dev);
1669 dev->set_cfg_not_acked = 0;
1672 if (!dev->stall && dev->waiting_zlp_ack) {
1673 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
1674 dev->waiting_zlp_ack = 0;
1688 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1701 pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
1702 pch_udc_set_dma(ep->dev, DMA_DIR_RX);
1722 struct pch_udc_dev *dev;
1730 dev = ep->dev;
1731 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1733 spin_lock_irqsave(&dev->lock, iflags);
1736 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1738 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1739 spin_unlock_irqrestore(&dev->lock, iflags);
1764 spin_lock_irqsave(&ep->dev->lock, iflags);
1768 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1771 spin_unlock_irqrestore(&ep->dev->lock, iflags);
1801 if (!ep->dev->dma_addr)
1804 dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp,
1830 struct pch_udc_dev *dev;
1836 dev = ep->dev;
1838 dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
1842 pch_udc_free_dma_chain(ep->dev, req);
1843 dma_pool_free(ep->dev->data_requests, req->td_data,
1865 struct pch_udc_dev *dev;
1872 dev = ep->dev;
1878 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1880 spin_lock_irqsave(&dev->lock, iflags);
1886 usbreq->dma = dma_map_single(&dev->pdev->dev,
1891 usbreq->dma = dma_map_single(&dev->pdev->dev,
1903 req->dma = dma_map_single(&dev->pdev->dev,
1908 req->dma = dma_map_single(&dev->pdev->dev,
1940 pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
1948 spin_unlock_irqrestore(&dev->lock, iflags);
1974 spin_lock_irqsave(&ep->dev->lock, flags);
1985 spin_unlock_irqrestore(&ep->dev->lock, flags);
2010 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
2016 ep->dev->stall = 1;
2019 ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2051 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
2058 ep->dev->stall = 1;
2060 pch_udc_enable_ep_interrupts(ep->dev,
2062 ep->dev->prot_stall = 1;
2147 pch_udc_set_dma(ep->dev, DMA_DIR_TX);
2149 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2160 struct pch_udc_dev *dev = ep->dev;
2170 dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
2185 pch_udc_enable_ep_interrupts(ep->dev,
2188 pch_udc_disable_ep_interrupts(ep->dev,
2200 struct pch_udc_dev *dev = ep->dev;
2209 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
2219 dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x "
2231 dev_err(&dev->pdev->dev, "Not complete RX descriptor");
2256 * @dev: Reference to the device structure
2259 static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
2264 ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2278 pch_udc_enable_ep_interrupts(ep->dev,
2282 if (!dev->prot_stall) {
2286 pch_udc_enable_ep_interrupts(ep->dev,
2300 * @dev: Reference to the device structure
2303 static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
2309 ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
2328 pch_udc_enable_ep_interrupts(ep->dev,
2332 if (!dev->prot_stall) {
2336 pch_udc_enable_ep_interrupts(ep->dev,
2342 if (ep->dev->prot_stall == 1) {
2344 pch_udc_enable_ep_interrupts(ep->dev,
2351 pch_udc_set_dma(dev, DMA_DIR_RX);
2354 static int pch_udc_gadget_setup(struct pch_udc_dev *dev)
2355 __must_hold(&dev->lock)
2360 if (!dev->driver)
2363 spin_unlock(&dev->lock);
2364 rc = dev->driver->setup(&dev->gadget, &dev->setup_data);
2365 spin_lock(&dev->lock);
2371 * @dev: Reference to the device structure
2373 static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
2379 ep = &dev->ep[UDC_EP0IN_IDX];
2380 ep_out = &dev->ep[UDC_EP0OUT_IDX];
2392 if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
2394 pch_udc_clear_dma(dev, DMA_DIR_RX);
2399 pch_udc_set_dma(dev, DMA_DIR_RX);
2411 * @dev: Reference to the device structure
2413 static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
2414 __releases(&dev->lock)
2415 __acquires(&dev->lock)
2421 ep = &dev->ep[UDC_EP0OUT_IDX];
2428 dev->stall = 0;
2429 dev->ep[UDC_EP0IN_IDX].halted = 0;
2430 dev->ep[UDC_EP0OUT_IDX].halted = 0;
2431 dev->setup_data = ep->td_stp->request;
2433 pch_udc_clear_dma(dev, DMA_DIR_RX);
2434 pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
2435 dev->ep[UDC_EP0IN_IDX].in);
2436 if ((dev->setup_data.bRequestType & USB_DIR_IN))
2437 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2439 dev->gadget.ep0 = &ep->ep;
2441 if ((dev->setup_data.bRequestType == 0x21) &&
2442 (dev->setup_data.bRequest == 0xFF))
2443 dev->prot_stall = 0;
2445 setup_supported = pch_udc_gadget_setup(dev);
2447 if (dev->setup_data.bRequestType & USB_DIR_IN) {
2456 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
2459 if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
2460 pch_udc_set_dma(dev, DMA_DIR_RX);
2465 pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
2466 pch_udc_enable_ep_interrupts(ep->dev,
2468 dev->stall = 0;
2469 pch_udc_set_dma(dev, DMA_DIR_RX);
2471 dev->waiting_zlp_ack = 1;
2474 UDC_EPSTS_OUT_DATA) && !dev->stall) {
2475 pch_udc_clear_dma(dev, DMA_DIR_RX);
2479 pch_udc_svc_data_out(dev, PCH_UDC_EP0);
2481 pch_udc_set_dma(dev, DMA_DIR_RX);
2490 * @dev: Reference to the device structure
2493 static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
2495 struct pch_udc_ep *ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2498 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2504 * @dev: Reference to the device structure
2507 static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
2515 ep = &dev->ep[UDC_EPIN_IDX(i)];
2521 ep = &dev->ep[UDC_EPOUT_IDX(i)];
2531 * @dev: Reference to the device structure
2533 static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
2539 ep = &dev->ep[UDC_EP0IN_IDX];
2551 ep = &dev->ep[UDC_EP0OUT_IDX];
2557 pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
2568 ep->td_data->dataptr = dev->dma_addr;
2577 * @dev: Reference to driver structure
2579 static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2584 pch_udc_clear_dma(dev, DMA_DIR_TX);
2585 pch_udc_clear_dma(dev, DMA_DIR_RX);
2587 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2589 pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2592 ep = &dev->ep[i];
2596 pch_udc_write_csr(ep->dev, 0x00, i);
2598 dev->stall = 0;
2599 dev->prot_stall = 0;
2600 dev->waiting_zlp_ack = 0;
2601 dev->set_cfg_not_acked = 0;
2605 ep = &dev->ep[i];
2611 if (dev->driver) {
2612 spin_unlock(&dev->lock);
2613 usb_gadget_udc_reset(&dev->gadget, dev->driver);
2614 spin_lock(&dev->lock);
2621 * @dev: Reference to driver structure
2623 static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
2628 dev_stat = pch_udc_read_device_status(dev);
2644 dev->gadget.speed = speed;
2645 pch_udc_activate_control_ep(dev);
2646 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
2647 pch_udc_set_dma(dev, DMA_DIR_TX);
2648 pch_udc_set_dma(dev, DMA_DIR_RX);
2649 pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
2652 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2660 * @dev: Reference to driver structure
2662 static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
2667 dev_stat = pch_udc_read_device_status(dev);
2668 dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
2670 dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
2672 dev->set_cfg_not_acked = 1;
2674 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2675 dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
2676 dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
2677 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
2678 dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
2681 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2683 (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
2685 (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
2686 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2689 pch_udc_ep_clear_stall(&(dev->ep[i]));
2690 dev->ep[i].halted = 0;
2692 dev->stall = 0;
2693 pch_udc_gadget_setup(dev);
2699 * @dev: Reference to driver structure
2701 static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
2706 dev_stat = pch_udc_read_device_status(dev);
2707 dev->set_cfg_not_acked = 1;
2708 dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
2711 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2712 dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
2713 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
2716 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2718 (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
2719 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2722 pch_udc_ep_clear_stall(&(dev->ep[i]));
2723 dev->ep[i].halted = 0;
2725 dev->stall = 0;
2728 pch_udc_gadget_setup(dev);
2734 * @dev: Reference to the device structure
2737 static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
2743 pch_udc_svc_ur_interrupt(dev);
2744 dev_dbg(&dev->pdev->dev, "USB_RESET\n");
2748 pch_udc_svc_enum_interrupt(dev);
2749 dev_dbg(&dev->pdev->dev, "USB_ENUM\n");
2753 pch_udc_svc_intf_interrupt(dev);
2756 pch_udc_svc_cfg_interrupt(dev);
2759 if (dev->driver
2760 && dev->driver->suspend) {
2761 spin_unlock(&dev->lock);
2762 dev->driver->suspend(&dev->gadget);
2763 spin_lock(&dev->lock);
2766 vbus = pch_vbus_gpio_get_value(dev);
2767 if ((dev->vbus_session == 0)
2769 if (dev->driver && dev->driver->disconnect) {
2770 spin_unlock(&dev->lock);
2771 dev->driver->disconnect(&dev->gadget);
2772 spin_lock(&dev->lock);
2774 pch_udc_reconnect(dev);
2775 } else if ((dev->vbus_session == 0)
2777 && !dev->vbus_gpio.intr)
2778 schedule_work(&dev->vbus_gpio.irq_work_fall);
2780 dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
2784 dev_dbg(&dev->pdev->dev, "SOF\n");
2787 dev_dbg(&dev->pdev->dev, "ES\n");
2790 dev_dbg(&dev->pdev->dev, "RWKP\n");
2800 struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
2804 dev_intr = pch_udc_read_device_interrupts(dev);
2805 ep_intr = pch_udc_read_ep_interrupts(dev);
2809 if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
2810 dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
2812 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
2817 pch_udc_write_device_interrupts(dev, dev_intr);
2820 pch_udc_write_ep_interrupts(dev, ep_intr);
2823 spin_lock(&dev->lock);
2825 pch_udc_dev_isr(dev, dev_intr);
2827 pch_udc_read_all_epstatus(dev, ep_intr);
2830 pch_udc_svc_control_in(dev);
2831 pch_udc_postsvc_epinters(dev, 0);
2835 pch_udc_svc_control_out(dev);
2839 pch_udc_svc_data_in(dev, i);
2840 pch_udc_postsvc_epinters(dev, i);
2847 pch_udc_svc_data_out(dev, i -
2850 spin_unlock(&dev->lock);
2856 * @dev: Reference to the device structure
2858 static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
2861 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
2864 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2871 * @dev: Reference to the driver structure
2873 static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
2885 dev->gadget.speed = USB_SPEED_UNKNOWN;
2886 INIT_LIST_HEAD(&dev->gadget.ep_list);
2889 memset(dev->ep, 0, sizeof dev->ep);
2891 struct pch_udc_ep *ep = &dev->ep[i];
2892 ep->dev = dev;
2915 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
2918 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IDX].ep, UDC_EP0IN_MAX_PKT_SIZE);
2919 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IDX].ep, UDC_EP0OUT_MAX_PKT_SIZE);
2922 list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
2923 list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
2925 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2926 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
2931 * @dev: Reference to the driver structure
2937 static int pch_udc_pcd_init(struct pch_udc_dev *dev)
2941 pch_udc_init(dev);
2942 pch_udc_pcd_reinit(dev);
2944 ret = pch_vbus_gpio_init(dev);
2946 pch_udc_exit(dev);
2952 * @dev: reference to struct pci_dev
2954 static int init_dma_pools(struct pch_udc_dev *dev)
2961 dev->data_requests = dma_pool_create("data_requests", &dev->pdev->dev,
2963 if (!dev->data_requests) {
2964 dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
2970 dev->stp_requests = dma_pool_create("setup requests", &dev->pdev->dev,
2972 if (!dev->stp_requests) {
2973 dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
2978 td_stp = dma_pool_alloc(dev->stp_requests, GFP_KERNEL,
2979 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2981 dev_err(&dev->pdev->dev,
2985 dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
2988 td_data = dma_pool_alloc(dev->data_requests, GFP_KERNEL,
2989 &dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2991 dev_err(&dev->pdev->dev,
2995 dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
2996 dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
2997 dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
2998 dev->ep[UDC_EP0IN_IDX].td_data = NULL;
2999 dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
3001 ep0out_buf = devm_kzalloc(&dev->pdev->dev, UDC_EP0OUT_BUFF_SIZE * 4,
3005 dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf,
3008 return dma_mapping_error(&dev->pdev->dev, dev->dma_addr);
3014 struct pch_udc_dev *dev = to_pch_udc(g);
3017 dev->driver = driver;
3020 pch_udc_setup_ep0(dev);
3023 if ((pch_vbus_gpio_get_value(dev) != 0) || !dev->vbus_gpio.intr)
3024 pch_udc_clear_disconnect(dev);
3026 dev->connected = 1;
3032 struct pch_udc_dev *dev = to_pch_udc(g);
3034 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
3037 dev->driver = NULL;
3038 dev->connected = 0;
3041 pch_udc_set_disconnect(dev);
3048 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
3050 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
3051 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
3054 pch_udc_set_disconnect(dev);
3059 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
3061 usb_del_gadget_udc(&dev->gadget);
3064 if (dev->driver)
3065 dev_err(&pdev->dev,
3068 dma_pool_destroy(dev->data_requests);
3070 if (dev->stp_requests) {
3072 if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
3073 dma_pool_free(dev->stp_requests,
3074 dev->ep[UDC_EP0OUT_IDX].td_stp,
3075 dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
3077 if (dev->ep[UDC_EP0OUT_IDX].td_data) {
3078 dma_pool_free(dev->stp_requests,
3079 dev->ep[UDC_EP0OUT_IDX].td_data,
3080 dev->ep[UDC_EP0OUT_IDX].td_data_phys);
3082 dma_pool_destroy(dev->stp_requests);
3085 if (dev->dma_addr)
3086 dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
3089 pch_vbus_gpio_free(dev);
3091 pch_udc_exit(dev);
3097 struct pch_udc_dev *dev = dev_get_drvdata(d);
3099 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
3100 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
3121 struct pch_udc_dev *dev;
3124 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
3125 if (!dev)
3133 dev->pdev = pdev;
3134 pci_set_drvdata(pdev, dev);
3147 dev->base_addr = pcim_iomap_table(pdev)[bar];
3150 retval = pch_udc_pcd_init(dev);
3156 retval = devm_request_irq(&pdev->dev, pdev->irq, pch_udc_isr,
3157 IRQF_SHARED, KBUILD_MODNAME, dev);
3159 dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
3168 spin_lock_init(&dev->lock);
3169 dev->gadget.ops = &pch_udc_ops;
3171 retval = init_dma_pools(dev);
3175 dev->gadget.name = KBUILD_MODNAME;
3176 dev->gadget.max_speed = USB_SPEED_HIGH;
3179 pch_udc_set_disconnect(dev);
3180 retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget);