jtag/drivers/libusb1_common: avoid device reset when reselecting configuration
According to [1], we shouldn't reselect an already active configuration to avoid needless device reset. This is known to cause issues with e.g. LPC Link2 with JLink firmware. [1] http://libusb.sourceforge.net/api-1.0/caveats.html#configsel Change-Id: I3568ada77780a521548c450090db7173f8d0b2dd Signed-off-by: Paul Fertser <fercerpav@gmail.com> Signed-off-by: Anders Oleson <anders@openpuma.org> Reviewed-on: http://openocd.zylin.com/2288 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
parent
48a681c741
commit
ca8f8e7e77
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue