Lines Matching refs:udc

102 	struct lpc32xx_udc	*udc;  member
187 dev_dbg(epp->udc->dev, "%s: " fmt, __func__, ## arg)
189 dev_err(epp->udc->dev, "%s: " fmt, __func__, ## arg)
191 dev_info(epp->udc->dev, "%s: " fmt, __func__, ## arg)
193 dev_warn(epp->udc->dev, "%s:" fmt, __func__, ## arg)
498 struct lpc32xx_udc *udc = s->private; in proc_udc_show() local
504 spin_lock_irqsave(&udc->lock, flags); in proc_udc_show()
507 udc->vbus ? "present" : "off", in proc_udc_show()
508 udc->enabled ? (udc->vbus ? "active" : "enabled") : in proc_udc_show()
510 udc->gadget.is_selfpowered ? "self" : "VBUS", in proc_udc_show()
511 udc->suspended ? ", suspended" : "", in proc_udc_show()
512 udc->driver ? udc->driver->driver.name : "(none)"); in proc_udc_show()
514 if (udc->enabled && udc->vbus) { in proc_udc_show()
515 proc_ep_show(s, &udc->ep[0]); in proc_udc_show()
516 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) in proc_udc_show()
520 spin_unlock_irqrestore(&udc->lock, flags); in proc_udc_show()
538 static void create_debug_file(struct lpc32xx_udc *udc) in create_debug_file() argument
540 udc->pde = debugfs_create_file(debug_filename, 0, NULL, udc, &proc_ops); in create_debug_file()
543 static void remove_debug_file(struct lpc32xx_udc *udc) in remove_debug_file() argument
545 debugfs_remove(udc->pde); in remove_debug_file()
549 static inline void create_debug_file(struct lpc32xx_udc *udc) {} in create_debug_file() argument
550 static inline void remove_debug_file(struct lpc32xx_udc *udc) {} in remove_debug_file() argument
554 static void isp1301_udc_configure(struct lpc32xx_udc *udc) in isp1301_udc_configure() argument
560 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
565 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
567 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
573 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
575 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
579 if (udc->board->vbus_drv_pol != 0) in isp1301_udc_configure()
580 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
583 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
590 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
592 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
597 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
600 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
605 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
607 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
609 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
611 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
613 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_udc_configure()
616 dev_info(udc->dev, "ISP1301 Vendor ID : 0x%04x\n", in isp1301_udc_configure()
617 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x00)); in isp1301_udc_configure()
618 dev_info(udc->dev, "ISP1301 Product ID : 0x%04x\n", in isp1301_udc_configure()
619 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x02)); in isp1301_udc_configure()
620 dev_info(udc->dev, "ISP1301 Version ID : 0x%04x\n", in isp1301_udc_configure()
621 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x14)); in isp1301_udc_configure()
625 static void isp1301_pullup_set(struct lpc32xx_udc *udc) in isp1301_pullup_set() argument
627 if (udc->pullup) in isp1301_pullup_set()
629 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_pullup_set()
633 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_pullup_set()
640 struct lpc32xx_udc *udc = in pullup_work() local
643 isp1301_pullup_set(udc); in pullup_work()
646 static void isp1301_pullup_enable(struct lpc32xx_udc *udc, int en_pullup, in isp1301_pullup_enable() argument
649 if (en_pullup == udc->pullup) in isp1301_pullup_enable()
652 udc->pullup = en_pullup; in isp1301_pullup_enable()
654 isp1301_pullup_set(udc); in isp1301_pullup_enable()
657 schedule_work(&udc->pullup_job); in isp1301_pullup_enable()
662 static void isp1301_set_powerstate(struct lpc32xx_udc *udc, int enable) in isp1301_set_powerstate() argument
667 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_set_powerstate()
672 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in isp1301_set_powerstate()
678 struct lpc32xx_udc *udc = in power_work() local
681 isp1301_set_powerstate(udc, udc->poweron); in power_work()
691 static void udc_protocol_cmd_w(struct lpc32xx_udc *udc, u32 cmd) in udc_protocol_cmd_w() argument
697 u32 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr)); in udc_protocol_cmd_w()
701 writel(USBD_CCEMPTY, USBD_DEVINTCLR(udc->udp_baseaddr)); in udc_protocol_cmd_w()
704 writel(cmd, USBD_CMDCODE(udc->udp_baseaddr)); in udc_protocol_cmd_w()
706 while (((readl(USBD_DEVINTST(udc->udp_baseaddr)) & in udc_protocol_cmd_w()
719 static inline void udc_protocol_cmd_data_w(struct lpc32xx_udc *udc, u32 cmd, in udc_protocol_cmd_data_w() argument
722 udc_protocol_cmd_w(udc, cmd); in udc_protocol_cmd_data_w()
723 udc_protocol_cmd_w(udc, data); in udc_protocol_cmd_data_w()
728 static u32 udc_protocol_cmd_r(struct lpc32xx_udc *udc, u32 cmd) in udc_protocol_cmd_r() argument
735 USBD_DEVINTCLR(udc->udp_baseaddr)); in udc_protocol_cmd_r()
738 udc_protocol_cmd_w(udc, cmd); in udc_protocol_cmd_r()
740 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr)); in udc_protocol_cmd_r()
741 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & USBD_CDFULL)) in udc_protocol_cmd_r()
745 dev_dbg(udc->dev, in udc_protocol_cmd_r()
748 return readl(USBD_CMDDATA(udc->udp_baseaddr)); in udc_protocol_cmd_r()
757 static inline void uda_enable_devint(struct lpc32xx_udc *udc, u32 devmask) in uda_enable_devint() argument
759 udc->enabled_devints |= devmask; in uda_enable_devint()
760 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr)); in uda_enable_devint()
764 static inline void uda_disable_devint(struct lpc32xx_udc *udc, u32 mask) in uda_disable_devint() argument
766 udc->enabled_devints &= ~mask; in uda_disable_devint()
767 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr)); in uda_disable_devint()
771 static inline void uda_clear_devint(struct lpc32xx_udc *udc, u32 mask) in uda_clear_devint() argument
773 writel(mask, USBD_DEVINTCLR(udc->udp_baseaddr)); in uda_clear_devint()
782 static void uda_enable_hwepint(struct lpc32xx_udc *udc, u32 hwep) in uda_enable_hwepint() argument
784 udc->enabled_hwepints |= (1 << hwep); in uda_enable_hwepint()
785 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr)); in uda_enable_hwepint()
789 static void uda_disable_hwepint(struct lpc32xx_udc *udc, u32 hwep) in uda_disable_hwepint() argument
791 udc->enabled_hwepints &= ~(1 << hwep); in uda_disable_hwepint()
792 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr)); in uda_disable_hwepint()
796 static inline void uda_clear_hwepint(struct lpc32xx_udc *udc, u32 hwep) in uda_clear_hwepint() argument
798 writel((1 << hwep), USBD_EPINTCLR(udc->udp_baseaddr)); in uda_clear_hwepint()
802 static inline void udc_ep_dma_enable(struct lpc32xx_udc *udc, u32 hwep) in udc_ep_dma_enable() argument
804 writel((1 << hwep), USBD_EPDMAEN(udc->udp_baseaddr)); in udc_ep_dma_enable()
808 static inline void udc_ep_dma_disable(struct lpc32xx_udc *udc, u32 hwep) in udc_ep_dma_disable() argument
810 writel((1 << hwep), USBD_EPDMADIS(udc->udp_baseaddr)); in udc_ep_dma_disable()
821 static void udc_realize_hwep(struct lpc32xx_udc *udc, u32 hwep, in udc_realize_hwep() argument
826 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr)); in udc_realize_hwep()
827 writel(hwep, USBD_EPIND(udc->udp_baseaddr)); in udc_realize_hwep()
828 udc->realized_eps |= (1 << hwep); in udc_realize_hwep()
829 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr)); in udc_realize_hwep()
830 writel(maxpacket, USBD_EPMAXPSIZE(udc->udp_baseaddr)); in udc_realize_hwep()
833 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & in udc_realize_hwep()
837 dev_dbg(udc->dev, "EP not correctly realized in hardware\n"); in udc_realize_hwep()
839 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr)); in udc_realize_hwep()
843 static void udc_unrealize_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_unrealize_hwep() argument
845 udc->realized_eps &= ~(1 << hwep); in udc_unrealize_hwep()
846 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr)); in udc_unrealize_hwep()
855 static u32 udc_selep_clrint(struct lpc32xx_udc *udc, u32 hwep) in udc_selep_clrint() argument
857 udc_protocol_cmd_w(udc, CMD_SEL_EP_CLRI(hwep)); in udc_selep_clrint()
858 return udc_protocol_cmd_r(udc, DAT_SEL_EP_CLRI(hwep)); in udc_selep_clrint()
862 static void udc_disable_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_disable_hwep() argument
864 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep), in udc_disable_hwep()
869 static void udc_stall_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_stall_hwep() argument
871 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep), in udc_stall_hwep()
876 static void udc_clrstall_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_clrstall_hwep() argument
878 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep), in udc_clrstall_hwep()
883 static void udc_select_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_select_hwep() argument
885 udc_protocol_cmd_w(udc, CMD_SEL_EP(hwep)); in udc_select_hwep()
894 static void udc_clr_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_clr_buffer_hwep() argument
896 udc_select_hwep(udc, hwep); in udc_clr_buffer_hwep()
897 udc_protocol_cmd_w(udc, CMD_CLR_BUF); in udc_clr_buffer_hwep()
901 static void udc_val_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep) in udc_val_buffer_hwep() argument
903 udc_select_hwep(udc, hwep); in udc_val_buffer_hwep()
904 udc_protocol_cmd_w(udc, CMD_VALID_BUF); in udc_val_buffer_hwep()
907 static inline u32 udc_clearep_getsts(struct lpc32xx_udc *udc, u32 hwep) in udc_clearep_getsts() argument
910 uda_clear_hwepint(udc, hwep); in udc_clearep_getsts()
911 return udc_selep_clrint(udc, hwep); in udc_clearep_getsts()
920 static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc) in udc_dd_alloc() argument
926 udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma); in udc_dd_alloc()
934 static void udc_dd_free(struct lpc32xx_udc *udc, struct lpc32xx_usbd_dd_gad *dd) in udc_dd_free() argument
936 dma_pool_free(udc->dd_cache, dd, dd->this_dma); in udc_dd_free()
947 static void udc_clk_set(struct lpc32xx_udc *udc, int enable) in udc_clk_set() argument
950 if (udc->clocked) in udc_clk_set()
953 udc->clocked = 1; in udc_clk_set()
954 clk_prepare_enable(udc->usb_slv_clk); in udc_clk_set()
956 if (!udc->clocked) in udc_clk_set()
959 udc->clocked = 0; in udc_clk_set()
960 clk_disable_unprepare(udc->usb_slv_clk); in udc_clk_set()
965 static void udc_set_address(struct lpc32xx_udc *udc, u32 addr) in udc_set_address() argument
969 udc_protocol_cmd_data_w(udc, CMD_SET_ADDR, in udc_set_address()
976 static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_ep_in_req_dma() argument
987 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma; in udc_ep_in_req_dma()
990 udc_ep_dma_enable(udc, hwep); in udc_ep_in_req_dma()
1002 static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_ep_out_req_dma() argument
1013 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma; in udc_ep_out_req_dma()
1016 udc_ep_dma_enable(udc, hwep); in udc_ep_out_req_dma()
1020 static void udc_disable(struct lpc32xx_udc *udc) in udc_disable() argument
1025 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0)); in udc_disable()
1026 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(0)); in udc_disable()
1029 uda_disable_devint(udc, 0x3FF); in udc_disable()
1033 uda_disable_hwepint(udc, i); in udc_disable()
1034 uda_clear_hwepint(udc, i); in udc_disable()
1035 udc_disable_hwep(udc, i); in udc_disable()
1036 udc_unrealize_hwep(udc, i); in udc_disable()
1037 udc->udca_v_base[i] = 0; in udc_disable()
1040 udc_ep_dma_disable(udc, i); in udc_disable()
1041 writel((1 << i), USBD_EOTINTCLR(udc->udp_baseaddr)); in udc_disable()
1042 writel((1 << i), USBD_NDDRTINTCLR(udc->udp_baseaddr)); in udc_disable()
1043 writel((1 << i), USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in udc_disable()
1044 writel((1 << i), USBD_DMARCLR(udc->udp_baseaddr)); in udc_disable()
1048 writel(0, USBD_DMAINTEN(udc->udp_baseaddr)); in udc_disable()
1050 writel(0, USBD_UDCAH(udc->udp_baseaddr)); in udc_disable()
1053 static void udc_enable(struct lpc32xx_udc *udc) in udc_enable() argument
1056 struct lpc32xx_ep *ep = &udc->ep[0]; in udc_enable()
1059 udc_disable(udc); in udc_enable()
1062 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON)); in udc_enable()
1065 writel(USBD_EP_FAST, USBD_DEVINTPRI(udc->udp_baseaddr)); in udc_enable()
1066 writel(0xFFFF, USBD_EPINTPRI(udc->udp_baseaddr)); in udc_enable()
1069 writel(0x3FF, USBD_DEVINTCLR(udc->udp_baseaddr)); in udc_enable()
1072 writel(udc->udca_p_base, USBD_UDCAH(udc->udp_baseaddr)); in udc_enable()
1076 udc_realize_hwep(udc, i, ep->ep.maxpacket); in udc_enable()
1077 uda_enable_hwepint(udc, i); in udc_enable()
1078 udc_select_hwep(udc, i); in udc_enable()
1079 udc_clrstall_hwep(udc, i); in udc_enable()
1080 udc_clr_buffer_hwep(udc, i); in udc_enable()
1084 uda_clear_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW | in udc_enable()
1086 uda_enable_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW | in udc_enable()
1091 udc_set_address(udc, 0); in udc_enable()
1092 udc_set_address(udc, 0); in udc_enable()
1096 USBD_DMAINTEN(udc->udp_baseaddr)); in udc_enable()
1098 udc->dev_status = 0; in udc_enable()
1107 static void uda_power_event(struct lpc32xx_udc *udc, u32 conn) in uda_power_event() argument
1110 if (udc->board->conn_chgb != NULL) in uda_power_event()
1111 udc->board->conn_chgb(conn); in uda_power_event()
1115 static void uda_resm_susp_event(struct lpc32xx_udc *udc, u32 conn) in uda_resm_susp_event() argument
1118 if (udc->board->susp_chgb != NULL) in uda_resm_susp_event()
1119 udc->board->susp_chgb(conn); in uda_resm_susp_event()
1122 udc->suspended = 0; in uda_resm_susp_event()
1124 udc->suspended = 1; in uda_resm_susp_event()
1128 static void uda_remwkp_cgh(struct lpc32xx_udc *udc) in uda_remwkp_cgh() argument
1130 if (udc->board->rmwk_chgb != NULL) in uda_remwkp_cgh()
1131 udc->board->rmwk_chgb(udc->dev_status & in uda_remwkp_cgh()
1136 static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes) in udc_pop_fifo() argument
1150 *p32++ = readl(USBD_RXDATA(udc->udp_baseaddr)); in udc_pop_fifo()
1155 tmp = readl(USBD_RXDATA(udc->udp_baseaddr)); in udc_pop_fifo()
1166 tmp = readl(USBD_RXDATA(udc->udp_baseaddr)); in udc_pop_fifo()
1183 tmp = readl(USBD_RXDATA(udc->udp_baseaddr)); in udc_pop_fifo()
1191 tmp = readl(USBD_RXDATA(udc->udp_baseaddr)); in udc_pop_fifo()
1203 static u32 udc_read_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data, in udc_read_hwep() argument
1211 writel(hwrep, USBD_CTRL(udc->udp_baseaddr)); in udc_read_hwep()
1214 while ((((tmpv = readl(USBD_RXPLEN(udc->udp_baseaddr))) & in udc_read_hwep()
1218 dev_dbg(udc->dev, "No packet ready on FIFO EP read\n"); in udc_read_hwep()
1226 udc_pop_fifo(udc, (u8 *) data, tmp); in udc_read_hwep()
1228 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr)); in udc_read_hwep()
1231 udc_clr_buffer_hwep(udc, hwep); in udc_read_hwep()
1237 static void udc_stuff_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes) in udc_stuff_fifo() argument
1251 writel(*p32++, USBD_TXDATA(udc->udp_baseaddr)); in udc_stuff_fifo()
1260 writel(tmp, USBD_TXDATA(udc->udp_baseaddr)); in udc_stuff_fifo()
1276 writel(tmp, USBD_TXDATA(udc->udp_baseaddr)); in udc_stuff_fifo()
1288 writel(tmp, USBD_TXDATA(udc->udp_baseaddr)); in udc_stuff_fifo()
1298 writel(tmp, USBD_TXDATA(udc->udp_baseaddr)); in udc_stuff_fifo()
1307 static void udc_write_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data, in udc_write_hwep() argument
1316 writel(hwwep, USBD_CTRL(udc->udp_baseaddr)); in udc_write_hwep()
1318 writel(bytes, USBD_TXPLEN(udc->udp_baseaddr)); in udc_write_hwep()
1322 writel(0, USBD_TXDATA(udc->udp_baseaddr)); in udc_write_hwep()
1324 udc_stuff_fifo(udc, (u8 *) data, bytes); in udc_write_hwep()
1326 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr)); in udc_write_hwep()
1328 udc_val_buffer_hwep(udc, hwep); in udc_write_hwep()
1333 static void uda_usb_reset(struct lpc32xx_udc *udc) in uda_usb_reset() argument
1337 udc_enable(udc); in uda_usb_reset()
1338 udc->gadget.speed = USB_SPEED_FULL; in uda_usb_reset()
1341 struct lpc32xx_ep *ep = &udc->ep[i]; in uda_usb_reset()
1347 static void udc_ep0_send_zlp(struct lpc32xx_udc *udc) in udc_ep0_send_zlp() argument
1349 udc_write_hwep(udc, EP_IN, NULL, 0); in udc_ep0_send_zlp()
1353 static u16 udc_get_current_frame(struct lpc32xx_udc *udc) in udc_get_current_frame() argument
1357 udc_protocol_cmd_w(udc, CMD_RD_FRAME); in udc_get_current_frame()
1358 flo = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME); in udc_get_current_frame()
1359 fhi = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME); in udc_get_current_frame()
1365 static inline void udc_set_device_configured(struct lpc32xx_udc *udc) in udc_set_device_configured() argument
1367 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(CONF_DVICE)); in udc_set_device_configured()
1371 static inline void udc_set_device_unconfigured(struct lpc32xx_udc *udc) in udc_set_device_unconfigured() argument
1373 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0)); in udc_set_device_unconfigured()
1377 static void udc_reinit(struct lpc32xx_udc *udc) in udc_reinit() argument
1381 INIT_LIST_HEAD(&udc->gadget.ep_list); in udc_reinit()
1382 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list); in udc_reinit()
1385 struct lpc32xx_ep *ep = &udc->ep[i]; in udc_reinit()
1388 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list); in udc_reinit()
1394 udc->ep0state = WAIT_FOR_SETUP; in udc_reinit()
1400 struct lpc32xx_udc *udc = ep->udc; in done() local
1409 usb_gadget_unmap_request(&udc->gadget, &req->req, ep->is_in); in done()
1412 udc_dd_free(udc, req->dd_desc_ptr); in done()
1419 spin_unlock(&udc->lock); in done()
1421 spin_lock(&udc->lock); in done()
1435 uda_disable_hwepint(ep->udc, ep->hwep_num); in nuke()
1436 udc_disable_hwep(ep->udc, ep->hwep_num); in nuke()
1441 static int udc_ep0_in_req(struct lpc32xx_udc *udc) in udc_ep0_in_req() argument
1444 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_ep0_in_req()
1457 udc_ep0_send_zlp(udc); in udc_ep0_in_req()
1464 udc_write_hwep(udc, EP_IN, (req->req.buf + req->req.actual), ts); in udc_ep0_in_req()
1473 udc->ep0state = WAIT_FOR_SETUP; in udc_ep0_in_req()
1479 static int udc_ep0_out_req(struct lpc32xx_udc *udc) in udc_ep0_out_req() argument
1482 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_ep0_out_req()
1495 udc->ep0state = WAIT_FOR_SETUP; in udc_ep0_out_req()
1506 tr = udc_read_hwep(udc, EP_OUT, req->req.buf + req->req.actual, in udc_ep0_out_req()
1513 udc->ep0state = WAIT_FOR_SETUP; in udc_ep0_out_req()
1522 static void stop_activity(struct lpc32xx_udc *udc) in stop_activity() argument
1524 struct usb_gadget_driver *driver = udc->driver; in stop_activity()
1527 if (udc->gadget.speed == USB_SPEED_UNKNOWN) in stop_activity()
1530 udc->gadget.speed = USB_SPEED_UNKNOWN; in stop_activity()
1531 udc->suspended = 0; in stop_activity()
1534 struct lpc32xx_ep *ep = &udc->ep[i]; in stop_activity()
1538 spin_unlock(&udc->lock); in stop_activity()
1539 driver->disconnect(&udc->gadget); in stop_activity()
1540 spin_lock(&udc->lock); in stop_activity()
1543 isp1301_pullup_enable(udc, 0, 0); in stop_activity()
1544 udc_disable(udc); in stop_activity()
1545 udc_reinit(udc); in stop_activity()
1552 static void pullup(struct lpc32xx_udc *udc, int is_on) in pullup() argument
1554 if (!udc->clocked) in pullup()
1557 if (!udc->enabled || !udc->vbus) in pullup()
1560 if (is_on != udc->pullup) in pullup()
1561 isp1301_pullup_enable(udc, is_on, 0); in pullup()
1568 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_disable() local
1573 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_ep_disable()
1578 udc_ep_dma_disable(udc, ep->hwep_num); in lpc32xx_ep_disable()
1579 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1580 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1581 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1582 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr)); in lpc32xx_ep_disable()
1585 udc->udca_v_base[ep->hwep_num] = 0; in lpc32xx_ep_disable()
1588 uda_clear_hwepint(udc, ep->hwep_num); in lpc32xx_ep_disable()
1589 udc_unrealize_hwep(udc, ep->hwep_num); in lpc32xx_ep_disable()
1593 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_ep_disable()
1595 atomic_dec(&udc->enabled_ep_cnt); in lpc32xx_ep_disable()
1596 wake_up(&udc->ep_disable_wait_queue); in lpc32xx_ep_disable()
1606 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_enable() local
1614 dev_dbg(udc->dev, "bad ep or descriptor\n"); in lpc32xx_ep_enable()
1619 dev_dbg(udc->dev, "bad ep descriptor's packet size\n"); in lpc32xx_ep_enable()
1625 dev_dbg(udc->dev, "Can't re-enable EP0!!!\n"); in lpc32xx_ep_enable()
1630 if ((!udc->driver) || (udc->gadget.speed == USB_SPEED_UNKNOWN)) { in lpc32xx_ep_enable()
1631 dev_dbg(udc->dev, "bogus device state\n"); in lpc32xx_ep_enable()
1642 dev_dbg(udc->dev, in lpc32xx_ep_enable()
1657 dev_dbg(udc->dev, in lpc32xx_ep_enable()
1666 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_ep_enable()
1684 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket); in lpc32xx_ep_enable()
1685 udc_clr_buffer_hwep(udc, ep->hwep_num); in lpc32xx_ep_enable()
1686 uda_disable_hwepint(udc, ep->hwep_num); in lpc32xx_ep_enable()
1687 udc_clrstall_hwep(udc, ep->hwep_num); in lpc32xx_ep_enable()
1690 udc_ep_dma_disable(udc, ep->hwep_num); in lpc32xx_ep_enable()
1691 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1692 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1693 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1694 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr)); in lpc32xx_ep_enable()
1696 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_ep_enable()
1698 atomic_inc(&udc->enabled_ep_cnt); in lpc32xx_ep_enable()
1739 struct lpc32xx_udc *udc; in lpc32xx_ep_queue() local
1750 udc = ep->udc; in lpc32xx_ep_queue()
1752 if (udc->gadget.speed == USB_SPEED_UNKNOWN) in lpc32xx_ep_queue()
1758 status = usb_gadget_map_request(&udc->gadget, _req, ep->is_in); in lpc32xx_ep_queue()
1763 dd = udc_dd_alloc(udc); in lpc32xx_ep_queue()
1793 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_ep_queue()
1807 udc->ep0state = DATA_IN; in lpc32xx_ep_queue()
1808 status = udc_ep0_in_req(udc); in lpc32xx_ep_queue()
1811 udc->ep0state = DATA_OUT; in lpc32xx_ep_queue()
1812 status = udc_ep0_out_req(udc); in lpc32xx_ep_queue()
1817 udc_ep_in_req_dma(udc, ep); in lpc32xx_ep_queue()
1821 udc_ep_out_req_dma(udc, ep); in lpc32xx_ep_queue()
1825 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_ep_queue()
1841 spin_lock_irqsave(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1849 spin_unlock_irqrestore(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1855 spin_unlock_irqrestore(&ep->udc->lock, flags); in lpc32xx_ep_dequeue()
1864 struct lpc32xx_udc *udc = ep->udc; in lpc32xx_ep_set_halt() local
1874 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_ep_set_halt()
1878 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num), in lpc32xx_ep_set_halt()
1883 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num), in lpc32xx_ep_set_halt()
1887 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_ep_set_halt()
1897 if (!_ep || !ep->udc) in lpc32xx_ep_set_wedge()
1917 void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_send_in_zlp() argument
1920 udc_clearep_getsts(udc, ep->hwep_num); in udc_send_in_zlp()
1923 udc_write_hwep(udc, ep->hwep_num, NULL, 0); in udc_send_in_zlp()
1931 void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_handle_eps() argument
1939 uda_clear_hwepint(udc, ep->hwep_num); in udc_handle_eps()
1942 if (!(udc->enabled_hwepints & (1 << ep->hwep_num))) in udc_handle_eps()
1946 epstatus = udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_eps()
1956 udc_send_in_zlp(udc, ep); in udc_handle_eps()
1957 uda_disable_hwepint(udc, ep->hwep_num); in udc_handle_eps()
1969 udc_ep_in_req_dma(udc, ep); in udc_handle_eps()
1971 udc_ep_out_req_dma(udc, ep); in udc_handle_eps()
1979 static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) in udc_handle_dma_ep() argument
2001 udc_ep_dma_disable(udc, ep->hwep_num); in udc_handle_dma_ep()
2002 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr)); in udc_handle_dma_ep()
2003 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr)); in udc_handle_dma_ep()
2006 if (readl(USBD_SYSERRTINTST(udc->udp_baseaddr)) & in udc_handle_dma_ep()
2009 USBD_SYSERRTINTCLR(udc->udp_baseaddr)); in udc_handle_dma_ep()
2072 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) { in udc_handle_dma_ep()
2073 udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2074 uda_enable_hwepint(udc, ep->hwep_num); in udc_handle_dma_ep()
2075 epstatus = udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2080 udc_send_in_zlp(udc, ep); in udc_handle_dma_ep()
2087 udc_clearep_getsts(udc, ep->hwep_num); in udc_handle_dma_ep()
2090 udc_ep_in_req_dma(udc, ep); in udc_handle_dma_ep()
2092 udc_ep_out_req_dma(udc, ep); in udc_handle_dma_ep()
2103 static void udc_handle_dev(struct lpc32xx_udc *udc) in udc_handle_dev() argument
2107 udc_protocol_cmd_w(udc, CMD_GET_DEV_STAT); in udc_handle_dev()
2108 tmp = udc_protocol_cmd_r(udc, DAT_GET_DEV_STAT); in udc_handle_dev()
2111 uda_usb_reset(udc); in udc_handle_dev()
2113 uda_power_event(udc, (tmp & DEV_CON)); in udc_handle_dev()
2116 if (udc->vbus == 0) in udc_handle_dev()
2117 stop_activity(udc); in udc_handle_dev()
2118 else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) && in udc_handle_dev()
2119 udc->driver) { in udc_handle_dev()
2121 udc->poweron = 0; in udc_handle_dev()
2122 schedule_work(&udc->pullup_job); in udc_handle_dev()
2123 uda_resm_susp_event(udc, 1); in udc_handle_dev()
2125 } else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) && in udc_handle_dev()
2126 udc->driver && udc->vbus) { in udc_handle_dev()
2127 uda_resm_susp_event(udc, 0); in udc_handle_dev()
2129 udc->poweron = 1; in udc_handle_dev()
2130 schedule_work(&udc->pullup_job); in udc_handle_dev()
2135 static int udc_get_status(struct lpc32xx_udc *udc, u16 reqtype, u16 wIndex) in udc_get_status() argument
2145 ep0buff = udc->gadget.is_selfpowered; in udc_get_status()
2146 if (udc->dev_status & (1 << USB_DEVICE_REMOTE_WAKEUP)) in udc_get_status()
2152 ep = &udc->ep[tmp]; in udc_get_status()
2163 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num)); in udc_get_status()
2164 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num)); in udc_get_status()
2177 udc_write_hwep(udc, EP_IN, &ep0buff, 2); in udc_get_status()
2182 static void udc_handle_ep0_setup(struct lpc32xx_udc *udc) in udc_handle_ep0_setup() argument
2184 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0]; in udc_handle_ep0_setup()
2193 bytes = udc_read_hwep(udc, EP_OUT, (u32 *) &ctrlpkt, 8); in udc_handle_ep0_setup()
2224 udc->dev_status &= in udc_handle_ep0_setup()
2227 udc->dev_status |= in udc_handle_ep0_setup()
2229 uda_remwkp_cgh(udc); in udc_handle_ep0_setup()
2239 ep = &udc->ep[tmp]; in udc_handle_ep0_setup()
2245 udc_stall_hwep(udc, tmp); in udc_handle_ep0_setup()
2247 udc_clrstall_hwep(udc, tmp); in udc_handle_ep0_setup()
2258 udc_set_address(udc, wValue); in udc_handle_ep0_setup()
2264 udc_get_status(udc, reqtype, wIndex); in udc_handle_ep0_setup()
2271 if (likely(udc->driver)) { in udc_handle_ep0_setup()
2274 spin_unlock(&udc->lock); in udc_handle_ep0_setup()
2275 i = udc->driver->setup(&udc->gadget, &ctrlpkt); in udc_handle_ep0_setup()
2277 spin_lock(&udc->lock); in udc_handle_ep0_setup()
2282 udc_set_device_configured(udc); in udc_handle_ep0_setup()
2284 udc_protocol_cmd_data_w(udc, CMD_SET_MODE, in udc_handle_ep0_setup()
2289 udc_set_device_unconfigured(udc); in udc_handle_ep0_setup()
2292 udc_protocol_cmd_data_w(udc, CMD_SET_MODE, in udc_handle_ep0_setup()
2299 dev_dbg(udc->dev, in udc_handle_ep0_setup()
2302 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_setup()
2308 udc_ep0_send_zlp(udc); /* ZLP IN packet on data phase */ in udc_handle_ep0_setup()
2313 udc_stall_hwep(udc, EP_IN); in udc_handle_ep0_setup()
2317 udc_ep0_send_zlp(udc); in udc_handle_ep0_setup()
2322 static void udc_handle_ep0_in(struct lpc32xx_udc *udc) in udc_handle_ep0_in() argument
2324 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_handle_ep0_in()
2328 epstatus = udc_clearep_getsts(udc, EP_IN); in udc_handle_ep0_in()
2336 udc_clrstall_hwep(udc, EP_IN); in udc_handle_ep0_in()
2338 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_in()
2345 if (udc->ep0state == DATA_IN) in udc_handle_ep0_in()
2346 udc_ep0_in_req(udc); in udc_handle_ep0_in()
2350 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_in()
2356 static void udc_handle_ep0_out(struct lpc32xx_udc *udc) in udc_handle_ep0_out() argument
2358 struct lpc32xx_ep *ep0 = &udc->ep[0]; in udc_handle_ep0_out()
2362 epstatus = udc_clearep_getsts(udc, EP_OUT); in udc_handle_ep0_out()
2371 udc_clrstall_hwep(udc, EP_OUT); in udc_handle_ep0_out()
2373 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_out()
2383 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_out()
2389 switch (udc->ep0state) { in udc_handle_ep0_out()
2391 udc_handle_ep0_setup(udc); in udc_handle_ep0_out()
2395 udc_ep0_out_req(udc); in udc_handle_ep0_out()
2401 udc->ep0state = WAIT_FOR_SETUP; in udc_handle_ep0_out()
2410 struct lpc32xx_udc *udc = to_udc(gadget); in lpc32xx_get_frame() local
2412 if (!udc->clocked) in lpc32xx_get_frame()
2415 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_get_frame()
2417 frame = (int) udc_get_current_frame(udc); in lpc32xx_get_frame()
2419 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_get_frame()
2443 struct lpc32xx_udc *udc = to_udc(gadget); in lpc32xx_vbus_session() local
2445 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_vbus_session()
2448 if (udc->driver) { in lpc32xx_vbus_session()
2449 udc_clk_set(udc, 1); in lpc32xx_vbus_session()
2450 udc_enable(udc); in lpc32xx_vbus_session()
2451 pullup(udc, is_active); in lpc32xx_vbus_session()
2453 stop_activity(udc); in lpc32xx_vbus_session()
2454 pullup(udc, 0); in lpc32xx_vbus_session()
2456 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_vbus_session()
2462 if (atomic_read(&udc->enabled_ep_cnt)) in lpc32xx_vbus_session()
2463 wait_event_interruptible(udc->ep_disable_wait_queue, in lpc32xx_vbus_session()
2464 (atomic_read(&udc->enabled_ep_cnt) == 0)); in lpc32xx_vbus_session()
2466 spin_lock_irqsave(&udc->lock, flags); in lpc32xx_vbus_session()
2468 udc_clk_set(udc, 0); in lpc32xx_vbus_session()
2471 spin_unlock_irqrestore(&udc->lock, flags); in lpc32xx_vbus_session()
2479 struct lpc32xx_udc *udc = to_udc(gadget); in lpc32xx_pullup() local
2482 pullup(udc, is_on); in lpc32xx_pullup()
2728 struct lpc32xx_udc *udc = _udc; in lpc32xx_usb_lp_irq() local
2730 spin_lock(&udc->lock); in lpc32xx_usb_lp_irq()
2733 devstat = readl(USBD_DEVINTST(udc->udp_baseaddr)); in lpc32xx_usb_lp_irq()
2736 writel(devstat, USBD_DEVINTCLR(udc->udp_baseaddr)); in lpc32xx_usb_lp_irq()
2737 devstat = devstat & udc->enabled_devints; in lpc32xx_usb_lp_irq()
2741 udc_handle_dev(udc); in lpc32xx_usb_lp_irq()
2753 udc_protocol_cmd_w(udc, CMD_RD_ERR_STAT); in lpc32xx_usb_lp_irq()
2754 tmp = udc_protocol_cmd_r(udc, DAT_RD_ERR_STAT); in lpc32xx_usb_lp_irq()
2755 dev_dbg(udc->dev, "Device error (0x%x)!\n", tmp); in lpc32xx_usb_lp_irq()
2758 spin_unlock(&udc->lock); in lpc32xx_usb_lp_irq()
2767 struct lpc32xx_udc *udc = _udc; in lpc32xx_usb_hp_irq() local
2769 spin_lock(&udc->lock); in lpc32xx_usb_hp_irq()
2772 writel(USBD_EP_FAST, USBD_DEVINTCLR(udc->udp_baseaddr)); in lpc32xx_usb_hp_irq()
2775 tmp = readl(USBD_EPINTST(udc->udp_baseaddr)); in lpc32xx_usb_hp_irq()
2781 udc_handle_ep0_in(udc); in lpc32xx_usb_hp_irq()
2785 udc_handle_ep0_out(udc); in lpc32xx_usb_hp_irq()
2794 if (tmp & (1 << udc->ep[i].hwep_num)) in lpc32xx_usb_hp_irq()
2795 udc_handle_eps(udc, &udc->ep[i]); in lpc32xx_usb_hp_irq()
2799 spin_unlock(&udc->lock); in lpc32xx_usb_hp_irq()
2806 struct lpc32xx_udc *udc = _udc; in lpc32xx_usb_devdma_irq() local
2811 spin_lock(&udc->lock); in lpc32xx_usb_devdma_irq()
2814 tmp = readl(USBD_EOTINTST(udc->udp_baseaddr)) | in lpc32xx_usb_devdma_irq()
2815 (readl(USBD_EPDMAST(udc->udp_baseaddr)) & in lpc32xx_usb_devdma_irq()
2816 readl(USBD_NDDRTINTST(udc->udp_baseaddr))) | in lpc32xx_usb_devdma_irq()
2817 readl(USBD_SYSERRTINTST(udc->udp_baseaddr)); in lpc32xx_usb_devdma_irq()
2819 if (tmp & (1 << udc->ep[i].hwep_num)) in lpc32xx_usb_devdma_irq()
2820 udc_handle_dma_ep(udc, &udc->ep[i]); in lpc32xx_usb_devdma_irq()
2823 spin_unlock(&udc->lock); in lpc32xx_usb_devdma_irq()
2836 struct lpc32xx_udc *udc = container_of(work, struct lpc32xx_udc, in vbus_work() local
2839 if (udc->enabled != 0) { in vbus_work()
2841 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in vbus_work()
2848 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in vbus_work()
2853 i2c_smbus_write_byte_data(udc->isp1301_i2c_client, in vbus_work()
2858 value = i2c_smbus_read_byte_data(udc->isp1301_i2c_client, in vbus_work()
2863 udc->vbus = 1; in vbus_work()
2865 udc->vbus = 0; in vbus_work()
2868 if (udc->last_vbus != udc->vbus) { in vbus_work()
2869 udc->last_vbus = udc->vbus; in vbus_work()
2870 lpc32xx_vbus_session(&udc->gadget, udc->vbus); in vbus_work()
2875 enable_irq(udc->udp_irq[IRQ_USB_ATX]); in vbus_work()
2880 struct lpc32xx_udc *udc = _udc; in lpc32xx_usb_vbus_irq() local
2883 disable_irq_nosync(udc->udp_irq[IRQ_USB_ATX]); in lpc32xx_usb_vbus_irq()
2884 schedule_work(&udc->vbus_job); in lpc32xx_usb_vbus_irq()
2892 struct lpc32xx_udc *udc = to_udc(gadget); in lpc32xx_start() local
2896 dev_err(udc->dev, "bad parameter.\n"); in lpc32xx_start()
2900 if (udc->driver) { in lpc32xx_start()
2901 dev_err(udc->dev, "UDC already has a gadget driver\n"); in lpc32xx_start()
2905 udc->driver = driver; in lpc32xx_start()
2906 udc->gadget.dev.of_node = udc->dev->of_node; in lpc32xx_start()
2907 udc->enabled = 1; in lpc32xx_start()
2908 udc->gadget.is_selfpowered = 1; in lpc32xx_start()
2909 udc->vbus = 0; in lpc32xx_start()
2912 udc->last_vbus = udc->vbus = 0; in lpc32xx_start()
2913 schedule_work(&udc->vbus_job); in lpc32xx_start()
2917 enable_irq(udc->udp_irq[i]); in lpc32xx_start()
2925 struct lpc32xx_udc *udc = to_udc(gadget); in lpc32xx_stop() local
2928 disable_irq(udc->udp_irq[i]); in lpc32xx_stop()
2930 if (udc->clocked) { in lpc32xx_stop()
2931 spin_lock(&udc->lock); in lpc32xx_stop()
2932 stop_activity(udc); in lpc32xx_stop()
2933 spin_unlock(&udc->lock); in lpc32xx_stop()
2940 if (atomic_read(&udc->enabled_ep_cnt)) in lpc32xx_stop()
2941 wait_event_interruptible(udc->ep_disable_wait_queue, in lpc32xx_stop()
2942 (atomic_read(&udc->enabled_ep_cnt) == 0)); in lpc32xx_stop()
2944 spin_lock(&udc->lock); in lpc32xx_stop()
2945 udc_clk_set(udc, 0); in lpc32xx_stop()
2946 spin_unlock(&udc->lock); in lpc32xx_stop()
2949 udc->enabled = 0; in lpc32xx_stop()
2950 udc->driver = NULL; in lpc32xx_stop()
2958 struct lpc32xx_udc *udc = platform_get_drvdata(dev); in lpc32xx_udc_shutdown() local
2960 pullup(udc, 0); in lpc32xx_udc_shutdown()
2996 struct lpc32xx_udc *udc; in lpc32xx_udc_probe() local
3002 udc = kmemdup(&controller_template, sizeof(*udc), GFP_KERNEL); in lpc32xx_udc_probe()
3003 if (!udc) in lpc32xx_udc_probe()
3007 udc->ep[i].udc = udc; in lpc32xx_udc_probe()
3008 udc->gadget.ep0 = &udc->ep[0].ep; in lpc32xx_udc_probe()
3011 udc->gadget.dev.parent = dev; in lpc32xx_udc_probe()
3012 udc->pdev = pdev; in lpc32xx_udc_probe()
3013 udc->dev = &pdev->dev; in lpc32xx_udc_probe()
3014 udc->enabled = 0; in lpc32xx_udc_probe()
3023 udc->isp1301_i2c_client = isp1301_get_client(isp1301_node); in lpc32xx_udc_probe()
3024 if (!udc->isp1301_i2c_client) { in lpc32xx_udc_probe()
3029 dev_info(udc->dev, "ISP1301 I2C device at address 0x%x\n", in lpc32xx_udc_probe()
3030 udc->isp1301_i2c_client->addr); in lpc32xx_udc_probe()
3037 udc->board = &lpc32xx_usbddata; in lpc32xx_udc_probe()
3053 spin_lock_init(&udc->lock); in lpc32xx_udc_probe()
3057 udc->udp_irq[i] = platform_get_irq(pdev, i); in lpc32xx_udc_probe()
3058 if (udc->udp_irq[i] < 0) { in lpc32xx_udc_probe()
3059 dev_err(udc->dev, in lpc32xx_udc_probe()
3061 retval = udc->udp_irq[i]; in lpc32xx_udc_probe()
3066 udc->io_p_start = res->start; in lpc32xx_udc_probe()
3067 udc->io_p_size = resource_size(res); in lpc32xx_udc_probe()
3068 if (!request_mem_region(udc->io_p_start, udc->io_p_size, driver_name)) { in lpc32xx_udc_probe()
3069 dev_err(udc->dev, "someone's using UDC memory\n"); in lpc32xx_udc_probe()
3074 udc->udp_baseaddr = ioremap(udc->io_p_start, udc->io_p_size); in lpc32xx_udc_probe()
3075 if (!udc->udp_baseaddr) { in lpc32xx_udc_probe()
3077 dev_err(udc->dev, "IO map failure\n"); in lpc32xx_udc_probe()
3082 udc->usb_slv_clk = clk_get(&pdev->dev, NULL); in lpc32xx_udc_probe()
3083 if (IS_ERR(udc->usb_slv_clk)) { in lpc32xx_udc_probe()
3084 dev_err(udc->dev, "failed to acquire USB device clock\n"); in lpc32xx_udc_probe()
3085 retval = PTR_ERR(udc->usb_slv_clk); in lpc32xx_udc_probe()
3090 retval = clk_prepare_enable(udc->usb_slv_clk); in lpc32xx_udc_probe()
3092 dev_err(udc->dev, "failed to start USB device clock\n"); in lpc32xx_udc_probe()
3097 udc->poweron = udc->pullup = 0; in lpc32xx_udc_probe()
3098 INIT_WORK(&udc->pullup_job, pullup_work); in lpc32xx_udc_probe()
3099 INIT_WORK(&udc->vbus_job, vbus_work); in lpc32xx_udc_probe()
3101 INIT_WORK(&udc->power_job, power_work); in lpc32xx_udc_probe()
3105 udc->clocked = 1; in lpc32xx_udc_probe()
3107 isp1301_udc_configure(udc); in lpc32xx_udc_probe()
3109 udc->udca_v_base = dma_alloc_coherent(&pdev->dev, UDCA_BUFF_SIZE, in lpc32xx_udc_probe()
3112 if (!udc->udca_v_base) { in lpc32xx_udc_probe()
3113 dev_err(udc->dev, "error getting UDCA region\n"); in lpc32xx_udc_probe()
3117 udc->udca_p_base = dma_handle; in lpc32xx_udc_probe()
3118 dev_dbg(udc->dev, "DMA buffer(0x%x bytes), P:0x%08x, V:0x%p\n", in lpc32xx_udc_probe()
3119 UDCA_BUFF_SIZE, udc->udca_p_base, udc->udca_v_base); in lpc32xx_udc_probe()
3122 udc->dd_cache = dma_pool_create("udc_dd", udc->dev, in lpc32xx_udc_probe()
3125 if (!udc->dd_cache) { in lpc32xx_udc_probe()
3126 dev_err(udc->dev, "error getting DD DMA region\n"); in lpc32xx_udc_probe()
3132 udc_disable(udc); in lpc32xx_udc_probe()
3133 udc_reinit(udc); in lpc32xx_udc_probe()
3137 retval = request_irq(udc->udp_irq[IRQ_USB_LP], lpc32xx_usb_lp_irq, in lpc32xx_udc_probe()
3138 0, "udc_lp", udc); in lpc32xx_udc_probe()
3140 dev_err(udc->dev, "LP request irq %d failed\n", in lpc32xx_udc_probe()
3141 udc->udp_irq[IRQ_USB_LP]); in lpc32xx_udc_probe()
3144 retval = request_irq(udc->udp_irq[IRQ_USB_HP], lpc32xx_usb_hp_irq, in lpc32xx_udc_probe()
3145 0, "udc_hp", udc); in lpc32xx_udc_probe()
3147 dev_err(udc->dev, "HP request irq %d failed\n", in lpc32xx_udc_probe()
3148 udc->udp_irq[IRQ_USB_HP]); in lpc32xx_udc_probe()
3152 retval = request_irq(udc->udp_irq[IRQ_USB_DEVDMA], in lpc32xx_udc_probe()
3153 lpc32xx_usb_devdma_irq, 0, "udc_dma", udc); in lpc32xx_udc_probe()
3155 dev_err(udc->dev, "DEV request irq %d failed\n", in lpc32xx_udc_probe()
3156 udc->udp_irq[IRQ_USB_DEVDMA]); in lpc32xx_udc_probe()
3162 retval = request_irq(udc->udp_irq[IRQ_USB_ATX], lpc32xx_usb_vbus_irq, in lpc32xx_udc_probe()
3163 0, "udc_otg", udc); in lpc32xx_udc_probe()
3165 dev_err(udc->dev, "VBUS request irq %d failed\n", in lpc32xx_udc_probe()
3166 udc->udp_irq[IRQ_USB_ATX]); in lpc32xx_udc_probe()
3171 init_waitqueue_head(&udc->ep_disable_wait_queue); in lpc32xx_udc_probe()
3172 atomic_set(&udc->enabled_ep_cnt, 0); in lpc32xx_udc_probe()
3176 disable_irq(udc->udp_irq[i]); in lpc32xx_udc_probe()
3178 retval = usb_add_gadget_udc(dev, &udc->gadget); in lpc32xx_udc_probe()
3182 dev_set_drvdata(dev, udc); in lpc32xx_udc_probe()
3184 create_debug_file(udc); in lpc32xx_udc_probe()
3187 udc_clk_set(udc, 0); in lpc32xx_udc_probe()
3189 dev_info(udc->dev, "%s version %s\n", driver_name, DRIVER_VERSION); in lpc32xx_udc_probe()
3193 free_irq(udc->udp_irq[IRQ_USB_ATX], udc); in lpc32xx_udc_probe()
3195 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc); in lpc32xx_udc_probe()
3197 free_irq(udc->udp_irq[IRQ_USB_HP], udc); in lpc32xx_udc_probe()
3199 free_irq(udc->udp_irq[IRQ_USB_LP], udc); in lpc32xx_udc_probe()
3201 dma_pool_destroy(udc->dd_cache); in lpc32xx_udc_probe()
3204 udc->udca_v_base, udc->udca_p_base); in lpc32xx_udc_probe()
3206 clk_disable_unprepare(udc->usb_slv_clk); in lpc32xx_udc_probe()
3208 clk_put(udc->usb_slv_clk); in lpc32xx_udc_probe()
3210 iounmap(udc->udp_baseaddr); in lpc32xx_udc_probe()
3212 release_mem_region(udc->io_p_start, udc->io_p_size); in lpc32xx_udc_probe()
3213 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval); in lpc32xx_udc_probe()
3218 kfree(udc); in lpc32xx_udc_probe()
3224 struct lpc32xx_udc *udc = platform_get_drvdata(pdev); in lpc32xx_udc_remove() local
3226 usb_del_gadget_udc(&udc->gadget); in lpc32xx_udc_remove()
3227 if (udc->driver) in lpc32xx_udc_remove()
3230 udc_clk_set(udc, 1); in lpc32xx_udc_remove()
3231 udc_disable(udc); in lpc32xx_udc_remove()
3232 pullup(udc, 0); in lpc32xx_udc_remove()
3234 free_irq(udc->udp_irq[IRQ_USB_ATX], udc); in lpc32xx_udc_remove()
3237 remove_debug_file(udc); in lpc32xx_udc_remove()
3239 dma_pool_destroy(udc->dd_cache); in lpc32xx_udc_remove()
3241 udc->udca_v_base, udc->udca_p_base); in lpc32xx_udc_remove()
3242 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc); in lpc32xx_udc_remove()
3243 free_irq(udc->udp_irq[IRQ_USB_HP], udc); in lpc32xx_udc_remove()
3244 free_irq(udc->udp_irq[IRQ_USB_LP], udc); in lpc32xx_udc_remove()
3246 clk_disable_unprepare(udc->usb_slv_clk); in lpc32xx_udc_remove()
3247 clk_put(udc->usb_slv_clk); in lpc32xx_udc_remove()
3249 iounmap(udc->udp_baseaddr); in lpc32xx_udc_remove()
3250 release_mem_region(udc->io_p_start, udc->io_p_size); in lpc32xx_udc_remove()
3251 kfree(udc); in lpc32xx_udc_remove()
3259 struct lpc32xx_udc *udc = platform_get_drvdata(pdev); in lpc32xx_udc_suspend() local
3261 if (udc->clocked) { in lpc32xx_udc_suspend()
3263 udc->poweron = 0; in lpc32xx_udc_suspend()
3264 isp1301_set_powerstate(udc, 0); in lpc32xx_udc_suspend()
3267 udc_clk_set(udc, 0); in lpc32xx_udc_suspend()
3271 udc->clocked = 1; in lpc32xx_udc_suspend()
3274 clk_disable_unprepare(udc->usb_slv_clk); in lpc32xx_udc_suspend()
3282 struct lpc32xx_udc *udc = platform_get_drvdata(pdev); in lpc32xx_udc_resume() local
3284 if (udc->clocked) { in lpc32xx_udc_resume()
3286 clk_prepare_enable(udc->usb_slv_clk); in lpc32xx_udc_resume()
3289 udc_clk_set(udc, 1); in lpc32xx_udc_resume()
3292 udc->poweron = 1; in lpc32xx_udc_resume()
3293 isp1301_set_powerstate(udc, 1); in lpc32xx_udc_resume()