The patch number 8449 was added via Mauro Carvalho Chehab <[EMAIL PROTECTED]>
to http://linuxtv.org/hg/v4l-dvb master development tree.

Kernel patches in this development tree may be modified to be backward
compatible with older kernels. Compatibility modifications will be
removed before inclusion into the mainstream Kernel

If anyone has any objections, please let us know by sending a message to:
        [EMAIL PROTECTED]

------

From: Mauro Carvalho Chehab  <[EMAIL PROTECTED]>
make cpia2 and vicam backward compatible


Probably, this is a bit overkill, but let's keep the old behavior for kernels
lower than 2.6.27, until we make sure that those changes work fine also for
older kernels.

kernel-sync: since we don't want this patch to go to kernel

Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>


---

 linux/drivers/media/video/cpia2/cpia2_core.c |   26 +
 linux/drivers/media/video/usbvideo/vicam.c   |  318 ++++++++++++++++++-
 2 files changed, 341 insertions(+), 3 deletions(-)

diff -r 7ffe10050c8c -r 1a80655eac0e 
linux/drivers/media/video/cpia2/cpia2_core.c
--- a/linux/drivers/media/video/cpia2/cpia2_core.c      Thu Jul 24 13:24:51 
2008 -0300
+++ b/linux/drivers/media/video/cpia2/cpia2_core.c      Thu Jul 24 13:28:47 
2008 -0300
@@ -33,10 +33,16 @@
 
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
 #include <linux/firmware.h>
+#endif
 
 /* #define _CPIA2_DEBUG_ */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+#include "cpia2patch.h"
+
+#endif
 #ifdef _CPIA2_DEBUG_
 
 static const char *block_name[] = {
@@ -892,6 +898,7 @@ int cpia2_set_low_power(struct camera_da
  *  apply_vp_patch
  *
  *****************************************************************************/
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
 static int cpia2_send_onebyte_command(struct camera_data *cam,
                                      struct cpia2_command *cmd,
                                      u8 start, u8 datum)
@@ -902,13 +909,19 @@ static int cpia2_send_onebyte_command(st
        return cpia2_send_command(cam, cmd);
 }
 
+#endif
 static int apply_vp_patch(struct camera_data *cam)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+       int i, j;
+#else
        const struct firmware *fw;
        const char fw_name[] = "cpia2/stv0672_vp4.bin";
        int i, ret;
+#endif
        struct cpia2_command cmd;
 
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
        ret = request_firmware(&fw, fw_name, &cam->dev->dev);
        if (ret) {
                printk(KERN_ERR "cpia2: failed to load VP patch \"%s\"\n",
@@ -916,9 +929,19 @@ static int apply_vp_patch(struct camera_
                return ret;
        }
 
+#endif
        cmd.req_mode = CAMERAACCESS_TYPE_REPEAT | CAMERAACCESS_VP;
        cmd.direction = TRANSFER_WRITE;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+       for (i = 0; i < PATCH_DATA_SIZE; i++) {
+               for (j = 0; j < patch_data[i].count; j++) {
+                       cmd.buffer.block_data[j] = patch_data[i].data[j];
+               }
+
+               cmd.start = patch_data[i].reg;
+               cmd.reg_count = patch_data[i].count;
+#else
        /* First send the start address... */
        cpia2_send_onebyte_command(cam, &cmd, 0x0A, fw->data[0]); /* hi */
        cpia2_send_onebyte_command(cam, &cmd, 0x0B, fw->data[1]); /* lo */
@@ -928,9 +951,11 @@ static int apply_vp_patch(struct camera_
                cmd.start = 0x0C; /* Data */
                cmd.reg_count = min_t(int, 64, fw->size - i);
                memcpy(cmd.buffer.block_data, &fw->data[i], cmd.reg_count);
+#endif
                cpia2_send_command(cam, &cmd);
        }
 
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
        /* Next send the start address... */
        cpia2_send_onebyte_command(cam, &cmd, 0x0A, fw->data[0]); /* hi */
        cpia2_send_onebyte_command(cam, &cmd, 0x0B, fw->data[1]); /* lo */
@@ -939,6 +964,7 @@ static int apply_vp_patch(struct camera_
        cpia2_send_onebyte_command(cam, &cmd, 0x0D, 1);
 
        release_firmware(fw);
+#endif
        return 0;
 }
 
diff -r 7ffe10050c8c -r 1a80655eac0e linux/drivers/media/video/usbvideo/vicam.c
--- a/linux/drivers/media/video/usbvideo/vicam.c        Thu Jul 24 13:24:51 
2008 -0300
+++ b/linux/drivers/media/video/usbvideo/vicam.c        Thu Jul 24 13:28:47 
2008 -0300
@@ -43,8 +43,10 @@
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/mutex.h>
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
 #include <linux/firmware.h>
 #include <linux/ihex.h>
+#endif
 #include "usbvideo.h"
 
 // #define VICAM_DEBUG
@@ -72,6 +74,286 @@
 
 #define VICAM_HEADER_SIZE       64
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+/* Not sure what all the bytes in these char
+ * arrays do, but they're necessary to make
+ * the camera work.
+ */
+
+static unsigned char setup1[] = {
+       0xB6, 0xC3, 0x1F, 0x00, 0x02, 0x64, 0xE7, 0x67,
+       0xFD, 0xFF, 0x0E, 0xC0, 0xE7, 0x09, 0xDE, 0x00,
+       0x8E, 0x00, 0xC0, 0x09, 0x40, 0x03, 0xC0, 0x17,
+       0x44, 0x03, 0x4B, 0xAF, 0xC0, 0x07, 0x00, 0x00,
+       0x4B, 0xAF, 0x97, 0xCF, 0x00, 0x00
+};
+
+static unsigned char setup2[] = {
+       0xB6, 0xC3, 0x03, 0x00, 0x03, 0x64, 0x18, 0x00,
+       0x00, 0x00
+};
+
+static unsigned char setup3[] = {
+       0xB6, 0xC3, 0x01, 0x00, 0x06, 0x64, 0x00, 0x00
+};
+
+static unsigned char setup4[] = {
+       0xB6, 0xC3, 0x8F, 0x06, 0x02, 0x64, 0xE7, 0x07,
+       0x00, 0x00, 0x08, 0xC0, 0xE7, 0x07, 0x00, 0x00,
+       0x3E, 0xC0, 0xE7, 0x07, 0x54, 0x01, 0xAA, 0x00,
+       0xE7, 0x07, 0xC8, 0x05, 0xB6, 0x00, 0xE7, 0x07,
+       0x42, 0x01, 0xD2, 0x00, 0xE7, 0x07, 0x7C, 0x00,
+       0x16, 0x00, 0xE7, 0x07, 0x56, 0x00, 0x18, 0x00,
+       0xE7, 0x07, 0x06, 0x00, 0x92, 0xC0, 0xE7, 0x07,
+       0x00, 0x00, 0x1E, 0xC0, 0xE7, 0x07, 0xFF, 0xFF,
+       0x22, 0xC0, 0xE7, 0x07, 0x04, 0x00, 0x24, 0xC0,
+       0xE7, 0x07, 0xEC, 0x27, 0x28, 0xC0, 0xE7, 0x07,
+       0x16, 0x01, 0x8E, 0x00, 0xE7, 0x87, 0x01, 0x00,
+       0x0E, 0xC0, 0x97, 0xCF, 0xD7, 0x09, 0x00, 0xC0,
+       0xE7, 0x77, 0x01, 0x00, 0x92, 0xC0, 0x09, 0xC1,
+       0xE7, 0x09, 0xFE, 0x05, 0x24, 0x01, 0xE7, 0x09,
+       0x04, 0x06, 0x26, 0x01, 0xE7, 0x07, 0x07, 0x00,
+       0x92, 0xC0, 0xE7, 0x05, 0x00, 0xC0, 0xC0, 0xDF,
+       0x97, 0xCF, 0x17, 0x00, 0x57, 0x00, 0x17, 0x02,
+       0xD7, 0x09, 0x00, 0xC0, 0xE7, 0x77, 0x01, 0x00,
+       0x92, 0xC0, 0x0A, 0xC1, 0xE7, 0x57, 0xFF, 0xFF,
+       0xFA, 0x05, 0x0D, 0xC0, 0xE7, 0x57, 0x00, 0x00,
+       0xFA, 0x05, 0x0F, 0xC0, 0x9F, 0xAF, 0xC6, 0x00,
+       0xE7, 0x05, 0x00, 0xC0, 0xC8, 0x05, 0xC1, 0x05,
+       0xC0, 0x05, 0xC0, 0xDF, 0x97, 0xCF, 0x27, 0xDA,
+       0xFA, 0x05, 0xEF, 0x07, 0x01, 0x00, 0x0B, 0x06,
+       0x73, 0xCF, 0x9F, 0xAF, 0x78, 0x01, 0x9F, 0xAF,
+       0x1A, 0x03, 0x6E, 0xCF, 0xE7, 0x09, 0xFC, 0x05,
+       0x24, 0x01, 0xE7, 0x09, 0x02, 0x06, 0x26, 0x01,
+       0xE7, 0x07, 0x07, 0x00, 0x92, 0xC0, 0xE7, 0x09,
+       0xFC, 0x05, 0xFE, 0x05, 0xE7, 0x09, 0x02, 0x06,
+       0x04, 0x06, 0xE7, 0x09, 0x00, 0x06, 0xFC, 0x05,
+       0xE7, 0x09, 0xFE, 0x05, 0x00, 0x06, 0x27, 0xDA,
+       0xFA, 0x05, 0xE7, 0x57, 0x01, 0x00, 0xFA, 0x05,
+       0x02, 0xCA, 0x04, 0xC0, 0x97, 0xCF, 0x9F, 0xAF,
+       0x66, 0x05, 0x97, 0xCF, 0xE7, 0x07, 0x40, 0x00,
+       0x02, 0x06, 0xC8, 0x09, 0xFC, 0x05, 0x9F, 0xAF,
+       0xDA, 0x02, 0x97, 0xCF, 0xCF, 0x17, 0x02, 0x00,
+       0xEF, 0x57, 0x81, 0x00, 0x09, 0x06, 0x9F, 0xA0,
+       0xB6, 0x01, 0xEF, 0x57, 0x80, 0x00, 0x09, 0x06,
+       0x9F, 0xA0, 0x40, 0x02, 0xEF, 0x57, 0x01, 0x00,
+       0x0B, 0x06, 0x9F, 0xA0, 0x46, 0x03, 0xE7, 0x07,
+       0x01, 0x00, 0x0A, 0xC0, 0x46, 0xAF, 0x47, 0xAF,
+       0x9F, 0xAF, 0x40, 0x02, 0xE7, 0x07, 0x2E, 0x00,
+       0x0A, 0xC0, 0xEF, 0x87, 0x80, 0x00, 0x09, 0x06,
+       0x97, 0xCF, 0x00, 0x0E, 0x01, 0x00, 0xC0, 0x57,
+       0x51, 0x00, 0x9F, 0xC0, 0x9E, 0x02, 0xC0, 0x57,
+       0x50, 0x00, 0x20, 0xC0, 0xC0, 0x57, 0x55, 0x00,
+       0x12, 0xC0, 0xC0, 0x57, 0x56, 0x00, 0x9F, 0xC0,
+       0x72, 0x02, 0x9F, 0xCF, 0xD6, 0x02, 0xC1, 0x0B,
+       0x08, 0x06, 0x01, 0xD0, 0x6F, 0x90, 0x08, 0x06,
+       0xC0, 0x07, 0x08, 0x00, 0xC1, 0x0B, 0x08, 0x06,
+       0x9F, 0xAF, 0x28, 0x05, 0x97, 0xCF, 0x2F, 0x0E,
+       0x02, 0x00, 0x08, 0x06, 0xC0, 0x07, 0x08, 0x00,
+       0xC1, 0x0B, 0x08, 0x06, 0x9F, 0xAF, 0x28, 0x05,
+       0x9F, 0xCF, 0xD6, 0x02, 0x2F, 0x0E, 0x02, 0x00,
+       0x09, 0x06, 0xEF, 0x87, 0x80, 0x00, 0x09, 0x06,
+       0x9F, 0xCF, 0xD6, 0x02, 0xEF, 0x67, 0x7F, 0xFF,
+       0x09, 0x06, 0xE7, 0x67, 0xFF, 0xFD, 0x22, 0xC0,
+       0xE7, 0x67, 0xEF, 0xFF, 0x24, 0xC0, 0xE7, 0x87,
+       0x10, 0x00, 0x28, 0xC0, 0x9F, 0xAF, 0xB8, 0x05,
+       0xE7, 0x87, 0xE0, 0x21, 0x24, 0xC0, 0x9F, 0xAF,
+       0xA8, 0x05, 0xE7, 0x87, 0x08, 0x00, 0x24, 0xC0,
+       0xE7, 0x67, 0xDF, 0xFF, 0x24, 0xC0, 0xC8, 0x07,
+       0x0A, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xC1, 0x07,
+       0x01, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0x9F, 0xAF,
+       0xB8, 0x05, 0xC0, 0x07, 0x9E, 0x00, 0x9F, 0xAF,
+       0x44, 0x05, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0,
+       0xC0, 0x09, 0x20, 0xC0, 0xE7, 0x87, 0x00, 0x01,
+       0x24, 0xC0, 0xC0, 0x77, 0x00, 0x02, 0x0F, 0xC1,
+       0xE7, 0x67, 0xF7, 0xFF, 0x24, 0xC0, 0xE7, 0x67,
+       0xF7, 0xFF, 0x24, 0xC0, 0xE7, 0x87, 0x08, 0x00,
+       0x24, 0xC0, 0x08, 0xDA, 0x5E, 0xC1, 0xEF, 0x07,
+       0x80, 0x00, 0x09, 0x06, 0x97, 0xCF, 0xEF, 0x07,
+       0x01, 0x00, 0x0A, 0x06, 0x97, 0xCF, 0xEF, 0x07,
+       0x00, 0x00, 0x0B, 0x06, 0xEF, 0x07, 0x00, 0x00,
+       0x0A, 0x06, 0xEF, 0x67, 0x7F, 0xFF, 0x09, 0x06,
+       0xEF, 0x07, 0x00, 0x00, 0x0D, 0x06, 0xE7, 0x67,
+       0xEF, 0xFF, 0x28, 0xC0, 0xE7, 0x67, 0x17, 0xD8,
+       0x24, 0xC0, 0xE7, 0x07, 0x00, 0x00, 0x1E, 0xC0,
+       0xE7, 0x07, 0xFF, 0xFF, 0x22, 0xC0, 0x97, 0xCF,
+       0xC8, 0x07, 0x0E, 0x06, 0x9F, 0xAF, 0xDA, 0x02,
+       0xE7, 0x07, 0x00, 0x00, 0xF2, 0x05, 0xE7, 0x07,
+       0x10, 0x00, 0xF6, 0x05, 0xE7, 0x07, 0x0E, 0x06,
+       0xF4, 0x05, 0xE7, 0x07, 0xD6, 0x02, 0xF8, 0x05,
+       0xC8, 0x07, 0xF2, 0x05, 0xC1, 0x07, 0x00, 0x80,
+       0x50, 0xAF, 0x97, 0xCF, 0x2F, 0x0C, 0x02, 0x00,
+       0x07, 0x06, 0x2F, 0x0C, 0x04, 0x00, 0x06, 0x06,
+       0xE7, 0x07, 0x00, 0x00, 0xF2, 0x05, 0xE7, 0x07,
+       0x10, 0x00, 0xF6, 0x05, 0xE7, 0x07, 0xE2, 0x05,
+       0xF4, 0x05, 0xE7, 0x07, 0xCE, 0x02, 0xF8, 0x05,
+       0xC8, 0x07, 0xF2, 0x05, 0xC1, 0x07, 0x00, 0x80,
+       0x51, 0xAF, 0x97, 0xCF, 0x9F, 0xAF, 0x66, 0x04,
+       0x9F, 0xAF, 0x1A, 0x03, 0x59, 0xAF, 0x97, 0xCF,
+       0xC0, 0x07, 0x0E, 0x00, 0xC1, 0x0B, 0x0C, 0x06,
+       0x41, 0xD1, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07,
+       0x3C, 0x00, 0x9F, 0xAF, 0x44, 0x05, 0x68, 0x00,
+       0xC0, 0x07, 0x3B, 0x00, 0x9F, 0xAF, 0x44, 0x05,
+       0x6F, 0x00, 0x0C, 0x06, 0x68, 0x00, 0xE0, 0x07,
+       0x04, 0x01, 0xE8, 0x0B, 0x0A, 0x06, 0xE8, 0x07,
+       0x00, 0x00, 0xE0, 0x07, 0x00, 0x02, 0xE0, 0x07,
+       0xEC, 0x01, 0xE0, 0x07, 0xFC, 0xFF, 0x97, 0xCF,
+       0xE7, 0x07, 0xFF, 0xFF, 0xFA, 0x05, 0xEF, 0x07,
+       0x00, 0x00, 0x0B, 0x06, 0xE7, 0x07, 0x0E, 0x06,
+       0x24, 0x01, 0xE7, 0x07, 0x0E, 0x06, 0xFE, 0x05,
+       0xE7, 0x07, 0x40, 0x00, 0x26, 0x01, 0xE7, 0x07,
+       0x40, 0x00, 0x04, 0x06, 0xE7, 0x07, 0x07, 0x00,
+       0x92, 0xC0, 0x97, 0xCF, 0xEF, 0x07, 0x02, 0x00,
+       0x0B, 0x06, 0x9F, 0xAF, 0x78, 0x01, 0xEF, 0x77,
+       0x80, 0x00, 0x07, 0x06, 0x9F, 0xC0, 0x14, 0x04,
+       0xEF, 0x77, 0x01, 0x00, 0x07, 0x06, 0x37, 0xC0,
+       0xEF, 0x77, 0x01, 0x00, 0x0D, 0x06, 0x0F, 0xC1,
+       0xEF, 0x07, 0x01, 0x00, 0x0D, 0x06, 0xC0, 0x07,
+       0x02, 0x00, 0xC1, 0x07, 0x30, 0x00, 0x9F, 0xAF,
+       0x28, 0x05, 0xC0, 0x07, 0x01, 0x00, 0xC1, 0x07,
+       0x02, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0xC8, 0x07,
+       0xFF, 0x4F, 0x9F, 0xAF, 0xA8, 0x05, 0xC0, 0x07,
+       0x38, 0x00, 0x9F, 0xAF, 0x44, 0x05, 0xC1, 0x77,
+       0x03, 0x00, 0x02, 0xC1, 0x08, 0xDA, 0x75, 0xC1,
+       0xC1, 0x77, 0x01, 0x00, 0x0A, 0xC1, 0xC0, 0x07,
+       0x01, 0x00, 0xC1, 0x07, 0x02, 0x00, 0x9F, 0xAF,
+       0x28, 0x05, 0xEF, 0x07, 0x01, 0x00, 0x06, 0x06,
+       0x2C, 0xCF, 0xC0, 0x07, 0x01, 0x00, 0xC1, 0x07,
+       0x04, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0xEF, 0x07,
+       0x00, 0x00, 0x06, 0x06, 0x22, 0xCF, 0xEF, 0x07,
+       0x00, 0x00, 0x0D, 0x06, 0xEF, 0x57, 0x01, 0x00,
+       0x06, 0x06, 0x1B, 0xC0, 0xC0, 0x07, 0x01, 0x00,
+       0xC1, 0x07, 0x01, 0x00, 0x9F, 0xAF, 0x28, 0x05,
+       0xC0, 0x07, 0x02, 0x00, 0xC1, 0x07, 0x30, 0x00,
+       0x9F, 0xAF, 0x28, 0x05, 0xC8, 0x07, 0xFF, 0x4F,
+       0x9F, 0xAF, 0xA8, 0x05, 0xC0, 0x07, 0x38, 0x00,
+       0x9F, 0xAF, 0x44, 0x05, 0xC1, 0x67, 0x03, 0x00,
+       0xC1, 0x57, 0x03, 0x00, 0x02, 0xC0, 0x08, 0xDA,
+       0x73, 0xC1, 0xC0, 0x07, 0x02, 0x00, 0xC1, 0x07,
+       0x12, 0x00, 0xEF, 0x57, 0x00, 0x00, 0x06, 0x06,
+       0x02, 0xC0, 0xC1, 0x07, 0x23, 0x00, 0x9F, 0xAF,
+       0x28, 0x05, 0xC0, 0x07, 0x14, 0x00, 0xC1, 0x0B,
+       0xEA, 0x05, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07,
+       0x3E, 0x00, 0x9F, 0xAF, 0x0A, 0x05, 0xE7, 0x09,
+       0xE4, 0x05, 0xFA, 0x05, 0x27, 0xD8, 0xFA, 0x05,
+       0xE7, 0x07, 0x0E, 0x06, 0xFC, 0x05, 0xE7, 0x07,
+       0x4E, 0x06, 0x00, 0x06, 0xE7, 0x07, 0x40, 0x00,
+       0x02, 0x06, 0x9F, 0xAF, 0x66, 0x05, 0x9F, 0xAF,
+       0xC6, 0x00, 0x97, 0xCF, 0xC1, 0x0B, 0xE2, 0x05,
+       0x41, 0xD0, 0x01, 0xD2, 0xC1, 0x17, 0x23, 0x00,
+       0x9F, 0xAF, 0xDC, 0x04, 0xC0, 0x07, 0x04, 0x00,
+       0xC1, 0x0B, 0xE3, 0x05, 0x9F, 0xAF, 0x28, 0x05,
+       0xC0, 0x07, 0x06, 0x00, 0xC1, 0x09, 0xE6, 0x05,
+       0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x07, 0x00,
+       0xC1, 0x09, 0xE6, 0x05, 0xC1, 0xD1, 0x9F, 0xAF,
+       0x28, 0x05, 0xC0, 0x07, 0x0B, 0x00, 0xC1, 0x09,
+       0xE8, 0x05, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07,
+       0x0C, 0x00, 0xC1, 0x09, 0xE8, 0x05, 0xC1, 0xD1,
+       0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x0D, 0x00,
+       0xC1, 0x07, 0x09, 0x00, 0x9F, 0xAF, 0x28, 0x05,
+       0xC0, 0x07, 0x03, 0x00, 0xC1, 0x07, 0x32, 0x00,
+       0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x0F, 0x00,
+       0xC1, 0x07, 0x00, 0x00, 0x9F, 0xAF, 0x28, 0x05,
+       0x97, 0xCF, 0xE7, 0x67, 0xFF, 0xD9, 0x24, 0xC0,
+       0xC8, 0x07, 0x0A, 0x00, 0x40, 0x00, 0xC0, 0x67,
+       0x00, 0x02, 0x27, 0x80, 0x24, 0xC0, 0xE7, 0x87,
+       0x00, 0x04, 0x24, 0xC0, 0xE7, 0x67, 0xFF, 0xF9,
+       0x24, 0xC0, 0x01, 0xD2, 0x08, 0xDA, 0x72, 0xC1,
+       0xE7, 0x87, 0x00, 0x20, 0x24, 0xC0, 0x97, 0xCF,
+       0x27, 0x00, 0x1E, 0xC0, 0xE7, 0x87, 0xFF, 0x00,
+       0x22, 0xC0, 0xE7, 0x67, 0x7F, 0xFF, 0x24, 0xC0,
+       0xE7, 0x87, 0x80, 0x00, 0x24, 0xC0, 0xE7, 0x87,
+       0x80, 0x00, 0x24, 0xC0, 0x97, 0xCF, 0x9F, 0xAF,
+       0x0A, 0x05, 0x67, 0x00, 0x1E, 0xC0, 0xE7, 0x67,
+       0xBF, 0xFF, 0x24, 0xC0, 0xE7, 0x87, 0x40, 0x00,
+       0x24, 0xC0, 0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0,
+       0x97, 0xCF, 0x9F, 0xAF, 0x0A, 0x05, 0xE7, 0x67,
+       0x00, 0xFF, 0x22, 0xC0, 0xE7, 0x67, 0xFF, 0xFE,
+       0x24, 0xC0, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0,
+       0xC1, 0x09, 0x20, 0xC0, 0xE7, 0x87, 0x00, 0x01,
+       0x24, 0xC0, 0x97, 0xCF, 0xC0, 0x07, 0x40, 0x00,
+       0xC8, 0x09, 0xFC, 0x05, 0xE7, 0x67, 0x00, 0xFF,
+       0x22, 0xC0, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0,
+       0xE7, 0x67, 0xBF, 0xFF, 0x24, 0xC0, 0xE7, 0x67,
+       0xBF, 0xFF, 0x24, 0xC0, 0x00, 0xDA, 0xE8, 0x09,
+       0x20, 0xC0, 0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0,
+       0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0, 0x00, 0xDA,
+       0xE8, 0x09, 0x20, 0xC0, 0x6D, 0xC1, 0xE7, 0x87,
+       0x00, 0x01, 0x24, 0xC0, 0x97, 0xCF, 0xE7, 0x07,
+       0x32, 0x00, 0x12, 0xC0, 0xE7, 0x77, 0x00, 0x80,
+       0x12, 0xC0, 0x7C, 0xC0, 0x97, 0xCF, 0xE7, 0x07,
+       0x20, 0x4E, 0x12, 0xC0, 0xE7, 0x77, 0x00, 0x80,
+       0x12, 0xC0, 0x7C, 0xC0, 0x97, 0xCF, 0x09, 0x02,
+       0x19, 0x00, 0x01, 0x01, 0x00, 0x80, 0x96, 0x09,
+       0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+       0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static unsigned char setup5[] = {
+       0xB6, 0xC3, 0x2F, 0x01, 0x03, 0x64, 0x0E, 0x00,
+       0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00,
+       0x4A, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x92, 0x00,
+       0x9A, 0x00, 0xA0, 0x00, 0xB2, 0x00, 0xB8, 0x00,
+       0xBE, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00,
+       0xDC, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xE0, 0x00,
+       0xE8, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xEC, 0x00,
+       0xF2, 0x00, 0xF8, 0x00, 0x02, 0x01, 0x0A, 0x01,
+       0x0E, 0x01, 0x12, 0x01, 0x1E, 0x01, 0x22, 0x01,
+       0x28, 0x01, 0x2C, 0x01, 0x32, 0x01, 0x36, 0x01,
+       0x44, 0x01, 0x50, 0x01, 0x5E, 0x01, 0x72, 0x01,
+       0x76, 0x01, 0x7A, 0x01, 0x80, 0x01, 0x88, 0x01,
+       0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA0, 0x01,
+       0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB4, 0x01,
+       0xBA, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xF6, 0x01,
+       0xFA, 0x01, 0x02, 0x02, 0x34, 0x02, 0x3C, 0x02,
+       0x44, 0x02, 0x4A, 0x02, 0x50, 0x02, 0x56, 0x02,
+       0x74, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02,
+       0x8A, 0x02, 0x88, 0x02, 0x90, 0x02, 0x8E, 0x02,
+       0x94, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02,
+       0xB4, 0x02, 0xBA, 0x02, 0xB8, 0x02, 0xC0, 0x02,
+       0xBE, 0x02, 0xC4, 0x02, 0xD0, 0x02, 0xD4, 0x02,
+       0xE0, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF8, 0x02,
+       0xFC, 0x02, 0x06, 0x03, 0x1E, 0x03, 0x24, 0x03,
+       0x28, 0x03, 0x30, 0x03, 0x2E, 0x03, 0x3C, 0x03,
+       0x4A, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x58, 0x03,
+       0x5E, 0x03, 0x66, 0x03, 0x6E, 0x03, 0x7A, 0x03,
+       0x86, 0x03, 0x8E, 0x03, 0x96, 0x03, 0xB2, 0x03,
+       0xB8, 0x03, 0xC6, 0x03, 0xCC, 0x03, 0xD4, 0x03,
+       0xDA, 0x03, 0xE8, 0x03, 0xF4, 0x03, 0xFC, 0x03,
+       0x04, 0x04, 0x20, 0x04, 0x2A, 0x04, 0x32, 0x04,
+       0x36, 0x04, 0x3E, 0x04, 0x44, 0x04, 0x42, 0x04,
+       0x48, 0x04, 0x4E, 0x04, 0x4C, 0x04, 0x54, 0x04,
+       0x52, 0x04, 0x5A, 0x04, 0x5E, 0x04, 0x62, 0x04,
+       0x68, 0x04, 0x74, 0x04, 0x7C, 0x04, 0x80, 0x04,
+       0x88, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9A, 0x04,
+       0xA2, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB4, 0x04,
+       0xC0, 0x04, 0xCC, 0x04, 0xD8, 0x04, 0x2A, 0x05,
+       0x46, 0x05, 0x6C, 0x05, 0x00, 0x00
+};
+
+#endif
 /* rvmalloc / rvfree copied from usbvideo.c
  *
  * Not sure why these are not yet non-statics which I can reference through
@@ -188,6 +470,22 @@ static int
 static int
 initialize_camera(struct vicam_camera *cam)
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+       const struct {
+               u8 *data;
+               u32 size;
+       } firmware[] = {
+               { .data = setup1, .size = sizeof(setup1) },
+               { .data = setup2, .size = sizeof(setup2) },
+               { .data = setup3, .size = sizeof(setup3) },
+               { .data = setup4, .size = sizeof(setup4) },
+               { .data = setup5, .size = sizeof(setup5) },
+               { .data = setup3, .size = sizeof(setup3) },
+               { .data = NULL, .size = 0 }
+       };
+
+       int err, i;
+#else
        int err;
        const struct ihex_binrec *rec;
        const struct firmware *fw;
@@ -198,18 +496,30 @@ initialize_camera(struct vicam_camera *c
                       err);
                return err;
        }
-
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+       for (i = 0, err = 0; firmware[i].data && !err; i++) {
+               memcpy(cam->cntrlbuf, firmware[i].data, firmware[i].size);
+#else
        for (rec = (void *)fw->data; rec; rec = ihex_next_binrec(rec)) {
                memcpy(cam->cntrlbuf, rec->data, be16_to_cpu(rec->len));
+#endif
 
                err = send_control_msg(cam, 0xff, 0, 0,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+                                      cam->cntrlbuf, firmware[i].size);
+#else
                                       cam->cntrlbuf, be16_to_cpu(rec->len));
                if (err)
                        break;
-       }
-
+#endif
+       }
+
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
        release_firmware(fw);
 
+#endif
        return err;
 }
 
@@ -950,4 +1260,6 @@ MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_LICENSE("GPL");
+#if LINUX_VERSION_CODE => KERNEL_VERSION(2,6,27)
 MODULE_FIRMWARE("vicam/firmware.fw");
+#endif


---

Patch is available at: 
http://linuxtv.org/hg/v4l-dvb/rev/1a80655eac0e6ce75a6f2d50657f23b149ef932b

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to