Lines Matching defs:fotg210
22 #include "fotg210.h"
23 #include "fotg210-udc.h"
32 static void fotg210_ack_int(struct fotg210_udc *fotg210, u32 offset, u32 mask)
34 u32 value = ioread32(fotg210->reg + offset);
37 iowrite32(value, fotg210->reg + offset);
42 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
48 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
53 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
59 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
62 static void fotg210_set_cxdone(struct fotg210_udc *fotg210)
64 u32 value = ioread32(fotg210->reg + FOTG210_DCFESR);
67 iowrite32(value, fotg210->reg + FOTG210_DCFESR);
76 if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
81 spin_unlock(&ep->fotg210->lock);
83 spin_lock(&ep->fotg210->lock);
89 fotg210_set_cxdone(ep->fotg210);
96 struct fotg210_udc *fotg210 = ep->fotg210;
104 val = ioread32(fotg210->reg + FOTG210_EPMAP);
107 iowrite32(val, fotg210->reg + FOTG210_EPMAP);
110 val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
113 iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
116 val = ioread32(fotg210->reg + FOTG210_FIFOCF);
118 iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
123 struct fotg210_udc *fotg210 = ep->fotg210;
126 val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
128 iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
133 struct fotg210_udc *fotg210 = ep->fotg210;
136 val = ioread32(fotg210->reg + FOTG210_FIFOCF);
138 iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
144 struct fotg210_udc *fotg210 = ep->fotg210;
149 val = ioread32(fotg210->reg + offset);
151 iowrite32(val, fotg210->reg + offset);
157 struct fotg210_udc *fotg210 = ep->fotg210;
164 fotg210->ep[ep->epnum] = ep;
185 static void fotg210_reset_tseq(struct fotg210_udc *fotg210, u8 epnum)
187 struct fotg210_ep *ep = fotg210->ep[epnum];
192 fotg210->reg + FOTG210_INEPMPSR(epnum) :
193 fotg210->reg + FOTG210_OUTEPMPSR(epnum);
216 fotg210_reset_tseq(ep->fotg210, ep->epnum);
234 spin_lock_irqsave(&ep->fotg210->lock, flags);
236 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
269 struct fotg210_udc *fotg210 = ep->fotg210;
272 value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
275 iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
278 value = ioread32(fotg210->reg + FOTG210_DMATFNR);
283 iowrite32(value, fotg210->reg + FOTG210_DMATFNR);
286 iowrite32(d, fotg210->reg + FOTG210_DMACPSR2);
289 value = ioread32(fotg210->reg + FOTG210_DMISGR2);
291 iowrite32(value, fotg210->reg + FOTG210_DMISGR2);
294 value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
296 iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
301 iowrite32(DMATFNR_DISDMA, ep->fotg210->reg + FOTG210_DMATFNR);
309 value = ioread32(ep->fotg210->reg + FOTG210_DISGR2);
315 fotg210_ack_int(ep->fotg210, FOTG210_DISGR2, DISGR2_DMA_CMPLT);
319 value = ioread32(ep->fotg210->reg + FOTG210_DMACPSR1);
321 iowrite32(value, ep->fotg210->reg + FOTG210_DMACPSR1);
325 value = ioread32(ep->fotg210->reg +
328 iowrite32(value, ep->fotg210->reg +
331 value = ioread32(ep->fotg210->reg + FOTG210_DCFESR);
333 iowrite32(value, ep->fotg210->reg + FOTG210_DCFESR);
340 struct device *dev = &ep->fotg210->gadget.dev;
351 length = ioread32(ep->fotg210->reg +
397 u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR0);
400 iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
415 if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
418 spin_lock_irqsave(&ep->fotg210->lock, flags);
433 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
447 spin_lock_irqsave(&ep->fotg210->lock, flags);
450 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
457 struct fotg210_udc *fotg210 = ep->fotg210;
464 value = ioread32(fotg210->reg + FOTG210_DCFESR);
469 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
470 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
478 struct fotg210_udc *fotg210 = ep->fotg210;
483 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
484 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
493 struct fotg210_udc *fotg210;
498 fotg210 = ep->fotg210;
500 spin_lock_irqsave(&ep->fotg210->lock, flags);
508 fotg210_reset_tseq(fotg210, ep->epnum);
516 spin_unlock_irqrestore(&ep->fotg210->lock, flags);
549 static void fotg210_clear_tx0byte(struct fotg210_udc *fotg210)
551 u32 value = ioread32(fotg210->reg + FOTG210_TX0BYTE);
555 iowrite32(value, fotg210->reg + FOTG210_TX0BYTE);
558 static void fotg210_clear_rx0byte(struct fotg210_udc *fotg210)
560 u32 value = ioread32(fotg210->reg + FOTG210_RX0BYTE);
564 iowrite32(value, fotg210->reg + FOTG210_RX0BYTE);
568 static void fotg210_rdsetupp(struct fotg210_udc *fotg210,
576 iowrite32(DMATFNR_ACC_CXF, fotg210->reg + FOTG210_DMATFNR);
579 data = ioread32(fotg210->reg + FOTG210_CXPORT);
589 data = ioread32(fotg210->reg + FOTG210_CXPORT);
593 data = ioread32(fotg210->reg + FOTG210_CXPORT);
598 data = ioread32(fotg210->reg + FOTG210_CXPORT);
607 iowrite32(DMATFNR_DISDMA, fotg210->reg + FOTG210_DMATFNR);
610 static void fotg210_set_configuration(struct fotg210_udc *fotg210)
612 u32 value = ioread32(fotg210->reg + FOTG210_DAR);
615 iowrite32(value, fotg210->reg + FOTG210_DAR);
618 static void fotg210_set_dev_addr(struct fotg210_udc *fotg210, u32 addr)
620 u32 value = ioread32(fotg210->reg + FOTG210_DAR);
623 iowrite32(value, fotg210->reg + FOTG210_DAR);
626 static void fotg210_set_cxstall(struct fotg210_udc *fotg210)
628 u32 value = ioread32(fotg210->reg + FOTG210_DCFESR);
631 iowrite32(value, fotg210->reg + FOTG210_DCFESR);
634 static void fotg210_request_error(struct fotg210_udc *fotg210)
636 fotg210_set_cxstall(fotg210);
640 static void fotg210_set_address(struct fotg210_udc *fotg210,
644 fotg210_request_error(fotg210);
646 fotg210_set_dev_addr(fotg210, le16_to_cpu(ctrl->wValue));
647 fotg210_set_cxdone(fotg210);
651 static void fotg210_set_feature(struct fotg210_udc *fotg210,
656 fotg210_set_cxdone(fotg210);
659 fotg210_set_cxdone(fotg210);
665 fotg210_set_epnstall(fotg210->ep[epnum]);
667 fotg210_set_cxstall(fotg210);
668 fotg210_set_cxdone(fotg210);
672 fotg210_request_error(fotg210);
677 static void fotg210_clear_feature(struct fotg210_udc *fotg210,
681 fotg210->ep[ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK];
685 fotg210_set_cxdone(fotg210);
688 fotg210_set_cxdone(fotg210);
693 fotg210_set_cxdone(fotg210);
699 fotg210_set_cxdone(fotg210);
702 fotg210_request_error(fotg210);
709 struct fotg210_udc *fotg210 = ep->fotg210;
714 fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
715 fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
724 struct fotg210_udc *fotg210;
727 fotg210 = ep->fotg210;
730 dev_warn(&fotg210->gadget.dev, "EP0 request failed: %d\n", req->status);
734 static void fotg210_get_status(struct fotg210_udc *fotg210,
741 fotg210->ep0_data = cpu_to_le16(1 << USB_DEVICE_SELF_POWERED);
744 fotg210->ep0_data = cpu_to_le16(0);
749 fotg210->ep0_data =
750 cpu_to_le16(fotg210_is_epnstall(fotg210->ep[epnum])
753 fotg210_request_error(fotg210);
757 fotg210_request_error(fotg210);
761 fotg210->ep0_req->buf = &fotg210->ep0_data;
762 fotg210->ep0_req->length = 2;
764 spin_unlock(&fotg210->lock);
765 fotg210_ep_queue(fotg210->gadget.ep0, fotg210->ep0_req, GFP_ATOMIC);
766 spin_lock(&fotg210->lock);
769 static int fotg210_setup_packet(struct fotg210_udc *fotg210,
775 fotg210_rdsetupp(fotg210, p);
777 fotg210->ep[0]->dir_in = ctrl->bRequestType & USB_DIR_IN;
779 if (fotg210->gadget.speed == USB_SPEED_UNKNOWN) {
780 u32 value = ioread32(fotg210->reg + FOTG210_DMCR);
781 fotg210->gadget.speed = value & DMCR_HS_EN ?
789 fotg210_get_status(fotg210, ctrl);
792 fotg210_clear_feature(fotg210, ctrl);
795 fotg210_set_feature(fotg210, ctrl);
798 fotg210_set_address(fotg210, ctrl);
801 fotg210_set_configuration(fotg210);
815 static void fotg210_ep0out(struct fotg210_udc *fotg210)
817 struct fotg210_ep *ep = fotg210->ep[0];
835 static void fotg210_ep0in(struct fotg210_udc *fotg210)
837 struct fotg210_ep *ep = fotg210->ep[0];
851 fotg210_set_cxdone(fotg210);
869 int disgr1 = ioread32(ep->fotg210->reg + FOTG210_DISGR1);
884 struct fotg210_udc *fotg210 = _fotg210;
885 u32 int_grp = ioread32(fotg210->reg + FOTG210_DIGR);
886 u32 int_msk = ioread32(fotg210->reg + FOTG210_DMIGR);
890 spin_lock(&fotg210->lock);
893 void __iomem *reg = fotg210->reg + FOTG210_DISGR2;
895 u32 int_msk2 = ioread32(fotg210->reg + FOTG210_DMISGR2);
900 usb_gadget_udc_reset(&fotg210->gadget,
901 fotg210->driver);
902 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_USBRST_INT);
903 pr_info("fotg210 udc reset\n");
906 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_SUSP_INT);
907 pr_info("fotg210 udc suspend\n");
910 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_RESM_INT);
911 pr_info("fotg210 udc resume\n");
914 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_ISO_SEQ_ERR_INT);
915 pr_info("fotg210 iso sequence error\n");
918 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_ISO_SEQ_ABORT_INT);
919 pr_info("fotg210 iso sequence abort\n");
922 fotg210_clear_tx0byte(fotg210);
923 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_TX0BYTE_INT);
924 pr_info("fotg210 transferred 0 byte\n");
927 fotg210_clear_rx0byte(fotg210);
928 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_RX0BYTE_INT);
929 pr_info("fotg210 received 0 byte\n");
932 fotg210_ack_int(fotg210, FOTG210_DISGR2, DISGR2_DMA_ERROR);
937 void __iomem *reg = fotg210->reg + FOTG210_DISGR0;
939 u32 int_msk0 = ioread32(fotg210->reg + FOTG210_DMISGR0);
946 fotg210_ack_int(fotg210, FOTG210_DISGR0, DISGR0_CX_COMABT_INT);
947 pr_info("fotg210 CX command abort\n");
951 if (fotg210_setup_packet(fotg210, &ctrl)) {
952 spin_unlock(&fotg210->lock);
953 if (fotg210->driver->setup(&fotg210->gadget,
955 fotg210_set_cxstall(fotg210);
956 spin_lock(&fotg210->lock);
960 pr_info("fotg210 cmd end\n");
963 fotg210_ep0in(fotg210);
966 fotg210_ep0out(fotg210);
969 fotg210_set_cxstall(fotg210);
970 pr_info("fotg210 ep0 fail\n");
975 void __iomem *reg = fotg210->reg + FOTG210_DISGR1;
977 u32 int_msk1 = ioread32(fotg210->reg + FOTG210_DMISGR1);
984 fotg210_in_fifo_handler(fotg210->ep[fifo + 1]);
988 fotg210_out_fifo_handler(fotg210->ep[fifo + 1]);
992 spin_unlock(&fotg210->lock);
997 static void fotg210_disable_unplug(struct fotg210_udc *fotg210)
999 u32 reg = ioread32(fotg210->reg + FOTG210_PHYTMSR);
1002 iowrite32(reg, fotg210->reg + FOTG210_PHYTMSR);
1008 struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1013 fotg210->driver = driver;
1014 fotg210->gadget.dev.of_node = fotg210->dev->of_node;
1015 fotg210->gadget.speed = USB_SPEED_UNKNOWN;
1017 dev_info(fotg210->dev, "bound driver %s\n", driver->driver.name);
1019 if (!IS_ERR_OR_NULL(fotg210->phy)) {
1020 ret = otg_set_peripheral(fotg210->phy->otg,
1021 &fotg210->gadget);
1023 dev_err(fotg210->dev, "can't bind to phy\n");
1027 value = ioread32(fotg210->reg + FOTG210_DMCR);
1029 iowrite32(value, fotg210->reg + FOTG210_DMCR);
1032 value = ioread32(fotg210->reg + FOTG210_DMCR);
1034 iowrite32(value, fotg210->reg + FOTG210_DMCR);
1039 static void fotg210_init(struct fotg210_udc *fotg210)
1045 fotg210->reg + FOTG210_GMIR);
1049 fotg210->reg + FOTG210_DMIGR);
1052 iowrite32(DMCR_SFRST, fotg210->reg + FOTG210_DMCR);
1057 value = ioread32(fotg210->reg + FOTG210_DMCR);
1059 iowrite32(value, fotg210->reg + FOTG210_DMCR);
1065 fotg210->reg + FOTG210_DMISGR2);
1068 iowrite32(~(u32)0, fotg210->reg + FOTG210_DMISGR1);
1071 value = ioread32(fotg210->reg + FOTG210_DMISGR0);
1073 iowrite32(value, fotg210->reg + FOTG210_DMISGR0);
1078 struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1081 if (!IS_ERR_OR_NULL(fotg210->phy))
1082 return otg_set_peripheral(fotg210->phy->otg, NULL);
1084 spin_lock_irqsave(&fotg210->lock, flags);
1086 fotg210_init(fotg210);
1087 fotg210->driver = NULL;
1088 fotg210->gadget.speed = USB_SPEED_UNKNOWN;
1090 spin_unlock_irqrestore(&fotg210->lock, flags);
1104 struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1107 fotg210_vbus(fotg210->fotg, is_active);
1121 * @data: the usb_gadget structure in fotg210
1153 struct fotg210_udc *fotg210 = platform_get_drvdata(pdev);
1156 usb_del_gadget_udc(&fotg210->gadget);
1157 if (!IS_ERR_OR_NULL(fotg210->phy)) {
1158 usb_unregister_notifier(fotg210->phy, &fotg210_phy_notifier);
1159 usb_put_phy(fotg210->phy);
1161 iounmap(fotg210->reg);
1162 free_irq(platform_get_irq(pdev, 0), fotg210);
1164 fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1166 kfree(fotg210->ep[i]);
1168 kfree(fotg210);
1173 int fotg210_udc_probe(struct platform_device *pdev, struct fotg210 *fotg)
1175 struct fotg210_udc *fotg210 = NULL;
1186 fotg210 = kzalloc(sizeof(struct fotg210_udc), GFP_KERNEL);
1187 if (fotg210 == NULL)
1190 fotg210->dev = dev;
1191 fotg210->fotg = fotg;
1193 fotg210->phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
1194 if (IS_ERR(fotg210->phy)) {
1195 ret = PTR_ERR(fotg210->phy);
1199 fotg210->phy = NULL;
1201 ret = usb_phy_init(fotg210->phy);
1210 fotg210->ep[i] = kzalloc(sizeof(struct fotg210_ep), GFP_KERNEL);
1211 if (!fotg210->ep[i])
1215 fotg210->reg = fotg->base;
1217 spin_lock_init(&fotg210->lock);
1219 platform_set_drvdata(pdev, fotg210);
1221 fotg210->gadget.ops = &fotg210_gadget_ops;
1223 fotg210->gadget.max_speed = USB_SPEED_HIGH;
1224 fotg210->gadget.dev.parent = dev;
1225 fotg210->gadget.dev.dma_mask = dev->dma_mask;
1226 fotg210->gadget.name = udc_name;
1228 INIT_LIST_HEAD(&fotg210->gadget.ep_list);
1231 struct fotg210_ep *ep = fotg210->ep[i];
1234 INIT_LIST_HEAD(&fotg210->ep[i]->ep.ep_list);
1235 list_add_tail(&fotg210->ep[i]->ep.ep_list,
1236 &fotg210->gadget.ep_list);
1238 ep->fotg210 = fotg210;
1255 usb_ep_set_maxpacket_limit(&fotg210->ep[0]->ep, 0x40);
1256 fotg210->gadget.ep0 = &fotg210->ep[0]->ep;
1257 INIT_LIST_HEAD(&fotg210->gadget.ep0->ep_list);
1259 fotg210->ep0_req = fotg210_ep_alloc_request(&fotg210->ep[0]->ep,
1261 if (fotg210->ep0_req == NULL)
1264 fotg210->ep0_req->complete = fotg210_ep0_complete;
1266 fotg210_init(fotg210);
1268 fotg210_disable_unplug(fotg210);
1271 udc_name, fotg210);
1277 if (!IS_ERR_OR_NULL(fotg210->phy))
1278 usb_register_notifier(fotg210->phy, &fotg210_phy_notifier);
1280 ret = usb_add_gadget_udc(dev, &fotg210->gadget);
1289 if (!IS_ERR_OR_NULL(fotg210->phy))
1290 usb_unregister_notifier(fotg210->phy, &fotg210_phy_notifier);
1291 free_irq(irq, fotg210);
1294 fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1297 iounmap(fotg210->reg);
1301 kfree(fotg210->ep[i]);
1304 kfree(fotg210);