--- isight-firmware-tools-1.6/src/load.h 2011-05-01 19:17:49.000000000 +0200 +++ isight-firmware-tools-1.6p/src/load.h 2011-08-28 23:48:34.000000000 +0200 @@ -40,7 +40,7 @@ #define _LOAD_H_ #define APPLE_VENDOR_ID 0x05AC -#define ISIGHT_PRODUCT_ID 0x8300 +#define ISIGHT_PROD_IDS const guint32 prod_ids[5]={0x8300,0x8501,0x8502,0x8505,0x8507}; #define ift_debug(args...) syslog(LOG_DEBUG, args) #define ift_message(args...) syslog(LOG_INFO, args) @@ -49,6 +49,6 @@ int load_firmware(struct usb_device *dev, char *firmware); struct usb_device* find_usb_device(const gchar *bus_id, const gchar *dev_id); -struct usb_device* find_usb_product(const guint32 vendor_id, const guint32 product_id); +struct usb_device* find_usb_product(const guint32 vendor_id, const guint32 prod_ids[]); #endif --- isight-firmware-tools-1.6/src/load.c 2011-05-01 19:17:49.000000000 +0200 +++ isight-firmware-tools-1.6p/src/load.c 2011-08-28 23:54:19.000000000 +0200 @@ -160,27 +160,35 @@ } struct usb_device* -find_usb_product(const guint32 vendor_id, const guint32 product_id) +find_usb_product(const guint32 vendor_id, const guint32 prod_ids[]) { struct usb_bus *bi; struct usb_device *di, *dev = NULL; + + int idi; - for (bi = usb_busses; bi != NULL; bi = bi->next) { - for (di = bi->devices; di != NULL; di = di->next) { - if (di->descriptor.idVendor == vendor_id && - di->descriptor.idProduct == product_id) { - dev = di; - break; + + for (idi=0; prod_ids[idi]!='\0'; idi++) { + ift_message(_("Trying USB device 0x%04X:0x%04X ..."), vendor_id, prod_ids[idi]); + for (bi = usb_busses; bi != NULL; bi = bi->next) { + for (di = bi->devices; di != NULL; di = di->next) { +// ift_message(_(" 0x%04X==0x%04X?\n"), di->descriptor.idProduct, prod_ids[idi]); + if (di->descriptor.idVendor == vendor_id && + di->descriptor.idProduct == prod_ids[idi]) { + dev = di; + break; + } } + if (dev) + break; } - if (dev) break; } - if (!dev) - ift_warning(_("USB device 0x%04X:0x%04X not found"), - vendor_id, product_id); +// if (!dev) +// ift_warning(_("USB device 0x%04X:0x%04X not found"), +// vendor_id, product_id); return dev; } --- isight-firmware-tools-1.6/src/udev.c 2011-05-01 19:17:49.000000000 +0200 +++ isight-firmware-tools-1.6p/src/udev.c 2011-08-28 23:50:28.000000000 +0200 @@ -107,12 +107,13 @@ ift_error(_("No USB devices found")); } - - dev = find_usb_product(APPLE_VENDOR_ID, - ISIGHT_PRODUCT_ID); + ISIGHT_PROD_IDS + dev = find_usb_product(APPLE_VENDOR_ID, prod_ids); if (!dev) ift_error(_("No iSight found")); + else + ift_message(_("iSight found: 0x%04X:0x%04X"), dev->descriptor.idVendor, dev->descriptor.idProduct); if (load_firmware(dev, firmware) == -1) ift_error(_("Failed to upload firmware to 0x%04X:0x%04X"),