aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorLei Wen <leiwen@marvell.com>2010-12-01 23:43:43 +0800
committerRemy Bohmer <linux@bohmer.net>2011-01-19 17:29:55 +0100
commit988ee3e3f024f4565f98584b9026df73c459c268 (patch)
tree74c575243afc739f00c23f915a881a39ba8bb84d /drivers/usb
parent3f1266d6d5bf14ea7248544db8406d308c6bfa7c (diff)
usb_ether: register usb ethernet gadget at each eth init
Since the ether may not be the only one usb gadget would be used in the uboot, it is neccessary to do the register each time the eth begin to work to make usb gadget driver less confussed when we want to use two different usb gadget at the same time. Usb gadget driver could simple ignore the register operation, if it find the driver has been registered already. Signed-off-by: Lei Wen <leiwen@marvell.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/ether.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 5a18e035b..261cf7ef2 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -1456,6 +1456,7 @@ static void eth_unbind(struct usb_gadget *gadget)
/* unregister_netdev (dev->net);*/
/* free_netdev(dev->net);*/
+ dev->gadget = NULL;
set_gadget_data(gadget, NULL);
}
@@ -1788,6 +1789,8 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
error("received NULL ptr");
goto fail;
}
+ if (usb_gadget_register_driver(&eth_driver) < 0)
+ goto fail;
dev->network_started = 0;
@@ -1895,7 +1898,12 @@ void usb_eth_halt(struct eth_device *netdev)
return;
}
+ /* If the gadget not registered, simple return */
+ if (!dev->gadget)
+ return;
+
usb_gadget_disconnect(dev->gadget);
+ usb_gadget_unregister_driver(&eth_driver);
}
static struct usb_gadget_driver eth_driver = {
@@ -1957,10 +1965,6 @@ int usb_eth_initialize(bd_t *bi)
if (status)
goto fail;
- status = usb_gadget_register_driver(&eth_driver);
- if (status < 0)
- goto fail;
-
eth_register(netdev);
return 0;