Lines Matching defs:udc

101 	struct lpc32xx_udc	*udc;
188 dev_dbg(epp->udc->dev, "%s: " fmt, __func__, ## arg)
190 dev_err(epp->udc->dev, "%s: " fmt, __func__, ## arg)
192 dev_info(epp->udc->dev, "%s: " fmt, __func__, ## arg)
194 dev_warn(epp->udc->dev, "%s:" fmt, __func__, ## arg)
471 static const char debug_filename[] = "driver/udc";
499 struct lpc32xx_udc *udc = s->private;
505 spin_lock_irqsave(&udc->lock, flags);
508 udc->vbus ? "present" : "off",
509 udc->enabled ? (udc->vbus ? "active" : "enabled") :
511 udc->gadget.is_selfpowered ? "self" : "VBUS",
512 udc->suspended ? ", suspended" : "",
513 udc->driver ? udc->driver->driver.name : "(none)");
515 if (udc->enabled && udc->vbus) {
516 proc_ep_show(s, &udc->ep[0]);
517 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list)
521 spin_unlock_irqrestore(&udc->lock, flags);
526 DEFINE_SHOW_ATTRIBUTE(udc);
528 static void create_debug_file(struct lpc32xx_udc *udc)
530 debugfs_create_file(debug_filename, 0, NULL, udc, &udc_fops);
533 static void remove_debug_file(struct lpc32xx_udc *udc)
539 static inline void create_debug_file(struct lpc32xx_udc *udc) {}
540 static inline void remove_debug_file(struct lpc32xx_udc *udc) {}
544 static void isp1301_udc_configure(struct lpc32xx_udc *udc)
549 vendor = i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x00);
550 product = i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x02);
553 udc->atx = STOTG04;
559 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
564 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
566 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
572 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
576 if (udc->atx != STOTG04)
578 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
582 if (udc->board->vbus_drv_pol != 0)
583 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
586 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
593 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
595 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
600 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
603 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
607 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
610 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
612 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
615 dev_info(udc->dev, "ISP1301 Vendor ID : 0x%04x\n", vendor);
616 dev_info(udc->dev, "ISP1301 Product ID : 0x%04x\n", product);
617 dev_info(udc->dev, "ISP1301 Version ID : 0x%04x\n",
618 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x14));
623 static void isp1301_pullup_set(struct lpc32xx_udc *udc)
625 if (udc->pullup)
627 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
631 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
638 struct lpc32xx_udc *udc =
641 isp1301_pullup_set(udc);
644 static void isp1301_pullup_enable(struct lpc32xx_udc *udc, int en_pullup,
647 if (en_pullup == udc->pullup)
650 udc->pullup = en_pullup;
652 isp1301_pullup_set(udc);
655 schedule_work(&udc->pullup_job);
660 static void isp1301_set_powerstate(struct lpc32xx_udc *udc, int enable)
663 if (udc->atx == STOTG04)
669 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
674 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
680 struct lpc32xx_udc *udc =
683 isp1301_set_powerstate(udc, udc->poweron);
693 static void udc_protocol_cmd_w(struct lpc32xx_udc *udc, u32 cmd)
699 u32 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
703 writel(USBD_CCEMPTY, USBD_DEVINTCLR(udc->udp_baseaddr));
706 writel(cmd, USBD_CMDCODE(udc->udp_baseaddr));
708 while (((readl(USBD_DEVINTST(udc->udp_baseaddr)) &
721 static inline void udc_protocol_cmd_data_w(struct lpc32xx_udc *udc, u32 cmd,
724 udc_protocol_cmd_w(udc, cmd);
725 udc_protocol_cmd_w(udc, data);
730 static u32 udc_protocol_cmd_r(struct lpc32xx_udc *udc, u32 cmd)
736 USBD_DEVINTCLR(udc->udp_baseaddr));
739 udc_protocol_cmd_w(udc, cmd);
741 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & USBD_CDFULL))
745 dev_dbg(udc->dev,
748 return readl(USBD_CMDDATA(udc->udp_baseaddr));
757 static inline void uda_enable_devint(struct lpc32xx_udc *udc, u32 devmask)
759 udc->enabled_devints |= devmask;
760 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
764 static inline void uda_disable_devint(struct lpc32xx_udc *udc, u32 mask)
766 udc->enabled_devints &= ~mask;
767 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
771 static inline void uda_clear_devint(struct lpc32xx_udc *udc, u32 mask)
773 writel(mask, USBD_DEVINTCLR(udc->udp_baseaddr));
782 static void uda_enable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
784 udc->enabled_hwepints |= (1 << hwep);
785 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
789 static void uda_disable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
791 udc->enabled_hwepints &= ~(1 << hwep);
792 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
796 static inline void uda_clear_hwepint(struct lpc32xx_udc *udc, u32 hwep)
798 writel((1 << hwep), USBD_EPINTCLR(udc->udp_baseaddr));
802 static inline void udc_ep_dma_enable(struct lpc32xx_udc *udc, u32 hwep)
804 writel((1 << hwep), USBD_EPDMAEN(udc->udp_baseaddr));
808 static inline void udc_ep_dma_disable(struct lpc32xx_udc *udc, u32 hwep)
810 writel((1 << hwep), USBD_EPDMADIS(udc->udp_baseaddr));
821 static void udc_realize_hwep(struct lpc32xx_udc *udc, u32 hwep,
826 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
827 writel(hwep, USBD_EPIND(udc->udp_baseaddr));
828 udc->realized_eps |= (1 << hwep);
829 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
830 writel(maxpacket, USBD_EPMAXPSIZE(udc->udp_baseaddr));
833 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) &
837 dev_dbg(udc->dev, "EP not correctly realized in hardware\n");
839 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
843 static void udc_unrealize_hwep(struct lpc32xx_udc *udc, u32 hwep)
845 udc->realized_eps &= ~(1 << hwep);
846 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
855 static u32 udc_selep_clrint(struct lpc32xx_udc *udc, u32 hwep)
857 udc_protocol_cmd_w(udc, CMD_SEL_EP_CLRI(hwep));
858 return udc_protocol_cmd_r(udc, DAT_SEL_EP_CLRI(hwep));
862 static void udc_disable_hwep(struct lpc32xx_udc *udc, u32 hwep)
864 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
869 static void udc_stall_hwep(struct lpc32xx_udc *udc, u32 hwep)
871 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
876 static void udc_clrstall_hwep(struct lpc32xx_udc *udc, u32 hwep)
878 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
883 static void udc_select_hwep(struct lpc32xx_udc *udc, u32 hwep)
885 udc_protocol_cmd_w(udc, CMD_SEL_EP(hwep));
894 static void udc_clr_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
896 udc_select_hwep(udc, hwep);
897 udc_protocol_cmd_w(udc, CMD_CLR_BUF);
901 static void udc_val_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
903 udc_select_hwep(udc, hwep);
904 udc_protocol_cmd_w(udc, CMD_VALID_BUF);
907 static inline u32 udc_clearep_getsts(struct lpc32xx_udc *udc, u32 hwep)
910 uda_clear_hwepint(udc, hwep);
911 return udc_selep_clrint(udc, hwep);
920 static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
925 dd = dma_pool_alloc(udc->dd_cache, GFP_ATOMIC | GFP_DMA, &dma);
933 static void udc_dd_free(struct lpc32xx_udc *udc, struct lpc32xx_usbd_dd_gad *dd)
935 dma_pool_free(udc->dd_cache, dd, dd->this_dma);
946 static void udc_clk_set(struct lpc32xx_udc *udc, int enable)
949 if (udc->clocked)
952 udc->clocked = 1;
953 clk_prepare_enable(udc->usb_slv_clk);
955 if (!udc->clocked)
958 udc->clocked = 0;
959 clk_disable_unprepare(udc->usb_slv_clk);
964 static void udc_set_address(struct lpc32xx_udc *udc, u32 addr)
968 udc_protocol_cmd_data_w(udc, CMD_SET_ADDR,
975 static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
986 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
989 udc_ep_dma_enable(udc, hwep);
1001 static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1012 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1015 udc_ep_dma_enable(udc, hwep);
1019 static void udc_disable(struct lpc32xx_udc *udc)
1024 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1025 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(0));
1028 uda_disable_devint(udc, 0x3FF);
1032 uda_disable_hwepint(udc, i);
1033 uda_clear_hwepint(udc, i);
1034 udc_disable_hwep(udc, i);
1035 udc_unrealize_hwep(udc, i);
1036 udc->udca_v_base[i] = 0;
1039 udc_ep_dma_disable(udc, i);
1040 writel((1 << i), USBD_EOTINTCLR(udc->udp_baseaddr));
1041 writel((1 << i), USBD_NDDRTINTCLR(udc->udp_baseaddr));
1042 writel((1 << i), USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1043 writel((1 << i), USBD_DMARCLR(udc->udp_baseaddr));
1047 writel(0, USBD_DMAINTEN(udc->udp_baseaddr));
1049 writel(0, USBD_UDCAH(udc->udp_baseaddr));
1052 static void udc_enable(struct lpc32xx_udc *udc)
1055 struct lpc32xx_ep *ep = &udc->ep[0];
1058 udc_disable(udc);
1061 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON));
1064 writel(USBD_EP_FAST, USBD_DEVINTPRI(udc->udp_baseaddr));
1065 writel(0xFFFF, USBD_EPINTPRI(udc->udp_baseaddr));
1068 writel(0x3FF, USBD_DEVINTCLR(udc->udp_baseaddr));
1071 writel(udc->udca_p_base, USBD_UDCAH(udc->udp_baseaddr));
1075 udc_realize_hwep(udc, i, ep->ep.maxpacket);
1076 uda_enable_hwepint(udc, i);
1077 udc_select_hwep(udc, i);
1078 udc_clrstall_hwep(udc, i);
1079 udc_clr_buffer_hwep(udc, i);
1083 uda_clear_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1085 uda_enable_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1090 udc_set_address(udc, 0);
1091 udc_set_address(udc, 0);
1095 USBD_DMAINTEN(udc->udp_baseaddr));
1097 udc->dev_status = 0;
1106 static void uda_power_event(struct lpc32xx_udc *udc, u32 conn)
1109 if (udc->board->conn_chgb != NULL)
1110 udc->board->conn_chgb(conn);
1114 static void uda_resm_susp_event(struct lpc32xx_udc *udc, u32 conn)
1117 if (udc->board->susp_chgb != NULL)
1118 udc->board->susp_chgb(conn);
1121 udc->suspended = 0;
1123 udc->suspended = 1;
1127 static void uda_remwkp_cgh(struct lpc32xx_udc *udc)
1129 if (udc->board->rmwk_chgb != NULL)
1130 udc->board->rmwk_chgb(udc->dev_status &
1135 static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1149 *p32++ = readl(USBD_RXDATA(udc->udp_baseaddr));
1154 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1165 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1182 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1190 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1202 static u32 udc_read_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1210 writel(hwrep, USBD_CTRL(udc->udp_baseaddr));
1213 while ((((tmpv = readl(USBD_RXPLEN(udc->udp_baseaddr))) &
1217 dev_dbg(udc->dev, "No packet ready on FIFO EP read\n");
1225 udc_pop_fifo(udc, (u8 *) data, tmp);
1227 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1230 udc_clr_buffer_hwep(udc, hwep);
1236 static void udc_stuff_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1250 writel(*p32++, USBD_TXDATA(udc->udp_baseaddr));
1259 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1275 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1287 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1297 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1306 static void udc_write_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1315 writel(hwwep, USBD_CTRL(udc->udp_baseaddr));
1317 writel(bytes, USBD_TXPLEN(udc->udp_baseaddr));
1321 writel(0, USBD_TXDATA(udc->udp_baseaddr));
1323 udc_stuff_fifo(udc, (u8 *) data, bytes);
1325 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1327 udc_val_buffer_hwep(udc, hwep);
1332 static void uda_usb_reset(struct lpc32xx_udc *udc)
1336 udc_enable(udc);
1337 udc->gadget.speed = USB_SPEED_FULL;
1340 struct lpc32xx_ep *ep = &udc->ep[i];
1346 static void udc_ep0_send_zlp(struct lpc32xx_udc *udc)
1348 udc_write_hwep(udc, EP_IN, NULL, 0);
1352 static u16 udc_get_current_frame(struct lpc32xx_udc *udc)
1356 udc_protocol_cmd_w(udc, CMD_RD_FRAME);
1357 flo = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1358 fhi = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1364 static inline void udc_set_device_configured(struct lpc32xx_udc *udc)
1366 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(CONF_DVICE));
1370 static inline void udc_set_device_unconfigured(struct lpc32xx_udc *udc)
1372 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1376 static void udc_reinit(struct lpc32xx_udc *udc)
1380 INIT_LIST_HEAD(&udc->gadget.ep_list);
1381 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
1384 struct lpc32xx_ep *ep = &udc->ep[i];
1387 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
1393 udc->ep0state = WAIT_FOR_SETUP;
1399 struct lpc32xx_udc *udc = ep->udc;
1408 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in);
1411 udc_dd_free(udc, req->dd_desc_ptr);
1418 spin_unlock(&udc->lock);
1420 spin_lock(&udc->lock);
1434 uda_disable_hwepint(ep->udc, ep->hwep_num);
1435 udc_disable_hwep(ep->udc, ep->hwep_num);
1440 static int udc_ep0_in_req(struct lpc32xx_udc *udc)
1443 struct lpc32xx_ep *ep0 = &udc->ep[0];
1456 udc_ep0_send_zlp(udc);
1463 udc_write_hwep(udc, EP_IN, (req->req.buf + req->req.actual), ts);
1472 udc->ep0state = WAIT_FOR_SETUP;
1478 static int udc_ep0_out_req(struct lpc32xx_udc *udc)
1481 struct lpc32xx_ep *ep0 = &udc->ep[0];
1494 udc->ep0state = WAIT_FOR_SETUP;
1505 tr = udc_read_hwep(udc, EP_OUT, req->req.buf + req->req.actual,
1512 udc->ep0state = WAIT_FOR_SETUP;
1521 static void stop_activity(struct lpc32xx_udc *udc)
1523 struct usb_gadget_driver *driver = udc->driver;
1526 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1529 udc->gadget.speed = USB_SPEED_UNKNOWN;
1530 udc->suspended = 0;
1533 struct lpc32xx_ep *ep = &udc->ep[i];
1537 spin_unlock(&udc->lock);
1538 driver->disconnect(&udc->gadget);
1539 spin_lock(&udc->lock);
1542 isp1301_pullup_enable(udc, 0, 0);
1543 udc_disable(udc);
1544 udc_reinit(udc);
1551 static void pullup(struct lpc32xx_udc *udc, int is_on)
1553 if (!udc->clocked)
1556 if (!udc->enabled || !udc->vbus)
1559 if (is_on != udc->pullup)
1560 isp1301_pullup_enable(udc, is_on, 0);
1567 struct lpc32xx_udc *udc = ep->udc;
1572 spin_lock_irqsave(&udc->lock, flags);
1577 udc_ep_dma_disable(udc, ep->hwep_num);
1578 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1579 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1580 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1581 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1584 udc->udca_v_base[ep->hwep_num] = 0;
1587 uda_clear_hwepint(udc, ep->hwep_num);
1588 udc_unrealize_hwep(udc, ep->hwep_num);
1592 spin_unlock_irqrestore(&udc->lock, flags);
1594 atomic_dec(&udc->enabled_ep_cnt);
1595 wake_up(&udc->ep_disable_wait_queue);
1605 struct lpc32xx_udc *udc;
1615 udc = ep->udc;
1618 dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
1624 dev_dbg(udc->dev, "Can't re-enable EP0!!!\n");
1629 if ((!udc->driver) || (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1630 dev_dbg(udc->dev, "bogus device state\n");
1641 dev_dbg(udc->dev,
1656 dev_dbg(udc->dev,
1665 spin_lock_irqsave(&udc->lock, flags);
1683 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket);
1684 udc_clr_buffer_hwep(udc, ep->hwep_num);
1685 uda_disable_hwepint(udc, ep->hwep_num);
1686 udc_clrstall_hwep(udc, ep->hwep_num);
1689 udc_ep_dma_disable(udc, ep->hwep_num);
1690 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1691 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1692 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1693 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1695 spin_unlock_irqrestore(&udc->lock, flags);
1697 atomic_inc(&udc->enabled_ep_cnt);
1738 struct lpc32xx_udc *udc;
1749 udc = ep->udc;
1751 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1757 status = usb_gadget_map_request(&udc->gadget, _req, ep->is_in);
1762 dd = udc_dd_alloc(udc);
1792 spin_lock_irqsave(&udc->lock, flags);
1806 udc->ep0state = DATA_IN;
1807 status = udc_ep0_in_req(udc);
1810 udc->ep0state = DATA_OUT;
1811 status = udc_ep0_out_req(udc);
1816 udc_ep_in_req_dma(udc, ep);
1820 udc_ep_out_req_dma(udc, ep);
1824 spin_unlock_irqrestore(&udc->lock, flags);
1840 spin_lock_irqsave(&ep->udc->lock, flags);
1850 spin_unlock_irqrestore(&ep->udc->lock, flags);
1856 spin_unlock_irqrestore(&ep->udc->lock, flags);
1865 struct lpc32xx_udc *udc;
1875 udc = ep->udc;
1876 spin_lock_irqsave(&udc->lock, flags);
1880 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
1885 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
1889 spin_unlock_irqrestore(&udc->lock, flags);
1899 if (!_ep || !ep->udc)
1919 static void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1922 udc_clearep_getsts(udc, ep->hwep_num);
1925 udc_write_hwep(udc, ep->hwep_num, NULL, 0);
1933 static void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1941 uda_clear_hwepint(udc, ep->hwep_num);
1944 if (!(udc->enabled_hwepints & (1 << ep->hwep_num)))
1948 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
1958 udc_send_in_zlp(udc, ep);
1959 uda_disable_hwepint(udc, ep->hwep_num);
1971 udc_ep_in_req_dma(udc, ep);
1973 udc_ep_out_req_dma(udc, ep);
1981 static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2003 udc_ep_dma_disable(udc, ep->hwep_num);
2004 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr));
2005 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr));
2008 if (readl(USBD_SYSERRTINTST(udc->udp_baseaddr)) &
2011 USBD_SYSERRTINTCLR(udc->udp_baseaddr));
2074 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) {
2075 udc_clearep_getsts(udc, ep->hwep_num);
2076 uda_enable_hwepint(udc, ep->hwep_num);
2077 udc_clearep_getsts(udc, ep->hwep_num);
2082 udc_send_in_zlp(udc, ep);
2089 udc_clearep_getsts(udc, ep->hwep_num);
2092 udc_ep_in_req_dma(udc, ep);
2094 udc_ep_out_req_dma(udc, ep);
2105 static void udc_handle_dev(struct lpc32xx_udc *udc)
2109 udc_protocol_cmd_w(udc, CMD_GET_DEV_STAT);
2110 tmp = udc_protocol_cmd_r(udc, DAT_GET_DEV_STAT);
2113 uda_usb_reset(udc);
2115 uda_power_event(udc, (tmp & DEV_CON));
2118 if (udc->vbus == 0)
2119 stop_activity(udc);
2120 else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2121 udc->driver) {
2123 udc->poweron = 0;
2124 schedule_work(&udc->pullup_job);
2125 uda_resm_susp_event(udc, 1);
2127 } else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2128 udc->driver && udc->vbus) {
2129 uda_resm_susp_event(udc, 0);
2131 udc->poweron = 1;
2132 schedule_work(&udc->pullup_job);
2137 static int udc_get_status(struct lpc32xx_udc *udc, u16 reqtype, u16 wIndex)
2147 ep0buff = udc->gadget.is_selfpowered;
2148 if (udc->dev_status & (1 << USB_DEVICE_REMOTE_WAKEUP))
2154 ep = &udc->ep[tmp];
2165 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num));
2166 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num));
2179 udc_write_hwep(udc, EP_IN, &ep0buff, 2);
2184 static void udc_handle_ep0_setup(struct lpc32xx_udc *udc)
2186 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0];
2195 bytes = udc_read_hwep(udc, EP_OUT, (u32 *) &ctrlpkt, 8);
2225 udc->dev_status &=
2228 udc->dev_status |=
2230 uda_remwkp_cgh(udc);
2240 ep = &udc->ep[tmp];
2246 udc_stall_hwep(udc, tmp);
2248 udc_clrstall_hwep(udc, tmp);
2259 udc_set_address(udc, wValue);
2265 udc_get_status(udc, reqtype, wIndex);
2272 if (likely(udc->driver)) {
2275 spin_unlock(&udc->lock);
2276 i = udc->driver->setup(&udc->gadget, &ctrlpkt);
2278 spin_lock(&udc->lock);
2283 udc_set_device_configured(udc);
2285 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2290 udc_set_device_unconfigured(udc);
2293 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2300 dev_dbg(udc->dev,
2303 udc->ep0state = WAIT_FOR_SETUP;
2309 udc_ep0_send_zlp(udc); /* ZLP IN packet on data phase */
2314 udc_stall_hwep(udc, EP_IN);
2318 udc_ep0_send_zlp(udc);
2323 static void udc_handle_ep0_in(struct lpc32xx_udc *udc)
2325 struct lpc32xx_ep *ep0 = &udc->ep[0];
2329 epstatus = udc_clearep_getsts(udc, EP_IN);
2337 udc_clrstall_hwep(udc, EP_IN);
2339 udc->ep0state = WAIT_FOR_SETUP;
2346 if (udc->ep0state == DATA_IN)
2347 udc_ep0_in_req(udc);
2351 udc->ep0state = WAIT_FOR_SETUP;
2357 static void udc_handle_ep0_out(struct lpc32xx_udc *udc)
2359 struct lpc32xx_ep *ep0 = &udc->ep[0];
2363 epstatus = udc_clearep_getsts(udc, EP_OUT);
2372 udc_clrstall_hwep(udc, EP_OUT);
2374 udc->ep0state = WAIT_FOR_SETUP;
2384 udc->ep0state = WAIT_FOR_SETUP;
2390 switch (udc->ep0state) {
2392 udc_handle_ep0_setup(udc);
2396 udc_ep0_out_req(udc);
2402 udc->ep0state = WAIT_FOR_SETUP;
2411 struct lpc32xx_udc *udc = to_udc(gadget);
2413 if (!udc->clocked)
2416 spin_lock_irqsave(&udc->lock, flags);
2418 frame = (int) udc_get_current_frame(udc);
2420 spin_unlock_irqrestore(&udc->lock, flags);
2444 struct lpc32xx_udc *udc = to_udc(gadget);
2446 spin_lock_irqsave(&udc->lock, flags);
2449 if (udc->driver) {
2450 udc_clk_set(udc, 1);
2451 udc_enable(udc);
2452 pullup(udc, is_active);
2454 stop_activity(udc);
2455 pullup(udc, 0);
2457 spin_unlock_irqrestore(&udc->lock, flags);
2463 if (atomic_read(&udc->enabled_ep_cnt))
2464 wait_event_interruptible(udc->ep_disable_wait_queue,
2465 (atomic_read(&udc->enabled_ep_cnt) == 0));
2467 spin_lock_irqsave(&udc->lock, flags);
2469 udc_clk_set(udc, 0);
2472 spin_unlock_irqrestore(&udc->lock, flags);
2480 struct lpc32xx_udc *udc = to_udc(gadget);
2483 pullup(udc, is_on);
2729 struct lpc32xx_udc *udc = _udc;
2731 spin_lock(&udc->lock);
2734 devstat = readl(USBD_DEVINTST(udc->udp_baseaddr));
2737 writel(devstat, USBD_DEVINTCLR(udc->udp_baseaddr));
2738 devstat = devstat & udc->enabled_devints;
2742 udc_handle_dev(udc);
2754 udc_protocol_cmd_w(udc, CMD_RD_ERR_STAT);
2755 tmp = udc_protocol_cmd_r(udc, DAT_RD_ERR_STAT);
2756 dev_dbg(udc->dev, "Device error (0x%x)!\n", tmp);
2759 spin_unlock(&udc->lock);
2768 struct lpc32xx_udc *udc = _udc;
2770 spin_lock(&udc->lock);
2773 writel(USBD_EP_FAST, USBD_DEVINTCLR(udc->udp_baseaddr));
2776 tmp = readl(USBD_EPINTST(udc->udp_baseaddr));
2782 udc_handle_ep0_in(udc);
2786 udc_handle_ep0_out(udc);
2795 if (tmp & (1 << udc->ep[i].hwep_num))
2796 udc_handle_eps(udc, &udc->ep[i]);
2800 spin_unlock(&udc->lock);
2807 struct lpc32xx_udc *udc = _udc;
2812 spin_lock(&udc->lock);
2815 tmp = readl(USBD_EOTINTST(udc->udp_baseaddr)) |
2816 (readl(USBD_EPDMAST(udc->udp_baseaddr)) &
2817 readl(USBD_NDDRTINTST(udc->udp_baseaddr))) |
2818 readl(USBD_SYSERRTINTST(udc->udp_baseaddr));
2820 if (tmp & (1 << udc->ep[i].hwep_num))
2821 udc_handle_dma_ep(udc, &udc->ep[i]);
2824 spin_unlock(&udc->lock);
2834 static void vbus_work(struct lpc32xx_udc *udc)
2838 if (udc->enabled != 0) {
2840 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2847 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2852 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2857 value = i2c_smbus_read_byte_data(udc->isp1301_i2c_client,
2862 udc->vbus = 1;
2864 udc->vbus = 0;
2867 if (udc->last_vbus != udc->vbus) {
2868 udc->last_vbus = udc->vbus;
2869 lpc32xx_vbus_session(&udc->gadget, udc->vbus);
2876 struct lpc32xx_udc *udc = _udc;
2878 vbus_work(udc);
2886 struct lpc32xx_udc *udc = to_udc(gadget);
2889 dev_err(udc->dev, "bad parameter.\n");
2893 if (udc->driver) {
2894 dev_err(udc->dev, "UDC already has a gadget driver\n");
2898 udc->driver = driver;
2899 udc->gadget.dev.of_node = udc->dev->of_node;
2900 udc->enabled = 1;
2901 udc->gadget.is_selfpowered = 1;
2902 udc->vbus = 0;
2905 udc->last_vbus = udc->vbus = 0;
2906 vbus_work(udc);
2909 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2911 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2919 struct lpc32xx_udc *udc = to_udc(gadget);
2921 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2923 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2926 if (udc->clocked) {
2927 spin_lock(&udc->lock);
2928 stop_activity(udc);
2929 spin_unlock(&udc->lock);
2936 if (atomic_read(&udc->enabled_ep_cnt))
2937 wait_event_interruptible(udc->ep_disable_wait_queue,
2938 (atomic_read(&udc->enabled_ep_cnt) == 0));
2940 spin_lock(&udc->lock);
2941 udc_clk_set(udc, 0);
2942 spin_unlock(&udc->lock);
2945 udc->enabled = 0;
2946 udc->driver = NULL;
2954 struct lpc32xx_udc *udc = platform_get_drvdata(dev);
2956 pullup(udc, 0);
2992 struct lpc32xx_udc *udc;
2997 udc = devm_kmemdup(dev, &controller_template, sizeof(*udc), GFP_KERNEL);
2998 if (!udc)
3002 udc->ep[i].udc = udc;
3003 udc->gadget.ep0 = &udc->ep[0].ep;
3006 udc->gadget.dev.parent = dev;
3007 udc->pdev = pdev;
3008 udc->dev = &pdev->dev;
3009 udc->enabled = 0;
3018 udc->isp1301_i2c_client = isp1301_get_client(isp1301_node);
3020 if (!udc->isp1301_i2c_client) {
3024 dev_info(udc->dev, "ISP1301 I2C device at address 0x%x\n",
3025 udc->isp1301_i2c_client->addr);
3032 udc->board = &lpc32xx_usbddata;
3043 spin_lock_init(&udc->lock);
3047 udc->udp_irq[i] = platform_get_irq(pdev, i);
3048 if (udc->udp_irq[i] < 0)
3049 return udc->udp_irq[i];
3052 udc->udp_baseaddr = devm_platform_ioremap_resource(pdev, 0);
3053 if (IS_ERR(udc->udp_baseaddr)) {
3054 dev_err(udc->dev, "IO map failure\n");
3055 return PTR_ERR(udc->udp_baseaddr);
3059 udc->usb_slv_clk = devm_clk_get(&pdev->dev, NULL);
3060 if (IS_ERR(udc->usb_slv_clk)) {
3061 dev_err(udc->dev, "failed to acquire USB device clock\n");
3062 return PTR_ERR(udc->usb_slv_clk);
3066 retval = clk_prepare_enable(udc->usb_slv_clk);
3068 dev_err(udc->dev, "failed to start USB device clock\n");
3073 udc->poweron = udc->pullup = 0;
3074 INIT_WORK(&udc->pullup_job, pullup_work);
3076 INIT_WORK(&udc->power_job, power_work);
3080 udc->clocked = 1;
3082 isp1301_udc_configure(udc);
3084 udc->udca_v_base = dma_alloc_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3087 if (!udc->udca_v_base) {
3088 dev_err(udc->dev, "error getting UDCA region\n");
3092 udc->udca_p_base = dma_handle;
3093 dev_dbg(udc->dev, "DMA buffer(0x%x bytes), P:0x%08x, V:0x%p\n",
3094 UDCA_BUFF_SIZE, udc->udca_p_base, udc->udca_v_base);
3097 udc->dd_cache = dma_pool_create("udc_dd", udc->dev,
3100 if (!udc->dd_cache) {
3101 dev_err(udc->dev, "error getting DD DMA region\n");
3107 udc_disable(udc);
3108 udc_reinit(udc);
3112 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_LP],
3113 lpc32xx_usb_lp_irq, 0, "udc_lp", udc);
3115 dev_err(udc->dev, "LP request irq %d failed\n",
3116 udc->udp_irq[IRQ_USB_LP]);
3119 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_HP],
3120 lpc32xx_usb_hp_irq, 0, "udc_hp", udc);
3122 dev_err(udc->dev, "HP request irq %d failed\n",
3123 udc->udp_irq[IRQ_USB_HP]);
3127 retval = devm_request_irq(dev, udc->udp_irq[IRQ_USB_DEVDMA],
3128 lpc32xx_usb_devdma_irq, 0, "udc_dma", udc);
3130 dev_err(udc->dev, "DEV request irq %d failed\n",
3131 udc->udp_irq[IRQ_USB_DEVDMA]);
3137 retval = devm_request_threaded_irq(dev, udc->udp_irq[IRQ_USB_ATX], NULL,
3139 "udc_otg", udc);
3141 dev_err(udc->dev, "VBUS request irq %d failed\n",
3142 udc->udp_irq[IRQ_USB_ATX]);
3147 init_waitqueue_head(&udc->ep_disable_wait_queue);
3148 atomic_set(&udc->enabled_ep_cnt, 0);
3150 retval = usb_add_gadget_udc(dev, &udc->gadget);
3154 dev_set_drvdata(dev, udc);
3156 create_debug_file(udc);
3159 udc_clk_set(udc, 0);
3161 dev_info(udc->dev, "%s version %s\n", driver_name, DRIVER_VERSION);
3166 dma_pool_destroy(udc->dd_cache);
3169 udc->udca_v_base, udc->udca_p_base);
3171 clk_disable_unprepare(udc->usb_slv_clk);
3172 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval);
3179 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3181 usb_del_gadget_udc(&udc->gadget);
3182 if (udc->driver)
3185 udc_clk_set(udc, 1);
3186 udc_disable(udc);
3187 pullup(udc, 0);
3190 remove_debug_file(udc);
3192 dma_pool_destroy(udc->dd_cache);
3194 udc->udca_v_base, udc->udca_p_base);
3196 clk_disable_unprepare(udc->usb_slv_clk);
3204 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3206 if (udc->clocked) {
3208 udc->poweron = 0;
3209 isp1301_set_powerstate(udc, 0);
3212 udc_clk_set(udc, 0);
3216 udc->clocked = 1;
3219 clk_disable_unprepare(udc->usb_slv_clk);
3227 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3229 if (udc->clocked) {
3231 clk_prepare_enable(udc->usb_slv_clk);
3234 udc_clk_set(udc, 1);
3237 udc->poweron = 1;
3238 isp1301_set_powerstate(udc, 1);
3250 { .compatible = "nxp,lpc3220-udc", },
3269 MODULE_DESCRIPTION("LPC32XX udc driver");