Lines Matching defs:uhci

42 static int any_ports_active(struct uhci_hcd *uhci)
46 for (port = 0; port < uhci->rh_numports; ++port) {
47 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) &
49 test_bit(port, &uhci->port_c_suspend))
55 static inline int get_hub_status_data(struct uhci_hcd *uhci, char *buf)
70 for (port = 0; port < uhci->rh_numports; ++port) {
71 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) & mask) ||
72 test_bit(port, &uhci->port_c_suspend))
79 status = uhci_readw(uhci, port_addr); \
83 uhci_writew(uhci, status, port_addr)
86 status = uhci_readw(uhci, port_addr); \
89 uhci_writew(uhci, status, port_addr)
94 static void uhci_finish_suspend(struct uhci_hcd *uhci, int port,
100 if (uhci_readw(uhci, port_addr) & SUSPEND_BITS) {
102 if (test_bit(port, &uhci->resuming_ports))
103 set_bit(port, &uhci->port_c_suspend);
111 if (!(uhci_readw(uhci, port_addr) & SUSPEND_BITS))
116 clear_bit(port, &uhci->resuming_ports);
117 usb_hcd_end_port_resume(&uhci_to_hcd(uhci)->self, port);
123 static void wait_for_HP(struct uhci_hcd *uhci, unsigned long port_addr)
128 if (uhci_readw(uhci, port_addr) & USBPORTSC_CSC)
135 static void uhci_check_ports(struct uhci_hcd *uhci)
141 for (port = 0; port < uhci->rh_numports; ++port) {
143 status = uhci_readw(uhci, port_addr);
145 if (time_after_eq(jiffies, uhci->ports_timeout)) {
151 if (uhci->wait_for_hp)
152 wait_for_HP(uhci, port_addr);
163 if (!test_bit(port, &uhci->resuming_ports)) {
166 set_bit(port, &uhci->resuming_ports);
167 uhci->ports_timeout = jiffies +
170 &uhci_to_hcd(uhci)->self, port);
174 mod_timer(&uhci_to_hcd(uhci)->rh_timer,
175 uhci->ports_timeout);
177 uhci->ports_timeout)) {
178 uhci_finish_suspend(uhci, port, port_addr);
186 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
190 spin_lock_irqsave(&uhci->lock, flags);
192 uhci_scan_schedule(uhci);
193 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead)
195 uhci_check_ports(uhci);
197 status = get_hub_status_data(uhci, buf);
199 switch (uhci->rh_state) {
202 if (status || uhci->resuming_ports) {
211 wakeup_rh(uhci);
216 if (!any_ports_active(uhci)) {
217 uhci->rh_state = UHCI_RH_RUNNING_NODEVS;
218 uhci->auto_stop_time = jiffies + HZ;
224 if (any_ports_active(uhci))
225 uhci->rh_state = UHCI_RH_RUNNING;
226 else if (time_after_eq(jiffies, uhci->auto_stop_time) &&
227 !uhci->wait_for_hp)
228 suspend_rh(uhci, UHCI_RH_AUTO_STOPPED);
236 spin_unlock_irqrestore(&uhci->lock, flags);
244 struct uhci_hcd *uhci = hcd_to_uhci(hcd);
251 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead)
254 spin_lock_irqsave(&uhci->lock, flags);
262 if (port >= uhci->rh_numports)
265 uhci_check_ports(uhci);
266 status = uhci_readw(uhci, port_addr);
272 if (uhci->oc_low)
284 if (test_bit(port, &uhci->port_c_suspend)) {
288 if (test_bit(port, &uhci->resuming_ports))
308 dev_dbg(uhci_dev(uhci), "port %d portsc %04x,%02x\n",
326 if (port >= uhci->rh_numports)
337 uhci_finish_suspend(uhci, port, port_addr);
340 uhci->ports_timeout = jiffies + msecs_to_jiffies(50);
350 if (port >= uhci->rh_numports)
358 uhci_finish_suspend(uhci, port, port_addr);
364 if (!(uhci_readw(uhci, port_addr) & USBPORTSC_SUSP)) {
367 uhci_finish_suspend(uhci, port, port_addr);
369 &uhci->resuming_ports)) {
376 if (!(uhci_readw(uhci, port_addr) &
378 uhci_finish_suspend(uhci, port,
382 uhci->ports_timeout = jiffies +
387 clear_bit(port, &uhci->port_c_suspend);
409 buf[2] = uhci->rh_numports;
415 spin_unlock_irqrestore(&uhci->lock, flags);