Lines Matching refs:sl811
78 static void port_power(struct sl811 *sl811, int is_on) in port_power() argument
80 struct usb_hcd *hcd = sl811_to_hcd(sl811); in port_power()
84 if (sl811->port1 & USB_PORT_STAT_POWER) in port_power()
87 sl811->port1 = USB_PORT_STAT_POWER; in port_power()
88 sl811->irq_enable = SL11H_INTMASK_INSRMV; in port_power()
90 sl811->port1 = 0; in port_power()
91 sl811->irq_enable = 0; in port_power()
94 sl811->ctrl1 = 0; in port_power()
95 sl811_write(sl811, SL11H_IRQ_ENABLE, 0); in port_power()
96 sl811_write(sl811, SL11H_IRQ_STATUS, ~0); in port_power()
98 if (sl811->board && sl811->board->port_power) { in port_power()
102 sl811->board->port_power(hcd->self.controller, is_on); in port_power()
106 if (sl811->board && sl811->board->reset) in port_power()
107 sl811->board->reset(hcd->self.controller); in port_power()
109 sl811_write(sl811, SL11H_CTLREG1, SL11H_CTL1MASK_SE0); in port_power()
113 sl811_write(sl811, SL11H_IRQ_ENABLE, 0); in port_power()
114 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in port_power()
115 sl811_write(sl811, SL811HS_CTLREG2, SL811HS_CTL2_INIT); in port_power()
116 sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); in port_power()
135 struct sl811 *sl811, in setup_packet() argument
148 data_reg = sl811->data_reg; in setup_packet()
149 sl811_write_buf(sl811, addr, urb->setup_packet, len); in setup_packet()
152 sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); in setup_packet()
158 sl811_write(sl811, bank + SL11H_HOSTCTLREG, in setup_packet()
166 struct sl811 *sl811, in status_packet() argument
177 data_reg = sl811->data_reg; in status_packet()
180 sl811_write(sl811, bank + SL11H_BUFADDRREG, 0); in status_packet()
189 sl811_write(sl811, bank + SL11H_HOSTCTLREG, control); in status_packet()
200 struct sl811 *sl811, in in_packet() argument
217 data_reg = sl811->data_reg; in in_packet()
220 sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); in in_packet()
225 sl811_write(sl811, bank + SL11H_HOSTCTLREG, control); in in_packet()
236 struct sl811 *sl811, in out_packet() argument
258 data_reg = sl811->data_reg; in out_packet()
260 sl811_write_buf(sl811, addr, buf, len); in out_packet()
263 sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); in out_packet()
268 sl811_write(sl811, bank + SL11H_HOSTCTLREG, in out_packet()
279 static inline void sofirq_on(struct sl811 *sl811) in sofirq_on() argument
281 if (sl811->irq_enable & SL11H_INTMASK_SOFINTR) in sofirq_on()
283 dev_dbg(sl811_to_hcd(sl811)->self.controller, "sof irq on\n"); in sofirq_on()
284 sl811->irq_enable |= SL11H_INTMASK_SOFINTR; in sofirq_on()
287 static inline void sofirq_off(struct sl811 *sl811) in sofirq_off() argument
289 if (!(sl811->irq_enable & SL11H_INTMASK_SOFINTR)) in sofirq_off()
291 dev_dbg(sl811_to_hcd(sl811)->self.controller, "sof irq off\n"); in sofirq_off()
292 sl811->irq_enable &= ~SL11H_INTMASK_SOFINTR; in sofirq_off()
302 static struct sl811h_ep *start(struct sl811 *sl811, u8 bank) in start() argument
310 if (sl811->next_periodic) { in start()
311 ep = sl811->next_periodic; in start()
312 sl811->next_periodic = ep->next; in start()
314 if (sl811->next_async) in start()
315 ep = sl811->next_async; in start()
316 else if (!list_empty(&sl811->async)) in start()
317 ep = container_of(sl811->async.next, in start()
327 if ((bank && sl811->active_b == ep) || sl811->active_a == ep) in start()
331 if (ep->schedule.next == &sl811->async) in start()
332 sl811->next_async = NULL; in start()
334 sl811->next_async = container_of(ep->schedule.next, in start()
339 dev_dbg(sl811_to_hcd(sl811)->self.controller, in start()
350 fclock = sl811_read(sl811, SL11H_SOFTMRREG) << 6; in start()
362 sl811->stat_overrun++; in start()
363 sofirq_on(sl811); in start()
370 sl811->stat_overrun++; in start()
381 in_packet(sl811, ep, urb, bank, control); in start()
384 out_packet(sl811, ep, urb, bank, control); in start()
387 setup_packet(sl811, ep, urb, bank, control); in start()
390 status_packet(sl811, ep, urb, bank, control); in start()
393 dev_dbg(sl811_to_hcd(sl811)->self.controller, in start()
402 static inline void start_transfer(struct sl811 *sl811) in start_transfer() argument
404 if (sl811->port1 & USB_PORT_STAT_SUSPEND) in start_transfer()
406 if (sl811->active_a == NULL) { in start_transfer()
407 sl811->active_a = start(sl811, SL811_EP_A(SL811_HOST_BUF)); in start_transfer()
408 if (sl811->active_a != NULL) in start_transfer()
409 sl811->jiffies_a = jiffies + MIN_JIFFIES; in start_transfer()
412 if (sl811->active_b == NULL) { in start_transfer()
413 sl811->active_b = start(sl811, SL811_EP_B(SL811_HOST_BUF)); in start_transfer()
414 if (sl811->active_b != NULL) in start_transfer()
415 sl811->jiffies_b = jiffies + MIN_JIFFIES; in start_transfer()
421 struct sl811 *sl811, in finish_request() argument
425 ) __releases(sl811->lock) __acquires(sl811->lock) in finish_request()
432 usb_hcd_unlink_urb_from_ep(sl811_to_hcd(sl811), urb); in finish_request()
433 spin_unlock(&sl811->lock); in finish_request()
434 usb_hcd_giveback_urb(sl811_to_hcd(sl811), urb, status); in finish_request()
435 spin_lock(&sl811->lock); in finish_request()
444 if (ep == sl811->next_async) in finish_request()
445 sl811->next_async = NULL; in finish_request()
450 dev_dbg(sl811_to_hcd(sl811)->self.controller, in finish_request()
454 struct sl811h_ep **prev = &sl811->periodic[i]; in finish_request()
460 sl811->load[i] -= ep->load; in finish_request()
463 sl811->periodic_count--; in finish_request()
464 sl811_to_hcd(sl811)->self.bandwidth_allocated in finish_request()
466 if (ep == sl811->next_periodic) in finish_request()
467 sl811->next_periodic = ep->next; in finish_request()
470 if (sl811->periodic_count == 0) in finish_request()
471 sofirq_off(sl811); in finish_request()
475 done(struct sl811 *sl811, struct sl811h_ep *ep, u8 bank) in done() argument
484 status = sl811_read(sl811, bank + SL11H_PKTSTATREG); in done()
527 len = ep->maxpacket - sl811_read(sl811, in done()
534 sl811_read_buf(sl811, SL811HS_PACKET_BUF(bank == 0), in done()
585 finish_request(sl811, ep, urb, urbstat); in done()
588 static inline u8 checkdone(struct sl811 *sl811) in checkdone() argument
593 if (sl811->active_a && time_before_eq(sl811->jiffies_a, jiffies)) { in checkdone()
594 ctl = sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG)); in checkdone()
596 sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0); in checkdone()
597 dev_dbg(sl811_to_hcd(sl811)->self.controller, in checkdone()
601 sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG))); in checkdone()
605 if (sl811->active_b && time_before_eq(sl811->jiffies_b, jiffies)) { in checkdone()
606 ctl = sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG)); in checkdone()
608 sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0); in checkdone()
609 dev_dbg(sl811_to_hcd(sl811)->self.controller, in checkdone()
613 sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG))); in checkdone()
622 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_irq() local
627 spin_lock(&sl811->lock); in sl811h_irq()
630 irqstat = sl811_read(sl811, SL11H_IRQ_STATUS) & ~SL11H_INTMASK_DP; in sl811h_irq()
632 sl811_write(sl811, SL11H_IRQ_STATUS, irqstat); in sl811h_irq()
633 irqstat &= sl811->irq_enable; in sl811h_irq()
639 irqstat = checkdone(sl811); in sl811h_irq()
641 sl811->stat_lost++; in sl811h_irq()
649 done(sl811, sl811->active_a, SL811_EP_A(SL811_HOST_BUF)); in sl811h_irq()
650 sl811->active_a = NULL; in sl811h_irq()
651 sl811->stat_a++; in sl811h_irq()
655 done(sl811, sl811->active_b, SL811_EP_B(SL811_HOST_BUF)); in sl811h_irq()
656 sl811->active_b = NULL; in sl811h_irq()
657 sl811->stat_b++; in sl811h_irq()
663 index = sl811->frame++ % (PERIODIC_SIZE - 1); in sl811h_irq()
664 sl811->stat_sof++; in sl811h_irq()
670 if (sl811->next_periodic) { in sl811h_irq()
672 sl811->stat_overrun++; in sl811h_irq()
674 if (sl811->periodic[index]) in sl811h_irq()
675 sl811->next_periodic = sl811->periodic[index]; in sl811h_irq()
680 sl811->stat_insrmv++; in sl811h_irq()
683 sl811->stat_wake = 0; in sl811h_irq()
684 sl811->stat_sof = 0; in sl811h_irq()
685 sl811->stat_a = 0; in sl811h_irq()
686 sl811->stat_b = 0; in sl811h_irq()
687 sl811->stat_lost = 0; in sl811h_irq()
689 sl811->ctrl1 = 0; in sl811h_irq()
690 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_irq()
692 sl811->irq_enable = SL11H_INTMASK_INSRMV; in sl811h_irq()
693 sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); in sl811h_irq()
696 if (sl811->active_a) { in sl811h_irq()
697 sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0); in sl811h_irq()
698 finish_request(sl811, sl811->active_a, in sl811h_irq()
699 container_of(sl811->active_a in sl811h_irq()
703 sl811->active_a = NULL; in sl811h_irq()
706 if (sl811->active_b) { in sl811h_irq()
707 sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0); in sl811h_irq()
708 finish_request(sl811, sl811->active_b, in sl811h_irq()
709 container_of(sl811->active_b in sl811h_irq()
713 sl811->active_b = NULL; in sl811h_irq()
721 sl811->port1 &= ~USB_PORT_STAT_CONNECTION; in sl811h_irq()
723 sl811->port1 |= USB_PORT_STAT_CONNECTION; in sl811h_irq()
725 sl811->port1 |= USB_PORT_STAT_C_CONNECTION << 16; in sl811h_irq()
728 if (sl811->port1 & USB_PORT_STAT_SUSPEND) { in sl811h_irq()
730 sl811->port1 |= USB_PORT_STAT_C_SUSPEND << 16; in sl811h_irq()
731 sl811->stat_wake++; in sl811h_irq()
737 if (sl811->port1 & USB_PORT_STAT_ENABLE) in sl811h_irq()
738 start_transfer(sl811); in sl811h_irq()
744 if (sl811->periodic_count == 0 && list_empty(&sl811->async)) in sl811h_irq()
745 sofirq_off(sl811); in sl811h_irq()
746 sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); in sl811h_irq()
748 spin_unlock(&sl811->lock); in sl811h_irq()
764 static int balance(struct sl811 *sl811, u16 period, u16 load) in balance() argument
772 if (branch < 0 || sl811->load[branch] > sl811->load[i]) { in balance()
776 if ((sl811->load[j] + load) in balance()
795 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_urb_enqueue() local
819 spin_lock_irqsave(&sl811->lock, flags); in sl811h_urb_enqueue()
822 if (!(sl811->port1 & USB_PORT_STAT_ENABLE) in sl811h_urb_enqueue()
868 if (!(sl811->ctrl1 & SL11H_CTL1MASK_LSPD)) in sl811h_urb_enqueue()
896 list_add_tail(&ep->schedule, &sl811->async); in sl811h_urb_enqueue()
907 urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1)) in sl811h_urb_enqueue()
912 retval = balance(sl811, ep->period, ep->load); in sl811h_urb_enqueue()
917 urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1)) in sl811h_urb_enqueue()
927 struct sl811h_ep **prev = &sl811->periodic[i]; in sl811h_urb_enqueue()
940 sl811->load[i] += ep->load; in sl811h_urb_enqueue()
942 sl811->periodic_count++; in sl811h_urb_enqueue()
944 sofirq_on(sl811); in sl811h_urb_enqueue()
948 start_transfer(sl811); in sl811h_urb_enqueue()
949 sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); in sl811h_urb_enqueue()
954 spin_unlock_irqrestore(&sl811->lock, flags); in sl811h_urb_enqueue()
960 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_urb_dequeue() local
966 spin_lock_irqsave(&sl811->lock, flags); in sl811h_urb_dequeue()
981 } else if (sl811->active_a == ep) { in sl811h_urb_dequeue()
982 if (time_before_eq(sl811->jiffies_a, jiffies)) { in sl811h_urb_dequeue()
986 sl811_read(sl811, in sl811h_urb_dequeue()
988 sl811_read(sl811, in sl811h_urb_dequeue()
990 sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), in sl811h_urb_dequeue()
992 sl811->active_a = NULL; in sl811h_urb_dequeue()
996 } else if (sl811->active_b == ep) { in sl811h_urb_dequeue()
997 if (time_before_eq(sl811->jiffies_a, jiffies)) { in sl811h_urb_dequeue()
1001 sl811_read(sl811, in sl811h_urb_dequeue()
1003 sl811_read(sl811, in sl811h_urb_dequeue()
1005 sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), in sl811h_urb_dequeue()
1007 sl811->active_b = NULL; in sl811h_urb_dequeue()
1016 finish_request(sl811, ep, urb, 0); in sl811h_urb_dequeue()
1018 dev_dbg(sl811_to_hcd(sl811)->self.controller, in sl811h_urb_dequeue()
1020 (sl811->active_a == ep) ? "A" : "B"); in sl811h_urb_dequeue()
1024 spin_unlock_irqrestore(&sl811->lock, flags); in sl811h_urb_dequeue()
1049 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_get_frame() local
1055 return sl811->frame; in sl811h_get_frame()
1065 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_hub_status_data() local
1073 if (!timer_pending(&sl811->timer)) { in sl811h_hub_status_data()
1075 sl811->stat_lost++; in sl811h_hub_status_data()
1080 if (!(sl811->port1 & (0xffff << 16))) in sl811h_hub_status_data()
1090 struct sl811 *sl811, in sl811h_hub_descriptor() argument
1103 if (sl811->board && sl811->board->port_power) { in sl811h_hub_descriptor()
1104 desc->bPwrOn2PwrGood = sl811->board->potpg; in sl811h_hub_descriptor()
1124 struct sl811 *sl811 = from_timer(sl811, t, timer); in sl811h_timer() local
1127 u8 signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE; in sl811h_timer()
1132 spin_lock_irqsave(&sl811->lock, flags); in sl811h_timer()
1135 sl811->ctrl1 &= ~SL11H_CTL1MASK_FORCE; in sl811h_timer()
1136 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_timer()
1139 irqstat = sl811_read(sl811, SL11H_IRQ_STATUS); in sl811h_timer()
1143 dev_dbg(sl811_to_hcd(sl811)->self.controller, "end reset\n"); in sl811h_timer()
1144 sl811->port1 = (USB_PORT_STAT_C_RESET << 16) in sl811h_timer()
1146 sl811->ctrl1 = 0; in sl811h_timer()
1152 dev_dbg(sl811_to_hcd(sl811)->self.controller, "end resume\n"); in sl811h_timer()
1153 sl811->port1 &= ~USB_PORT_STAT_SUSPEND; in sl811h_timer()
1156 dev_dbg(sl811_to_hcd(sl811)->self.controller, in sl811h_timer()
1160 sl811_write(sl811, SL11H_IRQ_STATUS, irqstat); in sl811h_timer()
1164 if (sl811->port1 & USB_PORT_STAT_CONNECTION) in sl811h_timer()
1165 sl811->port1 |= (USB_PORT_STAT_C_CONNECTION << 16) in sl811h_timer()
1167 sl811->port1 &= ~mask; in sl811h_timer()
1168 sl811->irq_enable = SL11H_INTMASK_INSRMV; in sl811h_timer()
1170 sl811->port1 |= mask; in sl811h_timer()
1172 sl811->port1 &= ~USB_PORT_STAT_LOW_SPEED; in sl811h_timer()
1173 sl811->irq_enable = SL11H_INTMASK_INSRMV | SL11H_INTMASK_RD; in sl811h_timer()
1176 if (sl811->port1 & USB_PORT_STAT_CONNECTION) { in sl811h_timer()
1179 sl811->irq_enable |= SL11H_INTMASK_DONE_A; in sl811h_timer()
1181 sl811->irq_enable |= SL11H_INTMASK_DONE_B; in sl811h_timer()
1183 if (sl811->port1 & USB_PORT_STAT_LOW_SPEED) { in sl811h_timer()
1184 sl811->ctrl1 |= SL11H_CTL1MASK_LSPD; in sl811h_timer()
1189 sl811->ctrl1 |= SL11H_CTL1MASK_SOF_ENA; in sl811h_timer()
1190 sl811_write(sl811, SL11H_SOFLOWREG, 0xe0); in sl811h_timer()
1191 sl811_write(sl811, SL811HS_CTLREG2, ctrl2); in sl811h_timer()
1194 sl811_write(sl811, SL811_EP_A(SL11H_BUFLNTHREG), 0); in sl811h_timer()
1195 writeb(SL_SOF, sl811->data_reg); in sl811h_timer()
1196 writeb(0, sl811->data_reg); in sl811h_timer()
1197 sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), in sl811h_timer()
1202 sl811->ctrl1 = 0; in sl811h_timer()
1204 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_timer()
1207 sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); in sl811h_timer()
1208 spin_unlock_irqrestore(&sl811->lock, flags); in sl811h_timer()
1220 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_hub_control() local
1224 spin_lock_irqsave(&sl811->lock, flags); in sl811h_hub_control()
1243 sl811->port1 &= USB_PORT_STAT_POWER; in sl811h_hub_control()
1244 sl811->ctrl1 = 0; in sl811h_hub_control()
1245 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_hub_control()
1246 sl811->irq_enable = SL11H_INTMASK_INSRMV; in sl811h_hub_control()
1247 sl811_write(sl811, SL11H_IRQ_ENABLE, in sl811h_hub_control()
1248 sl811->irq_enable); in sl811h_hub_control()
1251 if (!(sl811->port1 & USB_PORT_STAT_SUSPEND)) in sl811h_hub_control()
1256 sl811->irq_enable = 0; in sl811h_hub_control()
1257 sl811_write(sl811, SL11H_IRQ_ENABLE, in sl811h_hub_control()
1258 sl811->irq_enable); in sl811h_hub_control()
1259 sl811->ctrl1 |= SL11H_CTL1MASK_K; in sl811h_hub_control()
1260 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_hub_control()
1262 mod_timer(&sl811->timer, jiffies in sl811h_hub_control()
1266 port_power(sl811, 0); in sl811h_hub_control()
1277 sl811->port1 &= ~(1 << wValue); in sl811h_hub_control()
1280 sl811h_hub_descriptor(sl811, (struct usb_hub_descriptor *) buf); in sl811h_hub_control()
1288 put_unaligned_le32(sl811->port1, buf); in sl811h_hub_control()
1293 sl811->port1); in sl811h_hub_control()
1300 if (sl811->port1 & USB_PORT_STAT_RESET) in sl811h_hub_control()
1302 if (!(sl811->port1 & USB_PORT_STAT_ENABLE)) in sl811h_hub_control()
1306 sl811->ctrl1 &= ~SL11H_CTL1MASK_SOF_ENA; in sl811h_hub_control()
1307 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_hub_control()
1310 port_power(sl811, 1); in sl811h_hub_control()
1313 if (sl811->port1 & USB_PORT_STAT_SUSPEND) in sl811h_hub_control()
1315 if (!(sl811->port1 & USB_PORT_STAT_POWER)) in sl811h_hub_control()
1319 sl811->irq_enable = 0; in sl811h_hub_control()
1320 sl811_write(sl811, SL11H_IRQ_ENABLE, in sl811h_hub_control()
1321 sl811->irq_enable); in sl811h_hub_control()
1322 sl811->ctrl1 = SL11H_CTL1MASK_SE0; in sl811h_hub_control()
1323 sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); in sl811h_hub_control()
1324 sl811->port1 |= USB_PORT_STAT_RESET; in sl811h_hub_control()
1325 mod_timer(&sl811->timer, jiffies in sl811h_hub_control()
1331 sl811->port1 |= 1 << wValue; in sl811h_hub_control()
1340 spin_unlock_irqrestore(&sl811->lock, flags); in sl811h_hub_control()
1385 struct sl811 *sl811 = s->private; in sl811h_debug_show() local
1390 sl811_to_hcd(sl811)->product_desc, in sl811h_debug_show()
1392 sl811->port1); in sl811h_debug_show()
1394 seq_printf(s, "insert/remove: %ld\n", sl811->stat_insrmv); in sl811h_debug_show()
1397 sl811->stat_a, sl811->stat_b, in sl811h_debug_show()
1398 sl811->stat_wake, sl811->stat_sof, in sl811h_debug_show()
1399 sl811->stat_overrun, sl811->stat_lost); in sl811h_debug_show()
1401 spin_lock_irq(&sl811->lock); in sl811h_debug_show()
1403 if (sl811->ctrl1 & SL11H_CTL1MASK_SUSPEND) in sl811h_debug_show()
1406 u8 t = sl811_read(sl811, SL11H_CTLREG1); in sl811h_debug_show()
1420 sl811_read(sl811, SL11H_IRQ_ENABLE)); in sl811h_debug_show()
1422 sl811_read(sl811, SL11H_IRQ_STATUS)); in sl811h_debug_show()
1424 sl811_read(sl811, SL11H_SOFTMRREG) << 6); in sl811h_debug_show()
1427 seq_printf(s, "A: qh%p ctl %02x sts %02x\n", sl811->active_a, in sl811h_debug_show()
1428 sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG)), in sl811h_debug_show()
1429 sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG))); in sl811h_debug_show()
1430 seq_printf(s, "B: qh%p ctl %02x sts %02x\n", sl811->active_b, in sl811h_debug_show()
1431 sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG)), in sl811h_debug_show()
1432 sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG))); in sl811h_debug_show()
1434 list_for_each_entry (ep, &sl811->async, schedule) { in sl811h_debug_show()
1439 (ep == sl811->active_a) ? "(A) " : "", in sl811h_debug_show()
1440 (ep == sl811->active_b) ? "(B) " : "", in sl811h_debug_show()
1457 if (!list_empty(&sl811->async)) in sl811h_debug_show()
1463 ep = sl811->periodic[i]; in sl811h_debug_show()
1466 seq_printf(s, "%2d [%3d]:\n", i, sl811->load[i]); in sl811h_debug_show()
1473 (ep == sl811->active_a) ? "(A) " : "", in sl811h_debug_show()
1474 (ep == sl811->active_b) ? "(B) " : "", in sl811h_debug_show()
1488 spin_unlock_irq(&sl811->lock); in sl811h_debug_show()
1496 static void create_debug_file(struct sl811 *sl811) in create_debug_file() argument
1498 sl811->debug_file = debugfs_create_file("sl811h", S_IRUGO, in create_debug_file()
1499 usb_debug_root, sl811, in create_debug_file()
1503 static void remove_debug_file(struct sl811 *sl811) in remove_debug_file() argument
1505 debugfs_remove(sl811->debug_file); in remove_debug_file()
1513 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_stop() local
1518 spin_lock_irqsave(&sl811->lock, flags); in sl811h_stop()
1519 port_power(sl811, 0); in sl811h_stop()
1520 spin_unlock_irqrestore(&sl811->lock, flags); in sl811h_stop()
1526 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_start() local
1531 if (sl811->board) { in sl811h_start()
1534 sl811->board->can_wakeup); in sl811h_start()
1535 hcd->power_budget = sl811->board->power * 2; in sl811h_start()
1539 port_power(sl811, 1); in sl811h_start()
1548 .hcd_priv_size = sizeof(struct sl811),
1587 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_remove() local
1590 remove_debug_file(sl811); in sl811h_remove()
1596 iounmap(sl811->data_reg); in sl811h_remove()
1600 iounmap(sl811->addr_reg); in sl811h_remove()
1610 struct sl811 *sl811; in sl811h_probe() local
1672 sl811 = hcd_to_sl811(hcd); in sl811h_probe()
1674 spin_lock_init(&sl811->lock); in sl811h_probe()
1675 INIT_LIST_HEAD(&sl811->async); in sl811h_probe()
1676 sl811->board = dev_get_platdata(&dev->dev); in sl811h_probe()
1677 timer_setup(&sl811->timer, sl811h_timer, 0); in sl811h_probe()
1678 sl811->addr_reg = addr_reg; in sl811h_probe()
1679 sl811->data_reg = data_reg; in sl811h_probe()
1681 spin_lock_irq(&sl811->lock); in sl811h_probe()
1682 port_power(sl811, 0); in sl811h_probe()
1683 spin_unlock_irq(&sl811->lock); in sl811h_probe()
1686 tmp = sl811_read(sl811, SL11H_HWREVREG); in sl811h_probe()
1717 create_debug_file(sl811); in sl811h_probe()
1743 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_suspend() local
1753 port_power(sl811, 0); in sl811h_suspend()
1763 struct sl811 *sl811 = hcd_to_sl811(hcd); in sl811h_resume() local
1768 if (!sl811->port1 || !device_can_wakeup(&hcd->self.root_hub->dev)) { in sl811h_resume()
1769 sl811->port1 = 0; in sl811h_resume()
1770 port_power(sl811, 1); in sl811h_resume()