[PATCH] USB dummy_hcd: Use root-hub interrupts instead of polling

This patch makes the dummy_hcd driver use emulated root-hub interrupts
instead of polling.  It's in the spirit of similar changes being made to
the other HCDs.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 2d6d229..73d2f24 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -684,6 +684,7 @@
 	/* hub notices our request, issues downstream resume, etc */
 	dum->resuming = 1;
 	dum->re_timeout = jiffies + msecs_to_jiffies(20);
+	mod_timer (&dummy_to_hcd (dum)->rh_timer, dum->re_timeout);
 	return 0;
 }
 
@@ -709,6 +710,8 @@
 	dum->pullup = (value != 0);
 	set_link_state (dum);
 	spin_unlock_irqrestore (&dum->lock, flags);
+
+	usb_hcd_poll_rh_status (dummy_to_hcd (dum));
 	return 0;
 }
 
@@ -811,6 +814,8 @@
 	dum->pullup = 1;
 	set_link_state (dum);
 	spin_unlock_irq (&dum->lock);
+
+	usb_hcd_poll_rh_status (dummy_to_hcd (dum));
 	return 0;
 }
 EXPORT_SYMBOL (usb_gadget_register_driver);
@@ -845,6 +850,7 @@
 	set_link_state (dum);
 	spin_unlock_irqrestore (&dum->lock, flags);
 
+	usb_hcd_poll_rh_status (dummy_to_hcd (dum));
 	return 0;
 }
 EXPORT_SYMBOL (usb_gadget_unregister_driver);
@@ -1669,6 +1675,9 @@
 		retval = -EPIPE;
 	}
 	spin_unlock_irqrestore (&dum->lock, flags);
+
+	if ((dum->port_status & PORT_C_MASK) != 0)
+		usb_hcd_poll_rh_status (hcd);
 	return retval;
 }
 
@@ -1745,6 +1754,7 @@
 	/* only show a low-power port: just 8mA */
 	hcd->power_budget = 8;
 	hcd->state = HC_STATE_RUNNING;
+	hcd->uses_new_polling = 1;
 
 #ifdef CONFIG_USB_OTG
 	hcd->self.otg_port = 1;