Lines Matching defs:udc
101 struct lpc32xx_udc *udc;
189 dev_dbg(epp->udc->dev, "%s: " fmt, __func__, ## arg)
191 dev_err(epp->udc->dev, "%s: " fmt, __func__, ## arg)
193 dev_info(epp->udc->dev, "%s: " fmt, __func__, ## arg)
195 dev_warn(epp->udc->dev, "%s:" fmt, __func__, ## arg)
472 static const char debug_filename[] = "driver/udc";
500 struct lpc32xx_udc *udc = s->private;
506 spin_lock_irqsave(&udc->lock, flags);
509 udc->vbus ? "present" : "off",
510 udc->enabled ? (udc->vbus ? "active" : "enabled") :
512 udc->gadget.is_selfpowered ? "self" : "VBUS",
513 udc->suspended ? ", suspended" : "",
514 udc->driver ? udc->driver->driver.name : "(none)");
516 if (udc->enabled && udc->vbus) {
517 proc_ep_show(s, &udc->ep[0]);
518 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list)
522 spin_unlock_irqrestore(&udc->lock, flags);
527 DEFINE_SHOW_ATTRIBUTE(udc);
529 static void create_debug_file(struct lpc32xx_udc *udc)
531 udc->pde = debugfs_create_file(debug_filename, 0, NULL, udc, &udc_fops);
534 static void remove_debug_file(struct lpc32xx_udc *udc)
536 debugfs_remove(udc->pde);
540 static inline void create_debug_file(struct lpc32xx_udc *udc) {}
541 static inline void remove_debug_file(struct lpc32xx_udc *udc) {}
545 static void isp1301_udc_configure(struct lpc32xx_udc *udc)
550 vendor = i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x00);
551 product = i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x02);
554 udc->atx = STOTG04;
560 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
565 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
567 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
573 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
577 if (udc->atx != STOTG04)
579 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
583 if (udc->board->vbus_drv_pol != 0)
584 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
587 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
594 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
596 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
601 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
604 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
608 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
611 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
613 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
616 dev_info(udc->dev, "ISP1301 Vendor ID : 0x%04x\n", vendor);
617 dev_info(udc->dev, "ISP1301 Product ID : 0x%04x\n", product);
618 dev_info(udc->dev, "ISP1301 Version ID : 0x%04x\n",
619 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x14));
624 static void isp1301_pullup_set(struct lpc32xx_udc *udc)
626 if (udc->pullup)
628 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
632 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
639 struct lpc32xx_udc *udc =
642 isp1301_pullup_set(udc);
645 static void isp1301_pullup_enable(struct lpc32xx_udc *udc, int en_pullup,
648 if (en_pullup == udc->pullup)
651 udc->pullup = en_pullup;
653 isp1301_pullup_set(udc);
656 schedule_work(&udc->pullup_job);
661 static void isp1301_set_powerstate(struct lpc32xx_udc *udc, int enable)
664 if (udc->atx == STOTG04)
670 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
675 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
681 struct lpc32xx_udc *udc =
684 isp1301_set_powerstate(udc, udc->poweron);
694 static void udc_protocol_cmd_w(struct lpc32xx_udc *udc, u32 cmd)
700 u32 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
704 writel(USBD_CCEMPTY, USBD_DEVINTCLR(udc->udp_baseaddr));
707 writel(cmd, USBD_CMDCODE(udc->udp_baseaddr));
709 while (((readl(USBD_DEVINTST(udc->udp_baseaddr)) &
722 static inline void udc_protocol_cmd_data_w(struct lpc32xx_udc *udc, u32 cmd,
725 udc_protocol_cmd_w(udc, cmd);
726 udc_protocol_cmd_w(udc, data);
731 static u32 udc_protocol_cmd_r(struct lpc32xx_udc *udc, u32 cmd)
737 USBD_DEVINTCLR(udc->udp_baseaddr));
740 udc_protocol_cmd_w(udc, cmd);
742 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & USBD_CDFULL))
746 dev_dbg(udc->dev,
749 return readl(USBD_CMDDATA(udc->udp_baseaddr));
758 static inline void uda_enable_devint(struct lpc32xx_udc *udc, u32 devmask)
760 udc->enabled_devints |= devmask;
761 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
765 static inline void uda_disable_devint(struct lpc32xx_udc *udc, u32 mask)
767 udc->enabled_devints &= ~mask;
768 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
772 static inline void uda_clear_devint(struct lpc32xx_udc *udc, u32 mask)
774 writel(mask, USBD_DEVINTCLR(udc->udp_baseaddr));
783 static void uda_enable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
785 udc->enabled_hwepints |= (1 << hwep);
786 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
790 static void uda_disable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
792 udc->enabled_hwepints &= ~(1 << hwep);
793 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
797 static inline void uda_clear_hwepint(struct lpc32xx_udc *udc, u32 hwep)
799 writel((1 << hwep), USBD_EPINTCLR(udc->udp_baseaddr));
803 static inline void udc_ep_dma_enable(struct lpc32xx_udc *udc, u32 hwep)
805 writel((1 << hwep), USBD_EPDMAEN(udc->udp_baseaddr));
809 static inline void udc_ep_dma_disable(struct lpc32xx_udc *udc, u32 hwep)
811 writel((1 << hwep), USBD_EPDMADIS(udc->udp_baseaddr));
822 static void udc_realize_hwep(struct lpc32xx_udc *udc, u32 hwep,
827 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
828 writel(hwep, USBD_EPIND(udc->udp_baseaddr));
829 udc->realized_eps |= (1 << hwep);
830 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
831 writel(maxpacket, USBD_EPMAXPSIZE(udc->udp_baseaddr));
834 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) &
838 dev_dbg(udc->dev, "EP not correctly realized in hardware\n");
840 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
844 static void udc_unrealize_hwep(struct lpc32xx_udc *udc, u32 hwep)
846 udc->realized_eps &= ~(1 << hwep);
847 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
856 static u32 udc_selep_clrint(struct lpc32xx_udc *udc, u32 hwep)
858 udc_protocol_cmd_w(udc, CMD_SEL_EP_CLRI(hwep));
859 return udc_protocol_cmd_r(udc, DAT_SEL_EP_CLRI(hwep));
863 static void udc_disable_hwep(struct lpc32xx_udc *udc, u32 hwep)
865 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
870 static void udc_stall_hwep(struct lpc32xx_udc *udc, u32 hwep)
872 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
877 static void udc_clrstall_hwep(struct lpc32xx_udc *udc, u32 hwep)
879 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
884 static void udc_select_hwep(struct lpc32xx_udc *udc, u32 hwep)
886 udc_protocol_cmd_w(udc, CMD_SEL_EP(hwep));
895 static void udc_clr_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
897 udc_select_hwep(udc, hwep);
898 udc_protocol_cmd_w(udc, CMD_CLR_BUF);
902 static void udc_val_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
904 udc_select_hwep(udc, hwep);
905 udc_protocol_cmd_w(udc, CMD_VALID_BUF);
908 static inline u32 udc_clearep_getsts(struct lpc32xx_udc *udc, u32 hwep)
911 uda_clear_hwepint(udc, hwep);
912 return udc_selep_clrint(udc, hwep);
921 static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
926 dd = dma_pool_alloc(udc->dd_cache, GFP_ATOMIC | GFP_DMA, &dma);
934 static void udc_dd_free(struct lpc32xx_udc *udc, struct lpc32xx_usbd_dd_gad *dd)
936 dma_pool_free(udc->dd_cache, dd, dd->this_dma);
947 static void udc_clk_set(struct lpc32xx_udc *udc, int enable)
950 if (udc->clocked)
953 udc->clocked = 1;
954 clk_prepare_enable(udc->usb_slv_clk);
956 if (!udc->clocked)
959 udc->clocked = 0;
960 clk_disable_unprepare(udc->usb_slv_clk);
965 static void udc_set_address(struct lpc32xx_udc *udc, u32 addr)
969 udc_protocol_cmd_data_w(udc, CMD_SET_ADDR,
976 static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
987 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
990 udc_ep_dma_enable(udc, hwep);
1002 static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1013 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1016 udc_ep_dma_enable(udc, hwep);
1020 static void udc_disable(struct lpc32xx_udc *udc)
1025 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1026 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(0));
1029 uda_disable_devint(udc, 0x3FF);
1033 uda_disable_hwepint(udc, i);
1034 uda_clear_hwepint(udc, i);
1035 udc_disable_hwep(udc, i);
1036 udc_unrealize_hwep(udc, i);
1037 udc->udca_v_base[i] = 0;
1040 udc_ep_dma_disable(udc, i);
1041 writel((1 << i), USBD_EOTINTCLR(udc->udp_baseaddr));
1042 writel((1 << i), USBD_NDDRTINTCLR(udc->udp_baseaddr));
1043 writel((1 << i), USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1044 writel((1 << i), USBD_DMARCLR(udc->udp_baseaddr));
1048 writel(0, USBD_DMAINTEN(udc->udp_baseaddr));
1050 writel(0, USBD_UDCAH(udc->udp_baseaddr));
1053 static void udc_enable(struct lpc32xx_udc *udc)
1056 struct lpc32xx_ep *ep = &udc->ep[0];
1059 udc_disable(udc);
1062 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON));
1065 writel(USBD_EP_FAST, USBD_DEVINTPRI(udc->udp_baseaddr));
1066 writel(0xFFFF, USBD_EPINTPRI(udc->udp_baseaddr));
1069 writel(0x3FF, USBD_DEVINTCLR(udc->udp_baseaddr));
1072 writel(udc->udca_p_base, USBD_UDCAH(udc->udp_baseaddr));
1076 udc_realize_hwep(udc, i, ep->ep.maxpacket);
1077 uda_enable_hwepint(udc, i);
1078 udc_select_hwep(udc, i);
1079 udc_clrstall_hwep(udc, i);
1080 udc_clr_buffer_hwep(udc, i);
1084 uda_clear_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1086 uda_enable_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1091 udc_set_address(udc, 0);
1092 udc_set_address(udc, 0);
1096 USBD_DMAINTEN(udc->udp_baseaddr));
1098 udc->dev_status = 0;
1107 static void uda_power_event(struct lpc32xx_udc *udc, u32 conn)
1110 if (udc->board->conn_chgb != NULL)
1111 udc->board->conn_chgb(conn);
1115 static void uda_resm_susp_event(struct lpc32xx_udc *udc, u32 conn)
1118 if (udc->board->susp_chgb != NULL)
1119 udc->board->susp_chgb(conn);
1122 udc->suspended = 0;
1124 udc->suspended = 1;
1128 static void uda_remwkp_cgh(struct lpc32xx_udc *udc)
1130 if (udc->board->rmwk_chgb != NULL)
1131 udc->board->rmwk_chgb(udc->dev_status &
1136 static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1150 *p32++ = readl(USBD_RXDATA(udc->udp_baseaddr));
1155 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1166 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1183 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1191 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1203 static u32 udc_read_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1211 writel(hwrep, USBD_CTRL(udc->udp_baseaddr));
1214 while ((((tmpv = readl(USBD_RXPLEN(udc->udp_baseaddr))) &
1218 dev_dbg(udc->dev, "No packet ready on FIFO EP read\n");
1226 udc_pop_fifo(udc, (u8 *) data, tmp);
1228 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1231 udc_clr_buffer_hwep(udc, hwep);
1237 static void udc_stuff_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1251 writel(*p32++, USBD_TXDATA(udc->udp_baseaddr));
1260 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1276 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1288 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1298 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1307 static void udc_write_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1316 writel(hwwep, USBD_CTRL(udc->udp_baseaddr));
1318 writel(bytes, USBD_TXPLEN(udc->udp_baseaddr));
1322 writel(0, USBD_TXDATA(udc->udp_baseaddr));
1324 udc_stuff_fifo(udc, (u8 *) data, bytes);
1326 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1328 udc_val_buffer_hwep(udc, hwep);
1333 static void uda_usb_reset(struct lpc32xx_udc *udc)
1337 udc_enable(udc);
1338 udc->gadget.speed = USB_SPEED_FULL;
1341 struct lpc32xx_ep *ep = &udc->ep[i];
1347 static void udc_ep0_send_zlp(struct lpc32xx_udc *udc)
1349 udc_write_hwep(udc, EP_IN, NULL, 0);
1353 static u16 udc_get_current_frame(struct lpc32xx_udc *udc)
1357 udc_protocol_cmd_w(udc, CMD_RD_FRAME);
1358 flo = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1359 fhi = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1365 static inline void udc_set_device_configured(struct lpc32xx_udc *udc)
1367 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(CONF_DVICE));
1371 static inline void udc_set_device_unconfigured(struct lpc32xx_udc *udc)
1373 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1377 static void udc_reinit(struct lpc32xx_udc *udc)
1381 INIT_LIST_HEAD(&udc->gadget.ep_list);
1382 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
1385 struct lpc32xx_ep *ep = &udc->ep[i];
1388 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
1394 udc->ep0state = WAIT_FOR_SETUP;
1400 struct lpc32xx_udc *udc = ep->udc;
1409 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in);
1412 udc_dd_free(udc, req->dd_desc_ptr);
1419 spin_unlock(&udc->lock);
1421 spin_lock(&udc->lock);
1435 uda_disable_hwepint(ep->udc, ep->hwep_num);
1436 udc_disable_hwep(ep->udc, ep->hwep_num);
1441 static int udc_ep0_in_req(struct lpc32xx_udc *udc)
1444 struct lpc32xx_ep *ep0 = &udc->ep[0];
1457 udc_ep0_send_zlp(udc);
1464 udc_write_hwep(udc, EP_IN, (req->req.buf + req->req.actual), ts);
1473 udc->ep0state = WAIT_FOR_SETUP;
1479 static int udc_ep0_out_req(struct lpc32xx_udc *udc)
1482 struct lpc32xx_ep *ep0 = &udc->ep[0];
1495 udc->ep0state = WAIT_FOR_SETUP;
1506 tr = udc_read_hwep(udc, EP_OUT, req->req.buf + req->req.actual,
1513 udc->ep0state = WAIT_FOR_SETUP;
1522 static void stop_activity(struct lpc32xx_udc *udc)
1524 struct usb_gadget_driver *driver = udc->driver;
1527 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1530 udc->gadget.speed = USB_SPEED_UNKNOWN;
1531 udc->suspended = 0;
1534 struct lpc32xx_ep *ep = &udc->ep[i];
1538 spin_unlock(&udc->lock);
1539 driver->disconnect(&udc->gadget);
1540 spin_lock(&udc->lock);
1543 isp1301_pullup_enable(udc, 0, 0);
1544 udc_disable(udc);
1545 udc_reinit(udc);
1552 static void pullup(struct lpc32xx_udc *udc, int is_on)
1554 if (!udc->clocked)
1557 if (!udc->enabled || !udc->vbus)
1560 if (is_on != udc->pullup)
1561 isp1301_pullup_enable(udc, is_on, 0);
1568 struct lpc32xx_udc *udc = ep->udc;
1573 spin_lock_irqsave(&udc->lock, flags);
1578 udc_ep_dma_disable(udc, ep->hwep_num);
1579 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1580 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1581 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1582 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1585 udc->udca_v_base[ep->hwep_num] = 0;
1588 uda_clear_hwepint(udc, ep->hwep_num);
1589 udc_unrealize_hwep(udc, ep->hwep_num);
1593 spin_unlock_irqrestore(&udc->lock, flags);
1595 atomic_dec(&udc->enabled_ep_cnt);
1596 wake_up(&udc->ep_disable_wait_queue);
1606 struct lpc32xx_udc *udc;
1616 udc = ep->udc;
1619 dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
1625 dev_dbg(udc->dev, "Can't re-enable EP0!!!\n");
1630 if ((!udc->driver) || (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1631 dev_dbg(udc->dev, "bogus device state\n");
1642 dev_dbg(udc->dev,
1657 dev_dbg(udc->dev,
1666 spin_lock_irqsave(&udc->lock, flags);
1684 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket);
1685 udc_clr_buffer_hwep(udc, ep->hwep_num);
1686 uda_disable_hwepint(udc, ep->hwep_num);
1687 udc_clrstall_hwep(udc, ep->hwep_num);
1690 udc_ep_dma_disable(udc, ep->hwep_num);
1691 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1692 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1693 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1694 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1696 spin_unlock_irqrestore(&udc->lock, flags);
1698 atomic_inc(&udc->enabled_ep_cnt);
1739 struct lpc32xx_udc *udc;
1750 udc = ep->udc;
1752 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1758 status = usb_gadget_map_request(&udc->gadget, _req, ep->is_in);
1763 dd = udc_dd_alloc(udc);
1793 spin_lock_irqsave(&udc->lock, flags);
1807 udc->ep0state = DATA_IN;
1808 status = udc_ep0_in_req(udc);
1811 udc->ep0state = DATA_OUT;
1812 status = udc_ep0_out_req(udc);
1817 udc_ep_in_req_dma(udc, ep);
1821 udc_ep_out_req_dma(udc, ep);
1825 spin_unlock_irqrestore(&udc->lock, flags);
1841 spin_lock_irqsave(&ep->udc->lock, flags);
1849 spin_unlock_irqrestore(&ep->udc->lock, flags);
1855 spin_unlock_irqrestore(&ep->udc->lock, flags);
1864 struct lpc32xx_udc *udc;
1874 udc = ep->udc;
1875 spin_lock_irqsave(&udc->lock, flags);
1879 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
1884 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
1888 spin_unlock_irqrestore(&udc->lock, flags);
1898 if (!_ep || !ep->udc)
1918 static void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1921 udc_clearep_getsts(udc, ep->hwep_num);
1924 udc_write_hwep(udc, ep->hwep_num, NULL, 0);
1932 static void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1940 uda_clear_hwepint(udc, ep->hwep_num);
1943 if (!(udc->enabled_hwepints & (1 << ep->hwep_num)))
1947 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
1957 udc_send_in_zlp(udc, ep);
1958 uda_disable_hwepint(udc, ep->hwep_num);
1970 udc_ep_in_req_dma(udc, ep);
1972 udc_ep_out_req_dma(udc, ep);
1980 static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2002 udc_ep_dma_disable(udc, ep->hwep_num);
2003 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr));
2004 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr));
2007 if (readl(USBD_SYSERRTINTST(udc->udp_baseaddr)) &
2010 USBD_SYSERRTINTCLR(udc->udp_baseaddr));
2073 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) {
2074 udc_clearep_getsts(udc, ep->hwep_num);
2075 uda_enable_hwepint(udc, ep->hwep_num);
2076 udc_clearep_getsts(udc, ep->hwep_num);
2081 udc_send_in_zlp(udc, ep);
2088 udc_clearep_getsts(udc, ep->hwep_num);
2091 udc_ep_in_req_dma(udc, ep);
2093 udc_ep_out_req_dma(udc, ep);
2104 static void udc_handle_dev(struct lpc32xx_udc *udc)
2108 udc_protocol_cmd_w(udc, CMD_GET_DEV_STAT);
2109 tmp = udc_protocol_cmd_r(udc, DAT_GET_DEV_STAT);
2112 uda_usb_reset(udc);
2114 uda_power_event(udc, (tmp & DEV_CON));
2117 if (udc->vbus == 0)
2118 stop_activity(udc);
2119 else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2120 udc->driver) {
2122 udc->poweron = 0;
2123 schedule_work(&udc->pullup_job);
2124 uda_resm_susp_event(udc, 1);
2126 } else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2127 udc->driver && udc->vbus) {
2128 uda_resm_susp_event(udc, 0);
2130 udc->poweron = 1;
2131 schedule_work(&udc->pullup_job);
2136 static int udc_get_status(struct lpc32xx_udc *udc, u16 reqtype, u16 wIndex)
2146 ep0buff = udc->gadget.is_selfpowered;
2147 if (udc->dev_status & (1 << USB_DEVICE_REMOTE_WAKEUP))
2153 ep = &udc->ep[tmp];
2164 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num));
2165 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num));
2178 udc_write_hwep(udc, EP_IN, &ep0buff, 2);
2183 static void udc_handle_ep0_setup(struct lpc32xx_udc *udc)
2185 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0];
2194 bytes = udc_read_hwep(udc, EP_OUT, (u32 *) &ctrlpkt, 8);
2224 udc->dev_status &=
2227 udc->dev_status |=
2229 uda_remwkp_cgh(udc);
2239 ep = &udc->ep[tmp];
2245 udc_stall_hwep(udc, tmp);
2247 udc_clrstall_hwep(udc, tmp);
2258 udc_set_address(udc, wValue);
2264 udc_get_status(udc, reqtype, wIndex);
2271 if (likely(udc->driver)) {
2274 spin_unlock(&udc->lock);
2275 i = udc->driver->setup(&udc->gadget, &ctrlpkt);
2277 spin_lock(&udc->lock);
2282 udc_set_device_configured(udc);
2284 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2289 udc_set_device_unconfigured(udc);
2292 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2299 dev_dbg(udc->dev,
2302 udc->ep0state = WAIT_FOR_SETUP;
2308 udc_ep0_send_zlp(udc); /* ZLP IN packet on data phase */
2313 udc_stall_hwep(udc, EP_IN);
2317 udc_ep0_send_zlp(udc);
2322 static void udc_handle_ep0_in(struct lpc32xx_udc *udc)
2324 struct lpc32xx_ep *ep0 = &udc->ep[0];
2328 epstatus = udc_clearep_getsts(udc, EP_IN);
2336 udc_clrstall_hwep(udc, EP_IN);
2338 udc->ep0state = WAIT_FOR_SETUP;
2345 if (udc->ep0state == DATA_IN)
2346 udc_ep0_in_req(udc);
2350 udc->ep0state = WAIT_FOR_SETUP;
2356 static void udc_handle_ep0_out(struct lpc32xx_udc *udc)
2358 struct lpc32xx_ep *ep0 = &udc->ep[0];
2362 epstatus = udc_clearep_getsts(udc, EP_OUT);
2371 udc_clrstall_hwep(udc, EP_OUT);
2373 udc->ep0state = WAIT_FOR_SETUP;
2383 udc->ep0state = WAIT_FOR_SETUP;
2389 switch (udc->ep0state) {
2391 udc_handle_ep0_setup(udc);
2395 udc_ep0_out_req(udc);
2401 udc->ep0state = WAIT_FOR_SETUP;
2410 struct lpc32xx_udc *udc = to_udc(gadget);
2412 if (!udc->clocked)
2415 spin_lock_irqsave(&udc->lock, flags);
2417 frame = (int) udc_get_current_frame(udc);
2419 spin_unlock_irqrestore(&udc->lock, flags);
2443 struct lpc32xx_udc *udc = to_udc(gadget);
2445 spin_lock_irqsave(&udc->lock, flags);
2448 if (udc->driver) {
2449 udc_clk_set(udc, 1);
2450 udc_enable(udc);
2451 pullup(udc, is_active);
2453 stop_activity(udc);
2454 pullup(udc, 0);
2456 spin_unlock_irqrestore(&udc->lock, flags);
2462 if (atomic_read(&udc->enabled_ep_cnt))
2463 wait_event_interruptible(udc->ep_disable_wait_queue,
2464 (atomic_read(&udc->enabled_ep_cnt) == 0));
2466 spin_lock_irqsave(&udc->lock, flags);
2468 udc_clk_set(udc, 0);
2471 spin_unlock_irqrestore(&udc->lock, flags);
2479 struct lpc32xx_udc *udc = to_udc(gadget);
2482 pullup(udc, is_on);
2728 struct lpc32xx_udc *udc = _udc;
2730 spin_lock(&udc->lock);
2733 devstat = readl(USBD_DEVINTST(udc->udp_baseaddr));
2736 writel(devstat, USBD_DEVINTCLR(udc->udp_baseaddr));
2737 devstat = devstat & udc->enabled_devints;
2741 udc_handle_dev(udc);
2753 udc_protocol_cmd_w(udc, CMD_RD_ERR_STAT);
2754 tmp = udc_protocol_cmd_r(udc, DAT_RD_ERR_STAT);
2755 dev_dbg(udc->dev, "Device error (0x%x)!\n", tmp);
2758 spin_unlock(&udc->lock);
2767 struct lpc32xx_udc *udc = _udc;
2769 spin_lock(&udc->lock);
2772 writel(USBD_EP_FAST, USBD_DEVINTCLR(udc->udp_baseaddr));
2775 tmp = readl(USBD_EPINTST(udc->udp_baseaddr));
2781 udc_handle_ep0_in(udc);
2785 udc_handle_ep0_out(udc);
2794 if (tmp & (1 << udc->ep[i].hwep_num))
2795 udc_handle_eps(udc, &udc->ep[i]);
2799 spin_unlock(&udc->lock);
2806 struct lpc32xx_udc *udc = _udc;
2811 spin_lock(&udc->lock);
2814 tmp = readl(USBD_EOTINTST(udc->udp_baseaddr)) |
2815 (readl(USBD_EPDMAST(udc->udp_baseaddr)) &
2816 readl(USBD_NDDRTINTST(udc->udp_baseaddr))) |
2817 readl(USBD_SYSERRTINTST(udc->udp_baseaddr));
2819 if (tmp & (1 << udc->ep[i].hwep_num))
2820 udc_handle_dma_ep(udc, &udc->ep[i]);
2823 spin_unlock(&udc->lock);
2833 static void vbus_work(struct lpc32xx_udc *udc)
2837 if (udc->enabled != 0) {
2839 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2846 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2851 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2856 value = i2c_smbus_read_byte_data(udc->isp1301_i2c_client,
2861 udc->vbus = 1;
2863 udc->vbus = 0;
2866 if (udc->last_vbus != udc->vbus) {
2867 udc->last_vbus = udc->vbus;
2868 lpc32xx_vbus_session(&udc->gadget, udc->vbus);
2875 struct lpc32xx_udc *udc = _udc;
2877 vbus_work(udc);
2885 struct lpc32xx_udc *udc = to_udc(gadget);
2888 dev_err(udc->dev, "bad parameter.\n");
2892 if (udc->driver) {
2893 dev_err(udc->dev, "UDC already has a gadget driver\n");
2897 udc->driver = driver;
2898 udc->gadget.dev.of_node = udc->dev->of_node;
2899 udc->enabled = 1;
2900 udc->gadget.is_selfpowered = 1;
2901 udc->vbus = 0;
2904 udc->last_vbus = udc->vbus = 0;
2905 vbus_work(udc);
2908 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2910 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2918 struct lpc32xx_udc *udc = to_udc(gadget);
2920 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2922 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2925 if (udc->clocked) {
2926 spin_lock(&udc->lock);
2927 stop_activity(udc);
2928 spin_unlock(&udc->lock);
2935 if (atomic_read(&udc->enabled_ep_cnt))
2936 wait_event_interruptible(udc->ep_disable_wait_queue,
2937 (atomic_read(&udc->enabled_ep_cnt) == 0));
2939 spin_lock(&udc->lock);
2940 udc_clk_set(udc, 0);
2941 spin_unlock(&udc->lock);
2944 udc->enabled = 0;
2945 udc->driver = NULL;
2953 struct lpc32xx_udc *udc = platform_get_drvdata(dev);
2955 pullup(udc, 0);
2991 struct lpc32xx_udc *udc;
2996 udc = devm_kmemdup(dev, &controller_template, sizeof(*udc), GFP_KERNEL);
2997 if (!udc)
3001 udc->ep[i].udc = udc;
3002 udc->gadget.ep0 = &udc->ep[0].ep;
3005 udc->gadget.dev.parent = dev;
3006 udc->pdev = pdev;
3007 udc->dev = &pdev->dev;
3008 udc->enabled = 0;
3017 udc->isp1301_i2c_client = isp1301_get_client(isp1301_node);
3019 if (!udc->isp1301_i2c_client) {
3023 dev_info(udc->dev, "ISP1301 I2C device at address 0x%x\n",
3024 udc->isp1301_i2c_client->addr);
3031 udc->board = &lpc32xx_usbddata;
3042 spin_lock_init(&udc->lock);
3046 udc->udp_irq[i] = platform_get_irq(pdev, i);
3047 if (udc->udp_irq[i] < 0)
3048 return udc->udp_irq[i];
3051 udc->udp_baseaddr = devm_platform_ioremap_resource(pdev, 0);
3052 if (IS_ERR(udc->udp_baseaddr)) {
3053 dev_err(udc->dev, "IO map failure\n");
3054 return PTR_ERR(udc->udp_baseaddr);
3058 udc->usb_slv_clk = devm_clk_get(&pdev->dev, NULL);
3059 if (IS_ERR(udc->usb_slv_clk)) {
3060 dev_err(udc->dev, "failed to acquire USB device clock\n");
3061 return PTR_ERR(udc->usb_slv_clk);
3065 retval = clk_prepare_enable(udc->usb_slv_clk);
3067 dev_err(udc->dev, "failed to start USB device clock\n");
3072 udc->poweron = udc->pullup = 0;
3073 INIT_WORK(&udc->pullup_job, pullup_work);
3075 INIT_WORK(&udc->power_job, power_work);
3079 udc->clocked = 1;
3081 isp1301_udc_configure(udc);
3083 udc->udca_v_base = dma_alloc_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3086 if (!udc->udca_v_base) {
3087 dev_err(udc->dev, "error getting UDCA region\n");
3091 udc->udca_p_base = dma_handle;
3092 dev_dbg(udc->dev, "DMA buffer(0x%x bytes), P:0x%08x, V:0x%p\n",
3093 UDCA_BUFF_SIZE, udc->udca_p_base, udc->udca_v_base);
3096 udc->dd_cache = dma_pool_create("udc_dd", udc->dev,
3099 if (!udc->dd_cache) {
3100 dev_err(udc->dev, "error getting DD DMA region\n");
3106 udc_disable(udc);
3107 udc_reinit(udc);
3111 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_LP],
3112 lpc32xx_usb_lp_irq, 0, "udc_lp", udc);
3114 dev_err(udc->dev, "LP request irq %d failed\n",
3115 udc->udp_irq[IRQ_USB_LP]);
3118 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_HP],
3119 lpc32xx_usb_hp_irq, 0, "udc_hp", udc);
3121 dev_err(udc->dev, "HP request irq %d failed\n",
3122 udc->udp_irq[IRQ_USB_HP]);
3126 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_DEVDMA],
3127 lpc32xx_usb_devdma_irq, 0, "udc_dma", udc);
3129 dev_err(udc->dev, "DEV request irq %d failed\n",
3130 udc->udp_irq[IRQ_USB_DEVDMA]);
3136 retval = devm_request_threaded_irq(dev, udc->udp_irq[IRQ_USB_ATX], NULL,
3138 "udc_otg", udc);
3140 dev_err(udc->dev, "VBUS request irq %d failed\n",
3141 udc->udp_irq[IRQ_USB_ATX]);
3146 init_waitqueue_head(&udc->ep_disable_wait_queue);
3147 atomic_set(&udc->enabled_ep_cnt, 0);
3149 retval = usb_add_gadget_udc(dev, &udc->gadget);
3153 dev_set_drvdata(dev, udc);
3155 create_debug_file(udc);
3158 udc_clk_set(udc, 0);
3160 dev_info(udc->dev, "%s version %s\n", driver_name, DRIVER_VERSION);
3165 dma_pool_destroy(udc->dd_cache);
3168 udc->udca_v_base, udc->udca_p_base);
3170 clk_disable_unprepare(udc->usb_slv_clk);
3171 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval);
3178 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3180 usb_del_gadget_udc(&udc->gadget);
3181 if (udc->driver)
3184 udc_clk_set(udc, 1);
3185 udc_disable(udc);
3186 pullup(udc, 0);
3189 remove_debug_file(udc);
3191 dma_pool_destroy(udc->dd_cache);
3193 udc->udca_v_base, udc->udca_p_base);
3195 clk_disable_unprepare(udc->usb_slv_clk);
3203 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3205 if (udc->clocked) {
3207 udc->poweron = 0;
3208 isp1301_set_powerstate(udc, 0);
3211 udc_clk_set(udc, 0);
3215 udc->clocked = 1;
3218 clk_disable_unprepare(udc->usb_slv_clk);
3226 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3228 if (udc->clocked) {
3230 clk_prepare_enable(udc->usb_slv_clk);
3233 udc_clk_set(udc, 1);
3236 udc->poweron = 1;
3237 isp1301_set_powerstate(udc, 1);
3249 { .compatible = "nxp,lpc3220-udc", },
3268 MODULE_DESCRIPTION("LPC32XX udc driver");