X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmedia%2Fvideo%2Fsaa7111.c;fp=drivers%2Fmedia%2Fvideo%2Fsaa7111.c;h=8c06592b37ff125a0f50fba400a01e64115f7e26;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=686fd4746205385c23c8b6b53731e37df5de7287;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/drivers/media/video/saa7111.c b/drivers/media/video/saa7111.c index 686fd4746..8c06592b3 100644 --- a/drivers/media/video/saa7111.c +++ b/drivers/media/video/saa7111.c @@ -1,4 +1,4 @@ -/* +/* * saa7111 - Philips SAA7111A video decoder driver version 0.0.3 * * Copyright (C) 1998 Dave Perks @@ -52,6 +52,7 @@ MODULE_AUTHOR("Dave Perks"); MODULE_LICENSE("GPL"); #include +#include #define I2C_NAME(s) (s)->name @@ -69,10 +70,8 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)"); /* ----------------------------------------------------------------------- */ -#define SAA7111_NR_REG 0x18 - struct saa7111 { - unsigned char reg[SAA7111_NR_REG]; + unsigned char reg[32]; int norm; int input; @@ -111,21 +110,24 @@ saa7111_write_block (struct i2c_client *client, if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { /* do raw I2C, not smbus compatible */ struct saa7111 *decoder = i2c_get_clientdata(client); + struct i2c_msg msg; u8 block_data[32]; - int block_len; + msg.addr = client->addr; + msg.flags = 0; while (len >= 2) { - block_len = 0; - block_data[block_len++] = reg = data[0]; + msg.buf = (char *) block_data; + msg.len = 0; + block_data[msg.len++] = reg = data[0]; do { - block_data[block_len++] = + block_data[msg.len++] = decoder->reg[reg++] = data[1]; len -= 2; data += 2; } while (len >= 2 && data[0] == reg && - block_len < 32); - if ((ret = i2c_master_send(client, block_data, - block_len)) < 0) + msg.len < 32); + if ((ret = i2c_transfer(client->adapter, + &msg, 1)) < 0) break; } } else { @@ -208,7 +210,6 @@ saa7111_command (struct i2c_client *client, switch (cmd) { case 0: - break; case DECODER_INIT: { struct video_decoder_init *init = arg; @@ -226,11 +227,11 @@ saa7111_command (struct i2c_client *client, { int i; - for (i = 0; i < SAA7111_NR_REG; i += 16) { + for (i = 0; i < 32; i += 16) { int j; printk(KERN_DEBUG "%s: %03x", I2C_NAME(client), i); - for (j = 0; j < 16 && i + j < SAA7111_NR_REG; ++j) { + for (j = 0; j < 16; ++j) { printk(" %02x", saa7111_read(client, i + j)); } @@ -482,7 +483,7 @@ saa7111_command (struct i2c_client *client, static unsigned short normal_i2c[] = { I2C_SAA7111 >> 1, I2C_CLIENT_END }; static unsigned short ignore = I2C_CLIENT_END; - + static struct i2c_client_address_data addr_data = { .normal_i2c = normal_i2c, .probe = &ignore,