]> err.no Git - linux-2.6/commitdiff
V4L/DVB (3825): Remove broken 'fast firmware load' from cx25840.
authorHans Verkuil <hverkuil@xs4all.nl>
Sun, 23 Apr 2006 08:54:56 +0000 (05:54 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 12 May 2006 22:55:12 +0000 (19:55 -0300)
The fast firmware load hack in cx25840 uses private data. In fact, it
breaks pvrusb2 and doesn't work at all with ivtv. It is a unsafe
implementation and so it is removed.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/cx25840/cx25840-firmware.c

index f59ced181c553a074da086ee4c630903c1d9879a..1958d4016ea15c4bb5b9e7faa59377fe80d9a4f6 100644 (file)
 
 #define FWDEV(x) &((x)->adapter->dev)
 
-static int fastfw = 1;
 static char *firmware = FWFILE;
 
-module_param(fastfw, bool, 0444);
 module_param(firmware, charp, 0444);
 
-MODULE_PARM_DESC(fastfw, "Load firmware fast [0=100MHz 1=333MHz (default)]");
 MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]");
 
-static void set_i2c_delay(struct i2c_client *client, int delay)
-{
-       struct i2c_algo_bit_data *algod = client->adapter->algo_data;
-
-       /* We aren't guaranteed to be using algo_bit,
-        * so avoid the null pointer dereference
-        * and disable the 'fast firmware load' */
-       if (algod) {
-               algod->udelay = delay;
-       } else {
-               fastfw = 0;
-       }
-}
-
 static void start_fw_load(struct i2c_client *client)
 {
        /* DL_ADDR_LB=0 DL_ADDR_HB=0 */
@@ -71,16 +54,10 @@ static void start_fw_load(struct i2c_client *client)
        cx25840_write(client, 0x803, 0x0b);
        /* AUTO_INC_DIS=1 */
        cx25840_write(client, 0x000, 0x20);
-
-       if (fastfw)
-               set_i2c_delay(client, 3);
 }
 
 static void end_fw_load(struct i2c_client *client)
 {
-       if (fastfw)
-               set_i2c_delay(client, 10);
-
        /* AUTO_INC_DIS=0 */
        cx25840_write(client, 0x000, 0x00);
        /* DL_ENABLE=0 */
@@ -107,30 +84,8 @@ static int fw_write(struct i2c_client *client, u8 * data, int size)
        int sent;
 
        if ((sent = i2c_master_send(client, data, size)) < size) {
-
-               if (fastfw) {
-                       v4l_err(client, "333MHz i2c firmware load failed\n");
-                       fastfw = 0;
-                       set_i2c_delay(client, 10);
-
-                       if (sent > 2) {
-                               u16 dl_addr = cx25840_read(client, 0x801) << 8;
-                               dl_addr |= cx25840_read(client, 0x800);
-                               dl_addr -= sent - 2;
-                               cx25840_write(client, 0x801, dl_addr >> 8);
-                               cx25840_write(client, 0x800, dl_addr & 0xff);
-                       }
-
-                       if (i2c_master_send(client, data, size) < size) {
-                               v4l_err(client, "100MHz i2c firmware load failed\n");
-                               return -ENOSYS;
-                       }
-
-               } else {
-                       v4l_err(client, "firmware load i2c failure\n");
-                       return -ENOSYS;
-               }
-
+               v4l_err(client, "firmware load i2c failure\n");
+               return -ENOSYS;
        }
 
        return 0;