diff options
Diffstat (limited to 'drivers/usb/gadget/dummy_hcd.c')
-rw-r--r-- | drivers/usb/gadget/dummy_hcd.c | 38 |
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 | |||
64 | static const char driver_name [] = "dummy_hcd"; | 66 | static const char driver_name [] = "dummy_hcd"; |
65 | static const char driver_desc [] = "USB Host+Gadget Emulator"; | 67 | static 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 | |||
797 | err_bind_driver: | ||
798 | driver_unregister (&driver->driver); | ||
799 | err_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); | ||
806 | err_bind_gadget: | ||
807 | dum->driver = NULL; | ||
808 | dum->gadget.dev.driver = NULL; | ||
809 | return retval; | ||
810 | } | 797 | } |
811 | EXPORT_SYMBOL (usb_gadget_register_driver); | 798 | EXPORT_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 | ||