I noticed the kernel developers made some new changes to i2c which affects saa7146 (and some other drivers) in 2.6.11-bk1. Included is a patch for current dvb-kernel if you want to build the latest 2.6 kernel snapshot. Best Regards, -------------- next part -------------- --- dvb-kernel/linux/include/media/saa7146.h.orig 2005-03-05 13:40:47.000000000 -0800 +++ dvb-kernel/linux/include/media/saa7146.h 2005-03-05 13:41:31.000000000 -0800 @@ -169,7 +169,7 @@ /* from saa7146_i2c.c */ int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate); -int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg msgs[], int num, int retries); +int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg *msgs, int num, int retries); /* from saa7146_core.c */ extern struct list_head saa7146_devices; --- dvb-kernel/linux/drivers/media/common/saa7146_video.c.orig 2005-03-05 13:36:37.000000000 -0800 +++ dvb-kernel/linux/drivers/media/common/saa7146_video.c 2005-03-05 13:38:45.000000000 -0800 @@ -889,7 +889,7 @@ strcpy(cap->driver, "saa7146 v4l2"); strlcpy(cap->card, dev->ext->name, sizeof(cap->card)); - sprintf(cap->bus_info,"PCI:%s",dev->pci->slot_name); + sprintf(cap->bus_info,"PCI:%s", pci_name(dev->pci)); cap->version = SAA7146_VERSION_CODE; cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | --- dvb-kernel/linux/drivers/media/common/saa7146_i2c.c.orig 2005-03-02 21:15:05.000000000 -0800 +++ dvb-kernel/linux/drivers/media/common/saa7146_i2c.c 2005-03-05 13:43:00.000000000 -0800 @@ -25,7 +25,7 @@ sent through the saa7146. have a look at the specifications p. 122 ff to understand this. it returns the number of u32s to send, or -1 in case of an error. */ -static int saa7146_i2c_msg_prepare(const struct i2c_msg m[], int num, u32 *op) +static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) { int h1, h2; int i, j, addr; @@ -89,7 +89,7 @@ which bytes were read through the adapter and write them back to the corresponding i2c-message. but instead, we simply write back all bytes. fixme: this could be improved. */ -static int saa7146_i2c_msg_cleanup(const struct i2c_msg m[], int num, u32 *op) +static int saa7146_i2c_msg_cleanup(const struct i2c_msg *m, int num, u32 *op) { int i, j; int op_count = 0; @@ -272,7 +272,7 @@ return 0; } -int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg msgs[], int num, int retries) +int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, int num, int retries) { int i = 0, count = 0; u32* buffer = dev->d_i2c.cpu_addr; @@ -372,7 +372,7 @@ } /* utility functions */ -static int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg msg[], int num) +static int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num) { struct saa7146_dev* dev = i2c_get_adapdata(adapter); -------------- next part -------------- --- dvb-kernel/linux/drivers/media/dvb/b2c2/skystar2.c.orig 2005-02-11 17:57:54.000000000 -0800 +++ dvb-kernel/linux/drivers/media/dvb/b2c2/skystar2.c 2005-03-05 16:09:02.000000000 -0800 @@ -298,7 +298,7 @@ return buf - start; } -static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg msgs[], int num) +static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msgs, int num) { struct adapter *tmp = i2c_get_adapdata(adapter); int i, ret = 0; --- dvb-kernel/linux/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c.orig 2005-03-05 14:00:35.000000000 -0800 +++ dvb-kernel/linux/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c 2005-03-05 16:09:02.000000000 -0800 @@ -38,7 +38,7 @@ /* * I2C master xfer function */ -static int dibusb_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg msg[],int num) +static int dibusb_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg *msg,int num) { struct usb_dibusb *dib = i2c_get_adapdata(adap); int i; --- dvb-kernel/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c.orig 2005-02-19 01:16:49.000000000 -0800 +++ dvb-kernel/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c 2005-03-05 16:09:02.000000000 -0800 @@ -239,7 +239,7 @@ return rcv_len; } -static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg msg[], int num) +static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num) { struct ttusb *ttusb = i2c_get_adapdata(adapter); int i = 0;