Lines Matching defs:udc

157 	struct max3420_udc *udc;
190 static const char driver_name[] = "max3420-udc";
199 static void spi_ack_ctrl(struct max3420_udc *udc)
201 struct spi_device *spi = udc->spi;
218 static u8 spi_rd8_ack(struct max3420_udc *udc, u8 reg, int actstat)
220 struct spi_device *spi = udc->spi;
240 static u8 spi_rd8(struct max3420_udc *udc, u8 reg)
242 return spi_rd8_ack(udc, reg, 0);
245 static void spi_wr8_ack(struct max3420_udc *udc, u8 reg, u8 val, int actstat)
247 struct spi_device *spi = udc->spi;
266 static void spi_wr8(struct max3420_udc *udc, u8 reg, u8 val)
268 spi_wr8_ack(udc, reg, val, 0);
271 static void spi_rd_buf(struct max3420_udc *udc, u8 reg, void *buf, u8 len)
273 struct spi_device *spi = udc->spi;
293 static void spi_wr_buf(struct max3420_udc *udc, u8 reg, void *buf, u8 len)
295 struct spi_device *spi = udc->spi;
316 struct max3420_udc *udc = ep->udc;
329 epien = spi_rd8(udc, MAX3420_REG_EPIEN);
330 epdis = spi_rd8(udc, MAX3420_REG_CLRTOGS);
340 spi_wr8(udc, MAX3420_REG_CLRTOGS, epdis);
341 spi_wr8(udc, MAX3420_REG_EPIEN, epien);
348 struct max3420_udc *udc = ep->udc;
361 epstalls = spi_rd8(udc, MAX3420_REG_EPSTALLS);
370 clrtogs = spi_rd8(udc, MAX3420_REG_CLRTOGS);
372 spi_wr8(udc, MAX3420_REG_CLRTOGS, clrtogs);
374 spi_wr8(udc, MAX3420_REG_EPSTALLS, epstalls | ACKSTAT);
379 static int spi_max3420_rwkup(struct max3420_udc *udc)
385 spin_lock_irqsave(&udc->lock, flags);
386 wake_remote = udc->todo & REMOTE_WAKEUP;
387 udc->todo &= ~REMOTE_WAKEUP;
388 spin_unlock_irqrestore(&udc->lock, flags);
390 if (!wake_remote || !udc->suspended)
394 usbctl = spi_rd8(udc, MAX3420_REG_USBCTL);
396 spi_wr8(udc, MAX3420_REG_USBCTL, usbctl);
401 usbctl = spi_rd8(udc, MAX3420_REG_USBCTL);
403 spi_wr8(udc, MAX3420_REG_USBCTL, usbctl);
405 udc->suspended = false;
411 static void __max3420_stop(struct max3420_udc *udc)
418 max3420_nuke(&udc->ep[i], -ECONNRESET);
421 spi_wr8(udc, MAX3420_REG_CPUCTL, 0);
423 val = spi_rd8(udc, MAX3420_REG_USBCTL);
425 if (udc->is_selfpowered)
429 spi_wr8(udc, MAX3420_REG_USBCTL, val);
432 static void __max3420_start(struct max3420_udc *udc)
442 spi_wr8(udc, MAX3420_REG_PINCTL, FDUPSPI);
445 spi_wr8(udc, MAX3420_REG_USBCTL, CHIPRES);
447 spi_wr8(udc, MAX3420_REG_USBCTL, 0);
451 val = spi_rd8(udc, MAX3420_REG_USBIRQ);
458 val = spi_rd8(udc, MAX3420_REG_USBCTL);
460 spi_wr8(udc, MAX3420_REG_USBCTL, val);
463 if (udc->is_selfpowered)
465 spi_wr8(udc, MAX3420_REG_USBIEN, val);
469 spi_wr8(udc, MAX3420_REG_EPIEN, val);
472 spi_wr8(udc, MAX3420_REG_CPUCTL, IE);
475 static int max3420_start(struct max3420_udc *udc)
480 spin_lock_irqsave(&udc->lock, flags);
481 todo = udc->todo & UDC_START;
482 udc->todo &= ~UDC_START;
483 spin_unlock_irqrestore(&udc->lock, flags);
488 if (udc->vbus_active && udc->softconnect)
489 __max3420_start(udc);
491 __max3420_stop(udc);
498 struct max3420_udc *udc = dev_id;
501 spin_lock_irqsave(&udc->lock, flags);
503 udc->vbus_active = !udc->vbus_active;
504 udc->todo |= UDC_START;
505 usb_udc_vbus_handler(&udc->gadget, udc->vbus_active);
506 usb_gadget_set_state(&udc->gadget, udc->vbus_active
508 spin_unlock_irqrestore(&udc->lock, flags);
510 if (udc->thread_task)
511 wake_up_process(udc->thread_task);
518 struct max3420_udc *udc = dev_id;
519 struct spi_device *spi = udc->spi;
522 spin_lock_irqsave(&udc->lock, flags);
523 if ((udc->todo & ENABLE_IRQ) == 0) {
525 udc->todo |= ENABLE_IRQ;
527 spin_unlock_irqrestore(&udc->lock, flags);
529 if (udc->thread_task)
530 wake_up_process(udc->thread_task);
535 static void max3420_getstatus(struct max3420_udc *udc)
540 switch (udc->setup.bRequestType & USB_RECIP_MASK) {
543 status = udc->gadget.is_selfpowered << USB_DEVICE_SELF_POWERED;
544 status |= (udc->remote_wkp << USB_DEVICE_REMOTE_WAKEUP);
547 if (udc->driver->setup(&udc->gadget, &udc->setup) < 0)
551 ep = &udc->ep[udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK];
552 if (udc->setup.wIndex & USB_DIR_IN) {
567 spi_wr_buf(udc, MAX3420_REG_EP0FIFO, &status, 2);
568 spi_wr8_ack(udc, MAX3420_REG_EP0BC, 2, 1);
571 dev_err(udc->dev, "Can't respond to getstatus request\n");
572 spi_wr8(udc, MAX3420_REG_EPSTALLS, STLEP0IN | STLEP0OUT | STLSTAT);
575 static void max3420_set_clear_feature(struct max3420_udc *udc)
578 int set = udc->setup.bRequest == USB_REQ_SET_FEATURE;
582 switch (udc->setup.bRequestType) {
584 if (udc->setup.wValue != USB_DEVICE_REMOTE_WAKEUP)
587 if (udc->setup.bRequest == USB_REQ_SET_FEATURE)
588 udc->remote_wkp = 1;
590 udc->remote_wkp = 0;
592 return spi_ack_ctrl(udc);
595 if (udc->setup.wValue != USB_ENDPOINT_HALT)
598 id = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
599 ep = &udc->ep[id];
615 dev_err(udc->dev, "Can't respond to SET/CLEAR FEATURE\n");
616 spi_wr8(udc, MAX3420_REG_EPSTALLS, STLEP0IN | STLEP0OUT | STLSTAT);
619 static void max3420_handle_setup(struct max3420_udc *udc)
623 spi_rd_buf(udc, MAX3420_REG_SUDFIFO, (void *)&setup, 8);
625 udc->setup = setup;
626 udc->setup.wValue = cpu_to_le16(setup.wValue);
627 udc->setup.wIndex = cpu_to_le16(setup.wIndex);
628 udc->setup.wLength = cpu_to_le16(setup.wLength);
630 switch (udc->setup.bRequest) {
632 /* Data+Status phase form udc */
633 if ((udc->setup.bRequestType &
638 return max3420_getstatus(udc);
640 /* Status phase from udc */
641 if (udc->setup.bRequestType != (USB_DIR_OUT |
645 spi_rd8_ack(udc, MAX3420_REG_FNADDR, 1);
646 dev_dbg(udc->dev, "Assigned Address=%d\n", udc->setup.wValue);
650 /* Requests with no data phase, status phase from udc */
651 if ((udc->setup.bRequestType & USB_TYPE_MASK)
654 return max3420_set_clear_feature(udc);
659 if (udc->driver->setup(&udc->gadget, &setup) < 0) {
661 spi_wr8(udc, MAX3420_REG_EPSTALLS,
669 struct max3420_udc *udc = ep->udc;
677 dev_err(udc->dev, "%s done %p, status %d\n",
684 static int max3420_do_data(struct max3420_udc *udc, int ep_id, int in)
686 struct max3420_ep *ep = &udc->ep[ep_id];
709 spi_wr_buf(udc, MAX3420_REG_EP0FIFO + ep_id, buf, length);
710 spi_wr8(udc, MAX3420_REG_EP0BC + ep_id, length);
714 psz = spi_rd8(udc, MAX3420_REG_EP0BC + ep_id);
717 spi_rd_buf(udc, MAX3420_REG_EP0FIFO + ep_id, buf, length);
736 spi_ack_ctrl(udc);
744 static int max3420_handle_irqs(struct max3420_udc *udc)
749 spi_rd_buf(udc, MAX3420_REG_EPIRQ, reg, 4);
759 spi_wr8(udc, MAX3420_REG_EPIRQ, SUDAVIRQ);
760 max3420_handle_setup(udc);
765 spi_wr8(udc, MAX3420_REG_USBIRQ, VBUSIRQ);
766 dev_dbg(udc->dev, "Cable plugged in\n");
771 spi_wr8(udc, MAX3420_REG_USBIRQ, NOVBUSIRQ);
772 dev_dbg(udc->dev, "Cable pulled out\n");
777 spi_wr8(udc, MAX3420_REG_USBIRQ, URESIRQ);
778 dev_dbg(udc->dev, "USB Reset - Start\n");
783 spi_wr8(udc, MAX3420_REG_USBIRQ, URESDNIRQ);
784 dev_dbg(udc->dev, "USB Reset - END\n");
785 spi_wr8(udc, MAX3420_REG_USBIEN, URESDNIRQ | URESIRQ);
786 spi_wr8(udc, MAX3420_REG_EPIEN, SUDAVIRQ | IN0BAVIRQ
792 spi_wr8(udc, MAX3420_REG_USBIRQ, SUSPIRQ);
793 dev_dbg(udc->dev, "USB Suspend - Enter\n");
794 udc->suspended = true;
799 spi_wr8(udc, MAX3420_REG_USBIRQ, BUSACTIRQ);
800 dev_dbg(udc->dev, "USB Suspend - Exit\n");
801 udc->suspended = false;
806 spi_wr8(udc, MAX3420_REG_USBIRQ, RWUDNIRQ);
807 dev_dbg(udc->dev, "Asked Host to wakeup\n");
812 spi_wr8(udc, MAX3420_REG_USBIRQ, OSCOKIRQ);
813 dev_dbg(udc->dev, "Osc stabilized, start work\n");
817 if (epirq & OUT0DAVIRQ && max3420_do_data(udc, 0, 0)) {
818 spi_wr8_ack(udc, MAX3420_REG_EPIRQ, OUT0DAVIRQ, 1);
822 if (epirq & IN0BAVIRQ && max3420_do_data(udc, 0, 1))
825 if (epirq & OUT1DAVIRQ && max3420_do_data(udc, 1, 0)) {
826 spi_wr8_ack(udc, MAX3420_REG_EPIRQ, OUT1DAVIRQ, 1);
830 if (epirq & IN2BAVIRQ && max3420_do_data(udc, 2, 1))
833 if (epirq & IN3BAVIRQ && max3420_do_data(udc, 3, 1))
841 struct max3420_udc *udc = dev_id;
842 struct spi_device *spi = udc->spi;
852 spin_lock_irqsave(&udc->lock, flags);
853 if (udc->todo & ENABLE_IRQ) {
855 udc->todo &= ~ENABLE_IRQ;
857 spin_unlock_irqrestore(&udc->lock, flags);
863 mutex_lock(&udc->spi_bus_mutex);
866 if (!udc->vbus_active || !udc->softconnect)
869 if (max3420_start(udc)) {
874 if (max3420_handle_irqs(udc)) {
879 if (spi_max3420_rwkup(udc)) {
884 max3420_do_data(udc, 0, 1); /* get done with the EP0 ZLP */
887 struct max3420_ep *ep = &udc->ep[i];
895 mutex_unlock(&udc->spi_bus_mutex);
899 dev_info(udc->dev, "SPI thread exiting\n");
906 struct max3420_udc *udc = ep->udc;
919 wake_up_process(udc->thread_task);
921 dev_dbg(udc->dev, "%sStall %s\n", stall ? "" : "Un", ep->name);
946 struct max3420_udc *udc = ep->udc;
950 wake_up_process(udc->thread_task);
975 struct max3420_udc *udc = ep->udc;
987 dev_dbg(udc->dev, "Disabled %s\n", ep->name);
993 struct max3420_udc *udc = ep->udc;
999 wake_up_process(udc->thread_task);
1029 struct max3420_udc *udc = ep->udc;
1039 wake_up_process(udc->thread_task);
1082 struct max3420_udc *udc = to_udc(gadget);
1086 spin_lock_irqsave(&udc->lock, flags);
1089 if (udc->remote_wkp) {
1090 udc->todo |= REMOTE_WAKEUP;
1094 spin_unlock_irqrestore(&udc->lock, flags);
1096 if (udc->thread_task)
1097 wake_up_process(udc->thread_task);
1104 struct max3420_udc *udc = to_udc(gadget);
1107 spin_lock_irqsave(&udc->lock, flags);
1109 udc->driver = driver;
1110 udc->gadget.speed = USB_SPEED_FULL;
1112 udc->gadget.is_selfpowered = udc->is_selfpowered;
1113 udc->remote_wkp = 0;
1114 udc->softconnect = true;
1115 udc->todo |= UDC_START;
1116 spin_unlock_irqrestore(&udc->lock, flags);
1118 if (udc->thread_task)
1119 wake_up_process(udc->thread_task);
1126 struct max3420_udc *udc = to_udc(gadget);
1129 spin_lock_irqsave(&udc->lock, flags);
1130 udc->is_selfpowered = udc->gadget.is_selfpowered;
1131 udc->gadget.speed = USB_SPEED_UNKNOWN;
1132 udc->driver = NULL;
1133 udc->softconnect = false;
1134 udc->todo |= UDC_START;
1135 spin_unlock_irqrestore(&udc->lock, flags);
1137 if (udc->thread_task)
1138 wake_up_process(udc->thread_task);
1149 static void max3420_eps_init(struct max3420_udc *udc)
1153 INIT_LIST_HEAD(&udc->gadget.ep_list);
1156 struct max3420_ep *ep = &udc->ep[idx];
1161 ep->udc = udc;
1194 &udc->gadget.ep_list);
1200 struct max3420_udc *udc;
1218 udc = devm_kzalloc(&spi->dev, sizeof(*udc), GFP_KERNEL);
1219 if (!udc)
1222 udc->spi = spi;
1224 udc->remote_wkp = 0;
1227 udc->gadget.ops = &max3420_udc_ops;
1228 udc->gadget.max_speed = USB_SPEED_FULL;
1229 udc->gadget.speed = USB_SPEED_UNKNOWN;
1230 udc->gadget.ep0 = &udc->ep[0].ep_usb;
1231 udc->gadget.name = driver_name;
1233 spin_lock_init(&udc->lock);
1234 mutex_init(&udc->spi_bus_mutex);
1236 udc->ep0req.ep = &udc->ep[0];
1237 udc->ep0req.usb_req.buf = udc->ep0buf;
1238 INIT_LIST_HEAD(&udc->ep0req.queue);
1241 max3420_eps_init(udc);
1244 spi_rd_buf(udc, MAX3420_REG_EPIRQ, reg, 8);
1245 spi_wr8(udc, MAX3420_REG_PINCTL, FDUPSPI);
1247 err = usb_add_gadget_udc(&spi->dev, &udc->gadget);
1251 udc->dev = &udc->gadget.dev;
1253 spi_set_drvdata(spi, udc);
1255 irq = of_irq_get_byname(spi->dev.of_node, "udc");
1257 "max3420", udc);
1261 udc->thread_task = kthread_create(max3420_thread, udc,
1263 if (IS_ERR(udc->thread_task)) {
1264 err = PTR_ERR(udc->thread_task);
1270 udc->is_selfpowered = 1;
1271 udc->vbus_active = true;
1272 udc->todo |= UDC_START;
1273 usb_udc_vbus_handler(&udc->gadget, udc->vbus_active);
1274 usb_gadget_set_state(&udc->gadget, USB_STATE_POWERED);
1275 max3420_start(udc);
1277 udc->is_selfpowered = 0;
1279 spi_rd_buf(udc, MAX3420_REG_EPIRQ, reg, 8);
1281 udc->vbus_active = true;
1284 max3420_vbus_handler, 0, "vbus", udc);
1292 usb_del_gadget_udc(&udc->gadget);
1298 struct max3420_udc *udc = spi_get_drvdata(spi);
1301 usb_del_gadget_udc(&udc->gadget);
1303 spin_lock_irqsave(&udc->lock, flags);
1305 kthread_stop(udc->thread_task);
1307 spin_unlock_irqrestore(&udc->lock, flags);
1311 { .compatible = "maxim,max3420-udc"},
1312 { .compatible = "maxim,max3421-udc"},
1319 .name = "max3420-udc",