sl811 78 drivers/usb/host/sl811-hcd.c static void port_power(struct sl811 *sl811, int is_on) sl811 80 drivers/usb/host/sl811-hcd.c struct usb_hcd *hcd = sl811_to_hcd(sl811); sl811 84 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_POWER) sl811 87 drivers/usb/host/sl811-hcd.c sl811->port1 = USB_PORT_STAT_POWER; sl811 88 drivers/usb/host/sl811-hcd.c sl811->irq_enable = SL11H_INTMASK_INSRMV; sl811 90 drivers/usb/host/sl811-hcd.c sl811->port1 = 0; sl811 91 drivers/usb/host/sl811-hcd.c sl811->irq_enable = 0; sl811 94 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = 0; sl811 95 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, 0); sl811 96 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_STATUS, ~0); sl811 98 drivers/usb/host/sl811-hcd.c if (sl811->board && sl811->board->port_power) { sl811 102 drivers/usb/host/sl811-hcd.c sl811->board->port_power(hcd->self.controller, is_on); sl811 106 drivers/usb/host/sl811-hcd.c if (sl811->board && sl811->board->reset) sl811 107 drivers/usb/host/sl811-hcd.c sl811->board->reset(hcd->self.controller); sl811 109 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, SL11H_CTL1MASK_SE0); sl811 113 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, 0); sl811 114 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 115 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811HS_CTLREG2, SL811HS_CTL2_INIT); sl811 116 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); sl811 135 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 148 drivers/usb/host/sl811-hcd.c data_reg = sl811->data_reg; sl811 149 drivers/usb/host/sl811-hcd.c sl811_write_buf(sl811, addr, urb->setup_packet, len); sl811 152 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); sl811 158 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_HOSTCTLREG, sl811 166 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 177 drivers/usb/host/sl811-hcd.c data_reg = sl811->data_reg; sl811 180 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_BUFADDRREG, 0); sl811 189 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_HOSTCTLREG, control); sl811 200 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 217 drivers/usb/host/sl811-hcd.c data_reg = sl811->data_reg; sl811 220 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); sl811 225 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_HOSTCTLREG, control); sl811 236 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 258 drivers/usb/host/sl811-hcd.c data_reg = sl811->data_reg; sl811 260 drivers/usb/host/sl811-hcd.c sl811_write_buf(sl811, addr, buf, len); sl811 263 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_BUFADDRREG, addr); sl811 268 drivers/usb/host/sl811-hcd.c sl811_write(sl811, bank + SL11H_HOSTCTLREG, sl811 279 drivers/usb/host/sl811-hcd.c static inline void sofirq_on(struct sl811 *sl811) sl811 281 drivers/usb/host/sl811-hcd.c if (sl811->irq_enable & SL11H_INTMASK_SOFINTR) sl811 283 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, "sof irq on\n"); sl811 284 drivers/usb/host/sl811-hcd.c sl811->irq_enable |= SL11H_INTMASK_SOFINTR; sl811 287 drivers/usb/host/sl811-hcd.c static inline void sofirq_off(struct sl811 *sl811) sl811 289 drivers/usb/host/sl811-hcd.c if (!(sl811->irq_enable & SL11H_INTMASK_SOFINTR)) sl811 291 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, "sof irq off\n"); sl811 292 drivers/usb/host/sl811-hcd.c sl811->irq_enable &= ~SL11H_INTMASK_SOFINTR; sl811 302 drivers/usb/host/sl811-hcd.c static struct sl811h_ep *start(struct sl811 *sl811, u8 bank) sl811 310 drivers/usb/host/sl811-hcd.c if (sl811->next_periodic) { sl811 311 drivers/usb/host/sl811-hcd.c ep = sl811->next_periodic; sl811 312 drivers/usb/host/sl811-hcd.c sl811->next_periodic = ep->next; sl811 314 drivers/usb/host/sl811-hcd.c if (sl811->next_async) sl811 315 drivers/usb/host/sl811-hcd.c ep = sl811->next_async; sl811 316 drivers/usb/host/sl811-hcd.c else if (!list_empty(&sl811->async)) sl811 317 drivers/usb/host/sl811-hcd.c ep = container_of(sl811->async.next, sl811 327 drivers/usb/host/sl811-hcd.c if ((bank && sl811->active_b == ep) || sl811->active_a == ep) sl811 331 drivers/usb/host/sl811-hcd.c if (ep->schedule.next == &sl811->async) sl811 332 drivers/usb/host/sl811-hcd.c sl811->next_async = NULL; sl811 334 drivers/usb/host/sl811-hcd.c sl811->next_async = container_of(ep->schedule.next, sl811 339 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 350 drivers/usb/host/sl811-hcd.c fclock = sl811_read(sl811, SL11H_SOFTMRREG) << 6; sl811 362 drivers/usb/host/sl811-hcd.c sl811->stat_overrun++; sl811 363 drivers/usb/host/sl811-hcd.c sofirq_on(sl811); sl811 370 drivers/usb/host/sl811-hcd.c sl811->stat_overrun++; sl811 381 drivers/usb/host/sl811-hcd.c in_packet(sl811, ep, urb, bank, control); sl811 384 drivers/usb/host/sl811-hcd.c out_packet(sl811, ep, urb, bank, control); sl811 387 drivers/usb/host/sl811-hcd.c setup_packet(sl811, ep, urb, bank, control); sl811 390 drivers/usb/host/sl811-hcd.c status_packet(sl811, ep, urb, bank, control); sl811 393 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 402 drivers/usb/host/sl811-hcd.c static inline void start_transfer(struct sl811 *sl811) sl811 404 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_SUSPEND) sl811 406 drivers/usb/host/sl811-hcd.c if (sl811->active_a == NULL) { sl811 407 drivers/usb/host/sl811-hcd.c sl811->active_a = start(sl811, SL811_EP_A(SL811_HOST_BUF)); sl811 408 drivers/usb/host/sl811-hcd.c if (sl811->active_a != NULL) sl811 409 drivers/usb/host/sl811-hcd.c sl811->jiffies_a = jiffies + MIN_JIFFIES; sl811 412 drivers/usb/host/sl811-hcd.c if (sl811->active_b == NULL) { sl811 413 drivers/usb/host/sl811-hcd.c sl811->active_b = start(sl811, SL811_EP_B(SL811_HOST_BUF)); sl811 414 drivers/usb/host/sl811-hcd.c if (sl811->active_b != NULL) sl811 415 drivers/usb/host/sl811-hcd.c sl811->jiffies_b = jiffies + MIN_JIFFIES; sl811 421 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 425 drivers/usb/host/sl811-hcd.c ) __releases(sl811->lock) __acquires(sl811->lock) sl811 432 drivers/usb/host/sl811-hcd.c usb_hcd_unlink_urb_from_ep(sl811_to_hcd(sl811), urb); sl811 433 drivers/usb/host/sl811-hcd.c spin_unlock(&sl811->lock); sl811 434 drivers/usb/host/sl811-hcd.c usb_hcd_giveback_urb(sl811_to_hcd(sl811), urb, status); sl811 435 drivers/usb/host/sl811-hcd.c spin_lock(&sl811->lock); sl811 444 drivers/usb/host/sl811-hcd.c if (ep == sl811->next_async) sl811 445 drivers/usb/host/sl811-hcd.c sl811->next_async = NULL; sl811 450 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 454 drivers/usb/host/sl811-hcd.c struct sl811h_ep **prev = &sl811->periodic[i]; sl811 460 drivers/usb/host/sl811-hcd.c sl811->load[i] -= ep->load; sl811 463 drivers/usb/host/sl811-hcd.c sl811->periodic_count--; sl811 464 drivers/usb/host/sl811-hcd.c sl811_to_hcd(sl811)->self.bandwidth_allocated sl811 466 drivers/usb/host/sl811-hcd.c if (ep == sl811->next_periodic) sl811 467 drivers/usb/host/sl811-hcd.c sl811->next_periodic = ep->next; sl811 470 drivers/usb/host/sl811-hcd.c if (sl811->periodic_count == 0) sl811 471 drivers/usb/host/sl811-hcd.c sofirq_off(sl811); sl811 475 drivers/usb/host/sl811-hcd.c done(struct sl811 *sl811, struct sl811h_ep *ep, u8 bank) sl811 484 drivers/usb/host/sl811-hcd.c status = sl811_read(sl811, bank + SL11H_PKTSTATREG); sl811 527 drivers/usb/host/sl811-hcd.c len = ep->maxpacket - sl811_read(sl811, sl811 534 drivers/usb/host/sl811-hcd.c sl811_read_buf(sl811, SL811HS_PACKET_BUF(bank == 0), sl811 585 drivers/usb/host/sl811-hcd.c finish_request(sl811, ep, urb, urbstat); sl811 588 drivers/usb/host/sl811-hcd.c static inline u8 checkdone(struct sl811 *sl811) sl811 593 drivers/usb/host/sl811-hcd.c if (sl811->active_a && time_before_eq(sl811->jiffies_a, jiffies)) { sl811 594 drivers/usb/host/sl811-hcd.c ctl = sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG)); sl811 596 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0); sl811 597 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 601 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG))); sl811 605 drivers/usb/host/sl811-hcd.c if (sl811->active_b && time_before_eq(sl811->jiffies_b, jiffies)) { sl811 606 drivers/usb/host/sl811-hcd.c ctl = sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG)); sl811 608 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0); sl811 609 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 613 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG))); sl811 622 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 627 drivers/usb/host/sl811-hcd.c spin_lock(&sl811->lock); sl811 630 drivers/usb/host/sl811-hcd.c irqstat = sl811_read(sl811, SL11H_IRQ_STATUS) & ~SL11H_INTMASK_DP; sl811 632 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_STATUS, irqstat); sl811 633 drivers/usb/host/sl811-hcd.c irqstat &= sl811->irq_enable; sl811 639 drivers/usb/host/sl811-hcd.c irqstat = checkdone(sl811); sl811 641 drivers/usb/host/sl811-hcd.c sl811->stat_lost++; sl811 649 drivers/usb/host/sl811-hcd.c done(sl811, sl811->active_a, SL811_EP_A(SL811_HOST_BUF)); sl811 650 drivers/usb/host/sl811-hcd.c sl811->active_a = NULL; sl811 651 drivers/usb/host/sl811-hcd.c sl811->stat_a++; sl811 655 drivers/usb/host/sl811-hcd.c done(sl811, sl811->active_b, SL811_EP_B(SL811_HOST_BUF)); sl811 656 drivers/usb/host/sl811-hcd.c sl811->active_b = NULL; sl811 657 drivers/usb/host/sl811-hcd.c sl811->stat_b++; sl811 663 drivers/usb/host/sl811-hcd.c index = sl811->frame++ % (PERIODIC_SIZE - 1); sl811 664 drivers/usb/host/sl811-hcd.c sl811->stat_sof++; sl811 670 drivers/usb/host/sl811-hcd.c if (sl811->next_periodic) { sl811 672 drivers/usb/host/sl811-hcd.c sl811->stat_overrun++; sl811 674 drivers/usb/host/sl811-hcd.c if (sl811->periodic[index]) sl811 675 drivers/usb/host/sl811-hcd.c sl811->next_periodic = sl811->periodic[index]; sl811 680 drivers/usb/host/sl811-hcd.c sl811->stat_insrmv++; sl811 683 drivers/usb/host/sl811-hcd.c sl811->stat_wake = 0; sl811 684 drivers/usb/host/sl811-hcd.c sl811->stat_sof = 0; sl811 685 drivers/usb/host/sl811-hcd.c sl811->stat_a = 0; sl811 686 drivers/usb/host/sl811-hcd.c sl811->stat_b = 0; sl811 687 drivers/usb/host/sl811-hcd.c sl811->stat_lost = 0; sl811 689 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = 0; sl811 690 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 692 drivers/usb/host/sl811-hcd.c sl811->irq_enable = SL11H_INTMASK_INSRMV; sl811 693 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); sl811 696 drivers/usb/host/sl811-hcd.c if (sl811->active_a) { sl811 697 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0); sl811 698 drivers/usb/host/sl811-hcd.c finish_request(sl811, sl811->active_a, sl811 699 drivers/usb/host/sl811-hcd.c container_of(sl811->active_a sl811 703 drivers/usb/host/sl811-hcd.c sl811->active_a = NULL; sl811 706 drivers/usb/host/sl811-hcd.c if (sl811->active_b) { sl811 707 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0); sl811 708 drivers/usb/host/sl811-hcd.c finish_request(sl811, sl811->active_b, sl811 709 drivers/usb/host/sl811-hcd.c container_of(sl811->active_b sl811 713 drivers/usb/host/sl811-hcd.c sl811->active_b = NULL; sl811 721 drivers/usb/host/sl811-hcd.c sl811->port1 &= ~USB_PORT_STAT_CONNECTION; sl811 723 drivers/usb/host/sl811-hcd.c sl811->port1 |= USB_PORT_STAT_CONNECTION; sl811 725 drivers/usb/host/sl811-hcd.c sl811->port1 |= USB_PORT_STAT_C_CONNECTION << 16; sl811 728 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_SUSPEND) { sl811 730 drivers/usb/host/sl811-hcd.c sl811->port1 |= USB_PORT_STAT_C_SUSPEND << 16; sl811 731 drivers/usb/host/sl811-hcd.c sl811->stat_wake++; sl811 737 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_ENABLE) sl811 738 drivers/usb/host/sl811-hcd.c start_transfer(sl811); sl811 744 drivers/usb/host/sl811-hcd.c if (sl811->periodic_count == 0 && list_empty(&sl811->async)) sl811 745 drivers/usb/host/sl811-hcd.c sofirq_off(sl811); sl811 746 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); sl811 748 drivers/usb/host/sl811-hcd.c spin_unlock(&sl811->lock); sl811 764 drivers/usb/host/sl811-hcd.c static int balance(struct sl811 *sl811, u16 period, u16 load) sl811 772 drivers/usb/host/sl811-hcd.c if (branch < 0 || sl811->load[branch] > sl811->load[i]) { sl811 776 drivers/usb/host/sl811-hcd.c if ((sl811->load[j] + load) sl811 795 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 819 drivers/usb/host/sl811-hcd.c spin_lock_irqsave(&sl811->lock, flags); sl811 822 drivers/usb/host/sl811-hcd.c if (!(sl811->port1 & USB_PORT_STAT_ENABLE) sl811 868 drivers/usb/host/sl811-hcd.c if (!(sl811->ctrl1 & SL11H_CTL1MASK_LSPD)) sl811 896 drivers/usb/host/sl811-hcd.c list_add_tail(&ep->schedule, &sl811->async); sl811 907 drivers/usb/host/sl811-hcd.c urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1)) sl811 912 drivers/usb/host/sl811-hcd.c retval = balance(sl811, ep->period, ep->load); sl811 917 drivers/usb/host/sl811-hcd.c urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1)) sl811 927 drivers/usb/host/sl811-hcd.c struct sl811h_ep **prev = &sl811->periodic[i]; sl811 940 drivers/usb/host/sl811-hcd.c sl811->load[i] += ep->load; sl811 942 drivers/usb/host/sl811-hcd.c sl811->periodic_count++; sl811 944 drivers/usb/host/sl811-hcd.c sofirq_on(sl811); sl811 948 drivers/usb/host/sl811-hcd.c start_transfer(sl811); sl811 949 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); sl811 954 drivers/usb/host/sl811-hcd.c spin_unlock_irqrestore(&sl811->lock, flags); sl811 960 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 966 drivers/usb/host/sl811-hcd.c spin_lock_irqsave(&sl811->lock, flags); sl811 981 drivers/usb/host/sl811-hcd.c } else if (sl811->active_a == ep) { sl811 982 drivers/usb/host/sl811-hcd.c if (time_before_eq(sl811->jiffies_a, jiffies)) { sl811 986 drivers/usb/host/sl811-hcd.c sl811_read(sl811, sl811 988 drivers/usb/host/sl811-hcd.c sl811_read(sl811, sl811 990 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), sl811 992 drivers/usb/host/sl811-hcd.c sl811->active_a = NULL; sl811 996 drivers/usb/host/sl811-hcd.c } else if (sl811->active_b == ep) { sl811 997 drivers/usb/host/sl811-hcd.c if (time_before_eq(sl811->jiffies_a, jiffies)) { sl811 1001 drivers/usb/host/sl811-hcd.c sl811_read(sl811, sl811 1003 drivers/usb/host/sl811-hcd.c sl811_read(sl811, sl811 1005 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), sl811 1007 drivers/usb/host/sl811-hcd.c sl811->active_b = NULL; sl811 1016 drivers/usb/host/sl811-hcd.c finish_request(sl811, ep, urb, 0); sl811 1018 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 1020 drivers/usb/host/sl811-hcd.c (sl811->active_a == ep) ? "A" : "B"); sl811 1024 drivers/usb/host/sl811-hcd.c spin_unlock_irqrestore(&sl811->lock, flags); sl811 1049 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1055 drivers/usb/host/sl811-hcd.c return sl811->frame; sl811 1065 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1073 drivers/usb/host/sl811-hcd.c if (!timer_pending(&sl811->timer)) { sl811 1075 drivers/usb/host/sl811-hcd.c sl811->stat_lost++; sl811 1080 drivers/usb/host/sl811-hcd.c if (!(sl811->port1 & (0xffff << 16))) sl811 1090 drivers/usb/host/sl811-hcd.c struct sl811 *sl811, sl811 1103 drivers/usb/host/sl811-hcd.c if (sl811->board && sl811->board->port_power) { sl811 1104 drivers/usb/host/sl811-hcd.c desc->bPwrOn2PwrGood = sl811->board->potpg; sl811 1124 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = from_timer(sl811, t, timer); sl811 1127 drivers/usb/host/sl811-hcd.c u8 signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE; sl811 1132 drivers/usb/host/sl811-hcd.c spin_lock_irqsave(&sl811->lock, flags); sl811 1135 drivers/usb/host/sl811-hcd.c sl811->ctrl1 &= ~SL11H_CTL1MASK_FORCE; sl811 1136 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1139 drivers/usb/host/sl811-hcd.c irqstat = sl811_read(sl811, SL11H_IRQ_STATUS); sl811 1143 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, "end reset\n"); sl811 1144 drivers/usb/host/sl811-hcd.c sl811->port1 = (USB_PORT_STAT_C_RESET << 16) sl811 1146 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = 0; sl811 1152 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, "end resume\n"); sl811 1153 drivers/usb/host/sl811-hcd.c sl811->port1 &= ~USB_PORT_STAT_SUSPEND; sl811 1156 drivers/usb/host/sl811-hcd.c dev_dbg(sl811_to_hcd(sl811)->self.controller, sl811 1160 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_STATUS, irqstat); sl811 1164 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_CONNECTION) sl811 1165 drivers/usb/host/sl811-hcd.c sl811->port1 |= (USB_PORT_STAT_C_CONNECTION << 16) sl811 1167 drivers/usb/host/sl811-hcd.c sl811->port1 &= ~mask; sl811 1168 drivers/usb/host/sl811-hcd.c sl811->irq_enable = SL11H_INTMASK_INSRMV; sl811 1170 drivers/usb/host/sl811-hcd.c sl811->port1 |= mask; sl811 1172 drivers/usb/host/sl811-hcd.c sl811->port1 &= ~USB_PORT_STAT_LOW_SPEED; sl811 1173 drivers/usb/host/sl811-hcd.c sl811->irq_enable = SL11H_INTMASK_INSRMV | SL11H_INTMASK_RD; sl811 1176 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_CONNECTION) { sl811 1179 drivers/usb/host/sl811-hcd.c sl811->irq_enable |= SL11H_INTMASK_DONE_A; sl811 1181 drivers/usb/host/sl811-hcd.c sl811->irq_enable |= SL11H_INTMASK_DONE_B; sl811 1183 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_LOW_SPEED) { sl811 1184 drivers/usb/host/sl811-hcd.c sl811->ctrl1 |= SL11H_CTL1MASK_LSPD; sl811 1189 drivers/usb/host/sl811-hcd.c sl811->ctrl1 |= SL11H_CTL1MASK_SOF_ENA; sl811 1190 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_SOFLOWREG, 0xe0); sl811 1191 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811HS_CTLREG2, ctrl2); sl811 1194 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_A(SL11H_BUFLNTHREG), 0); sl811 1195 drivers/usb/host/sl811-hcd.c writeb(SL_SOF, sl811->data_reg); sl811 1196 drivers/usb/host/sl811-hcd.c writeb(0, sl811->data_reg); sl811 1197 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), sl811 1202 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = 0; sl811 1204 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1207 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable); sl811 1208 drivers/usb/host/sl811-hcd.c spin_unlock_irqrestore(&sl811->lock, flags); sl811 1220 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1224 drivers/usb/host/sl811-hcd.c spin_lock_irqsave(&sl811->lock, flags); sl811 1243 drivers/usb/host/sl811-hcd.c sl811->port1 &= USB_PORT_STAT_POWER; sl811 1244 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = 0; sl811 1245 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1246 drivers/usb/host/sl811-hcd.c sl811->irq_enable = SL11H_INTMASK_INSRMV; sl811 1247 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811 1248 drivers/usb/host/sl811-hcd.c sl811->irq_enable); sl811 1251 drivers/usb/host/sl811-hcd.c if (!(sl811->port1 & USB_PORT_STAT_SUSPEND)) sl811 1256 drivers/usb/host/sl811-hcd.c sl811->irq_enable = 0; sl811 1257 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811 1258 drivers/usb/host/sl811-hcd.c sl811->irq_enable); sl811 1259 drivers/usb/host/sl811-hcd.c sl811->ctrl1 |= SL11H_CTL1MASK_K; sl811 1260 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1262 drivers/usb/host/sl811-hcd.c mod_timer(&sl811->timer, jiffies sl811 1266 drivers/usb/host/sl811-hcd.c port_power(sl811, 0); sl811 1277 drivers/usb/host/sl811-hcd.c sl811->port1 &= ~(1 << wValue); sl811 1280 drivers/usb/host/sl811-hcd.c sl811h_hub_descriptor(sl811, (struct usb_hub_descriptor *) buf); sl811 1288 drivers/usb/host/sl811-hcd.c put_unaligned_le32(sl811->port1, buf); sl811 1294 drivers/usb/host/sl811-hcd.c sl811->port1); sl811 1301 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_RESET) sl811 1303 drivers/usb/host/sl811-hcd.c if (!(sl811->port1 & USB_PORT_STAT_ENABLE)) sl811 1307 drivers/usb/host/sl811-hcd.c sl811->ctrl1 &= ~SL11H_CTL1MASK_SOF_ENA; sl811 1308 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1311 drivers/usb/host/sl811-hcd.c port_power(sl811, 1); sl811 1314 drivers/usb/host/sl811-hcd.c if (sl811->port1 & USB_PORT_STAT_SUSPEND) sl811 1316 drivers/usb/host/sl811-hcd.c if (!(sl811->port1 & USB_PORT_STAT_POWER)) sl811 1320 drivers/usb/host/sl811-hcd.c sl811->irq_enable = 0; sl811 1321 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_IRQ_ENABLE, sl811 1322 drivers/usb/host/sl811-hcd.c sl811->irq_enable); sl811 1323 drivers/usb/host/sl811-hcd.c sl811->ctrl1 = SL11H_CTL1MASK_SE0; sl811 1324 drivers/usb/host/sl811-hcd.c sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1); sl811 1325 drivers/usb/host/sl811-hcd.c sl811->port1 |= USB_PORT_STAT_RESET; sl811 1326 drivers/usb/host/sl811-hcd.c mod_timer(&sl811->timer, jiffies sl811 1332 drivers/usb/host/sl811-hcd.c sl811->port1 |= 1 << wValue; sl811 1341 drivers/usb/host/sl811-hcd.c spin_unlock_irqrestore(&sl811->lock, flags); sl811 1386 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = s->private; sl811 1391 drivers/usb/host/sl811-hcd.c sl811_to_hcd(sl811)->product_desc, sl811 1393 drivers/usb/host/sl811-hcd.c sl811->port1); sl811 1395 drivers/usb/host/sl811-hcd.c seq_printf(s, "insert/remove: %ld\n", sl811->stat_insrmv); sl811 1398 drivers/usb/host/sl811-hcd.c sl811->stat_a, sl811->stat_b, sl811 1399 drivers/usb/host/sl811-hcd.c sl811->stat_wake, sl811->stat_sof, sl811 1400 drivers/usb/host/sl811-hcd.c sl811->stat_overrun, sl811->stat_lost); sl811 1402 drivers/usb/host/sl811-hcd.c spin_lock_irq(&sl811->lock); sl811 1404 drivers/usb/host/sl811-hcd.c if (sl811->ctrl1 & SL11H_CTL1MASK_SUSPEND) sl811 1407 drivers/usb/host/sl811-hcd.c u8 t = sl811_read(sl811, SL11H_CTLREG1); sl811 1421 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL11H_IRQ_ENABLE)); sl811 1423 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL11H_IRQ_STATUS)); sl811 1425 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL11H_SOFTMRREG) << 6); sl811 1428 drivers/usb/host/sl811-hcd.c seq_printf(s, "A: qh%p ctl %02x sts %02x\n", sl811->active_a, sl811 1429 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG)), sl811 1430 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG))); sl811 1431 drivers/usb/host/sl811-hcd.c seq_printf(s, "B: qh%p ctl %02x sts %02x\n", sl811->active_b, sl811 1432 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG)), sl811 1433 drivers/usb/host/sl811-hcd.c sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG))); sl811 1435 drivers/usb/host/sl811-hcd.c list_for_each_entry (ep, &sl811->async, schedule) { sl811 1440 drivers/usb/host/sl811-hcd.c (ep == sl811->active_a) ? "(A) " : "", sl811 1441 drivers/usb/host/sl811-hcd.c (ep == sl811->active_b) ? "(B) " : "", sl811 1458 drivers/usb/host/sl811-hcd.c if (!list_empty(&sl811->async)) sl811 1464 drivers/usb/host/sl811-hcd.c ep = sl811->periodic[i]; sl811 1467 drivers/usb/host/sl811-hcd.c seq_printf(s, "%2d [%3d]:\n", i, sl811->load[i]); sl811 1474 drivers/usb/host/sl811-hcd.c (ep == sl811->active_a) ? "(A) " : "", sl811 1475 drivers/usb/host/sl811-hcd.c (ep == sl811->active_b) ? "(B) " : "", sl811 1489 drivers/usb/host/sl811-hcd.c spin_unlock_irq(&sl811->lock); sl811 1497 drivers/usb/host/sl811-hcd.c static void create_debug_file(struct sl811 *sl811) sl811 1499 drivers/usb/host/sl811-hcd.c sl811->debug_file = debugfs_create_file("sl811h", S_IRUGO, sl811 1500 drivers/usb/host/sl811-hcd.c usb_debug_root, sl811, sl811 1504 drivers/usb/host/sl811-hcd.c static void remove_debug_file(struct sl811 *sl811) sl811 1506 drivers/usb/host/sl811-hcd.c debugfs_remove(sl811->debug_file); sl811 1514 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1519 drivers/usb/host/sl811-hcd.c spin_lock_irqsave(&sl811->lock, flags); sl811 1520 drivers/usb/host/sl811-hcd.c port_power(sl811, 0); sl811 1521 drivers/usb/host/sl811-hcd.c spin_unlock_irqrestore(&sl811->lock, flags); sl811 1527 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1532 drivers/usb/host/sl811-hcd.c if (sl811->board) { sl811 1535 drivers/usb/host/sl811-hcd.c sl811->board->can_wakeup); sl811 1536 drivers/usb/host/sl811-hcd.c hcd->power_budget = sl811->board->power * 2; sl811 1540 drivers/usb/host/sl811-hcd.c port_power(sl811, 1); sl811 1549 drivers/usb/host/sl811-hcd.c .hcd_priv_size = sizeof(struct sl811), sl811 1588 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1591 drivers/usb/host/sl811-hcd.c remove_debug_file(sl811); sl811 1597 drivers/usb/host/sl811-hcd.c iounmap(sl811->data_reg); sl811 1601 drivers/usb/host/sl811-hcd.c iounmap(sl811->addr_reg); sl811 1611 drivers/usb/host/sl811-hcd.c struct sl811 *sl811; sl811 1673 drivers/usb/host/sl811-hcd.c sl811 = hcd_to_sl811(hcd); sl811 1675 drivers/usb/host/sl811-hcd.c spin_lock_init(&sl811->lock); sl811 1676 drivers/usb/host/sl811-hcd.c INIT_LIST_HEAD(&sl811->async); sl811 1677 drivers/usb/host/sl811-hcd.c sl811->board = dev_get_platdata(&dev->dev); sl811 1678 drivers/usb/host/sl811-hcd.c timer_setup(&sl811->timer, sl811h_timer, 0); sl811 1679 drivers/usb/host/sl811-hcd.c sl811->addr_reg = addr_reg; sl811 1680 drivers/usb/host/sl811-hcd.c sl811->data_reg = data_reg; sl811 1682 drivers/usb/host/sl811-hcd.c spin_lock_irq(&sl811->lock); sl811 1683 drivers/usb/host/sl811-hcd.c port_power(sl811, 0); sl811 1684 drivers/usb/host/sl811-hcd.c spin_unlock_irq(&sl811->lock); sl811 1687 drivers/usb/host/sl811-hcd.c tmp = sl811_read(sl811, SL11H_HWREVREG); sl811 1718 drivers/usb/host/sl811-hcd.c create_debug_file(sl811); sl811 1744 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1754 drivers/usb/host/sl811-hcd.c port_power(sl811, 0); sl811 1764 drivers/usb/host/sl811-hcd.c struct sl811 *sl811 = hcd_to_sl811(hcd); sl811 1769 drivers/usb/host/sl811-hcd.c if (!sl811->port1 || !device_can_wakeup(&hcd->self.root_hub->dev)) { sl811 1770 drivers/usb/host/sl811-hcd.c sl811->port1 = 0; sl811 1771 drivers/usb/host/sl811-hcd.c port_power(sl811, 1); sl811 159 drivers/usb/host/sl811.h static inline struct sl811 *hcd_to_sl811(struct usb_hcd *hcd) sl811 161 drivers/usb/host/sl811.h return (struct sl811 *) (hcd->hcd_priv); sl811 164 drivers/usb/host/sl811.h static inline struct usb_hcd *sl811_to_hcd(struct sl811 *sl811) sl811 166 drivers/usb/host/sl811.h return container_of((void *) sl811, struct usb_hcd, hcd_priv); sl811 198 drivers/usb/host/sl811.h static inline u8 sl811_read(struct sl811 *sl811, int reg) sl811 200 drivers/usb/host/sl811.h writeb(reg, sl811->addr_reg); sl811 201 drivers/usb/host/sl811.h return readb(sl811->data_reg); sl811 204 drivers/usb/host/sl811.h static inline void sl811_write(struct sl811 *sl811, int reg, u8 val) sl811 206 drivers/usb/host/sl811.h writeb(reg, sl811->addr_reg); sl811 207 drivers/usb/host/sl811.h writeb(val, sl811->data_reg); sl811 211 drivers/usb/host/sl811.h sl811_write_buf(struct sl811 *sl811, int addr, const void *buf, size_t count) sl811 218 drivers/usb/host/sl811.h writeb(addr, sl811->addr_reg); sl811 221 drivers/usb/host/sl811.h data_reg = sl811->data_reg; sl811 228 drivers/usb/host/sl811.h sl811_read_buf(struct sl811 *sl811, int addr, void *buf, size_t count) sl811 235 drivers/usb/host/sl811.h writeb(addr, sl811->addr_reg); sl811 238 drivers/usb/host/sl811.h data_reg = sl811->data_reg;