Browse Source

usbutils - force check every combination

Kano 12 years ago
parent
commit
ac08ed1d03
1 changed files with 19 additions and 2 deletions
  1. 19 2
      usbutils.c

+ 19 - 2
usbutils.c

@@ -1798,11 +1798,27 @@ out_unlock:
 	return bad;
 	return bad;
 }
 }
 
 
-bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found)
+bool usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct usb_find_devices *found_match)
 {
 {
+	struct usb_find_devices *found_use = NULL;
 	int ret;
 	int ret;
+	int i;
+
+	for (i = 0; find_dev[i].drv != DRV_LAST; i++) {
+		if (find_dev[i].drv == found_match->drv &&
+		    find_dev[i].idVendor == found_match->idVendor &&
+		    find_dev[i].idProduct == found_match->idProduct) {
+			found_use = malloc(sizeof(*found_use));
+			if (unlikely(!found_use))
+				quit(1, "USB failed to malloc found_use");
+			memcpy(found_use, &(find_dev[i]), sizeof(*found_use));
 
 
-	ret = _usb_init(cgpu, dev, found);
+			ret = _usb_init(cgpu, dev, found_use);
+
+			if (ret != USB_INIT_IGNORE)
+				break;
+		}
+	}
 
 
 	if (ret == USB_INIT_FAIL)
 	if (ret == USB_INIT_FAIL)
 		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
 		applog(LOG_ERR, "%s detect (%d:%d) failed to initialise (incorrect device?)",
@@ -1971,6 +1987,7 @@ void usb_detect(struct device_drv *drv, bool (*device_detect)(struct libusb_devi
 					total_count++;
 					total_count++;
 					drv_count[drv->drv_id].count++;
 					drv_count[drv->drv_id].count++;
 				}
 				}
+				free(found);
 			}
 			}
 		}
 		}
 	}
 	}