Lines Matching refs:fusb300

36 static void fusb300_enable_bit(struct fusb300 *fusb300, u32 offset,
39 u32 reg = ioread32(fusb300->reg + offset);
42 iowrite32(reg, fusb300->reg + offset);
45 static void fusb300_disable_bit(struct fusb300 *fusb300, u32 offset,
48 u32 reg = ioread32(fusb300->reg + offset);
51 iowrite32(reg, fusb300->reg + offset);
72 static void fusb300_set_fifo_entry(struct fusb300 *fusb300,
75 u32 val = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
79 iowrite32(val, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
82 static void fusb300_set_start_entry(struct fusb300 *fusb300,
85 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
86 u32 start_entry = fusb300->fifo_entry_num * FUSB300_FIFO_ENTRY_NUM;
90 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
91 if (fusb300->fifo_entry_num == FUSB300_MAX_FIFO_ENTRY) {
92 fusb300->fifo_entry_num = 0;
93 fusb300->addrofs = 0;
96 fusb300->fifo_entry_num++;
100 static void fusb300_set_epaddrofs(struct fusb300 *fusb300,
103 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET2(info.epnum));
106 reg |= FUSB300_EPSET2_ADDROFS(fusb300->addrofs);
107 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET2(info.epnum));
108 fusb300->addrofs += (info.maxpacket + 7) / 8 * FUSB300_FIFO_ENTRY_NUM;
111 static void ep_fifo_setting(struct fusb300 *fusb300,
114 fusb300_set_fifo_entry(fusb300, info.epnum);
115 fusb300_set_start_entry(fusb300, info.epnum);
116 fusb300_set_epaddrofs(fusb300, info);
119 static void fusb300_set_eptype(struct fusb300 *fusb300,
122 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
126 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
129 static void fusb300_set_epdir(struct fusb300 *fusb300,
136 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
139 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
142 static void fusb300_set_ep_active(struct fusb300 *fusb300,
145 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
148 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(ep));
151 static void fusb300_set_epmps(struct fusb300 *fusb300,
154 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET2(info.epnum));
158 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET2(info.epnum));
161 static void fusb300_set_interval(struct fusb300 *fusb300,
164 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
168 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
171 static void fusb300_set_bwnum(struct fusb300 *fusb300,
174 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
178 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET1(info.epnum));
181 static void set_ep_reg(struct fusb300 *fusb300,
184 fusb300_set_eptype(fusb300, info);
185 fusb300_set_epdir(fusb300, info);
186 fusb300_set_epmps(fusb300, info);
189 fusb300_set_interval(fusb300, info);
192 fusb300_set_bwnum(fusb300, info);
194 fusb300_set_ep_active(fusb300, info.epnum);
200 struct fusb300 *fusb300 = ep->fusb300;
221 ep_fifo_setting(fusb300, info);
223 set_ep_reg(fusb300, info);
227 fusb300->ep[info.epnum] = ep;
239 if (ep->fusb300->reenum) {
240 ep->fusb300->fifo_entry_num = 0;
241 ep->fusb300->addrofs = 0;
242 ep->fusb300->reenum = 0;
260 spin_lock_irqsave(&ep->fusb300->lock, flags);
262 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
291 struct fusb300 *fusb300 = ep->fusb300;
294 fusb300_enable_bit(fusb300, FUSB300_OFFSET_IGER0,
306 struct fusb300 *fusb300 = ep->fusb300;
309 fusb300_disable_bit(fusb300, FUSB300_OFFSET_IGER0,
319 static void fusb300_set_cxlen(struct fusb300 *fusb300, u32 length)
323 reg = ioread32(fusb300->reg + FUSB300_OFFSET_CSR);
326 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_CSR);
336 struct fusb300 *fusb300 = ep->fusb300;
342 fusb300_set_cxlen(fusb300, SS_CTL_MAX_PACKET_SIZE);
346 iowrite32(data, fusb300->reg + FUSB300_OFFSET_CXPORT);
351 fusb300_set_cxlen(fusb300, length);
356 iowrite32(data, fusb300->reg + FUSB300_OFFSET_CXPORT);
363 iowrite32(data, fusb300->reg + FUSB300_OFFSET_CXPORT);
368 iowrite32(data, fusb300->reg + FUSB300_OFFSET_CXPORT);
373 iowrite32(data, fusb300->reg + FUSB300_OFFSET_CXPORT);
382 static void fusb300_set_epnstall(struct fusb300 *fusb300, u8 ep)
384 fusb300_enable_bit(fusb300, FUSB300_OFFSET_EPSET0(ep),
388 static void fusb300_clear_epnstall(struct fusb300 *fusb300, u8 ep)
390 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
395 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
401 if (ep->fusb300->ep0_dir) { /* if IN */
414 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_IGER1,
430 if (ep->fusb300->gadget.speed == USB_SPEED_UNKNOWN)
433 spin_lock_irqsave(&ep->fusb300->lock, flags);
448 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
462 spin_lock_irqsave(&ep->fusb300->lock, flags);
465 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
473 struct fusb300 *fusb300;
479 fusb300 = ep->fusb300;
481 spin_lock_irqsave(&ep->fusb300->lock, flags);
489 fusb300_set_epnstall(fusb300, ep->epnum);
494 fusb300_clear_epnstall(fusb300, ep->epnum);
500 spin_unlock_irqrestore(&ep->fusb300->lock, flags);
534 static void fusb300_clear_int(struct fusb300 *fusb300, u32 offset,
537 iowrite32(value, fusb300->reg + offset);
544 static void fusb300_set_cxstall(struct fusb300 *fusb300)
546 fusb300_enable_bit(fusb300, FUSB300_OFFSET_CSR,
550 static void fusb300_set_cxdone(struct fusb300 *fusb300)
552 fusb300_enable_bit(fusb300, FUSB300_OFFSET_CSR,
557 static void fusb300_rdcxf(struct fusb300 *fusb300,
567 data = ioread32(fusb300->reg + FUSB300_OFFSET_CXPORT);
578 data = ioread32(fusb300->reg + FUSB300_OFFSET_CXPORT);
583 data = ioread32(fusb300->reg + FUSB300_OFFSET_CXPORT);
589 data = ioread32(fusb300->reg + FUSB300_OFFSET_CXPORT);
607 struct fusb300 *fusb300 = ep->fusb300;
616 data = ioread32(fusb300->reg +
627 data = ioread32(fusb300->reg +
632 data = ioread32(fusb300->reg +
638 data = ioread32(fusb300->reg +
649 reg = ioread32(fusb300->reg + FUSB300_OFFSET_IGR1);
657 static u8 fusb300_get_epnstall(struct fusb300 *fusb300, u8 ep)
660 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPSET0(ep));
667 static u8 fusb300_get_cxstall(struct fusb300 *fusb300)
670 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_CSR);
677 static void request_error(struct fusb300 *fusb300)
679 fusb300_set_cxstall(fusb300);
683 static void get_status(struct fusb300 *fusb300, struct usb_ctrlrequest *ctrl)
684 __releases(fusb300->lock)
685 __acquires(fusb300->lock)
701 if (fusb300_get_epnstall(fusb300, ep))
704 if (fusb300_get_cxstall(fusb300))
710 request_error(fusb300);
714 fusb300->ep0_data = cpu_to_le16(status);
715 fusb300->ep0_req->buf = &fusb300->ep0_data;
716 fusb300->ep0_req->length = 2;
718 spin_unlock(&fusb300->lock);
719 fusb300_queue(fusb300->gadget.ep0, fusb300->ep0_req, GFP_KERNEL);
720 spin_lock(&fusb300->lock);
723 static void set_feature(struct fusb300 *fusb300, struct usb_ctrlrequest *ctrl)
729 fusb300_set_cxdone(fusb300);
732 fusb300_set_cxdone(fusb300);
739 fusb300_set_epnstall(fusb300, ep);
741 fusb300_set_cxstall(fusb300);
742 fusb300_set_cxdone(fusb300);
746 request_error(fusb300);
751 static void fusb300_clear_seqnum(struct fusb300 *fusb300, u8 ep)
753 fusb300_enable_bit(fusb300, FUSB300_OFFSET_EPSET0(ep),
757 static void clear_feature(struct fusb300 *fusb300, struct usb_ctrlrequest *ctrl)
760 fusb300->ep[ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK];
764 fusb300_set_cxdone(fusb300);
767 fusb300_set_cxdone(fusb300);
772 fusb300_set_cxdone(fusb300);
777 fusb300_clear_seqnum(fusb300, ep->epnum);
778 fusb300_clear_epnstall(fusb300, ep->epnum);
783 fusb300_set_cxdone(fusb300);
786 request_error(fusb300);
791 static void fusb300_set_dev_addr(struct fusb300 *fusb300, u16 addr)
793 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_DAR);
798 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_DAR);
801 static void set_address(struct fusb300 *fusb300, struct usb_ctrlrequest *ctrl)
804 request_error(fusb300);
806 fusb300_set_dev_addr(fusb300, ctrl->wValue);
807 fusb300_set_cxdone(fusb300);
820 static int setup_packet(struct fusb300 *fusb300, struct usb_ctrlrequest *ctrl)
826 fusb300_rdcxf(fusb300, p, 8);
827 fusb300->ep0_dir = ctrl->bRequestType & USB_DIR_IN;
828 fusb300->ep0_length = ctrl->wLength;
834 get_status(fusb300, ctrl);
837 clear_feature(fusb300, ctrl);
840 set_feature(fusb300, ctrl);
843 set_address(fusb300, ctrl);
846 fusb300_enable_bit(fusb300, FUSB300_OFFSET_DAR,
850 fusb300_clear_seqnum(fusb300, i);
851 fusb300->reenum = 1;
870 if (ep->fusb300->gadget.speed == USB_SPEED_UNKNOWN)
875 spin_unlock(&ep->fusb300->lock);
877 spin_lock(&ep->fusb300->lock);
884 fusb300_set_cxdone(ep->fusb300);
895 reg = ioread32(ep->fusb300->reg +
900 iowrite32(d, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W1(ep->epnum));
904 iowrite32(value, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W0(ep->epnum));
906 iowrite32(0x0, ep->fusb300->reg + FUSB300_OFFSET_EPPRD_W2(ep->epnum));
908 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_EPPRDRDY,
917 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGR1);
924 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGR0);
928 fusb300_clear_int(ep->fusb300, FUSB300_OFFSET_IGR0,
933 reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGER0);
935 iowrite32(reg, ep->fusb300->reg + FUSB300_OFFSET_IGER0);
943 ret = usb_gadget_map_request(&ep->fusb300->gadget,
948 fusb300_enable_bit(ep->fusb300, FUSB300_OFFSET_IGER0,
955 usb_gadget_unmap_request(&ep->fusb300->gadget,
971 struct fusb300 *fusb300 = ep->fusb300;
974 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_EPFFR(ep->epnum));
984 static void check_device_mode(struct fusb300 *fusb300)
986 u32 reg = ioread32(fusb300->reg + FUSB300_OFFSET_GCR);
990 fusb300->gadget.speed = USB_SPEED_SUPER;
993 fusb300->gadget.speed = USB_SPEED_HIGH;
996 fusb300->gadget.speed = USB_SPEED_FULL;
999 fusb300->gadget.speed = USB_SPEED_UNKNOWN;
1006 static void fusb300_ep0out(struct fusb300 *fusb300)
1008 struct fusb300_ep *ep = fusb300->ep[0];
1017 fusb300_rdcxf(ep->fusb300, req->req.buf,
1020 reg = ioread32(fusb300->reg + FUSB300_OFFSET_IGER1);
1022 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_IGER1);
1027 static void fusb300_ep0in(struct fusb300 *fusb300)
1030 struct fusb300_ep *ep = fusb300->ep[0];
1032 if ((!list_empty(&ep->queue)) && (fusb300->ep0_dir)) {
1040 fusb300_set_cxdone(fusb300);
1061 struct fusb300 *fusb300 = _fusb300;
1062 u32 int_grp1 = ioread32(fusb300->reg + FUSB300_OFFSET_IGR1);
1063 u32 int_grp1_en = ioread32(fusb300->reg + FUSB300_OFFSET_IGER1);
1064 u32 int_grp0 = ioread32(fusb300->reg + FUSB300_OFFSET_IGR0);
1065 u32 int_grp0_en = ioread32(fusb300->reg + FUSB300_OFFSET_IGER0);
1071 spin_lock(&fusb300->lock);
1077 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1084 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1091 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1098 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1104 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1110 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1115 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1120 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1125 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1130 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1135 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1141 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1147 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1153 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1156 fusb300_enable_bit(fusb300, FUSB300_OFFSET_SSCR1,
1161 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1167 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1173 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1179 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1185 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1191 fusb300_clear_int(fusb300, FUSB300_OFFSET_IGR1,
1193 check_device_mode(fusb300);
1197 fusb300_set_cxstall(fusb300);
1203 if (setup_packet(fusb300, &ctrl)) {
1204 spin_unlock(&fusb300->lock);
1205 if (fusb300->driver->setup(&fusb300->gadget, &ctrl) < 0)
1206 fusb300_set_cxstall(fusb300);
1207 spin_lock(&fusb300->lock);
1217 fusb300_ep0out(fusb300);
1222 fusb300_ep0in(fusb300);
1240 reg = ioread32(fusb300->reg +
1244 in_ep_fifo_handler(fusb300->ep[i]);
1246 out_ep_fifo_handler(fusb300->ep[i]);
1251 spin_unlock(&fusb300->lock);
1256 static void fusb300_set_u2_timeout(struct fusb300 *fusb300,
1261 reg = ioread32(fusb300->reg + FUSB300_OFFSET_TT);
1265 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_TT);
1268 static void fusb300_set_u1_timeout(struct fusb300 *fusb300,
1273 reg = ioread32(fusb300->reg + FUSB300_OFFSET_TT);
1277 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_TT);
1280 static void init_controller(struct fusb300 *fusb300)
1288 reg = ioread32(fusb300->reg + FUSB300_OFFSET_AHBCR);
1291 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_AHBCR);
1295 reg = ioread32(fusb300->reg + FUSB300_OFFSET_HSCR);
1298 iowrite32(reg, fusb300->reg + FUSB300_OFFSET_HSCR);
1301 fusb300_set_u2_timeout(fusb300, 0xff);
1302 fusb300_set_u1_timeout(fusb300, 0xff);
1305 iowrite32(0xcfffff9f, fusb300->reg + FUSB300_OFFSET_IGER1);
1311 struct fusb300 *fusb300 = to_fusb300(g);
1314 fusb300->driver = driver;
1321 struct fusb300 *fusb300 = to_fusb300(g);
1323 init_controller(fusb300);
1324 fusb300->driver = NULL;
1343 struct fusb300 *fusb300 = platform_get_drvdata(pdev);
1346 usb_del_gadget_udc(&fusb300->gadget);
1347 iounmap(fusb300->reg);
1348 free_irq(platform_get_irq(pdev, 0), fusb300);
1349 free_irq(platform_get_irq(pdev, 1), fusb300);
1351 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req);
1353 kfree(fusb300->ep[i]);
1354 kfree(fusb300);
1361 struct fusb300 *fusb300 = NULL;
1397 fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL);
1398 if (fusb300 == NULL) {
1409 fusb300->ep[i] = _ep[i];
1412 spin_lock_init(&fusb300->lock);
1414 platform_set_drvdata(pdev, fusb300);
1416 fusb300->gadget.ops = &fusb300_gadget_ops;
1418 fusb300->gadget.max_speed = USB_SPEED_HIGH;
1419 fusb300->gadget.name = udc_name;
1420 fusb300->reg = reg;
1423 udc_name, fusb300);
1430 IRQF_SHARED, udc_name, fusb300);
1436 INIT_LIST_HEAD(&fusb300->gadget.ep_list);
1439 struct fusb300_ep *ep = fusb300->ep[i];
1442 INIT_LIST_HEAD(&fusb300->ep[i]->ep.ep_list);
1443 list_add_tail(&fusb300->ep[i]->ep.ep_list,
1444 &fusb300->gadget.ep_list);
1446 ep->fusb300 = fusb300;
1463 usb_ep_set_maxpacket_limit(&fusb300->ep[0]->ep, HS_CTL_MAX_PACKET_SIZE);
1464 fusb300->ep[0]->epnum = 0;
1465 fusb300->gadget.ep0 = &fusb300->ep[0]->ep;
1466 INIT_LIST_HEAD(&fusb300->gadget.ep0->ep_list);
1468 fusb300->ep0_req = fusb300_alloc_request(&fusb300->ep[0]->ep,
1470 if (fusb300->ep0_req == NULL) {
1475 init_controller(fusb300);
1476 ret = usb_add_gadget_udc(&pdev->dev, &fusb300->gadget);
1485 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req);
1488 free_irq(ires1->start, fusb300);
1491 free_irq(ires->start, fusb300);
1494 if (fusb300) {
1495 if (fusb300->ep0_req)
1496 fusb300_free_request(&fusb300->ep[0]->ep,
1497 fusb300->ep0_req);
1499 kfree(fusb300->ep[i]);
1500 kfree(fusb300);