- ret = libusb_set_configuration((*dev)->usb_device,
- (*dev)->desc->configuration);
- if (ret < 0) {
- debug(ctx, "libusb_set_configuration failed\n");
- debug(ctx, "Cannot set configuration %hhu\n",
- (*dev)->desc->configuration);
- goto out_libusb_close;
+ current_configuration = -1;
+ libusb_get_configuration((*dev)->usb_device, ¤t_configuration);
+ if (current_configuration != (*dev)->desc->configuration) {
+ ret = libusb_set_configuration((*dev)->usb_device,
+ (*dev)->desc->configuration);
+ if (ret < 0) {
+ debug(ctx, "libusb_set_configuration failed: %s\n",
+ libusb_error_name(ret));
+ debug(ctx, "Cannot set configuration %hhu\n",
+ (*dev)->desc->configuration);
+ goto out_libusb_close;
+ }