/* ------------------------------------------------------------------ */
 
-#define BLACKBIRD_FIRM_IMAGE_SIZE 256*1024
+#define OLD_BLACKBIRD_FIRM_IMAGE_SIZE 262144
+#define     BLACKBIRD_FIRM_IMAGE_SIZE 376836
 
 /* defines below are from ivtv-driver.h */
 
        u32 value;
        int i;
 
-       for (i = 0; i < BLACKBIRD_FIRM_IMAGE_SIZE; i++) {
+       for (i = 0; i < dev->fw_size; i++) {
                memory_read(dev->core, i, &value);
                if (value == signature[signaturecnt])
                        signaturecnt++;
                return -1;
        }
 
-       if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) {
-               dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n",
-                       firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE);
+       if ((firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) &&
+           (firmware->size != OLD_BLACKBIRD_FIRM_IMAGE_SIZE)) {
+               dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d or %d)\n",
+                       firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE,
+                       OLD_BLACKBIRD_FIRM_IMAGE_SIZE);
                release_firmware(firmware);
                return -1;
        }
+       dev->fw_size = firmware->size;
 
        if (0 != memcmp(firmware->data, magic, 8)) {
                dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n");