Lines Matching refs:uhci

43 static int any_ports_active(struct uhci_hcd *uhci)  in any_ports_active()  argument
47 for (port = 0; port < uhci->rh_numports; ++port) { in any_ports_active()
48 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) & in any_ports_active()
50 test_bit(port, &uhci->port_c_suspend)) in any_ports_active()
56 static inline int get_hub_status_data(struct uhci_hcd *uhci, char *buf) in get_hub_status_data() argument
71 for (port = 0; port < uhci->rh_numports; ++port) { in get_hub_status_data()
72 if ((uhci_readw(uhci, USBPORTSC1 + port * 2) & mask) || in get_hub_status_data()
73 test_bit(port, &uhci->port_c_suspend)) in get_hub_status_data()
80 status = uhci_readw(uhci, port_addr); \
84 uhci_writew(uhci, status, port_addr)
87 status = uhci_readw(uhci, port_addr); \
90 uhci_writew(uhci, status, port_addr)
95 static void uhci_finish_suspend(struct uhci_hcd *uhci, int port, in uhci_finish_suspend() argument
101 if (uhci_readw(uhci, port_addr) & SUSPEND_BITS) { in uhci_finish_suspend()
103 if (test_bit(port, &uhci->resuming_ports)) in uhci_finish_suspend()
104 set_bit(port, &uhci->port_c_suspend); in uhci_finish_suspend()
112 if (!(uhci_readw(uhci, port_addr) & SUSPEND_BITS)) in uhci_finish_suspend()
117 clear_bit(port, &uhci->resuming_ports); in uhci_finish_suspend()
118 usb_hcd_end_port_resume(&uhci_to_hcd(uhci)->self, port); in uhci_finish_suspend()
124 static void wait_for_HP(struct uhci_hcd *uhci, unsigned long port_addr) in wait_for_HP() argument
129 if (uhci_readw(uhci, port_addr) & USBPORTSC_CSC) in wait_for_HP()
136 static void uhci_check_ports(struct uhci_hcd *uhci) in uhci_check_ports() argument
142 for (port = 0; port < uhci->rh_numports; ++port) { in uhci_check_ports()
144 status = uhci_readw(uhci, port_addr); in uhci_check_ports()
146 if (time_after_eq(jiffies, uhci->ports_timeout)) { in uhci_check_ports()
152 if (uhci->wait_for_hp) in uhci_check_ports()
153 wait_for_HP(uhci, port_addr); in uhci_check_ports()
164 if (!test_bit(port, &uhci->resuming_ports)) { in uhci_check_ports()
167 set_bit(port, &uhci->resuming_ports); in uhci_check_ports()
168 uhci->ports_timeout = jiffies + in uhci_check_ports()
171 &uhci_to_hcd(uhci)->self, port); in uhci_check_ports()
175 mod_timer(&uhci_to_hcd(uhci)->rh_timer, in uhci_check_ports()
176 uhci->ports_timeout); in uhci_check_ports()
178 uhci->ports_timeout)) { in uhci_check_ports()
179 uhci_finish_suspend(uhci, port, port_addr); in uhci_check_ports()
187 struct uhci_hcd *uhci = hcd_to_uhci(hcd); in uhci_hub_status_data() local
191 spin_lock_irqsave(&uhci->lock, flags); in uhci_hub_status_data()
193 uhci_scan_schedule(uhci); in uhci_hub_status_data()
194 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead) in uhci_hub_status_data()
196 uhci_check_ports(uhci); in uhci_hub_status_data()
198 status = get_hub_status_data(uhci, buf); in uhci_hub_status_data()
200 switch (uhci->rh_state) { in uhci_hub_status_data()
203 if (status || uhci->resuming_ports) { in uhci_hub_status_data()
212 wakeup_rh(uhci); in uhci_hub_status_data()
217 if (!any_ports_active(uhci)) { in uhci_hub_status_data()
218 uhci->rh_state = UHCI_RH_RUNNING_NODEVS; in uhci_hub_status_data()
219 uhci->auto_stop_time = jiffies + HZ; in uhci_hub_status_data()
225 if (any_ports_active(uhci)) in uhci_hub_status_data()
226 uhci->rh_state = UHCI_RH_RUNNING; in uhci_hub_status_data()
227 else if (time_after_eq(jiffies, uhci->auto_stop_time) && in uhci_hub_status_data()
228 !uhci->wait_for_hp) in uhci_hub_status_data()
229 suspend_rh(uhci, UHCI_RH_AUTO_STOPPED); in uhci_hub_status_data()
237 spin_unlock_irqrestore(&uhci->lock, flags); in uhci_hub_status_data()
245 struct uhci_hcd *uhci = hcd_to_uhci(hcd); in uhci_hub_control() local
252 if (!HCD_HW_ACCESSIBLE(hcd) || uhci->dead) in uhci_hub_control()
255 spin_lock_irqsave(&uhci->lock, flags); in uhci_hub_control()
263 if (port >= uhci->rh_numports) in uhci_hub_control()
266 uhci_check_ports(uhci); in uhci_hub_control()
267 status = uhci_readw(uhci, port_addr); in uhci_hub_control()
273 if (uhci->oc_low) in uhci_hub_control()
285 if (test_bit(port, &uhci->port_c_suspend)) { in uhci_hub_control()
289 if (test_bit(port, &uhci->resuming_ports)) in uhci_hub_control()
309 dev_dbg(uhci_dev(uhci), "port %d portsc %04x,%02x\n", in uhci_hub_control()
327 if (port >= uhci->rh_numports) in uhci_hub_control()
338 uhci_finish_suspend(uhci, port, port_addr); in uhci_hub_control()
341 uhci->ports_timeout = jiffies + in uhci_hub_control()
352 if (port >= uhci->rh_numports) in uhci_hub_control()
360 uhci_finish_suspend(uhci, port, port_addr); in uhci_hub_control()
366 if (!(uhci_readw(uhci, port_addr) & USBPORTSC_SUSP)) { in uhci_hub_control()
369 uhci_finish_suspend(uhci, port, port_addr); in uhci_hub_control()
371 &uhci->resuming_ports)) { in uhci_hub_control()
378 if (!(uhci_readw(uhci, port_addr) & in uhci_hub_control()
380 uhci_finish_suspend(uhci, port, in uhci_hub_control()
384 uhci->ports_timeout = jiffies + in uhci_hub_control()
389 clear_bit(port, &uhci->port_c_suspend); in uhci_hub_control()
411 buf[2] = uhci->rh_numports; in uhci_hub_control()
417 spin_unlock_irqrestore(&uhci->lock, flags); in uhci_hub_control()