diff options
Diffstat (limited to 'drivers/usb/core/hcd.c')
| -rw-r--r-- | drivers/usb/core/hcd.c | 26 | 
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 53f14c82ff2..f2fe7c8e991 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -679,7 +679,7 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)  		spin_lock_irqsave(&hcd_root_hub_lock, flags);  		urb = hcd->status_urb;  		if (urb) { -			hcd->poll_pending = 0; +			clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);  			hcd->status_urb = NULL;  			urb->actual_length = length;  			memcpy(urb->transfer_buffer, buffer, length); @@ -690,7 +690,7 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)  			spin_lock(&hcd_root_hub_lock);  		} else {  			length = 0; -			hcd->poll_pending = 1; +			set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);  		}  		spin_unlock_irqrestore(&hcd_root_hub_lock, flags);  	} @@ -699,7 +699,7 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)  	 * exceed that limit if HZ is 100. The math is more clunky than  	 * maybe expected, this is to make sure that all timers for USB devices  	 * fire at the same time to give the CPU a break inbetween */ -	if (hcd->uses_new_polling ? hcd->poll_rh : +	if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) :  			(length == 0 && hcd->status_urb != NULL))  		mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));  } @@ -736,7 +736,7 @@ static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)  		mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));  	/* If a status change has already occurred, report it ASAP */ -	else if (hcd->poll_pending) +	else if (HCD_POLL_PENDING(hcd))  		mod_timer(&hcd->rh_timer, jiffies);  	retval = 0;   done: @@ -1150,8 +1150,7 @@ int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,  	 * finish unlinking the initial failed usb_set_address()  	 * or device descriptor fetch.  	 */ -	if (!test_bit(HCD_FLAG_SAW_IRQ, &hcd->flags) && -			!is_root_hub(urb->dev)) { +	if (!HCD_SAW_IRQ(hcd) && !is_root_hub(urb->dev)) {  		dev_warn(hcd->self.controller, "Unlink after no-IRQ?  "  			"Controller is probably using the wrong IRQ.\n");  		set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags); @@ -2063,8 +2062,7 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)  	 */  	local_irq_save(flags); -	if (unlikely(hcd->state == HC_STATE_HALT || -		     !test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags))) { +	if (unlikely(hcd->state == HC_STATE_HALT || !HCD_HW_ACCESSIBLE(hcd))) {  		rc = IRQ_NONE;  	} else if (hcd->driver->irq(hcd) == IRQ_NONE) {  		rc = IRQ_NONE; @@ -2098,7 +2096,7 @@ void usb_hc_died (struct usb_hcd *hcd)  	spin_lock_irqsave (&hcd_root_hub_lock, flags);  	if (hcd->rh_registered) { -		hcd->poll_rh = 0; +		clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);  		/* make khubd clean up old urbs and devices */  		usb_set_device_state (hcd->self.root_hub, @@ -2301,7 +2299,7 @@ int usb_add_hcd(struct usb_hcd *hcd,  		       retval);  		goto error_create_attr_group;  	} -	if (hcd->uses_new_polling && hcd->poll_rh) +	if (hcd->uses_new_polling && HCD_POLL_RH(hcd))  		usb_hcd_poll_rh_status(hcd);  	return retval; @@ -2320,11 +2318,11 @@ error_create_attr_group:  	mutex_unlock(&usb_bus_list_lock);  err_register_root_hub:  	hcd->rh_pollable = 0; -	hcd->poll_rh = 0; +	clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);  	del_timer_sync(&hcd->rh_timer);  	hcd->driver->stop(hcd);  	hcd->state = HC_STATE_HALT; -	hcd->poll_rh = 0; +	clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);  	del_timer_sync(&hcd->rh_timer);  err_hcd_driver_start:  	if (hcd->irq >= 0) @@ -2380,14 +2378,14 @@ void usb_remove_hcd(struct usb_hcd *hcd)  	 * the hub_status_data() callback.  	 */  	hcd->rh_pollable = 0; -	hcd->poll_rh = 0; +	clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);  	del_timer_sync(&hcd->rh_timer);  	hcd->driver->stop(hcd);  	hcd->state = HC_STATE_HALT;  	/* In case the HCD restarted the timer, stop it again. */ -	hcd->poll_rh = 0; +	clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);  	del_timer_sync(&hcd->rh_timer);  	if (hcd->irq >= 0)  |