Lines Matching defs:uhci

44 static int any_ports_active(struct uhci_hcd *uhci)
48 for (port = 0; port < uhci->rh_numports; ++port) {
49 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) &
51 test_bit(port, &uhci->port_c_suspend))
57 static inline int get_hub_status_data(struct uhci_hcd *uhci, char *buf)
72 for (port = 0; port < uhci->rh_numports; ++port) {
73 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) & mask) ||
74 test_bit(port, &uhci->port_c_suspend))
81 status = uhci_readw(uhci, port_addr); \
85 uhci_writew(uhci, status, port_addr)
88 status = uhci_readw(uhci, port_addr); \
91 uhci_writew(uhci, status, port_addr)
96 static void uhci_finish_suspend(struct uhci_hcd *uhci, int port,
102 if (uhci_readw(uhci, port_addr) & SUSPEND_BITS) {
104 if (test_bit(port, &uhci->resuming_ports))
105 set_bit(port, &uhci->port_c_suspend);
113 if (!(uhci_readw(uhci, port_addr) & SUSPEND_BITS))
118 clear_bit(port, &uhci->resuming_ports);
119 usb_hcd_end_port_resume(&uhci_to_hcd(uhci)->self, port);
125 static void wait_for_HP(struct uhci_hcd *uhci, unsigned long port_addr)
130 if (uhci_readw(uhci, port_addr) & USBPORTSC_CSC)
137 static void uhci_check_ports(struct uhci_hcd *uhci)
143 for (port = 0; port < uhci->rh_numports; ++port) {
145 status = uhci_readw(uhci, port_addr);
147 if (time_after_eq(jiffies, uhci->ports_timeout)) {
153 if (uhci->wait_for_hp)
154 wait_for_HP(uhci, port_addr);
165 if (!test_bit(port, &uhci->resuming_ports)) {
168 set_bit(port, &uhci->resuming_ports);
169 uhci->ports_timeout = jiffies +
172 &uhci_to_hcd(uhci)->self, port);
176 mod_timer(&uhci_to_hcd(uhci)->rh_timer,
177 uhci->ports_timeout);
179 uhci->ports_timeout)) {
180 uhci_finish_suspend(uhci, port, port_addr);
188 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
192 spin_lock_irqsave(&uhci->lock, flags);
194 uhci_scan_schedule(uhci);
195 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead)
197 uhci_check_ports(uhci);
199 status = get_hub_status_data(uhci, buf);
201 switch (uhci->rh_state) {
204 if (status || uhci->resuming_ports) {
213 wakeup_rh(uhci);
218 if (!any_ports_active(uhci)) {
219 uhci->rh_state = UHCI_RH_RUNNING_NODEVS;
220 uhci->auto_stop_time = jiffies + HZ;
226 if (any_ports_active(uhci))
227 uhci->rh_state = UHCI_RH_RUNNING;
228 else if (time_after_eq(jiffies, uhci->auto_stop_time) &&
229 !uhci->wait_for_hp)
230 suspend_rh(uhci, UHCI_RH_AUTO_STOPPED);
238 spin_unlock_irqrestore(&uhci->lock, flags);
246 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
253 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead)
256 spin_lock_irqsave(&uhci->lock, flags);
264 if (port >= uhci->rh_numports)
267 uhci_check_ports(uhci);
268 status = uhci_readw(uhci, port_addr);
274 if (uhci->oc_low)
286 if (test_bit(port, &uhci->port_c_suspend)) {
290 if (test_bit(port, &uhci->resuming_ports))
310 dev_dbg(uhci_dev(uhci), "port %d portsc %04x,%02x\n",
328 if (port >= uhci->rh_numports)
339 uhci_finish_suspend(uhci, port, port_addr);
342 uhci->ports_timeout = jiffies +
353 if (port >= uhci->rh_numports)
361 uhci_finish_suspend(uhci, port, port_addr);
367 if (!(uhci_readw(uhci, port_addr) & USBPORTSC_SUSP)) {
370 uhci_finish_suspend(uhci, port, port_addr);
372 &uhci->resuming_ports)) {
379 if (!(uhci_readw(uhci, port_addr) &
381 uhci_finish_suspend(uhci, port,
385 uhci->ports_timeout = jiffies +
390 clear_bit(port, &uhci->port_c_suspend);
412 buf[2] = uhci->rh_numports;
418 spin_unlock_irqrestore(&uhci->lock, flags);