usb: workaround code for legacy usb client 82/172482/6 accepted/tizen/unified/20180314.141510 submit/tizen/20180314.081248
authorINSUN PYO <insun.pyo@samsung.com>
Wed, 14 Mar 2018 06:43:10 +0000 (15:43 +0900)
committerINSUN PYO <insun.pyo@samsung.com>
Wed, 14 Mar 2018 07:20:58 +0000 (16:20 +0900)
Signed-off-by: INSUN PYO <insun.pyo@samsung.com>
Change-Id: Ibbc64b534e2cf560b61c080299f6fc26b6009700

hw/usb_client/usb_client.c

index 824e562..bfc2d20 100644 (file)
@@ -332,7 +332,7 @@ static int legacy_get_current_gadget(struct usb_client *usb,
        struct usb_gadget_strings *strs;
        struct usb_configuration **configs;
        struct usb_function **funcs;
-       int i;
+       int i, j;
        int ret = -ENOMEM;
 
        gadget = zalloc(sizeof(*gadget));
@@ -373,6 +373,13 @@ static int legacy_get_current_gadget(struct usb_client *usb,
        if (ret)
                goto free_config_1;
 
+       i = 0;
+       for (j = 0; configs[0] && configs[0]->funcs[j]; i++, j++)
+               gadget->funcs[i] = configs[0]->funcs[j];
+
+       for (j = 0; configs[1] && configs[1]->funcs[j]; i++, j++)
+               gadget->funcs[i] = configs[1]->funcs[j];
+
        *_gadget = gadget;
        return 0;
 
@@ -601,31 +608,24 @@ static int legacy_enable(struct usb_client *usb)
                goto disable_gadget;
 
        for (i = 0; gadget->funcs[i]; ++i) {
-               if (gadget->funcs[i]->function_group !=
-                   USB_FUNCTION_GROUP_WITH_SERVICE)
+               if (gadget->funcs[i]->function_group != USB_FUNCTION_GROUP_WITH_SERVICE)
                        continue;
 
-               fws = container_of(gadget->funcs[i],
-                                  struct usb_function_with_service, func);
+               fws = container_of(gadget->funcs[i], struct usb_function_with_service, func);
                ret = systemd_start_service(fws->service);
                if (ret < 0)
-                       goto stop_services;
+                       _E("start service failed: %s", fws->service);
        }
 
+       // TODO. free gadget
+       // legacy_free_gadget(gadget);
        return 0;
-stop_services:
-       while (--i >= 0) {
-               if (gadget->funcs[i]->function_group !=
-                   USB_FUNCTION_GROUP_WITH_SERVICE)
-                       continue;
-
-               fws = container_of(gadget->funcs[i],
-                                  struct usb_function_with_service, func);
-               systemd_stop_service(fws->service);
-       }
 
 disable_gadget:
        sys_set_str(LEGACY_ENABLE_PATH, LEGACY_DISABLE);
+
+       // TODO. free gadget
+       // legacy_free_gadget(gadget);
        return ret;
 }
 
@@ -647,9 +647,11 @@ static int legacy_disable(struct usb_client *usb)
                fws = container_of(gadget->funcs[i], struct usb_function_with_service, func);
                ret = systemd_stop_service(fws->service);
                if (ret < 0)
-                       return ret;
+                       _E("stop service failed: %s", fws->service);
        }
 
+       // TODO. free gadget
+       // legacy_free_gadget(gadget);
        return sys_set_str(LEGACY_ENABLE_PATH, LEGACY_DISABLE);
 }