New FX2 firmware from Hauppauge is no longer 8KB in size - it's 16KB.
This is true for HVR-1950 and HVR-1900 devices.  Without this change,
new pvrusb2 users with that hardware are unable to use the driver
(because the CD shipped with the hardware only has the 16KB firmware).
Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
                .flag_has_analogtuner = !0,
                .flag_has_composite = !0,
                .flag_has_svideo = !0,
+               .flag_fx2_16kb = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
                .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,
                .default_std_mask = V4L2_STD_NTSC_M,
                .flag_has_analogtuner = !0,
                .flag_has_composite = !0,
                .flag_has_svideo = !0,
+               .flag_fx2_16kb = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
                .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,
                .default_std_mask = V4L2_STD_NTSC_M,
 
        unsigned int flag_has_analogtuner:1;   /* Has analog tuner */
        unsigned int flag_has_composite:1;     /* Has composite input */
        unsigned int flag_has_svideo:1;        /* Has s-video input */
+       unsigned int flag_fx2_16kb:1;          /* 16KB FX2 firmware OK here */
 };
 
 extern struct usb_device_id pvr2_device_table[];
 
 
        pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
 
-       if (fw_entry->size != 0x2000){
-               pvr2_trace(PVR2_TRACE_ERROR_LEGS,"wrong fx2 firmware size");
+       if ((fw_entry->size != 0x2000) &&
+           (!(hdw->hdw_desc->flag_fx2_16kb && (fw_entry->size == 0x4000)))) {
+               if (hdw->hdw_desc->flag_fx2_16kb) {
+                       pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+                                  "Wrong fx2 firmware size"
+                                  " (expected 8192 or 16384, got %u)",
+                                  fw_entry->size);
+               } else {
+                       pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+                                  "Wrong fx2 firmware size"
+                                  " (expected 8192, got %u)",
+                                  fw_entry->size);
+               }
                release_firmware(fw_entry);
                return -ENOMEM;
        }