[i2c] [patch 2.6.21-rc3-git +i2c 2/4] remove i2c_client.adapter

David Brownell david-b at pacbell.net
Mon Mar 12 19:37:36 CET 2007


Remove some more (error prone) duplication in the i2c stack:

	i2c_client.adapter == to_i2c_adapter(i2c_client.dev.parent)

The i2c_client.adapter field should be removed, since the driver model
field is more fundamental.  This means that all legacy I2C drivers need
to change the line which previously initialized that field ... making
this a large patch.

In some cases, other accesses also need to change.  Some drivers made
direct calls to the I2C messaging layer using client->adapter (which
were easy to fix).  The windfarm driver is more problematic, since it
must stop using "adapter is null" as a proxy for missing internal state.

Signed-off-by: David Brownell <dbrownell at users.sourceforge.net>

---
NOTE: Not everything here has been test-built.  And as with the patch
to remove the "driver" field, some parts of this (not related to init
of that field) could be merged earlier, in a smaller patch.  Also, I
suspect an inline function to get the adapter of an i2c_client would
be a useful addition to the API.

 Documentation/i2c/writing-clients              |    2 
 arch/arm/mach-pxa/akita-ioexp.c                |    2 
 drivers/hwmon/adm1021.c                        |    2 
 drivers/hwmon/adm1025.c                        |    2 
 drivers/hwmon/adm1026.c                        |    2 
 drivers/hwmon/adm1029.c                        |    2 
 drivers/hwmon/adm1031.c                        |    2 
 drivers/hwmon/adm9240.c                        |    2 
 drivers/hwmon/asb100.c                         |    4 -
 drivers/hwmon/atxp1.c                          |    2 
 drivers/hwmon/ds1621.c                         |    2 
 drivers/hwmon/fscher.c                         |    2 
 drivers/hwmon/fscpos.c                         |    2 
 drivers/hwmon/gl518sm.c                        |    2 
 drivers/hwmon/gl520sm.c                        |    2 
 drivers/hwmon/it87.c                           |    2 
 drivers/hwmon/lm63.c                           |    2 
 drivers/hwmon/lm75.c                           |    2 
 drivers/hwmon/lm77.c                           |    2 
 drivers/hwmon/lm78.c                           |    2 
 drivers/hwmon/lm80.c                           |    2 
 drivers/hwmon/lm83.c                           |    2 
 drivers/hwmon/lm85.c                           |    9 +--
 drivers/hwmon/lm87.c                           |    2 
 drivers/hwmon/lm90.c                           |    4 -
 drivers/hwmon/lm92.c                           |    2 
 drivers/hwmon/max1619.c                        |    2 
 drivers/hwmon/pc87360.c                        |    2 
 drivers/hwmon/sis5595.c                        |    2 
 drivers/hwmon/smsc47b397.c                     |    2 
 drivers/hwmon/smsc47m1.c                       |    2 
 drivers/hwmon/smsc47m192.c                     |    2 
 drivers/hwmon/via686a.c                        |    2 
 drivers/hwmon/vt8231.c                         |    2 
 drivers/hwmon/w83627ehf.c                      |    2 
 drivers/hwmon/w83627hf.c                       |    2 
 drivers/hwmon/w83781d.c                        |    4 -
 drivers/hwmon/w83791d.c                        |    4 -
 drivers/hwmon/w83792d.c                        |    4 -
 drivers/hwmon/w83793.c                         |    4 -
 drivers/hwmon/w83l785ts.c                      |    2 
 drivers/i2c/chips/ds1337.c                     |   10 +--
 drivers/i2c/chips/ds1374.c                     |    2 
 drivers/i2c/chips/eeprom.c                     |    5 +
 drivers/i2c/chips/isp1301_omap.c               |    2 
 drivers/i2c/chips/m41t00.c                     |    2 
 drivers/i2c/chips/max6875.c                    |    6 +-
 drivers/i2c/chips/pca9539.c                    |    2 
 drivers/i2c/chips/pcf8574.c                    |    2 
 drivers/i2c/chips/pcf8591.c                    |    2 
 drivers/i2c/chips/tps65010.c                   |    2 
 drivers/i2c/i2c-core.c                         |   69 ++++++++++++++++---------
 drivers/i2c/i2c-dev.c                          |   26 ++++-----
 drivers/macintosh/therm_adt746x.c              |    2 
 drivers/macintosh/therm_pm72.c                 |    2 
 drivers/macintosh/therm_windtunnel.c           |    2 
 drivers/macintosh/windfarm_lm75_sensor.c       |    8 --
 drivers/macintosh/windfarm_max6690_sensor.c    |    6 --
 drivers/macintosh/windfarm_smu_sat.c           |    6 --
 drivers/media/video/adv7170.c                  |    2 
 drivers/media/video/bt819.c                    |    2 
 drivers/media/video/bt856.c                    |    2 
 drivers/media/video/bt866.c                    |    2 
 drivers/media/video/bt8xx/bt832.c              |    2 
 drivers/media/video/cs53l32a.c                 |    2 
 drivers/media/video/cx25840/cx25840-core.c     |    2 
 drivers/media/video/em28xx/em28xx-i2c.c        |    8 +-
 drivers/media/video/indycam.c                  |    2 
 drivers/media/video/ir-kbd-i2c.c               |    4 -
 drivers/media/video/ks0127.c                   |    2 
 drivers/media/video/msp3400-driver.c           |    2 
 drivers/media/video/ov7670.c                   |    2 
 drivers/media/video/ovcamchip/ov6x20.c         |    7 +-
 drivers/media/video/ovcamchip/ov6x30.c         |    6 +-
 drivers/media/video/ovcamchip/ovcamchip_core.c |    2 
 drivers/media/video/pvrusb2/pvrusb2-eeprom.c   |    2 
 drivers/media/video/pvrusb2/pvrusb2-i2c-core.c |    6 +-
 drivers/media/video/saa5246a.c                 |    2 
 drivers/media/video/saa5249.c                  |    2 
 drivers/media/video/saa6588.c                  |    3 -
 drivers/media/video/saa7110.c                  |    2 
 drivers/media/video/saa7111.c                  |    2 
 drivers/media/video/saa7114.c                  |    2 
 drivers/media/video/saa7115.c                  |    2 
 drivers/media/video/saa711x.c                  |    2 
 drivers/media/video/saa7127.c                  |    2 
 drivers/media/video/saa7134/saa6752hs.c        |    2 
 drivers/media/video/saa7185.c                  |    2 
 drivers/media/video/saa7191.c                  |    2 
 drivers/media/video/tda7432.c                  |    2 
 drivers/media/video/tda8290.c                  |   51 +++++++++---------
 drivers/media/video/tda9840.c                  |    2 
 drivers/media/video/tda9875.c                  |    2 
 drivers/media/video/tda9887.c                  |    6 +-
 drivers/media/video/tea6415c.c                 |    2 
 drivers/media/video/tea6420.c                  |    2 
 drivers/media/video/tlv320aic23b.c             |    2 
 drivers/media/video/tuner-3036.c               |    2 
 drivers/media/video/tuner-core.c               |    5 +
 drivers/media/video/tuner-simple.c             |    6 +-
 drivers/media/video/tvaudio.c                  |    2 
 drivers/media/video/tveeprom.c                 |   10 ++-
 drivers/media/video/tvp5150.c                  |   10 ++-
 drivers/media/video/upd64031a.c                |    2 
 drivers/media/video/upd64083.c                 |    2 
 drivers/media/video/vpx3220.c                  |    2 
 drivers/media/video/w9968cf.c                  |    6 +-
 drivers/media/video/wm8739.c                   |    2 
 drivers/media/video/wm8775.c                   |    2 
 drivers/rtc/rtc-ds1672.c                       |    8 +-
 drivers/rtc/rtc-isl1208.c                      |    6 +-
 drivers/rtc/rtc-pcf8563.c                      |    7 +-
 drivers/rtc/rtc-pcf8583.c                      |   12 ++--
 drivers/rtc/rtc-rs5c372.c                      |    4 -
 drivers/rtc/rtc-x1205.c                        |   20 ++++---
 drivers/usb/host/ohci-pnx4008.c                |    2 
 drivers/video/matrox/matroxfb_maven.c          |    8 +-
 drivers/w1/masters/ds2482.c                    |    2 
 include/linux/i2c-isa.h                        |    2 
 include/linux/i2c.h                            |    1 
 include/media/tuner.h                          |    9 ++-
 include/media/v4l2-common.h                    |    3 -
 sound/aoa/codecs/snd-aoa-codec-onyx.c          |    2 
 sound/oss/dmasound/dac3550a.c                  |    2 
 sound/oss/dmasound/tas_common.c                |    2 
 sound/ppc/keywest.c                            |    2 
 sound/soc/codecs/wm8731.c                      |    2 
 sound/soc/codecs/wm8750.c                      |    2 
 128 files changed, 306 insertions(+), 249 deletions(-)

Index: at91/include/linux/i2c.h
===================================================================
--- at91.orig/include/linux/i2c.h	2007-03-12 10:54:06.000000000 -0700
+++ at91/include/linux/i2c.h	2007-03-12 11:06:29.000000000 -0700
@@ -167,7 +167,6 @@ struct i2c_client {
 					/* addresses are stored in the	*/
 					/* _LOWER_ 7 bits		*/
 	char name[I2C_NAME_SIZE];
-	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
 	int usage_count;		/* How many accesses currently  */
 					/* to the client		*/
 	struct device dev;		/* the device structure		*/
Index: at91/Documentation/i2c/writing-clients
===================================================================
--- at91.orig/Documentation/i2c/writing-clients	2007-03-12 10:54:06.000000000 -0700
+++ at91/Documentation/i2c/writing-clients	2007-03-12 11:06:29.000000000 -0700
@@ -389,7 +389,7 @@ For now, you can ignore the `flags' para
     i2c_set_clientdata(new_client, data);
 
     new_client->addr = address;
-    new_client->adapter = adapter;
+    new_client->dev.parent = &adapter->dev;
     new_client->dev.driver = &foo_driver.driver;
     new_client->flags = 0;
 
Index: at91/drivers/i2c/i2c-core.c
===================================================================
--- at91.orig/drivers/i2c/i2c-core.c	2007-03-12 10:56:35.000000000 -0700
+++ at91/drivers/i2c/i2c-core.c	2007-03-12 11:09:05.000000000 -0700
@@ -213,7 +213,7 @@ i2c_new_device(struct i2c_adapter *adap,
 	if (!client)
 		return NULL;
 
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 
 	client->driver_name = info->driver_name;
 	client->dev.platform_data = info->platform_data;
@@ -243,7 +243,7 @@ EXPORT_SYMBOL_GPL(i2c_new_device);
  */
 void i2c_unregister_device(struct i2c_client *client)
 {
-	struct i2c_adapter	*adap = client->adapter;
+	struct i2c_adapter	*adap = to_i2c_adapter(client->dev.parent);
 	struct i2c_driver	*driver = to_i2c_driver(client->dev.driver);
 	int			status;
 
@@ -689,19 +689,22 @@ EXPORT_SYMBOL(i2c_check_addr);
 
 int i2c_attach_client(struct i2c_client *client)
 {
-	struct i2c_adapter *adapter = client->adapter;
+	struct i2c_adapter *adapter;
 	int res = 0;
 
+	if (!client->dev.parent)
+		return -ENOENT;
+
+	adapter = to_i2c_adapter(client->dev.parent);
 	mutex_lock(&adapter->clist_lock);
-	if (__i2c_check_addr(client->adapter, client->addr)) {
+	if (__i2c_check_addr(adapter, client->addr)) {
 		res = -EBUSY;
 		goto out_unlock;
 	}
-	list_add_tail(&client->list,&adapter->clients);
+	list_add_tail(&client->list, &adapter->clients);
 
 	client->usage_count = 0;
 
-	client->dev.parent = &client->adapter->dev;
 	client->dev.bus = &i2c_bus_type;
 	client->dev.release = &i2c_client_release;
 
@@ -736,7 +739,7 @@ EXPORT_SYMBOL(i2c_attach_client);
 
 int i2c_detach_client(struct i2c_client *client)
 {
-	struct i2c_adapter *adapter = client->adapter;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	int res = 0;
 
 	if (client->usage_count > 0) {
@@ -769,10 +772,11 @@ EXPORT_SYMBOL(i2c_detach_client);
 
 static int i2c_inc_use_client(struct i2c_client *client)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 
 	if (!try_module_get(client->dev.driver->owner))
 		return -ENODEV;
-	if (!try_module_get(client->adapter->owner)) {
+	if (!try_module_get(adapter->owner)) {
 		module_put(client->dev.driver->owner);
 		return -ENODEV;
 	}
@@ -782,8 +786,10 @@ static int i2c_inc_use_client(struct i2c
 
 static void i2c_dec_use_client(struct i2c_client *client)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
 	module_put(client->dev.driver->owner);
-	module_put(client->adapter->owner);
+	module_put(adapter->owner);
 }
 
 int i2c_use_client(struct i2c_client *client)
@@ -892,7 +898,7 @@ EXPORT_SYMBOL(i2c_transfer);
 int i2c_master_send(struct i2c_client *client,const char *buf ,int count)
 {
 	int ret;
-	struct i2c_adapter *adap=client->adapter;
+	struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent);
 	struct i2c_msg msg;
 
 	msg.addr = client->addr;
@@ -910,7 +916,7 @@ EXPORT_SYMBOL(i2c_master_send);
 
 int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
 {
-	struct i2c_adapter *adap=client->adapter;
+	struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent);
 	struct i2c_msg msg;
 	int ret;
 
@@ -932,9 +938,9 @@ int i2c_control(struct i2c_client *clien
 	unsigned int cmd, unsigned long arg)
 {
 	int ret = 0;
-	struct i2c_adapter *adap = client->adapter;
+	struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent);
 
-	dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
+	dev_dbg(&adap->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
 	switch (cmd) {
 		case I2C_RETRIES:
 			adap->retries = arg;
@@ -1176,7 +1182,9 @@ static int i2c_smbus_check_pec(u8 cpec, 
 
 s32 i2c_smbus_write_quick(struct i2c_client *client, u8 value)
 {
-	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                      value,0,I2C_SMBUS_QUICK,NULL);
 }
 EXPORT_SYMBOL(i2c_smbus_write_quick);
@@ -1184,7 +1192,9 @@ EXPORT_SYMBOL(i2c_smbus_write_quick);
 s32 i2c_smbus_read_byte(struct i2c_client *client)
 {
 	union i2c_smbus_data data;
-	if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
+	if (i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                   I2C_SMBUS_READ,0,I2C_SMBUS_BYTE, &data))
 		return -1;
 	else
@@ -1194,7 +1204,9 @@ EXPORT_SYMBOL(i2c_smbus_read_byte);
 
 s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value)
 {
-	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                      I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
 }
 EXPORT_SYMBOL(i2c_smbus_write_byte);
@@ -1202,7 +1214,9 @@ EXPORT_SYMBOL(i2c_smbus_write_byte);
 s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command)
 {
 	union i2c_smbus_data data;
-	if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
+	if (i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                   I2C_SMBUS_READ,command, I2C_SMBUS_BYTE_DATA,&data))
 		return -1;
 	else
@@ -1213,8 +1227,10 @@ EXPORT_SYMBOL(i2c_smbus_read_byte_data);
 s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value)
 {
 	union i2c_smbus_data data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
 	data.byte = value;
-	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                      I2C_SMBUS_WRITE,command,
 	                      I2C_SMBUS_BYTE_DATA,&data);
 }
@@ -1223,7 +1239,9 @@ EXPORT_SYMBOL(i2c_smbus_write_byte_data)
 s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command)
 {
 	union i2c_smbus_data data;
-	if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
+	if (i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                   I2C_SMBUS_READ,command, I2C_SMBUS_WORD_DATA, &data))
 		return -1;
 	else
@@ -1234,8 +1252,10 @@ EXPORT_SYMBOL(i2c_smbus_read_word_data);
 s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value)
 {
 	union i2c_smbus_data data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+
 	data.word = value;
-	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                      I2C_SMBUS_WRITE,command,
 	                      I2C_SMBUS_WORD_DATA,&data);
 }
@@ -1244,13 +1264,14 @@ EXPORT_SYMBOL(i2c_smbus_write_word_data)
 s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
 			       u8 length, const u8 *values)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	union i2c_smbus_data data;
 
 	if (length > I2C_SMBUS_BLOCK_MAX)
 		length = I2C_SMBUS_BLOCK_MAX;
 	data.block[0] = length;
 	memcpy(&data.block[1], values, length);
-	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 			      I2C_SMBUS_WRITE,command,
 			      I2C_SMBUS_BLOCK_DATA,&data);
 }
@@ -1259,9 +1280,10 @@ EXPORT_SYMBOL(i2c_smbus_write_block_data
 /* Returns the number of read bytes */
 s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	union i2c_smbus_data data;
 
-	if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	if (i2c_smbus_xfer(adapter, client->addr, client->flags,
 	                      I2C_SMBUS_READ,command,
 	                      I2C_SMBUS_I2C_BLOCK_DATA,&data))
 		return -1;
@@ -1274,13 +1296,14 @@ EXPORT_SYMBOL(i2c_smbus_read_i2c_block_d
 s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
 				   u8 length, const u8 *values)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	union i2c_smbus_data data;
 
 	if (length > I2C_SMBUS_BLOCK_MAX)
 		length = I2C_SMBUS_BLOCK_MAX;
 	data.block[0] = length;
 	memcpy(data.block + 1, values, length);
-	return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
+	return i2c_smbus_xfer(adapter, client->addr, client->flags,
 			      I2C_SMBUS_WRITE, command,
 			      I2C_SMBUS_I2C_BLOCK_DATA, &data);
 }
Index: at91/include/linux/i2c-isa.h
===================================================================
--- at91.orig/include/linux/i2c-isa.h	2007-03-08 12:13:07.000000000 -0800
+++ at91/include/linux/i2c-isa.h	2007-03-12 11:06:29.000000000 -0700
@@ -31,6 +31,6 @@ extern int i2c_isa_del_driver(struct i2c
 #define i2c_is_isa_adapter(adapptr) \
         ((adapptr)->id == I2C_HW_ISA)
 #define i2c_is_isa_client(clientptr) \
-        i2c_is_isa_adapter((clientptr)->adapter)
+        i2c_is_isa_adapter(to_i2c_adapter((clientptr)->dev.parent))
 
 #endif /* _LINUX_I2C_ISA_H */
Index: at91/drivers/i2c/i2c-dev.c
===================================================================
--- at91.orig/drivers/i2c/i2c-dev.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/i2c-dev.c	2007-03-12 11:06:29.000000000 -0700
@@ -159,6 +159,7 @@ static int i2cdev_ioctl(struct inode *in
 		unsigned int cmd, unsigned long arg)
 {
 	struct i2c_client *client = (struct i2c_client *)file->private_data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	struct i2c_rdwr_ioctl_data rdwr_arg;
 	struct i2c_smbus_ioctl_data data_arg;
 	union i2c_smbus_data temp;
@@ -167,7 +168,7 @@ static int i2cdev_ioctl(struct inode *in
 	int i,datasize,res;
 	unsigned long funcs;
 
-	dev_dbg(&client->adapter->dev, "ioctl, cmd=0x%02x, arg=0x%02lx\n",
+	dev_dbg(&adapter->dev, "ioctl, cmd=0x%02x, arg=0x%02lx\n",
 		cmd, arg);
 
 	switch ( cmd ) {
@@ -176,7 +177,7 @@ static int i2cdev_ioctl(struct inode *in
 		if ((arg > 0x3ff) ||
 		    (((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))
 			return -EINVAL;
-		if ((cmd == I2C_SLAVE) && i2c_check_addr(client->adapter,arg))
+		if ((cmd == I2C_SLAVE) && i2c_check_addr(adapter,arg))
 			return -EBUSY;
 		client->addr = arg;
 		return 0;
@@ -193,7 +194,7 @@ static int i2cdev_ioctl(struct inode *in
 			client->flags &= ~I2C_CLIENT_PEC;
 		return 0;
 	case I2C_FUNCS:
-		funcs = i2c_get_functionality(client->adapter);
+		funcs = i2c_get_functionality(adapter);
 		return put_user(funcs, (unsigned long __user *)arg);
 
 	case I2C_RDWR:
@@ -255,9 +256,7 @@ static int i2cdev_ioctl(struct inode *in
 			return res;
 		}
 
-		res = i2c_transfer(client->adapter,
-			rdwr_pa,
-			rdwr_arg.nmsgs);
+		res = i2c_transfer(adapter, rdwr_pa, rdwr_arg.nmsgs);
 		while(i-- > 0) {
 			if( res>=0 && (rdwr_pa[i].flags & I2C_M_RD)) {
 				if(copy_to_user(
@@ -286,7 +285,7 @@ static int i2cdev_ioctl(struct inode *in
 		    (data_arg.size != I2C_SMBUS_BLOCK_DATA) &&
 		    (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA) &&
 		    (data_arg.size != I2C_SMBUS_BLOCK_PROC_CALL)) {
-			dev_dbg(&client->adapter->dev,
+			dev_dbg(&adapter->dev,
 				"size out of range (%x) in ioctl I2C_SMBUS.\n",
 				data_arg.size);
 			return -EINVAL;
@@ -295,7 +294,7 @@ static int i2cdev_ioctl(struct inode *in
 		   so the check is valid if size==I2C_SMBUS_QUICK too. */
 		if ((data_arg.read_write != I2C_SMBUS_READ) &&
 		    (data_arg.read_write != I2C_SMBUS_WRITE)) {
-			dev_dbg(&client->adapter->dev,
+			dev_dbg(&adapter->dev,
 				"read_write out of range (%x) in ioctl I2C_SMBUS.\n",
 				data_arg.read_write);
 			return -EINVAL;
@@ -307,14 +306,14 @@ static int i2cdev_ioctl(struct inode *in
 		    ((data_arg.size == I2C_SMBUS_BYTE) &&
 		    (data_arg.read_write == I2C_SMBUS_WRITE)))
 			/* These are special: we do not use data */
-			return i2c_smbus_xfer(client->adapter, client->addr,
+			return i2c_smbus_xfer(adapter, client->addr,
 					      client->flags,
 					      data_arg.read_write,
 					      data_arg.command,
 					      data_arg.size, NULL);
 
 		if (data_arg.data == NULL) {
-			dev_dbg(&client->adapter->dev,
+			dev_dbg(&adapter->dev,
 				"data is NULL pointer in ioctl I2C_SMBUS.\n");
 			return -EINVAL;
 		}
@@ -334,7 +333,7 @@ static int i2cdev_ioctl(struct inode *in
 			if (copy_from_user(&temp, data_arg.data, datasize))
 				return -EFAULT;
 		}
-		res = i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+		res = i2c_smbus_xfer(adapter,client->addr,client->flags,
 		      data_arg.read_write,
 		      data_arg.command,data_arg.size,&temp);
 		if (! res && ((data_arg.size == I2C_SMBUS_PROC_CALL) ||
@@ -375,7 +374,7 @@ static int i2cdev_open(struct inode *ino
 	client->dev.driver = &i2cdev_driver.driver;
 
 	/* registered with adapter, passed as client to user */
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	file->private_data = client;
 
 	return 0;
@@ -384,8 +383,9 @@ static int i2cdev_open(struct inode *ino
 static int i2cdev_release(struct inode *inode, struct file *file)
 {
 	struct i2c_client *client = file->private_data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 
-	i2c_put_adapter(client->adapter);
+	i2c_put_adapter(adapter);
 	kfree(client);
 	file->private_data = NULL;
 
Index: at91/drivers/i2c/chips/tps65010.c
===================================================================
--- at91.orig/drivers/i2c/chips/tps65010.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/tps65010.c	2007-03-12 11:06:29.000000000 -0700
@@ -511,7 +511,7 @@ tps65010_probe(struct i2c_adapter *bus, 
 	INIT_DELAYED_WORK(&tps->work, tps65010_work);
 	tps->irq = -1;
 	tps->client.addr = address;
-	tps->client.adapter = bus;
+	tps->client.dev.parent = &bus->dev;
 	tps->client.dev.driver = &tps65010_driver.driver;
 	strlcpy(tps->client.name, DRIVER_NAME, I2C_NAME_SIZE);
 
Index: at91/drivers/i2c/chips/ds1337.c
===================================================================
--- at91.orig/drivers/i2c/chips/ds1337.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/ds1337.c	2007-03-12 11:06:29.000000000 -0700
@@ -111,7 +111,7 @@ static int ds1337_get_datetime(struct i2
 	msg[1].len = sizeof(buf);
 	msg[1].buf = &buf[0];
 
-	result = i2c_transfer(client->adapter, msg, 2);
+	result = i2c_transfer(to_i2c_adapter(client->dev.parent), msg, 2);
 
 	dev_dbg(&client->dev, "%s: [%d] %02x %02x %02x %02x %02x %02x %02x\n",
 		__FUNCTION__, result, buf[0], buf[1], buf[2], buf[3],
@@ -179,7 +179,7 @@ static int ds1337_set_datetime(struct i2
 	msg[0].len = sizeof(buf);
 	msg[0].buf = &buf[0];
 
-	result = i2c_transfer(client->adapter, msg, 1);
+	result = i2c_transfer(to_i2c_adapter(client->dev.parent), msg, 1);
 	if (result == 1)
 		return 0;
 
@@ -216,7 +216,7 @@ int ds1337_do_command(int bus, int cmd, 
 
 	list_for_each_safe(walk, tmp, &ds1337_clients) {
 		data = list_entry(walk, struct ds1337_data, list);
-		if (data->client.adapter->nr == bus)
+		if (to_i2c_adapter(data->client.dev.parent)->nr == bus)
 			return ds1337_command(&data->client, cmd, arg);
 	}
 
@@ -255,7 +255,7 @@ static int ds1337_detect(struct i2c_adap
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &ds1337_driver.driver;
 	new_client->flags = 0;
 
@@ -365,7 +365,7 @@ static void ds1337_init_client(struct i2
 		msg[0].len = sizeof(buf);
 		msg[0].buf = &buf[0];
 
-		i2c_transfer(client->adapter, msg, 1);
+		i2c_transfer(to_i2c_adapter(client->dev.parent), msg, 1);
 	} else {
 		/* Running: ensure that device is set in 24-hour mode */
 		s32 val;
Index: at91/drivers/i2c/chips/eeprom.c
===================================================================
--- at91.orig/drivers/i2c/chips/eeprom.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/eeprom.c	2007-03-12 11:06:29.000000000 -0700
@@ -87,7 +87,8 @@ static void eeprom_update_client(struct 
 	    time_after(jiffies, data->last_updated[slice] + 300 * HZ)) {
 		dev_dbg(&client->dev, "Starting eeprom update, slice %u\n", slice);
 
-		if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_I2C_BLOCK)) {
+		if (i2c_check_functionality(to_i2c_adapter(client->dev.parent),
+				I2C_FUNC_SMBUS_READ_I2C_BLOCK)) {
 			for (i = slice << 5; i < (slice + 1) << 5; i += I2C_SMBUS_BLOCK_MAX)
 				if (i2c_smbus_read_i2c_block_data(client, i, data->data + i) != I2C_SMBUS_BLOCK_MAX)
 					goto exit;
@@ -180,7 +181,7 @@ static int eeprom_detect(struct i2c_adap
 	memset(data->data, 0xff, EEPROM_SIZE);
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &eeprom_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/i2c/chips/pcf8574.c
===================================================================
--- at91.orig/drivers/i2c/chips/pcf8574.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/pcf8574.c	2007-03-12 11:06:29.000000000 -0700
@@ -145,7 +145,7 @@ static int pcf8574_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &pcf8574_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/i2c/chips/pca9539.c
===================================================================
--- at91.orig/drivers/i2c/chips/pca9539.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/pca9539.c	2007-03-12 11:06:29.000000000 -0700
@@ -130,7 +130,7 @@ static int pca9539_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &pca9539_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/i2c/chips/pcf8591.c
===================================================================
--- at91.orig/drivers/i2c/chips/pcf8591.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/pcf8591.c	2007-03-12 11:06:29.000000000 -0700
@@ -209,7 +209,7 @@ static int pcf8591_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &pcf8591_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/i2c/chips/m41t00.c
===================================================================
--- at91.orig/drivers/i2c/chips/m41t00.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/m41t00.c	2007-03-12 11:06:29.000000000 -0700
@@ -304,7 +304,7 @@ m41t00_probe(struct i2c_adapter *adap, i
 
 	strlcpy(client->name, m41t00_chip->name, I2C_NAME_SIZE);
 	client->addr = addr;
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->dev.driver = &m41t00_driver.driver;
 
 	if ((rc = i2c_attach_client(client)))
Index: at91/drivers/i2c/chips/ds1374.c
===================================================================
--- at91.orig/drivers/i2c/chips/ds1374.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/ds1374.c	2007-03-12 11:06:29.000000000 -0700
@@ -203,7 +203,7 @@ static int ds1374_probe(struct i2c_adapt
 
 	strncpy(client->name, DS1374_DRV_NAME, I2C_NAME_SIZE);
 	client->addr = addr;
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->dev.driver = &ds1374_driver.driver;
 
 	ds1374_workqueue = create_singlethread_workqueue("ds1374");
Index: at91/drivers/i2c/chips/isp1301_omap.c
===================================================================
--- at91.orig/drivers/i2c/chips/isp1301_omap.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/isp1301_omap.c	2007-03-12 11:06:29.000000000 -0700
@@ -1502,7 +1502,7 @@ static int isp1301_probe(struct i2c_adap
 	isp->irq = -1;
 	isp->client.addr = address;
 	i2c_set_clientdata(&isp->client, isp);
-	isp->client.adapter = bus;
+	isp->client.dev.parent = &bus->dev;
 	isp->client.dev.driver = &isp1301_driver.driver;
 	strlcpy(isp->client.name, DRIVER_NAME, I2C_NAME_SIZE);
 	i2c = &isp->client;
Index: at91/drivers/i2c/chips/max6875.c
===================================================================
--- at91.orig/drivers/i2c/chips/max6875.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/i2c/chips/max6875.c	2007-03-12 11:06:29.000000000 -0700
@@ -102,7 +102,7 @@ static void max6875_update_slice(struct 
 			goto exit_up;
 		}
 
-		if (i2c_check_functionality(client->adapter,
+		if (i2c_check_functionality(to_i2c_adapter(client->dev.parent),
 					    I2C_FUNC_SMBUS_READ_I2C_BLOCK)) {
 			if (i2c_smbus_read_i2c_block_data(client,
 							  MAX6875_CMD_BLK_READ,
@@ -192,7 +192,7 @@ static int max6875_detect(struct i2c_ada
 	real_client = &data->client;
 	i2c_set_clientdata(real_client, data);
 	real_client->addr = address;
-	real_client->adapter = adapter;
+	real_client->dev.parent = &adapter->dev;
 	real_client->dev.driver = &max6875_driver.driver;
 	real_client->flags = 0;
 	strlcpy(real_client->name, "max6875", I2C_NAME_SIZE);
@@ -201,7 +201,7 @@ static int max6875_detect(struct i2c_ada
 	/* Init fake client data */
 	i2c_set_clientdata(fake_client, NULL);
 	fake_client->addr = address | 1;
-	fake_client->adapter = adapter;
+	fake_client->dev.parent = &adapter->dev;
 	fake_client->dev.driver = &max6875_driver.driver;
 	fake_client->flags = 0;
 	strlcpy(fake_client->name, "max6875 subclient", I2C_NAME_SIZE);
Index: at91/drivers/rtc/rtc-pcf8563.c
===================================================================
--- at91.orig/drivers/rtc/rtc-pcf8563.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-pcf8563.c	2007-03-12 11:06:29.000000000 -0700
@@ -90,7 +90,7 @@ static int pcf8563_get_datetime(struct i
 	};
 
 	/* read registers */
-	if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 2)) != 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -214,7 +214,8 @@ static int pcf8563_validate_client(struc
 			{ client->addr, I2C_M_RD, 1, &buf },
 		};
 
-		xfer = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
+		xfer = i2c_transfer(to_i2c_adapter(client->dev.parent),
+				msgs, ARRAY_SIZE(msgs));
 
 		if (xfer != ARRAY_SIZE(msgs)) {
 			dev_err(&client->dev,
@@ -294,7 +295,7 @@ static int pcf8563_probe(struct i2c_adap
 	client = &pcf8563->client;
 	client->addr = address;
 	client->dev.driver = &pcf8563_driver.driver;
-	client->adapter	= adapter;
+	client->dev.parent = &adapter->dev;
 
 	strlcpy(client->name, pcf8563_driver.driver.name, I2C_NAME_SIZE);
 
Index: at91/drivers/rtc/rtc-rs5c372.c
===================================================================
--- at91.orig/drivers/rtc/rtc-rs5c372.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-rs5c372.c	2007-03-12 11:06:29.000000000 -0700
@@ -107,7 +107,7 @@ static int rs5c_get_regs(struct rs5c372 
 	 * The first method doesn't work with the iop3xx adapter driver, on at
 	 * least 80219 chips; this works around that bug.
 	 */
-	if ((i2c_transfer(client->adapter, msgs, 1)) != 1) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 1)) != 1) {
 		pr_debug("%s: can't read registers\n", rs5c->rtc->name);
 		return -EIO;
 	}
@@ -523,7 +523,7 @@ static int rs5c372_probe(struct i2c_adap
 	/* I2C client */
 	client->addr = address;
 	client->dev.driver = &rs5c372_driver.driver;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 
 	strlcpy(client->name, rs5c372_driver.driver.name, I2C_NAME_SIZE);
 
Index: at91/drivers/rtc/rtc-ds1672.c
===================================================================
--- at91.orig/drivers/rtc/rtc-ds1672.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-ds1672.c	2007-03-12 11:06:29.000000000 -0700
@@ -49,7 +49,8 @@ static int ds1672_get_datetime(struct i2
 	};
 
 	/* read date registers */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if (i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2)
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -132,7 +133,8 @@ static int ds1672_get_control(struct i2c
 	};
 
 	/* read control register */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if (i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2)
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -214,7 +216,7 @@ static int ds1672_probe(struct i2c_adapt
 	/* I2C client */
 	client->addr = address;
 	client->dev.driver = &ds1672_driver.driver;
-	client->adapter	= adapter;
+	client->dev.parent = &adapter->dev;
 
 	strlcpy(client->name, ds1672_driver.driver.name, I2C_NAME_SIZE);
 
Index: at91/drivers/rtc/rtc-pcf8583.c
===================================================================
--- at91.orig/drivers/rtc/rtc-pcf8583.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-pcf8583.c	2007-03-12 11:06:29.000000000 -0700
@@ -73,7 +73,7 @@ static int pcf8583_get_datetime(struct i
 
 	memset(buf, 0, sizeof(buf));
 
-	ret = i2c_transfer(client->adapter, msgs, 2);
+	ret = i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 2);
 	if (ret == 2) {
 		dt->tm_year = buf[4] >> 6;
 		dt->tm_wday = buf[5] >> 5;
@@ -158,7 +158,8 @@ static int pcf8583_read_mem(struct i2c_c
 
 	addr[0] = mem->loc;
 
-	return i2c_transfer(client->adapter, msgs, 2) == 2 ? 0 : -EIO;
+	return i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 2) == 2
+		? 0 : -EIO;
 }
 
 static int pcf8583_write_mem(struct i2c_client *client, struct rtc_mem *mem)
@@ -183,7 +184,8 @@ static int pcf8583_write_mem(struct i2c_
 
 	addr[0] = mem->loc;
 
-	return i2c_transfer(client->adapter, msgs, 2) == 2 ? 0 : -EIO;
+	return i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 2) == 2
+		? 0 : -EIO;
 }
 
 static int pcf8583_rtc_read_time(struct device *dev, struct rtc_time *tm)
@@ -339,12 +341,12 @@ static int pcf8583_probe(struct i2c_adap
 	client = &pcf->client;
 
 	client->addr		= addr;
-	client->adapter	= adap;
+	client->dev.parent = &adap->dev;
 	client->dev.driver = &pcf8583_driver.driver;
 
 	strlcpy(client->name, pcf8583_driver.driver.name, I2C_NAME_SIZE);
 
-	if (i2c_transfer(client->adapter, msgs, 2) != 2) {
+	if (i2c_transfer(adap, msgs, 2) != 2) {
 		err = -EIO;
 		goto exit_kfree;
 	}
Index: at91/drivers/rtc/rtc-x1205.c
===================================================================
--- at91.orig/drivers/rtc/rtc-x1205.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-x1205.c	2007-03-12 11:06:29.000000000 -0700
@@ -120,7 +120,8 @@ static int x1205_get_datetime(struct i2c
 	};
 
 	/* read date registers */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2))
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -160,7 +161,8 @@ static int x1205_get_status(struct i2c_c
 	};
 
 	/* read status register */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2))
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -270,7 +272,8 @@ static int x1205_get_dtrim(struct i2c_cl
 	};
 
 	/* read dtr register */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2))
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -302,7 +305,8 @@ static int x1205_get_atrim(struct i2c_cl
 	};
 
 	/* read atr register */
-	if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+	if ((i2c_transfer(to_i2c_adapter(client->dev.parent), &msgs[0], 2))
+			!= 2) {
 		dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
 		return -EIO;
 	}
@@ -371,7 +375,8 @@ static int x1205_validate_client(struct 
 			{ client->addr, I2C_M_RD, 1, &buf },
 		};
 
-		if ((xfer = i2c_transfer(client->adapter, msgs, 2)) != 2) {
+		if ((xfer = i2c_transfer(to_i2c_adapter(client->dev.parent),
+				msgs, 2)) != 2) {
 			dev_err(&client->dev,
 				"%s: could not read register %x\n",
 				__FUNCTION__, probe_zero_pattern[i]);
@@ -399,7 +404,8 @@ static int x1205_validate_client(struct 
 			{ client->addr, I2C_M_RD, 1, &reg },
 		};
 
-		if ((xfer = i2c_transfer(client->adapter, msgs, 2)) != 2) {
+		if ((xfer = i2c_transfer(to_i2c_adapter(client->dev.parent),
+				msgs, 2)) != 2) {
 			dev_err(&client->dev,
 				"%s: could not read register %x\n",
 				__FUNCTION__, probe_limits_pattern[i].reg);
@@ -521,7 +527,7 @@ static int x1205_probe(struct i2c_adapte
 	/* I2C client */
 	client->addr = address;
 	client->dev.driver = &x1205_driver.driver;
-	client->adapter	= adapter;
+	client->dev.parent = &adapter->dev;
 
 	strlcpy(client->name, x1205_driver.driver.name, I2C_NAME_SIZE);
 
Index: at91/drivers/rtc/rtc-isl1208.c
===================================================================
--- at91.orig/drivers/rtc/rtc-isl1208.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/rtc/rtc-isl1208.c	2007-03-12 11:06:29.000000000 -0700
@@ -94,7 +94,7 @@ isl1208_i2c_read_regs(struct i2c_client 
 	BUG_ON(reg > ISL1208_REG_USR2);
 	BUG_ON(reg + len > ISL1208_REG_USR2 + 1);
 
-	ret = i2c_transfer(client->adapter, msgs, 2);
+	ret = i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 2);
 	if (ret > 0)
 		ret = 0;
 	return ret;
@@ -118,7 +118,7 @@ isl1208_i2c_set_regs(struct i2c_client *
 	i2c_buf[0] = reg;
 	memcpy(&i2c_buf[1], &buf[0], len);
 
-	ret = i2c_transfer(client->adapter, msgs, 1);
+	ret = i2c_transfer(to_i2c_adapter(client->dev.parent), msgs, 1);
 	if (ret > 0)
 		ret = 0;
 	return ret;
@@ -482,7 +482,7 @@ isl1208_probe(struct i2c_adapter *adapte
 	}
 
 	new_client->addr = addr;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &isl1208_driver.driver;
 	new_client->flags = 0;
 	strcpy(new_client->name, DRV_NAME);
Index: at91/drivers/hwmon/asb100.c
===================================================================
--- at91.orig/drivers/hwmon/asb100.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/asb100.c	2007-03-12 11:06:29.000000000 -0700
@@ -706,7 +706,7 @@ static int asb100_detect_subclients(stru
 
 	for (i = 0; i <= 1; i++) {
 		i2c_set_clientdata(data->lm75[i], NULL);
-		data->lm75[i]->adapter = adapter;
+		data->lm75[i]->dev.parent = &adapter->dev;
 		data->lm75[i]->dev.driver = &asb100_driver.driver;
 		data->lm75[i]->flags = 0;
 		strlcpy(data->lm75[i]->name, "asb100 subclient", I2C_NAME_SIZE);
@@ -764,7 +764,7 @@ static int asb100_detect(struct i2c_adap
 	mutex_init(&data->lock);
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &asb100_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/smsc47m192.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47m192.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/smsc47m192.c	2007-03-12 11:06:29.000000000 -0700
@@ -501,7 +501,7 @@ static int smsc47m192_detect(struct i2c_
 	client = &data->client;
 	i2c_set_clientdata(client, data);
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &smsc47m192_driver.driver;
 
 	if (kind == 0)
Index: at91/drivers/hwmon/adm1025.c
===================================================================
--- at91.orig/drivers/hwmon/adm1025.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm1025.c	2007-03-12 11:06:29.000000000 -0700
@@ -383,7 +383,7 @@ static int adm1025_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &adm1025_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/lm85.c
===================================================================
--- at91.orig/drivers/hwmon/lm85.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm85.c	2007-03-12 11:06:29.000000000 -0700
@@ -1131,7 +1131,7 @@ static int lm85_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm85_driver.driver;
 	new_client->flags = 0;
 
@@ -1352,6 +1352,7 @@ static void lm85_init_client(struct i2c_
 {
 	int value;
 	struct lm85_data *data = i2c_get_clientdata(client);
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 
 	dev_dbg(&client->dev, "Initializing device\n");
 
@@ -1360,18 +1361,18 @@ static void lm85_init_client(struct i2c_
 	dev_dbg(&client->dev, "LM85_REG_CONFIG is: 0x%02x\n", value);
 	if( value & 0x02 ) {
 		dev_err(&client->dev, "Client (%d,0x%02x) config is locked.\n",
-			    i2c_adapter_id(client->adapter), client->addr );
+			    i2c_adapter_id(adapter), client->addr );
 	};
 	if( ! (value & 0x04) ) {
 		dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n",
-			    i2c_adapter_id(client->adapter), client->addr );
+			    i2c_adapter_id(adapter), client->addr );
 	};
 	if( value & 0x10
 	    && ( data->type == adm1027
 		|| data->type == adt7463 ) ) {
 		dev_err(&client->dev, "Client (%d,0x%02x) VxI mode is set.  "
 			"Please report this to the lm85 maintainer.\n",
-			    i2c_adapter_id(client->adapter), client->addr );
+			    i2c_adapter_id(adapter), client->addr );
 	};
 
 	/* WE INTENTIONALLY make no changes to the limits,
Index: at91/drivers/hwmon/adm1031.c
===================================================================
--- at91.orig/drivers/hwmon/adm1031.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm1031.c	2007-03-12 11:06:29.000000000 -0700
@@ -804,7 +804,7 @@ static int adm1031_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &adm1031_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83627hf.c
===================================================================
--- at91.orig/drivers/hwmon/w83627hf.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83627hf.c	2007-03-12 11:06:29.000000000 -0700
@@ -1101,7 +1101,7 @@ static int w83627hf_detect(struct i2c_ad
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	mutex_init(&data->lock);
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &w83627hf_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/lm75.c
===================================================================
--- at91.orig/drivers/hwmon/lm75.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm75.c	2007-03-12 11:06:29.000000000 -0700
@@ -148,7 +148,7 @@ static int lm75_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm75_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/gl520sm.c
===================================================================
--- at91.orig/drivers/hwmon/gl520sm.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/gl520sm.c	2007-03-12 11:06:29.000000000 -0700
@@ -573,7 +573,7 @@ static int gl520_detect(struct i2c_adapt
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &gl520_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/adm1021.c
===================================================================
--- at91.orig/drivers/hwmon/adm1021.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm1021.c	2007-03-12 11:06:29.000000000 -0700
@@ -228,7 +228,7 @@ static int adm1021_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &adm1021_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/ds1621.c
===================================================================
--- at91.orig/drivers/hwmon/ds1621.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/ds1621.c	2007-03-12 11:06:29.000000000 -0700
@@ -224,7 +224,7 @@ static int ds1621_detect(struct i2c_adap
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &ds1621_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/via686a.c
===================================================================
--- at91.orig/drivers/hwmon/via686a.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/via686a.c	2007-03-12 11:06:29.000000000 -0700
@@ -675,7 +675,7 @@ static int via686a_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &via686a_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/adm1026.c
===================================================================
--- at91.orig/drivers/hwmon/adm1026.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm1026.c	2007-03-12 11:06:29.000000000 -0700
@@ -1595,7 +1595,7 @@ static int adm1026_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &adm1026_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83627ehf.c
===================================================================
--- at91.orig/drivers/hwmon/w83627ehf.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83627ehf.c	2007-03-12 11:06:29.000000000 -0700
@@ -1209,7 +1209,7 @@ static int w83627ehf_detect(struct i2c_a
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	mutex_init(&data->lock);
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &w83627ehf_driver.driver;
 	client->flags = 0;
 	dev = &client->dev;
Index: at91/drivers/hwmon/lm92.c
===================================================================
--- at91.orig/drivers/hwmon/lm92.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm92.c	2007-03-12 11:06:29.000000000 -0700
@@ -328,7 +328,7 @@ static int lm92_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm92_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/adm9240.c
===================================================================
--- at91.orig/drivers/hwmon/adm9240.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm9240.c	2007-03-12 11:06:29.000000000 -0700
@@ -526,7 +526,7 @@ static int adm9240_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &adm9240_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83781d.c
===================================================================
--- at91.orig/drivers/hwmon/w83781d.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83781d.c	2007-03-12 11:06:29.000000000 -0700
@@ -907,7 +907,7 @@ w83781d_detect_subclients(struct i2c_ada
 	for (i = 0; i <= 1; i++) {
 		/* store all data in w83781d */
 		i2c_set_clientdata(data->lm75[i], NULL);
-		data->lm75[i]->adapter = adapter;
+		data->lm75[i]->dev.parent = &adapter->dev;
 		data->lm75[i]->dev.driver = &w83781d_driver.driver;
 		data->lm75[i]->flags = 0;
 		strlcpy(data->lm75[i]->name, client_name,
@@ -1080,7 +1080,7 @@ w83781d_detect(struct i2c_adapter *adapt
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	mutex_init(&data->lock);
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = is_isa
 			? &w83781d_isa_driver.driver
 			: &w83781d_driver.driver;
Index: at91/drivers/hwmon/sis5595.c
===================================================================
--- at91.orig/drivers/hwmon/sis5595.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/sis5595.c	2007-03-12 11:06:29.000000000 -0700
@@ -574,7 +574,7 @@ static int sis5595_detect(struct i2c_ada
 	new_client->addr = address;
 	mutex_init(&data->lock);
 	i2c_set_clientdata(new_client, data);
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &sis5595_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83792d.c
===================================================================
--- at91.orig/drivers/hwmon/w83792d.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83792d.c	2007-03-12 11:06:29.000000000 -0700
@@ -881,7 +881,7 @@ w83792d_create_subclient(struct i2c_adap
 	}
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
-	sub_client->adapter = adapter;
+	sub_client->dev.parent = &adapter->dev;
 	sub_client->dev.driver = &w83792d_driver.driver;
 	sub_client->flags = 0;
 	strlcpy(sub_client->name, "w83792d subclient", I2C_NAME_SIZE);
@@ -1273,7 +1273,7 @@ w83792d_detect(struct i2c_adapter *adapt
 	dev = &client->dev;
 	i2c_set_clientdata(client, data);
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &w83792d_driver.driver;
 	client->flags = 0;
 
Index: at91/drivers/hwmon/smsc47m1.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47m1.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/smsc47m1.c	2007-03-12 11:06:29.000000000 -0700
@@ -437,7 +437,7 @@ static int smsc47m1_detect(struct i2c_ad
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	mutex_init(&data->lock);
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &smsc47m1_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/gl518sm.c
===================================================================
--- at91.orig/drivers/hwmon/gl518sm.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/gl518sm.c	2007-03-12 11:06:29.000000000 -0700
@@ -412,7 +412,7 @@ static int gl518_detect(struct i2c_adapt
 	i2c_set_clientdata(new_client, data);
 
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &gl518_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83791d.c
===================================================================
--- at91.orig/drivers/hwmon/w83791d.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83791d.c	2007-03-12 11:06:29.000000000 -0700
@@ -818,7 +818,7 @@ static int w83791d_create_subclient(stru
 	}
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
-	sub_client->adapter = adapter;
+	sub_client->dev.parent = &adapter->dev;
 	sub_client->dev.driver = &w83791d_driver.driver;
 	strlcpy(sub_client->name, "w83791d subclient", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(sub_client))) {
@@ -918,7 +918,7 @@ static int w83791d_detect(struct i2c_ada
 	dev = &client->dev;
 	i2c_set_clientdata(client, data);
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &w83791d_driver.driver;
 	mutex_init(&data->update_lock);
 
Index: at91/drivers/hwmon/lm87.c
===================================================================
--- at91.orig/drivers/hwmon/lm87.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm87.c	2007-03-12 11:06:29.000000000 -0700
@@ -637,7 +637,7 @@ static int lm87_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm87_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83l785ts.c
===================================================================
--- at91.orig/drivers/hwmon/w83l785ts.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83l785ts.c	2007-03-12 11:06:29.000000000 -0700
@@ -167,7 +167,7 @@ static int w83l785ts_detect(struct i2c_a
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &w83l785ts_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/lm77.c
===================================================================
--- at91.orig/drivers/hwmon/lm77.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm77.c	2007-03-12 11:06:29.000000000 -0700
@@ -252,7 +252,7 @@ static int lm77_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm77_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/w83793.c
===================================================================
--- at91.orig/drivers/hwmon/w83793.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/w83793.c	2007-03-12 11:06:29.000000000 -0700
@@ -1125,7 +1125,7 @@ w83793_create_subclient(struct i2c_adapt
 	}
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
-	sub_client->adapter = adapter;
+	sub_client->dev.parent = &adapter->dev;
 	sub_client->dev.driver = &w83793_driver.driver;
 	strlcpy(sub_client->name, "w83793 subclient", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(sub_client))) {
@@ -1227,7 +1227,7 @@ static int w83793_detect(struct i2c_adap
 	dev = &client->dev;
 	i2c_set_clientdata(client, data);
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &w83793_driver.driver;
 
 	data->bank = i2c_smbus_read_byte_data(client, W83793_REG_BANKSEL);
Index: at91/drivers/hwmon/fscpos.c
===================================================================
--- at91.orig/drivers/hwmon/fscpos.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/fscpos.c	2007-03-12 11:06:29.000000000 -0700
@@ -501,7 +501,7 @@ static int fscpos_detect(struct i2c_adap
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &fscpos_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/lm83.c
===================================================================
--- at91.orig/drivers/hwmon/lm83.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm83.c	2007-03-12 11:06:29.000000000 -0700
@@ -312,7 +312,7 @@ static int lm83_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm83_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/max1619.c
===================================================================
--- at91.orig/drivers/hwmon/max1619.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/max1619.c	2007-03-12 11:06:29.000000000 -0700
@@ -225,7 +225,7 @@ static int max1619_detect(struct i2c_ada
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &max1619_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/fscher.c
===================================================================
--- at91.orig/drivers/hwmon/fscher.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/fscher.c	2007-03-12 11:06:29.000000000 -0700
@@ -313,7 +313,7 @@ static int fscher_detect(struct i2c_adap
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &fscher_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/smsc47b397.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47b397.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/smsc47b397.c	2007-03-12 11:06:29.000000000 -0700
@@ -269,7 +269,7 @@ static int smsc47b397_detect(struct i2c_
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	mutex_init(&data->lock);
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &smsc47b397_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/pc87360.c
===================================================================
--- at91.orig/drivers/hwmon/pc87360.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/pc87360.c	2007-03-12 11:06:29.000000000 -0700
@@ -930,7 +930,7 @@ static int pc87360_detect(struct i2c_ada
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	mutex_init(&data->lock);
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &pc87360_driver.driver;
 	client->flags = 0;
 
Index: at91/drivers/hwmon/lm78.c
===================================================================
--- at91.orig/drivers/hwmon/lm78.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm78.c	2007-03-12 11:06:29.000000000 -0700
@@ -595,7 +595,7 @@ static int lm78_detect(struct i2c_adapte
 		mutex_init(&data->lock);
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = is_isa
 			? &lm78_isa_driver.driver
 			: &lm78_driver.driver;
Index: at91/drivers/hwmon/lm63.c
===================================================================
--- at91.orig/drivers/hwmon/lm63.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm63.c	2007-03-12 11:06:29.000000000 -0700
@@ -441,7 +441,7 @@ static int lm63_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm63_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/vt8231.c
===================================================================
--- at91.orig/drivers/hwmon/vt8231.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/vt8231.c	2007-03-12 11:06:29.000000000 -0700
@@ -725,7 +725,7 @@ int vt8231_detect(struct i2c_adapter *ad
 	client = &data->client;
 	i2c_set_clientdata(client, data);
 	client->addr = isa_address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &vt8231_driver.driver;
 
 	/* Fill in the remaining client fields and put into the global list */
Index: at91/drivers/hwmon/lm90.c
===================================================================
--- at91.orig/drivers/hwmon/lm90.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm90.c	2007-03-12 11:06:29.000000000 -0700
@@ -432,7 +432,7 @@ static DEVICE_ATTR(pec, S_IWUSR | S_IRUG
    to explicitely ask for a transaction without PEC. */
 static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
 {
-	return i2c_smbus_xfer(client->adapter, client->addr,
+	return i2c_smbus_xfer(to_i2c_adapter(client->dev.parent), client->addr,
 			      client->flags & ~I2C_CLIENT_PEC,
 			      I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
 }
@@ -493,7 +493,7 @@ static int lm90_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm90_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/atxp1.c
===================================================================
--- at91.orig/drivers/hwmon/atxp1.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/atxp1.c	2007-03-12 11:06:29.000000000 -0700
@@ -289,7 +289,7 @@ static int atxp1_detect(struct i2c_adapt
 	i2c_set_clientdata(new_client, data);
 
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &atxp1_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/adm1029.c
===================================================================
--- at91.orig/drivers/hwmon/adm1029.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/adm1029.c	2007-03-12 11:06:29.000000000 -0700
@@ -315,7 +315,7 @@ static int adm1029_detect(struct i2c_ada
 	client = &data->client;
 	i2c_set_clientdata(client, data);
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &adm1029_driver.driver;
 
 	/* Now we do the detection and identification. A negative kind
Index: at91/drivers/hwmon/lm80.c
===================================================================
--- at91.orig/drivers/hwmon/lm80.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/lm80.c	2007-03-12 11:06:29.000000000 -0700
@@ -458,7 +458,7 @@ static int lm80_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &lm80_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/hwmon/it87.c
===================================================================
--- at91.orig/drivers/hwmon/it87.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/hwmon/it87.c	2007-03-12 11:06:29.000000000 -0700
@@ -949,7 +949,7 @@ static int it87_detect(struct i2c_adapte
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = isa_address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &it87_isa_driver.driver;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/media/video/tlv320aic23b.c
===================================================================
--- at91.orig/drivers/media/video/tlv320aic23b.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tlv320aic23b.c	2007-03-12 11:06:29.000000000 -0700
@@ -142,7 +142,7 @@ static int tlv320aic23b_attach(struct i2
 		return -ENOMEM;
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "tlv320aic23b");
 
Index: at91/drivers/media/video/saa7127.c
===================================================================
--- at91.orig/drivers/media/video/saa7127.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7127.c	2007-03-12 11:06:29.000000000 -0700
@@ -682,7 +682,7 @@ static int saa7127_attach(struct i2c_ada
 		return -ENOMEM;
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa7127.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7127");
 
Index: at91/drivers/media/video/upd64083.c
===================================================================
--- at91.orig/drivers/media/video/upd64083.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/upd64083.c	2007-03-12 11:06:29.000000000 -0700
@@ -183,7 +183,7 @@ static int upd64083_attach(struct i2c_ad
 	}
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "uPD64083");
 
Index: at91/drivers/media/video/tea6415c.c
===================================================================
--- at91.orig/drivers/media/video/tea6415c.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tea6415c.c	2007-03-12 11:06:29.000000000 -0700
@@ -71,7 +71,7 @@ static int detect(struct i2c_adapter *ad
 	/* fill client structure */
 	memcpy(client, &client_template, sizeof(struct i2c_client));
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 
 	/* tell the i2c layer a new client has arrived */
 	if (0 != (err = i2c_attach_client(client))) {
Index: at91/drivers/media/video/wm8775.c
===================================================================
--- at91.orig/drivers/media/video/wm8775.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/wm8775.c	2007-03-12 11:06:29.000000000 -0700
@@ -171,7 +171,7 @@ static int wm8775_attach(struct i2c_adap
 		return -ENOMEM;
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "wm8775");
 
Index: at91/drivers/media/video/ov7670.c
===================================================================
--- at91.orig/drivers/media/video/ov7670.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/ov7670.c	2007-03-12 11:06:29.000000000 -0700
@@ -1224,7 +1224,7 @@ static int ov7670_attach(struct i2c_adap
 	client = kzalloc(sizeof (struct i2c_client), GFP_KERNEL);
 	if (! client)
 		return -ENOMEM;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->addr = OV7670_I2C_ADDR;
 	client->dev.driver = &ov7670_driver.driver,
 	strcpy(client->name, "OV7670");
Index: at91/drivers/media/video/tuner-core.c
===================================================================
--- at91.orig/drivers/media/video/tuner-core.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tuner-core.c	2007-03-12 11:06:29.000000000 -0700
@@ -216,7 +216,8 @@ static void set_type(struct i2c_client *
 
 	set_freq(c, (V4L2_TUNER_RADIO == t->mode) ? t->radio_freq : t->tv_freq);
 	tuner_dbg("%s %s I2C addr 0x%02x with type %d used for 0x%02x\n",
-		  c->adapter->name, c->dev.driver->name, c->addr << 1, type,
+		  to_i2c_adapter(c->dev.parent)->name,
+		  c->dev.driver->name, c->addr << 1, type,
 		  t->mode_mask);
 }
 
@@ -421,13 +422,13 @@ static int tuner_attach(struct i2c_adapt
 {
 	struct tuner *t;
 
-	client_template.adapter = adap;
 	client_template.addr = addr;
 
 	t = kzalloc(sizeof(struct tuner), GFP_KERNEL);
 	if (NULL == t)
 		return -ENOMEM;
 	memcpy(&t->i2c, &client_template, sizeof(struct i2c_client));
+	t->i2c.dev.parent = &adap->dev;
 	i2c_set_clientdata(&t->i2c, t);
 	t->type = UNSET;
 	t->radio_if2 = 10700 * 1000;	/* 10.7MHz - FM radio */
Index: at91/drivers/media/video/tuner-3036.c
===================================================================
--- at91.orig/drivers/media/video/tuner-3036.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tuner-3036.c	2007-03-12 11:06:29.000000000 -0700
@@ -118,13 +118,13 @@ tuner_attach(struct i2c_adapter *adap, i
 		return -1;
 	this_adap++;
 
-	client_template.adapter = adap;
 	client_template.addr = addr;
 
 	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == NULL)
 		return -ENOMEM;
 	memcpy(client, &client_template, sizeof(struct i2c_client));
+	client->dev.parent = &adap->dev;
 
 	printk("tuner: SAB3036 found, status %02x\n", tuner_getstatus(client));
 
Index: at91/drivers/media/video/adv7170.c
===================================================================
--- at91.orig/drivers/media/video/adv7170.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/adv7170.c	2007-03-12 11:06:29.000000000 -0700
@@ -412,7 +412,7 @@ adv7170_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_adv7170.driver;
 	if ((client->addr == I2C_ADV7170 >> 1) ||
 	    (client->addr == (I2C_ADV7170 >> 1) + 1)) {
Index: at91/drivers/media/video/tea6420.c
===================================================================
--- at91.orig/drivers/media/video/tea6420.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tea6420.c	2007-03-12 11:06:29.000000000 -0700
@@ -108,7 +108,7 @@ static int tea6420_detect(struct i2c_ada
 	/* fill client structure */
 	memcpy(client, &client_template, sizeof(struct i2c_client));
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 
 	/* tell the i2c layer a new client has arrived */
 	if (0 != (err = i2c_attach_client(client))) {
Index: at91/drivers/media/video/saa6588.c
===================================================================
--- at91.orig/drivers/media/video/saa6588.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa6588.c	2007-03-12 11:06:29.000000000 -0700
@@ -392,7 +392,7 @@ static int saa6588_configure(struct saa6
 static int saa6588_attach(struct i2c_adapter *adap, int addr, int kind)
 {
 	struct saa6588 *s;
-	client_template.adapter = adap;
+
 	client_template.addr = addr;
 
 	printk(PREFIX "chip found @ 0x%x\n", addr << 1);
@@ -407,6 +407,7 @@ static int saa6588_attach(struct i2c_ada
 		return -ENOMEM;
 	}
 	s->client = client_template;
+	s->client.dev.parent = &adap->dev;
 	s->block_count = 0;
 	s->wr_index = 0;
 	s->rd_index = 0;
Index: at91/drivers/media/video/vpx3220.c
===================================================================
--- at91.orig/drivers/media/video/vpx3220.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/vpx3220.c	2007-03-12 11:06:29.000000000 -0700
@@ -627,7 +627,7 @@ vpx3220_detect_client (struct i2c_adapte
 	}
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &vpx3220_i2c_driver.driver;
 
 	/* Check for manufacture ID and part number */
Index: at91/drivers/media/video/tda7432.c
===================================================================
--- at91.orig/drivers/media/video/tda7432.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/tda7432.c	2007-03-12 11:06:29.000000000 -0700
@@ -304,7 +304,7 @@ static int tda7432_attach(struct i2c_ada
 
 	client = &t->c;
 	memcpy(client,&client_template,sizeof(struct i2c_client));
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->addr = addr;
 	i2c_set_clientdata(client, t);
 
Index: at91/drivers/media/video/ir-kbd-i2c.c
===================================================================
--- at91.orig/drivers/media/video/ir-kbd-i2c.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/ir-kbd-i2c.c	2007-03-12 11:06:29.000000000 -0700
@@ -316,7 +316,7 @@ static int ir_attach(struct i2c_adapter 
 	ir->c = client_template;
 	ir->input = input_dev;
 
-	ir->c.adapter = adap;
+	ir->c.dev.parent = &adap->dev;
 	ir->c.addr    = addr;
 
 	i2c_set_clientdata(&ir->c, ir);
@@ -473,7 +473,7 @@ static int ir_probe(struct i2c_adapter *
 		return 0;
 
 	memset(&c,0,sizeof(c));
-	c.adapter = adap;
+	c->dev.parent = &adap->dev;
 	for (i = 0; -1 != probe[i]; i++) {
 		c.addr = probe[i];
 		rc = i2c_master_recv(&c,&buf,0);
Index: at91/drivers/media/video/cs53l32a.c
===================================================================
--- at91.orig/drivers/media/video/cs53l32a.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/cs53l32a.c	2007-03-12 11:06:29.000000000 -0700
@@ -146,7 +146,7 @@ static int cs53l32a_attach(struct i2c_ad
 		return -ENOMEM;
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "cs53l32a");
 
Index: at91/drivers/media/video/tveeprom.c
===================================================================
--- at91.orig/drivers/media/video/tveeprom.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tveeprom.c	2007-03-12 11:06:29.000000000 -0700
@@ -53,13 +53,15 @@ MODULE_PARM_DESC(debug, "Debug level (0-
 
 #define STRM(array,i) (i < sizeof(array)/sizeof(char*) ? array[i] : "unknown")
 
+#define adapter(c)	to_i2c_adapter((c)->dev.parent)
+
 #define tveeprom_info(fmt, arg...) \
-	v4l_printk(KERN_INFO, "tveeprom", c->adapter, c->addr, fmt , ## arg)
+	v4l_printk(KERN_INFO, "tveeprom", adapter(c), c->addr, fmt , ## arg)
 #define tveeprom_warn(fmt, arg...) \
-	v4l_printk(KERN_WARNING, "tveeprom", c->adapter, c->addr, fmt , ## arg)
+	v4l_printk(KERN_WARNING, "tveeprom", adapter(c), c->addr, fmt , ## arg)
 #define tveeprom_dbg(fmt, arg...) do { \
 	if (debug) \
-		v4l_printk(KERN_DEBUG, "tveeprom", c->adapter, c->addr, fmt , ## arg); \
+		v4l_printk(KERN_DEBUG, "tveeprom", adapter(c), c->addr, fmt , ## arg); \
 	} while (0)
 
 /*
@@ -749,7 +751,7 @@ tveeprom_detect_client(struct i2c_adapte
 	if (NULL == client)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_tveeprom.driver;
 	snprintf(client->name, sizeof(client->name), "tveeprom");
 	i2c_attach_client(client);
Index: at91/drivers/video/matrox/matroxfb_maven.c
===================================================================
--- at91.orig/drivers/video/matrox/matroxfb_maven.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/video/matrox/matroxfb_maven.c	2007-03-12 11:06:29.000000000 -0700
@@ -130,6 +130,7 @@ static int get_ctrl_id(__u32 v4l2_id) {
 struct maven_data {
 	struct matrox_fb_info*		primary_head;
 	struct i2c_client		client;
+	struct i2c_adapter		*adapter;
 	int				version;
 };
 
@@ -143,7 +144,7 @@ static int maven_get_reg(struct i2c_clie
 				 { c->addr, I2C_M_RD | I2C_M_NOSTART, sizeof(dst), &dst }};
 	s32 err;
 
-	err = i2c_transfer(c->adapter, msgs, 2);
+	err = i2c_transfer(to_i2c_adapter(c->dev.parent), msgs, 2);
 	if (err < 0)
 		printk(KERN_INFO "ReadReg(%d) failed\n", reg);
 	return dst & 0xFF;
@@ -1182,7 +1183,7 @@ static struct matrox_altout maven_altout
 
 static int maven_init_client(struct i2c_client* clnt) {
 	struct maven_data* md = i2c_get_clientdata(clnt);
-	MINFO_FROM(container_of(clnt->adapter, struct i2c_bit_adapter, adapter)->minfo);
+	MINFO_FROM(container_of(md->adapter, struct i2c_bit_adapter, adapter)->minfo);
 
 	md->primary_head = MINFO;
 	down_write(&ACCESS_FBINFO(altout.lock));
@@ -1247,9 +1248,10 @@ static int maven_detect_client(struct i2
 		goto ERROR0;
 	}
 	new_client = &data->client;
+	data->adapter = adapter;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &maven_driver.driver;
 	new_client->flags = 0;
 	strlcpy(new_client->name, "maven", I2C_NAME_SIZE);
Index: at91/drivers/media/video/saa711x.c
===================================================================
--- at91.orig/drivers/media/video/saa711x.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa711x.c	2007-03-12 11:06:29.000000000 -0700
@@ -489,7 +489,7 @@ saa711x_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa711x.driver;
 	strlcpy(I2C_NAME(client), "saa711x", sizeof(I2C_NAME(client)));
 	decoder = kzalloc(sizeof(struct saa711x), GFP_KERNEL);
Index: at91/drivers/media/video/wm8739.c
===================================================================
--- at91.orig/drivers/media/video/wm8739.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/wm8739.c	2007-03-12 11:06:29.000000000 -0700
@@ -271,7 +271,7 @@ static int wm8739_attach(struct i2c_adap
 		return -ENOMEM;
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "wm8739");
 
Index: at91/drivers/media/video/saa7114.c
===================================================================
--- at91.orig/drivers/media/video/saa7114.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7114.c	2007-03-12 11:06:29.000000000 -0700
@@ -847,7 +847,7 @@ saa7114_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa7114.driver;
 	strlcpy(I2C_NAME(client), "saa7114", sizeof(I2C_NAME(client)));
 
Index: at91/drivers/media/video/msp3400-driver.c
===================================================================
--- at91.orig/drivers/media/video/msp3400-driver.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/msp3400-driver.c	2007-03-12 11:06:29.000000000 -0700
@@ -818,7 +818,7 @@ static int msp_attach(struct i2c_adapter
 		return -ENOMEM;
 	memset(client, 0, sizeof(*client));
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "msp3400");
 
Index: at91/drivers/media/video/tda9875.c
===================================================================
--- at91.orig/drivers/media/video/tda9875.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tda9875.c	2007-03-12 11:06:29.000000000 -0700
@@ -235,7 +235,7 @@ static int tda9875_attach(struct i2c_ada
 
 	client = &t->c;
 	memcpy(client,&client_template,sizeof(struct i2c_client));
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->addr = addr;
 	i2c_set_clientdata(client, t);
 
Index: at91/drivers/media/video/bt866.c
===================================================================
--- at91.orig/drivers/media/video/bt866.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/bt866.c	2007-03-12 11:06:29.000000000 -0700
@@ -322,7 +322,7 @@ static int bt866_found_proc(struct i2c_a
 	}
 
 	i2c_set_clientdata(client, encoder);
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->addr = addr;
 	sprintf(client->name, "%s-%02x", BT866_DEVNAME, adapter->id);
 
Index: at91/drivers/media/video/cx25840/cx25840-core.c
===================================================================
--- at91.orig/drivers/media/video/cx25840/cx25840-core.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/cx25840/cx25840-core.c	2007-03-12 11:06:29.000000000 -0700
@@ -862,7 +862,7 @@ static int cx25840_detect_client(struct 
 
 	client = &state->c;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->driver = &i2c_driver_cx25840;
 	snprintf(client->name, sizeof(client->name) - 1, "cx25840");
 
Index: at91/drivers/media/video/saa5246a.c
===================================================================
--- at91.orig/drivers/media/video/saa5246a.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa5246a.c	2007-03-12 11:06:29.000000000 -0700
@@ -82,7 +82,7 @@ static int saa5246a_attach(struct i2c_ad
 	client=kmalloc(sizeof(*client), GFP_KERNEL);
 	if(client==NULL)
 		return -ENOMEM;
-	client_template.adapter = adap;
+	client->dev.parent = &adap->dev;
 	client_template.addr = addr;
 	memcpy(client, &client_template, sizeof(*client));
 	t = kzalloc(sizeof(*t), GFP_KERNEL);
Index: at91/drivers/media/video/saa7110.c
===================================================================
--- at91.orig/drivers/media/video/saa7110.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7110.c	2007-03-12 11:06:29.000000000 -0700
@@ -491,7 +491,7 @@ saa7110_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa7110.driver;
 	strlcpy(I2C_NAME(client), "saa7110", sizeof(I2C_NAME(client)));
 
Index: at91/drivers/media/video/saa7134/saa6752hs.c
===================================================================
--- at91.orig/drivers/media/video/saa7134/saa6752hs.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/saa7134/saa6752hs.c	2007-03-12 11:06:29.000000000 -0700
@@ -698,7 +698,7 @@ static int saa6752hs_attach(struct i2c_a
 	h->client = client_template;
 	h->params = param_defaults;
 	h->old_params = old_param_defaults;
-	h->client.adapter = adap;
+	h->client.dev.parent = &adap->dev;
 	h->client.addr = addr;
 
 	/* Assume 625 input lines */
Index: at91/drivers/media/video/bt856.c
===================================================================
--- at91.orig/drivers/media/video/bt856.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/bt856.c	2007-03-12 11:06:29.000000000 -0700
@@ -315,7 +315,7 @@ bt856_detect_client (struct i2c_adapter 
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_bt856.driver;
 	strlcpy(I2C_NAME(client), "bt856", sizeof(I2C_NAME(client)));
 
Index: at91/drivers/media/video/ovcamchip/ovcamchip_core.c
===================================================================
--- at91.orig/drivers/media/video/ovcamchip/ovcamchip_core.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/ovcamchip/ovcamchip_core.c	2007-03-12 11:06:29.000000000 -0700
@@ -313,7 +313,7 @@ static int ovcamchip_attach(struct i2c_a
 		goto no_client;
 	}
 	memcpy(c, &client_template, sizeof *c);
-	c->adapter = adap;
+	c->dev.parent = &adap->dev;
 	strcpy(c->name, "OV????");
 
 	ov = kzalloc(sizeof *ov, GFP_KERNEL);
Index: at91/drivers/media/video/saa7115.c
===================================================================
--- at91.orig/drivers/media/video/saa7115.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7115.c	2007-03-12 11:06:29.000000000 -0700
@@ -1468,7 +1468,7 @@ static int saa711x_attach(struct i2c_ada
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa711x.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7115");
 
Index: at91/drivers/media/video/tda9840.c
===================================================================
--- at91.orig/drivers/media/video/tda9840.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tda9840.c	2007-03-12 11:06:29.000000000 -0700
@@ -180,7 +180,7 @@ static int detect(struct i2c_adapter *ad
 	/* fill client structure */
 	memcpy(client, &client_template, sizeof(struct i2c_client));
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 
 	/* tell the i2c layer a new client has arrived */
 	if (0 != (result = i2c_attach_client(client))) {
Index: at91/drivers/media/video/ks0127.c
===================================================================
--- at91.orig/drivers/media/video/ks0127.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/ks0127.c	2007-03-12 11:06:29.000000000 -0700
@@ -784,7 +784,7 @@ static int ks0127_found_proc(struct i2c_
 	}
 
 	i2c_set_clientdata(client, ks);
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->addr = addr;
 	sprintf(client->name, "ks0127-%02x", adapter->id);
 
Index: at91/drivers/media/video/tvaudio.c
===================================================================
--- at91.orig/drivers/media/video/tvaudio.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tvaudio.c	2007-03-12 11:06:29.000000000 -0700
@@ -1473,7 +1473,7 @@ static int chip_attach(struct i2c_adapte
 	if (!chip)
 		return -ENOMEM;
 	memcpy(&chip->c,&client_template,sizeof(struct i2c_client));
-	chip->c.adapter = adap;
+	chip->c.dev.parent = &adap->dev;
 	chip->c.addr = addr;
 	i2c_set_clientdata(&chip->c, chip);
 
Index: at91/drivers/media/video/tvp5150.c
===================================================================
--- at91.orig/drivers/media/video/tvp5150.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tvp5150.c	2007-03-12 11:06:29.000000000 -0700
@@ -31,18 +31,20 @@ static int debug = 0;
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
+#define adapter_id(c) i2c_adapter_id(to_i2c_adapter(c->dev.parent))
+
 #define tvp5150_err(fmt, arg...) do { \
 	printk(KERN_ERR "%s %d-%04x: " fmt, c->dev.driver->name, \
-	       i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
+	       adapter_id(c), c->addr , ## arg); } while (0)
 #define tvp5150_info(fmt, arg...) do { \
 	printk(KERN_INFO "%s %d-%04x: " fmt, c->dev.driver->name, \
-	       i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
+	       adapter_id(c), c->addr , ## arg); } while (0)
 #define tvp5150_dbg(num, fmt, arg...) \
 	do { \
 		if (debug >= num) \
 			printk(KERN_DEBUG "%s debug %d-%04x: " fmt,\
 				c->dev.driver->name, \
-				i2c_adapter_id(c->adapter), \
+				adapter_id(c), \
 				c->addr , ## arg); } while (0)
 
 /* supported controls */
@@ -1051,7 +1053,6 @@ static int tvp5150_detect_client(struct 
 		"tvp5150.c: detecting tvp5150 client on address 0x%x\n",
 		address << 1);
 
-	client_template.adapter = adapter;
 	client_template.addr = address;
 
 	/* Check if the adapter supports the needed features */
@@ -1064,6 +1065,7 @@ static int tvp5150_detect_client(struct 
 	if (c == 0)
 		return -ENOMEM;
 	memcpy(c, &client_template, sizeof(struct i2c_client));
+	c->dev.parent = &adapter->dev;
 
 	core = kzalloc(sizeof(struct tvp5150), GFP_KERNEL);
 	if (core == 0) {
Index: at91/drivers/media/video/upd64031a.c
===================================================================
--- at91.orig/drivers/media/video/upd64031a.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/upd64031a.c	2007-03-12 11:06:29.000000000 -0700
@@ -206,7 +206,7 @@ static int upd64031a_attach(struct i2c_a
 	}
 
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "uPD64031A");
 
Index: at91/drivers/media/video/bt8xx/bt832.c
===================================================================
--- at91.orig/drivers/media/video/bt8xx/bt832.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/bt8xx/bt832.c	2007-03-12 11:06:29.000000000 -0700
@@ -163,12 +163,12 @@ static int bt832_attach(struct i2c_adapt
 {
 	struct bt832 *t;
 
-	client_template.adapter = adap;
 	client_template.addr    = addr;
 
 	if (NULL == (t = kzalloc(sizeof(*t), GFP_KERNEL)))
 		return -ENOMEM;
 	t->client = client_template;
+	t->client.dev.parent = &adap->dev;
 	i2c_set_clientdata(&t->client, t);
 	i2c_attach_client(&t->client);
 
Index: at91/drivers/media/video/saa7111.c
===================================================================
--- at91.orig/drivers/media/video/saa7111.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7111.c	2007-03-12 11:06:29.000000000 -0700
@@ -513,7 +513,7 @@ saa7111_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa7111.driver;
 	strlcpy(I2C_NAME(client), "saa7111", sizeof(I2C_NAME(client)));
 
Index: at91/drivers/media/video/saa5249.c
===================================================================
--- at91.orig/drivers/media/video/saa5249.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa5249.c	2007-03-12 11:06:29.000000000 -0700
@@ -146,9 +146,9 @@ static int saa5249_attach(struct i2c_ada
 	client=kmalloc(sizeof(*client), GFP_KERNEL);
 	if(client==NULL)
 		return -ENOMEM;
-	client_template.adapter = adap;
 	client_template.addr = addr;
 	memcpy(client, &client_template, sizeof(*client));
+	client->dev.parent = &adap->dev;
 	t = kzalloc(sizeof(*t), GFP_KERNEL);
 	if(t==NULL)
 	{
Index: at91/drivers/media/video/bt819.c
===================================================================
--- at91.orig/drivers/media/video/bt819.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/bt819.c	2007-03-12 11:06:29.000000000 -0700
@@ -527,7 +527,7 @@ bt819_detect_client (struct i2c_adapter 
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_bt819.driver;
 
 	decoder = kzalloc(sizeof(struct bt819), GFP_KERNEL);
Index: at91/drivers/media/video/indycam.c
===================================================================
--- at91.orig/drivers/media/video/indycam.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/indycam.c	2007-03-12 11:06:29.000000000 -0700
@@ -298,7 +298,7 @@ static int indycam_attach(struct i2c_ada
 	}
 
 	client->addr = addr;
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->dev.driver = &i2c_driver_indycam.driver;
 	client->flags = 0;
 	strcpy(client->name, "IndyCam client");
Index: at91/drivers/media/video/saa7185.c
===================================================================
--- at91.orig/drivers/media/video/saa7185.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7185.c	2007-03-12 11:06:29.000000000 -0700
@@ -407,7 +407,7 @@ saa7185_detect_client (struct i2c_adapte
 	if (client == 0)
 		return -ENOMEM;
 	client->addr = address;
-	client->adapter = adapter;
+	client->dev.parent = &adapter->dev;
 	client->dev.driver = &i2c_driver_saa7185.driver;
 	strlcpy(I2C_NAME(client), "saa7185", sizeof(I2C_NAME(client)));
 
Index: at91/drivers/media/video/saa7191.c
===================================================================
--- at91.orig/drivers/media/video/saa7191.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/saa7191.c	2007-03-12 11:06:29.000000000 -0700
@@ -580,7 +580,7 @@ static int saa7191_attach(struct i2c_ada
 	}
 
 	client->addr = addr;
-	client->adapter = adap;
+	client->dev.parent = &adap->dev;
 	client->dev.driver = &i2c_driver_saa7191.driver;
 	client->flags = 0;
 	strcpy(client->name, "saa7191 client");
Index: at91/arch/arm/mach-pxa/akita-ioexp.c
===================================================================
--- at91.orig/arch/arm/mach-pxa/akita-ioexp.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/arch/arm/mach-pxa/akita-ioexp.c	2007-03-12 11:06:29.000000000 -0700
@@ -88,7 +88,7 @@ static int max7310_detect(struct i2c_ada
 	if (!(new_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL)))
 		return -ENOMEM;
 
-	max7310_template.adapter = adapter;
+	max7310_template.dev.parent = &adapter->dev;
 	max7310_template.addr = address;
 
 	memcpy(new_client, &max7310_template, sizeof(struct i2c_client));
Index: at91/drivers/macintosh/windfarm_smu_sat.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_smu_sat.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/windfarm_smu_sat.c	2007-03-12 11:06:29.000000000 -0700
@@ -180,7 +180,7 @@ static int wf_sat_get(struct wf_sensor *
 	int i, err;
 	s32 val;
 
-	if (sat->i2c.adapter == NULL)
+	if (sat->i2c.dev.parent == NULL)
 		return -ENODEV;
 
 	down(&sat->mutex);
@@ -214,7 +214,6 @@ static void wf_sat_release(struct wf_sen
 	if (atomic_dec_and_test(&sat->refcnt)) {
 		if (sat->i2c.adapter) {
 			i2c_detach_client(&sat->i2c);
-			sat->i2c.adapter = NULL;
 		}
 		if (sat->nr >= 0)
 			sats[sat->nr] = NULL;
@@ -255,7 +254,7 @@ static void wf_sat_create(struct i2c_ada
 	atomic_set(&sat->refcnt, 0);
 	init_MUTEX(&sat->mutex);
 	sat->i2c.addr = (addr >> 1) & 0x7f;
-	sat->i2c.adapter = adapter;
+	sat->i2c.dev.parent = &adapter->dev;
 	sat->i2c.dev.driver = &wf_sat_driver.driver;
 	strncpy(sat->i2c.name, "smu-sat", I2C_NAME_SIZE-1);
 
@@ -391,7 +390,6 @@ static int wf_sat_detach(struct i2c_clie
 
 	/* XXX TODO */
 
-	sat->i2c.adapter = NULL;
 	return 0;
 }
 
Index: at91/drivers/macintosh/windfarm_lm75_sensor.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_lm75_sensor.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/windfarm_lm75_sensor.c	2007-03-12 11:06:29.000000000 -0700
@@ -59,7 +59,7 @@ static int wf_lm75_get(struct wf_sensor 
 	struct wf_lm75_sensor *lm = wf_to_lm75(sr);
 	s32 data;
 
-	if (lm->i2c.adapter == NULL)
+	if (lm->i2c.dev.parent == NULL)
 		return -ENODEV;
 
 	/* Init chip if necessary */
@@ -95,7 +95,6 @@ static void wf_lm75_release(struct wf_se
 	/* check if client is registered and detach from i2c */
 	if (lm->i2c.adapter) {
 		i2c_detach_client(&lm->i2c);
-		lm->i2c.adapter = NULL;
 	}
 
 	kfree(lm);
@@ -135,7 +134,7 @@ static struct wf_lm75_sensor *wf_lm75_cr
 	lm->sens.ops = &wf_lm75_ops;
 	lm->ds1775 = ds1775;
 	lm->i2c.addr = (addr >> 1) & 0x7f;
-	lm->i2c.adapter = adapter;
+	lm->i2c.dev.parent = &adapter->dev;
 	lm->i2c.dev.driver = &wf_lm75_driver.driver;
 	strncpy(lm->i2c.name, lm->sens.name, I2C_NAME_SIZE-1);
 
@@ -203,9 +202,6 @@ static int wf_lm75_detach(struct i2c_cli
 
 	DBG("wf_lm75: i2c detatch called for %s\n", lm->sens.name);
 
-	/* Mark client detached */
-	lm->i2c.adapter = NULL;
-
 	/* release sensor */
 	wf_unregister_sensor(&lm->sens);
 
Index: at91/drivers/macintosh/windfarm_max6690_sensor.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_max6690_sensor.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/windfarm_max6690_sensor.c	2007-03-12 11:06:29.000000000 -0700
@@ -49,7 +49,7 @@ static int wf_max6690_get(struct wf_sens
 	struct wf_6690_sensor *max = wf_to_6690(sr);
 	s32 data;
 
-	if (max->i2c.adapter == NULL)
+	if (max->i2c.dev.parent == NULL)
 		return -ENODEV;
 
 	/* chip gets initialized by firmware */
@@ -66,7 +66,6 @@ static void wf_max6690_release(struct wf
 
 	if (max->i2c.adapter) {
 		i2c_detach_client(&max->i2c);
-		max->i2c.adapter = NULL;
 	}
 	kfree(max);
 }
@@ -92,7 +91,7 @@ static void wf_max6690_create(struct i2c
 	max->sens.ops = &wf_max6690_ops;
 	max->sens.name = name;
 	max->i2c.addr = addr >> 1;
-	max->i2c.adapter = adapter;
+	max->i2c.dev.parent = &adapter->dev;
 	max->i2c.dev.driver = &wf_max6690_driver.driver;
 	strncpy(max->i2c.name, name, I2C_NAME_SIZE-1);
 
@@ -150,7 +149,6 @@ static int wf_max6690_detach(struct i2c_
 {
 	struct wf_6690_sensor *max = i2c_to_6690(client);
 
-	max->i2c.adapter = NULL;
 	wf_unregister_sensor(&max->sens);
 
 	return 0;
Index: at91/drivers/macintosh/therm_windtunnel.c
===================================================================
--- at91.orig/drivers/macintosh/therm_windtunnel.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/therm_windtunnel.c	2007-03-12 11:06:29.000000000 -0700
@@ -436,7 +436,7 @@ do_probe( struct i2c_adapter *adapter, i
 	memset( cl, 0, sizeof(struct i2c_client) );
 
 	cl->addr = addr;
-	cl->adapter = adapter;
+	cl->dev.parent = &adapter->dev;
 	cl->dev.driver = &g4fan_driver.driver;
 	cl->flags = 0;
 
Index: at91/drivers/macintosh/therm_adt746x.c
===================================================================
--- at91.orig/drivers/macintosh/therm_adt746x.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/therm_adt746x.c	2007-03-12 11:06:29.000000000 -0700
@@ -387,7 +387,7 @@ static int attach_one_thermostat(struct 
 
 	memset(th, 0, sizeof(*th));
 	th->clt.addr = addr;
-	th->clt.adapter = adapter;
+	th->clt.dev.parent = &adapter->dev;
 	th->clt.dev.driver = &thermostat_driver.driver;
 	strcpy(th->clt.name, "thermostat");
 
Index: at91/drivers/macintosh/therm_pm72.c
===================================================================
--- at91.orig/drivers/macintosh/therm_pm72.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/macintosh/therm_pm72.c	2007-03-12 11:06:29.000000000 -0700
@@ -325,7 +325,7 @@ static struct i2c_client *attach_i2c_chi
 	memset(clt, 0, sizeof(struct i2c_client));
 
 	clt->addr = (id >> 1) & 0x7f;
-	clt->adapter = adap;
+	clt->dev.parent = &adap->dev;
 	clt->dev.driver = &therm_pm72_driver.driver;
 	strncpy(clt->name, name, I2C_NAME_SIZE-1);
 
Index: at91/sound/soc/codecs/wm8750.c
===================================================================
--- at91.orig/sound/soc/codecs/wm8750.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/soc/codecs/wm8750.c	2007-03-12 11:06:29.000000000 -0700
@@ -892,7 +892,6 @@ static int wm8750_codec_probe(struct i2c
 	if (addr != setup->i2c_address)
 		return -ENODEV;
 
-	client_template.adapter = adap;
 	client_template.addr = addr;
 
 	i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
@@ -900,6 +899,7 @@ static int wm8750_codec_probe(struct i2c
 		kfree(codec);
 		return -ENOMEM;
 	}
+	i2c->dev.parent = &adap->dev;
 	i2c_set_clientdata(i2c, codec);
 	codec->control_data = i2c;
 
Index: at91/sound/oss/dmasound/tas_common.c
===================================================================
--- at91.orig/sound/oss/dmasound/tas_common.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/oss/dmasound/tas_common.c	2007-03-12 11:06:29.000000000 -0700
@@ -140,7 +140,7 @@ tas_detect_client(struct i2c_adapter *ad
 		return -ENOMEM;
 
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &tas_driver.driver;
 	strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE);
 
Index: at91/drivers/w1/masters/ds2482.c
===================================================================
--- at91.orig/drivers/w1/masters/ds2482.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/w1/masters/ds2482.c	2007-03-12 11:06:29.000000000 -0700
@@ -450,7 +450,7 @@ static int ds2482_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->dev.driver = &ds2482_driver.driver;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 
 	/* Reset the device (sets the read_ptr to status) */
 	if (ds2482_send_cmd(data, DS2482_CMD_RESET) < 0) {
Index: at91/sound/oss/dmasound/dac3550a.c
===================================================================
--- at91.orig/sound/oss/dmasound/dac3550a.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/oss/dmasound/dac3550a.c	2007-03-12 11:06:29.000000000 -0700
@@ -168,7 +168,7 @@ static int daca_detect_client(struct i2c
 		return -ENOMEM;
 
 	new_client->addr = address;
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &daca_driver.driver;
 	new_client->flags = 0;
 	strcpy(new_client->name, client_name);
Index: at91/drivers/usb/host/ohci-pnx4008.c
===================================================================
--- at91.orig/drivers/usb/host/ohci-pnx4008.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/usb/host/ohci-pnx4008.c	2007-03-12 11:06:29.000000000 -0700
@@ -142,7 +142,7 @@ static int isp1301_attach(struct i2c_ada
 	strcpy(c->name, "isp1301");
 	c->flags = 0;
 	c->addr = addr;
-	c->adapter = adap;
+	c->dev.parent = &adap->dev;
 	c->dev.driver = &isp1301_driver.driver;
 
 	isp1301_i2c_client = c;
Index: at91/sound/soc/codecs/wm8731.c
===================================================================
--- at91.orig/sound/soc/codecs/wm8731.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/soc/codecs/wm8731.c	2007-03-12 11:06:29.000000000 -0700
@@ -620,7 +620,6 @@ static int wm8731_codec_probe(struct i2c
 	if (addr != setup->i2c_address)
 		return -ENODEV;
 
-	client_template.adapter = adap;
 	client_template.addr = addr;
 
 	i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
@@ -628,6 +627,7 @@ static int wm8731_codec_probe(struct i2c
 		kfree(codec);
 		return -ENOMEM;
 	}
+	i2c->dev.parent = &adap->dev;
 	i2c_set_clientdata(i2c, codec);
 	codec->control_data = i2c;
 
Index: at91/sound/aoa/codecs/snd-aoa-codec-onyx.c
===================================================================
--- at91.orig/sound/aoa/codecs/snd-aoa-codec-onyx.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/aoa/codecs/snd-aoa-codec-onyx.c	2007-03-12 11:06:29.000000000 -0700
@@ -1016,7 +1016,7 @@ static int onyx_create(struct i2c_adapte
 
 	mutex_init(&onyx->mutex);
 	onyx->i2c.dev.driver = &onyx_driver.driver;
-	onyx->i2c.adapter = adapter;
+	onyx->i2c.dev.parent = &adapter->dev;
 	onyx->i2c.addr = addr & 0x7f;
 	strlcpy(onyx->i2c.name, "onyx audio codec", I2C_NAME_SIZE-1);
 
Index: at91/sound/ppc/keywest.c
===================================================================
--- at91.orig/sound/ppc/keywest.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/sound/ppc/keywest.c	2007-03-12 11:06:29.000000000 -0700
@@ -70,7 +70,7 @@ static int keywest_attach_adapter(struct
 
 	new_client->addr = keywest_ctx->addr;
 	i2c_set_clientdata(new_client, keywest_ctx);
-	new_client->adapter = adapter;
+	new_client->dev.parent = &adapter->dev;
 	new_client->dev.driver = &keywest_driver.driver;
 	new_client->flags = 0;
 
Index: at91/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
===================================================================
--- at91.orig/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c	2007-03-12 11:06:29.000000000 -0700
@@ -901,7 +901,8 @@ unsigned int pvr2_i2c_report(struct pvr2
 
 static int pvr2_i2c_attach_inform(struct i2c_client *client)
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)(client->adapter->algo_data);
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct pvr2_hdw *hdw = (struct pvr2_hdw *)(adapter->algo_data);
 	struct pvr2_i2c_client *cp;
 	int fl = !(hdw->i2c_pend_types & PVR2_I2C_PEND_ALL);
 	cp = kzalloc(sizeof(*cp),GFP_KERNEL);
@@ -922,7 +923,8 @@ static int pvr2_i2c_attach_inform(struct
 
 static int pvr2_i2c_detach_inform(struct i2c_client *client)
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)(client->adapter->algo_data);
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct pvr2_hdw *hdw = (struct pvr2_hdw *)(adapter->algo_data);
 	struct pvr2_i2c_client *cp;
 	struct list_head *item,*nc;
 	unsigned long amask = 0;
Index: at91/include/media/tuner.h
===================================================================
--- at91.orig/include/media/tuner.h	2007-03-12 10:54:06.000000000 -0700
+++ at91/include/media/tuner.h	2007-03-12 11:06:29.000000000 -0700
@@ -235,15 +235,18 @@ extern int tda9887_tuner_init(struct i2c
 
 #define tuner_warn(fmt, arg...) do {\
 	printk(KERN_WARNING "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
-			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
+			i2c_adapter_id(to_i2c_adapter(t->i2c.dev.parent)), \
+			t->i2c.addr , ##arg); } while (0)
 #define tuner_info(fmt, arg...) do {\
 	printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
-			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
+			i2c_adapter_id(to_i2c_adapter(t->i2c.dev.parent)), \
+			t->i2c.addr , ##arg); } while (0)
 #define tuner_dbg(fmt, arg...) do {\
 	extern int tuner_debug; \
 	if (tuner_debug) \
 		printk(KERN_DEBUG "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
-			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
+			i2c_adapter_id(to_i2c_adapter(t->i2c.dev.parent)), \
+			t->i2c.addr , ##arg); } while (0)
 
 #endif /* __KERNEL__ */
 
Index: at91/drivers/media/video/em28xx/em28xx-i2c.c
===================================================================
--- at91.orig/drivers/media/video/em28xx/em28xx-i2c.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/em28xx/em28xx-i2c.c	2007-03-12 11:06:29.000000000 -0700
@@ -402,7 +402,8 @@ static u32 functionality(struct i2c_adap
 
 static int em28xx_set_tuner(int check_eeprom, struct i2c_client *client)
 {
-	struct em28xx *dev = client->adapter->algo_data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct em28xx *dev = adapter->algo_data;
 	struct tuner_setup tun_setup;
 
 	if (dev->has_tuner) {
@@ -422,7 +423,8 @@ static int em28xx_set_tuner(int check_ee
  */
 static int attach_inform(struct i2c_client *client)
 {
-	struct em28xx *dev = client->adapter->algo_data;
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct em28xx *dev = adapter->algo_data;
 
 	switch (client->addr << 1) {
 		case 0x43:
@@ -558,7 +560,7 @@ int em28xx_i2c_register(struct em28xx *d
 	i2c_add_adapter(&dev->i2c_adap);
 
 	dev->i2c_client = em28xx_client_template;
-	dev->i2c_client.adapter = &dev->i2c_adap;
+	dev->i2c_client.dev.parent = &dev->i2c_adap.dev;
 
 	em28xx_i2c_eeprom(dev, dev->eedata, sizeof(dev->eedata));
 
Index: at91/include/media/v4l2-common.h
===================================================================
--- at91.orig/include/media/v4l2-common.h	2007-03-12 10:54:06.000000000 -0700
+++ at91/include/media/v4l2-common.h	2007-03-12 11:06:29.000000000 -0700
@@ -41,7 +41,8 @@
 	printk(level "%s %d-%04x: " fmt, name, i2c_adapter_id(adapter), addr , ## arg)
 
 #define v4l_client_printk(level, client, fmt, arg...)			    \
-	v4l_printk(level, (client)->dev.driver->name, (client)->adapter, \
+	v4l_printk(level, (client)->dev.driver->name, \
+		to_i2c_adapter((client)->dev.parent), \
 		   (client)->addr, fmt , ## arg)
 
 #define v4l_err(client, fmt, arg...) \
Index: at91/drivers/media/video/pvrusb2/pvrusb2-eeprom.c
===================================================================
--- at91.orig/drivers/media/video/pvrusb2/pvrusb2-eeprom.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/pvrusb2/pvrusb2-eeprom.c	2007-03-12 11:06:29.000000000 -0700
@@ -129,7 +129,7 @@ int pvr2_eeprom_analyze(struct pvr2_hdw 
 		struct i2c_client fake_client;
 		/* Newer version expects a useless client interface */
 		fake_client.addr = hdw->eeprom_addr;
-		fake_client.adapter = &hdw->i2c_adap;
+		fake_client.dev.parent = &hdw->i2c_adap.dev;
 		tveeprom_hauppauge_analog(&fake_client,&tvdata,eeprom);
 	}
 
Index: at91/drivers/media/video/ovcamchip/ov6x20.c
===================================================================
--- at91.orig/drivers/media/video/ovcamchip/ov6x20.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/ovcamchip/ov6x20.c	2007-03-12 11:06:29.000000000 -0700
@@ -157,13 +157,14 @@ static struct ovcamchip_regvals regvals_
 /* This initializes the OV6x20 camera chip and relevant variables. */
 static int ov6x20_init(struct i2c_client *c)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(c->dev.parent);
 	struct ovcamchip *ov = i2c_get_clientdata(c);
 	struct ov6x20 *s;
 	int rc;
 
 	DDEBUG(4, &c->dev, "entered");
 
-	switch (c->adapter->id) {
+	switch (adapter->id) {
 	case I2C_HW_SMBUS_OV511:
 		rc = ov_write_regvals(c, regvals_init_6x20_511);
 		break;
@@ -330,6 +331,8 @@ static int ov6x20_get_control(struct i2c
 
 static int ov6x20_mode_init(struct i2c_client *c, struct ovcamchip_window *win)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(c->dev.parent);
+
 	/******** QCIF-specific regs ********/
 
 	ov_write(c, 0x14, win->quarter?0x24:0x04);
@@ -337,7 +340,7 @@ static int ov6x20_mode_init(struct i2c_c
 	/******** Palette-specific regs ********/
 
 	/* OV518 needs 8 bit multiplexed in color mode, and 16 bit in B&W */
-	if (c->adapter->id == I2C_HW_SMBUS_OV518) {
+	if (adapter->id == I2C_HW_SMBUS_OV518) {
 		if (win->format == VIDEO_PALETTE_GREY)
 			ov_write_mask(c, 0x13, 0x00, 0x20);
 		else
Index: at91/drivers/media/video/w9968cf.c
===================================================================
--- at91.orig/drivers/media/video/w9968cf.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/w9968cf.c	2007-03-12 11:06:29.000000000 -0700
@@ -1508,7 +1508,8 @@ static u32 w9968cf_i2c_func(struct i2c_a
 
 static int w9968cf_i2c_attach_inform(struct i2c_client* client)
 {
-	struct w9968cf_device* cam = i2c_get_adapdata(client->adapter);
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct w9968cf_device* cam = i2c_get_adapdata(adapter);
 	struct i2c_driver *driver = to_i2c_driver(client->dev.driver);
 	int id = driver->id, err = 0;
 
@@ -1534,7 +1535,8 @@ static int w9968cf_i2c_attach_inform(str
 
 static int w9968cf_i2c_detach_inform(struct i2c_client* client)
 {
-	struct w9968cf_device* cam = i2c_get_adapdata(client->adapter);
+	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
+	struct w9968cf_device* cam = i2c_get_adapdata(adapter);
 
 	if (cam->sensor_client == client)
 		cam->sensor_client = NULL;
Index: at91/drivers/media/video/tda9887.c
===================================================================
--- at91.orig/drivers/media/video/tda9887.c	2007-03-12 10:54:06.000000000 -0700
+++ at91/drivers/media/video/tda9887.c	2007-03-12 11:06:29.000000000 -0700
@@ -21,13 +21,15 @@
    Used as part of several tuners
 */
 
+#define adapter(c) to_i2c_adapter((c)->dev.parent)
+
 #define tda9887_info(fmt, arg...) do {\
 	printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.name, \
-			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
+			i2c_adapter_id(adapter(&t->i2c)), t->i2c.addr , ##arg); } while (0)
 #define tda9887_dbg(fmt, arg...) do {\
 	if (tuner_debug) \
 		printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.name, \
-			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
+			i2c_adapter_id(adapter(&t->i2c)), t->i2c.addr , ##arg); } while (0)
 
 
 /* ---------------------------------------------------------------------- */
Index: at91/drivers/media/video/tuner-simple.c
===================================================================
--- at91.orig/drivers/media/video/tuner-simple.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/tuner-simple.c	2007-03-12 11:06:29.000000000 -0700
@@ -334,7 +334,8 @@ static void default_set_tv_freq(struct i
 		}
 		if (params->default_pll_gating_18)
 			config |= TDA9887_GATING_18;
-		i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
+		i2c_clients_command(to_i2c_adapter(c->dev.parent),
+				TDA9887_SET_CONFIG, &config);
 	}
 	tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n",
 		  buffer[0],buffer[1],buffer[2],buffer[3]);
@@ -469,7 +470,8 @@ static void default_set_radio_freq(struc
 			config &= ~TDA9887_PORT1_ACTIVE;*/
 		if (params->fm_gain_normal)
 			config |= TDA9887_GAIN_NORMAL;
-		i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
+		i2c_clients_command(to_i2c_adapter(c->dev.parent),
+				TDA9887_SET_CONFIG, &config);
 	}
 	if (4 != (rc = i2c_master_send(c,buffer,4)))
 		tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc);
Index: at91/drivers/media/video/ovcamchip/ov6x30.c
===================================================================
--- at91.orig/drivers/media/video/ovcamchip/ov6x30.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/ovcamchip/ov6x30.c	2007-03-12 11:06:29.000000000 -0700
@@ -293,6 +293,8 @@ static int ov6x30_get_control(struct i2c
 
 static int ov6x30_mode_init(struct i2c_client *c, struct ovcamchip_window *win)
 {
+	struct i2c_adapter *adapter = to_i2c_adapter(c->dev.parent);
+
 	/******** QCIF-specific regs ********/
 
 	ov_write_mask(c, 0x14, win->quarter?0x20:0x00, 0x20);
@@ -300,7 +302,7 @@ static int ov6x30_mode_init(struct i2c_c
 	/******** Palette-specific regs ********/
 
 	if (win->format == VIDEO_PALETTE_GREY) {
-		if (c->adapter->id == I2C_HW_SMBUS_OV518) {
+		if (adapter->id == I2C_HW_SMBUS_OV518) {
 			/* Do nothing - we're already in 8-bit mode */
 		} else {
 			ov_write_mask(c, 0x13, 0x20, 0x20);
@@ -312,7 +314,7 @@ static int ov6x30_mode_init(struct i2c_c
 		 * Therefore, the OV6630 needs to be in 8-bit multiplexed
 		 * output mode */
 
-		if (c->adapter->id == I2C_HW_SMBUS_OV518) {
+		if (adapter->id == I2C_HW_SMBUS_OV518) {
 			/* Do nothing - we want to stay in 8-bit mode */
 			/* Warning: Messing with reg 0x13 breaks OV518 color */
 		} else {
Index: at91/drivers/media/video/tda8290.c
===================================================================
--- at91.orig/drivers/media/video/tda8290.c	2007-03-08 12:13:07.000000000 -0800
+++ at91/drivers/media/video/tda8290.c	2007-03-12 11:06:29.000000000 -0700
@@ -77,6 +77,7 @@ static void tda827x_tune(struct i2c_clie
 	int i;
 	struct tuner *t = i2c_get_clientdata(c);
 	struct i2c_msg msg = {.addr = t->tda827x_addr, .flags = 0};
+	struct i2c_adapter *adapter = to_i2c_adapter(c->dev.parent);
 
 	if (t->mode == V4L2_TUNER_RADIO)
 		freq = freq / 1000;
@@ -103,44 +104,44 @@ static void tda827x_tune(struct i2c_clie
 
 	msg.buf = tuner_reg;
 	msg.len = 8;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msg.buf= reg2;
 	msg.len = 2;
 	reg2[0] = 0x80;
 	reg2[1] = 0;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0x60;
 	reg2[1] = 0xbf;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0x30;
 	reg2[1] = tuner_reg[4] + 0x80;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msleep(1);
 	reg2[0] = 0x30;
 	reg2[1] = tuner_reg[4] + 4;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msleep(1);
 	reg2[0] = 0x30;
 	reg2[1] = tuner_reg[4];
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msleep(550);
 	reg2[0] = 0x30;
 	reg2[1] = (tuner_reg[4] & 0xfc) + tda827x_analog[i].cp ;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0x60;
 	reg2[1] = 0x3f;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0x80;
 	reg2[1] = 0x08;   // Vsync en
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 }
 
 static void tda827x_agcf(struct i2c_client *c)
@@ -149,7 +150,7 @@ static void tda827x_agcf(struct i2c_clie
 	unsigned char data[] = {0x80, 0x0c};
 	struct i2c_msg msg = {.addr = t->tda827x_addr, .buf = data,
 			      .flags = 0, .len = 2};
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 }
 
 /* ---------------------------------------------------------------------- */
@@ -200,6 +201,7 @@ static void tda827xa_tune(struct i2c_cli
 	int i;
 	struct tuner *t = i2c_get_clientdata(c);
 	struct i2c_msg msg = {.addr = t->tda827x_addr, .flags = 0};
+	struct i2c_adapter *adapter = to_i2c_adapter(c->dev.parent);
 
 	if (t->mode == V4L2_TUNER_RADIO)
 		freq = freq / 1000;
@@ -232,39 +234,39 @@ static void tda827xa_tune(struct i2c_cli
 
 	msg.buf = tuner_reg;
 	msg.len = 14;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msg.buf= reg2;
 	msg.len = 2;
 	reg2[0] = 0x60;
 	reg2[1] = 0x3c;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0xa0;
 	reg2[1] = 0xc0;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msleep(2);
 	reg2[0] = 0x30;
 	reg2[1] = 0x10 + tda827xa_analog[i].scr;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	msleep(550);
 	reg2[0] = 0x50;
 	reg2[1] = 0x8f + (tda827xa_analog[i].gc3 << 4);
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0x80;
 	reg2[1] = 0x28;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0xb0;
 	reg2[1] = 0x01;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 
 	reg2[0] = 0xc0;
 	reg2[1] = 0x19 + (t->tda827x_lpsel << 1);
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(adapter, &msg, 1);
 }
 
 static void tda827xa_agcf(struct i2c_client *c)
@@ -273,7 +275,7 @@ static void tda827xa_agcf(struct i2c_cli
 	unsigned char data[] = {0x80, 0x2c};
 	struct i2c_msg msg = {.addr = t->tda827x_addr, .buf = data,
 			      .flags = 0, .len = 2};
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 }
 
 /*---------------------------------------------------------------------*/
@@ -478,7 +480,7 @@ static void standby(struct i2c_client *c
 	tda8290_i2c_bridge(c, 1);
 	if (t->tda827x_ver != 0)
 		cb1[1] = 0x90;
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 	tda8290_i2c_bridge(c, 0);
 	i2c_master_send(c, tda8290_agc_tri, 2);
 	i2c_master_send(c, tda8290_standby, 2);
@@ -507,7 +509,7 @@ static void tda8290_init_tuner(struct i2
 		msg.buf = tda8275a_init;
 
 	tda8290_i2c_bridge(c, 1);
-	i2c_transfer(c->adapter, &msg, 1);
+	i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 	tda8290_i2c_bridge(c, 0);
 }
 
@@ -527,7 +529,7 @@ int tda8290_init(struct i2c_client *c)
 	tuner_addrs = 0;
 	for (i=0x60; i<= 0x63; i++) {
 		msg.addr = i;
-		ret = i2c_transfer(c->adapter, &msg, 1);
+		ret = i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 		if (ret == 1) {
 			tuners_found++;
 			tuner_addrs = (tuner_addrs << 8) + i;
@@ -541,7 +543,8 @@ int tda8290_init(struct i2c_client *c)
 	if(tuners_found > 1)
 		for (i = 0; i < tuners_found; i++) {
 			msg.addr = tuner_addrs  & 0xff;
-			ret = i2c_transfer(c->adapter, &msg, 1);
+			ret = i2c_transfer(to_i2c_adapter(c->dev.parent),
+					&msg, 1);
 			if(ret == 1)
 				tuner_addrs = tuner_addrs >> 8;
 			else
@@ -559,7 +562,7 @@ int tda8290_init(struct i2c_client *c)
 	msg.addr = tuner_addrs;
 
 	tda8290_i2c_bridge(c, 1);
-	ret = i2c_transfer(c->adapter, &msg, 1);
+	ret = i2c_transfer(to_i2c_adapter(c->dev.parent), &msg, 1);
 	if( ret != 1)
 		tuner_warn ("TDA827x access failed!\n");
 	if ((data & 0x3c) == 0) {



More information about the i2c mailing list