Commit af70dbd3 authored by Michael Krufky's avatar Michael Krufky Committed by Mauro Carvalho Chehab

V4L/DVB (5260): Cx88-blackbird: allow usage of both 376836 and 262144 sized firmware images

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/Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 48dc30a1
...@@ -56,7 +56,8 @@ MODULE_PARM_DESC(debug,"enable debug messages [blackbird]"); ...@@ -56,7 +56,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 */ /* defines below are from ivtv-driver.h */
...@@ -404,7 +405,7 @@ static int blackbird_find_mailbox(struct cx8802_dev *dev) ...@@ -404,7 +405,7 @@ static int blackbird_find_mailbox(struct cx8802_dev *dev)
u32 value; u32 value;
int i; 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); memory_read(dev->core, i, &value);
if (value == signature[signaturecnt]) if (value == signature[signaturecnt])
signaturecnt++; signaturecnt++;
...@@ -452,12 +453,15 @@ static int blackbird_load_firmware(struct cx8802_dev *dev) ...@@ -452,12 +453,15 @@ static int blackbird_load_firmware(struct cx8802_dev *dev)
return -1; return -1;
} }
if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) { if ((firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) &&
dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n", (firmware->size != OLD_BLACKBIRD_FIRM_IMAGE_SIZE)) {
firmware->size, 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); release_firmware(firmware);
return -1; return -1;
} }
dev->fw_size = firmware->size;
if (0 != memcmp(firmware->data, magic, 8)) { if (0 != memcmp(firmware->data, magic, 8)) {
dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n"); dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n");
......
...@@ -463,6 +463,7 @@ struct cx8802_dev { ...@@ -463,6 +463,7 @@ struct cx8802_dev {
u32 mailbox; u32 mailbox;
int width; int width;
int height; int height;
int fw_size;
#if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE) #if defined(CONFIG_VIDEO_BUF_DVB) || defined(CONFIG_VIDEO_BUF_DVB_MODULE)
/* for dvb only */ /* for dvb only */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment