]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
V4L: cx88-blackbird: allow usage of 376836 and 262144 sized firmware images
authorMichael Krufky <mkrufky@linuxtv.org>
Sat, 3 Mar 2007 14:36:15 +0000 (09:36 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Mar 2007 18:50:24 +0000 (10:50 -0800)
This updates the cx88-blackbird driver to be able to use the new cx23416
firmware image released by Hauppauge Computer Works, while retaining
compatibility with the older firmware images.
cx2341x firmware can be downloaded at: http://dl.ivtvdriver.org/ivtv/firmware/

(cherry picked from commit af70dbd3346999570db73b3bc3d4f7b7c004f2ea)

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/cx88/cx88.h

index 0cf0360588e6c8d30e562f7945f3a5bdd263d143..1c04516155bdefee837b416eda243437f7bb55b8 100644 (file)
@@ -53,7 +53,8 @@ MODULE_PARM_DESC(debug,"enable debug messages [blackbird]");
 
 /* ------------------------------------------------------------------ */
 
-#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 */
 
@@ -401,7 +402,7 @@ static int blackbird_find_mailbox(struct cx8802_dev *dev)
        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++;
@@ -449,12 +450,15 @@ static int blackbird_load_firmware(struct cx8802_dev *dev)
                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");
index a9575ad8ca27b2b0127e140d6d5d8b00a325495d..e775b4b59abec79e7cb2590b9866b5c6b355d81a 100644 (file)
@@ -459,6 +459,7 @@ struct cx8802_dev {
        u32                        mailbox;
        int                        width;
        int                        height;
+       int                        fw_size;
 
        /* for dvb only */
        struct videobuf_dvb        dvb;