USB: gadget: save driver name before registering it
authorStephen Warren <swarren@nvidia.com>
Thu, 1 May 2014 21:45:16 +0000 (15:45 -0600)
committerChanho Park <chanho61.park@samsung.com>
Fri, 24 Jul 2015 07:29:58 +0000 (16:29 +0900)
g_dnl_register() currently first attempts to register a composite
driver by name, and then saves the driver name once it's registered.
Internally to the registration code, g_dnl_do_config() is called and
attempts to compare the composite device's name with the list of known
device names. This fails since the composite device's name has not yet
been stored. This means that the first time "ums 0 0" is run, it fails,
but subsequent attempts succeed.

Re-order the name-saving and registration code to solve this.

Fixes: e5b834e07f51 ("USB: gadget: added a saner gadget downloader registration API")
Signed-off-by: Stephen Warren <swarren@nvidia.com>
drivers/usb/gadget/g_dnl.c

index c1db9f50ac05bc5aee5eb294ca1cbf71e45a26f4..2c09413c451c11164c34d2f4b9fe9722f8f079bc 100644 (file)
@@ -257,11 +257,12 @@ static struct usb_composite_driver g_dnl_driver = {
  */
 int g_dnl_register(const char *name)
 {
-       int ret = usb_composite_register(&g_dnl_driver);
+       int ret;
 
        debug("%s: g_dnl_driver.name = %s\n", __func__, name);
        g_dnl_driver.name = name;
 
+       ret = usb_composite_register(&g_dnl_driver);
        if (ret) {
                printf("%s: failed!, error: %d\n", __func__, ret);
                return ret;