cx25840: treat firmware data as const
authorDavid Woodhouse <dwmw2@infradead.org>
Fri, 23 May 2008 22:58:24 +0000 (23:58 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Thu, 10 Jul 2008 13:26:02 +0000 (14:26 +0100)
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
Acked-by: Tyler Trafford <ttrafford@gmail.com>
Acked-by: Mike Isely <isely@pobox.com>
drivers/media/video/cx25840/cx25840-firmware.c

index 620d295947abd5299ac86337eceb3407e1d3527e..8d489a4b9570696f4633cb71d38f0ceceda513fd 100644 (file)
@@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client, int size)
        return 0;
 }
 
-static int fw_write(struct i2c_client *client, u8 *data, int size)
+static int fw_write(struct i2c_client *client, const u8 *data, int size)
 {
        if (i2c_master_send(client, data, size) < size) {
                v4l_err(client, "firmware load i2c failure\n");
@@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
 {
        struct cx25840_state *state = i2c_get_clientdata(client);
        const struct firmware *fw = NULL;
-       u8 buffer[4], *ptr;
+       u8 buffer[FWSEND];
+       const u8 *ptr;
        int size, retval;
 
        if (state->is_cx23885)
@@ -108,29 +109,23 @@ int cx25840_loadfw(struct i2c_client *client)
 
        buffer[0] = 0x08;
        buffer[1] = 0x02;
-       buffer[2] = fw->data[0];
-       buffer[3] = fw->data[1];
-       retval = fw_write(client, buffer, 4);
 
-       if (retval < 0) {
-               release_firmware(fw);
-               return retval;
-       }
-
-       size = fw->size - 2;
+       size = fw->size;
        ptr = fw->data;
        while (size > 0) {
-               ptr[0] = 0x08;
-               ptr[1] = 0x02;
-               retval = fw_write(client, ptr, min(FWSEND, size + 2));
+               int len = min(FWSEND - 2, size);
+
+               memcpy(buffer + 2, ptr, len);
+
+               retval = fw_write(client, buffer, len + 2);
 
                if (retval < 0) {
                        release_firmware(fw);
                        return retval;
                }
 
-               size -= FWSEND - 2;
-               ptr += FWSEND - 2;
+               size -= len;
+               ptr += len;
        }
 
        end_fw_load(client);