usbmode: add config #0 and delay before actual config
authorHenrik Ginstmark <henrik@ginstmark.se>
Mon, 7 Feb 2022 21:30:40 +0000 (22:30 +0100)
committerPetr Štetiar <ynezz@true.cz>
Thu, 24 Feb 2022 20:40:51 +0000 (21:40 +0100)
I have a Huawei ME909s-120.  When I switch directly from configuration
to go via configuration #0, and a short delay, and then to configuration
well. So in order to fix it, add config #0 and a 100milliseconds
delay before switching to actual config, like in USB_ModeSwitch.

References: https://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=2710&sid=505ed44b4064fef7009f0c26aac085e2&start=15
Signed-off-by: Henrik Ginstmark <henrik@ginstmark.se>
Signed-off-by: Petr Štetiar <ynezz@true.cz> [rebased, commit description facelift]
switch.c

index cc0423702398858a4d570d330ce4e30f7bd8d255..6285c7c1b618a896f584c5670342c937d5e3d832 100644 (file)
--- a/switch.c
+++ b/switch.c
@@ -520,8 +520,11 @@ void handle_switch(struct usbdev_data *data)
 
                config_new = blobmsg_get_u32(tb[DATA_CONFIG]);
                if (libusb_get_configuration(data->devh, &config) ||
-                   config != config_new)
+                   config != config_new) {
+                       libusb_set_configuration(data->devh, 0);
+                       usleep(100000);
                        libusb_set_configuration(data->devh, config_new);
+               }
        }
 
        if (tb[DATA_ALT]) {