X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Flibusb1_common.c;h=07d9f9512ce9aed6f3947198591f2586e2fdc2d7;hp=a29b2e9105e56eaf51f645cc2ac515d2f204384f;hb=ca8f8e7e77ec2263044288e540c7276155155a48;hpb=48a681c741993e61f2a9404b75b73d011b9e184e diff --git a/src/jtag/drivers/libusb1_common.c b/src/jtag/drivers/libusb1_common.c index a29b2e9105..07d9f9512c 100644 --- a/src/jtag/drivers/libusb1_common.c +++ b/src/jtag/drivers/libusb1_common.c @@ -165,9 +165,21 @@ int jtag_libusb_set_configuration(jtag_libusb_device_handle *devh, int retCode = -99; struct libusb_config_descriptor *config = NULL; + int current_config = -1; - libusb_get_config_descriptor(udev, configuration, &config); - retCode = libusb_set_configuration(devh, config->bConfigurationValue); + retCode = libusb_get_configuration(devh, ¤t_config); + if (retCode != 0) + return retCode; + + retCode = libusb_get_config_descriptor(udev, configuration, &config); + if (retCode != 0 || config == NULL) + return retCode; + + /* Only change the configuration if it is not already set to the + same one. Otherwise this issues a lightweight reset and hangs + LPC-Link2 with JLink firmware. */ + if (current_config != config->bConfigurationValue) + retCode = libusb_set_configuration(devh, config->bConfigurationValue); libusb_free_config_descriptor(config);