]> git.sur5r.net Git - u-boot/commitdiff
usb_ether: register usb ethernet gadget at each eth init
authorLei Wen <leiwen@marvell.com>
Wed, 1 Dec 2010 15:43:43 +0000 (23:43 +0800)
committerRemy Bohmer <linux@bohmer.net>
Wed, 19 Jan 2011 16:29:55 +0000 (17:29 +0100)
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>
drivers/usb/gadget/ether.c

index 5a18e035b6ef9f39d1c20becf9dea85e46931ebe..261cf7ef272723b3741dbf13d5d180e151adbd4d 100644 (file)
@@ -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;