aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/dummy_hcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/dummy_hcd.c')
-rw-r--r--drivers/usb/gadget/dummy_hcd.c38
1 files changed, 11 insertions, 27 deletions
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 9db2482bdfa2..cbe44535c0f0 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -61,6 +61,8 @@
61#define DRIVER_DESC "USB Host+Gadget Emulator" 61#define DRIVER_DESC "USB Host+Gadget Emulator"
62#define DRIVER_VERSION "02 May 2005" 62#define DRIVER_VERSION "02 May 2005"
63 63
64#define POWER_BUDGET 500 /* in mA; use 8 for low-power port testing */
65
64static const char driver_name [] = "dummy_hcd"; 66static const char driver_name [] = "dummy_hcd";
65static const char driver_desc [] = "USB Host+Gadget Emulator"; 67static const char driver_desc [] = "USB Host+Gadget Emulator";
66 68
@@ -772,18 +774,17 @@ usb_gadget_register_driver (struct usb_gadget_driver *driver)
772 list_del_init (&dum->ep [0].ep.ep_list); 774 list_del_init (&dum->ep [0].ep.ep_list);
773 INIT_LIST_HEAD(&dum->fifo_req.queue); 775 INIT_LIST_HEAD(&dum->fifo_req.queue);
774 776
777 driver->driver.bus = NULL;
775 dum->driver = driver; 778 dum->driver = driver;
776 dum->gadget.dev.driver = &driver->driver; 779 dum->gadget.dev.driver = &driver->driver;
777 dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n", 780 dev_dbg (udc_dev(dum), "binding gadget driver '%s'\n",
778 driver->driver.name); 781 driver->driver.name);
779 if ((retval = driver->bind (&dum->gadget)) != 0) 782 retval = driver->bind(&dum->gadget);
780 goto err_bind_gadget; 783 if (retval) {
781 784 dum->driver = NULL;
782 driver->driver.bus = dum->gadget.dev.parent->bus; 785 dum->gadget.dev.driver = NULL;
783 if ((retval = driver_register (&driver->driver)) != 0) 786 return retval;
784 goto err_register; 787 }
785 if ((retval = device_bind_driver (&dum->gadget.dev)) != 0)
786 goto err_bind_driver;
787 788
788 /* khubd will enumerate this in a while */ 789 /* khubd will enumerate this in a while */
789 spin_lock_irq (&dum->lock); 790 spin_lock_irq (&dum->lock);
@@ -793,20 +794,6 @@ usb_gadget_register_driver (struct usb_gadget_driver *driver)
793 794
794 usb_hcd_poll_rh_status (dummy_to_hcd (dum)); 795 usb_hcd_poll_rh_status (dummy_to_hcd (dum));
795 return 0; 796 return 0;
796
797err_bind_driver:
798 driver_unregister (&driver->driver);
799err_register:
800 if (driver->unbind)
801 driver->unbind (&dum->gadget);
802 spin_lock_irq (&dum->lock);
803 dum->pullup = 0;
804 set_link_state (dum);
805 spin_unlock_irq (&dum->lock);
806err_bind_gadget:
807 dum->driver = NULL;
808 dum->gadget.dev.driver = NULL;
809 return retval;
810} 797}
811EXPORT_SYMBOL (usb_gadget_register_driver); 798EXPORT_SYMBOL (usb_gadget_register_driver);
812 799
@@ -830,11 +817,9 @@ usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
830 spin_unlock_irqrestore (&dum->lock, flags); 817 spin_unlock_irqrestore (&dum->lock, flags);
831 818
832 driver->unbind (&dum->gadget); 819 driver->unbind (&dum->gadget);
820 dum->gadget.dev.driver = NULL;
833 dum->driver = NULL; 821 dum->driver = NULL;
834 822
835 device_release_driver (&dum->gadget.dev);
836 driver_unregister (&driver->driver);
837
838 spin_lock_irqsave (&dum->lock, flags); 823 spin_lock_irqsave (&dum->lock, flags);
839 dum->pullup = 0; 824 dum->pullup = 0;
840 set_link_state (dum); 825 set_link_state (dum);
@@ -1827,8 +1812,7 @@ static int dummy_start (struct usb_hcd *hcd)
1827 1812
1828 INIT_LIST_HEAD (&dum->urbp_list); 1813 INIT_LIST_HEAD (&dum->urbp_list);
1829 1814
1830 /* only show a low-power port: just 8mA */ 1815 hcd->power_budget = POWER_BUDGET;
1831 hcd->power_budget = 8;
1832 hcd->state = HC_STATE_RUNNING; 1816 hcd->state = HC_STATE_RUNNING;
1833 hcd->uses_new_polling = 1; 1817 hcd->uses_new_polling = 1;
1834 1818