[i2c] [patch 2.6.21-rc3-git +i2c 1/4] remove i2c_client.driver

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


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

	i2c_client.driver == to_i2c_driver(i2c_client.dev.driver)

The i2c_client.driver 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.

Worth noting:  various I2C drivers initialize their i2c_client by copying
from a "template", usually initializing one or two fields, and otherwise
unused.  Many of those drivers even misuse that idiom ... templates should
be read-only!  Such templates are a waste of both code and data space; so
that idiom would be worth removing from the i2c drivers in the kernel tree.
(A possible task for kernel janitors?)

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

---
This follows previous i2c core updates ...

NOTE: Not everything here has been test-built.  Also, some parts of this
could be merged before the actual removal of i2c_client.driver, helping
create smaller patches:  the parts that don't initialize either field,
but need the driver for equality testing or its name for diagnostics.

 Documentation/i2c/writing-clients                    |    2 
 arch/arm/mach-pxa/akita-ioexp.c                      |    4 -
 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                                 |    4 +
 drivers/hwmon/lm80.c                                 |    2 
 drivers/hwmon/lm83.c                                 |    2 
 drivers/hwmon/lm85.c                                 |    2 
 drivers/hwmon/lm87.c                                 |    2 
 drivers/hwmon/lm90.c                                 |    2 
 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                              |    6 +-
 drivers/hwmon/w83791d.c                              |    4 -
 drivers/hwmon/w83792d.c                              |    4 -
 drivers/hwmon/w83793.c                               |    4 -
 drivers/hwmon/w83l785ts.c                            |    2 
 drivers/i2c/busses/i2c-isa.c                         |    4 -
 drivers/i2c/chips/ds1337.c                           |    2 
 drivers/i2c/chips/ds1374.c                           |    2 
 drivers/i2c/chips/eeprom.c                           |    2 
 drivers/i2c/chips/isp1301_omap.c                     |    2 
 drivers/i2c/chips/m41t00.c                           |    2 
 drivers/i2c/chips/max6875.c                          |    4 -
 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                               |   48 ++++++++-----------
 drivers/i2c/i2c-dev.c                                |    2 
 drivers/macintosh/therm_adt746x.c                    |    2 
 drivers/macintosh/therm_pm72.c                       |    2 
 drivers/macintosh/therm_windtunnel.c                 |    2 
 drivers/macintosh/windfarm_lm75_sensor.c             |    2 
 drivers/macintosh/windfarm_max6690_sensor.c          |    2 
 drivers/macintosh/windfarm_smu_sat.c                 |    2 
 drivers/media/video/adv7170.c                        |    2 
 drivers/media/video/adv7175.c                        |    2 
 drivers/media/video/bt819.c                          |    2 
 drivers/media/video/bt856.c                          |    2 
 drivers/media/video/bt866.c                          |    2 
 drivers/media/video/cs53l32a.c                       |    2 
 drivers/media/video/indycam.c                        |    2 
 drivers/media/video/ir-kbd-i2c.c                     |    2 
 drivers/media/video/ks0127.c                         |    2 
 drivers/media/video/msp3400-driver.c                 |    2 
 drivers/media/video/ov7670.c                         |    2 
 drivers/media/video/ovcamchip/ovcamchip_core.c       |    2 
 drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c |    2 
 drivers/media/video/pvrusb2/pvrusb2-i2c-core.c       |   16 ++++--
 drivers/media/video/saa5246a.c                       |    2 
 drivers/media/video/saa5249.c                        |    2 
 drivers/media/video/saa6588.c                        |    2 
 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/saa7185.c                        |    2 
 drivers/media/video/saa7191.c                        |    2 
 drivers/media/video/tda9840.c                        |    2 
 drivers/media/video/tda9875.c                        |    2 
 drivers/media/video/tda9887.c                        |    2 
 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                     |    4 -
 drivers/media/video/tvaudio.c                        |    2 
 drivers/media/video/tveeprom.c                       |    2 
 drivers/media/video/tvp5150.c                        |    8 +--
 drivers/media/video/upd64031a.c                      |    2 
 drivers/media/video/upd64083.c                       |    2 
 drivers/media/video/v4l2-common.c                    |    4 +
 drivers/media/video/vpx3220.c                        |    2 
 drivers/media/video/w9968cf.c                        |   15 +++--
 drivers/media/video/wm8739.c                         |    2 
 drivers/media/video/wm8775.c                         |    2 
 drivers/rtc/rtc-ds1672.c                             |    2 
 drivers/rtc/rtc-isl1208.c                            |    2 
 drivers/rtc/rtc-pcf8563.c                            |    2 
 drivers/rtc/rtc-pcf8583.c                            |    2 
 drivers/rtc/rtc-rs5c372.c                            |    2 
 drivers/rtc/rtc-x1205.c                              |    2 
 drivers/usb/host/ohci-pnx4008.c                      |    2 
 drivers/video/matrox/matroxfb_maven.c                |    2 
 drivers/w1/masters/ds2482.c                          |    2 
 include/linux/i2c.h                                  |    1 
 include/media/tuner.h                                |    6 +-
 include/media/v4l2-common.h                          |    2 
 sound/aoa/codecs/snd-aoa-codec-onyx.c                |    2 
 sound/aoa/codecs/snd-aoa-codec-tas.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 
 122 files changed, 181 insertions(+), 169 deletions(-)

Index: at91/include/linux/i2c.h
===================================================================
--- at91.orig/include/linux/i2c.h	2007-03-12 09:38:14.000000000 -0700
+++ at91/include/linux/i2c.h	2007-03-12 10:54:06.000000000 -0700
@@ -168,7 +168,6 @@ struct i2c_client {
 					/* _LOWER_ 7 bits		*/
 	char name[I2C_NAME_SIZE];
 	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
-	struct i2c_driver *driver;	/* and our access routines	*/
 	int usage_count;		/* How many accesses currently  */
 					/* to the client		*/
 	struct device dev;		/* the device structure		*/
Index: at91/include/media/tuner.h
===================================================================
--- at91.orig/include/media/tuner.h	2007-03-12 09:38:13.000000000 -0700
+++ at91/include/media/tuner.h	2007-03-12 10:54:06.000000000 -0700
@@ -234,15 +234,15 @@ extern int tea5767_autodetection(struct 
 extern int tda9887_tuner_init(struct i2c_client *c);
 
 #define tuner_warn(fmt, arg...) do {\
-	printk(KERN_WARNING "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
+	printk(KERN_WARNING "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
 			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
 #define tuner_info(fmt, arg...) do {\
-	printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
+	printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
 			i2c_adapter_id(t->i2c.adapter), 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.driver->driver.name, \
+		printk(KERN_DEBUG "%s %d-%04x: " fmt, t->i2c.dev.driver->name, \
 			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
 
 #endif /* __KERNEL__ */
Index: at91/include/media/v4l2-common.h
===================================================================
--- at91.orig/include/media/v4l2-common.h	2007-03-08 12:13:11.000000000 -0800
+++ at91/include/media/v4l2-common.h	2007-03-12 10:54:06.000000000 -0700
@@ -41,7 +41,7 @@
 	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)->driver->driver.name, (client)->adapter, \
+	v4l_printk(level, (client)->dev.driver->name, (client)->adapter, \
 		   (client)->addr, fmt , ## arg)
 
 #define v4l_err(client, fmt, arg...) \
Index: at91/Documentation/i2c/writing-clients
===================================================================
--- at91.orig/Documentation/i2c/writing-clients	2007-03-12 09:38:14.000000000 -0700
+++ at91/Documentation/i2c/writing-clients	2007-03-12 10:54:06.000000000 -0700
@@ -390,7 +390,7 @@ For now, you can ignore the `flags' para
 
     new_client->addr = address;
     new_client->adapter = adapter;
-    new_client->driver = &foo_driver;
+    new_client->dev.driver = &foo_driver.driver;
     new_client->flags = 0;
 
     /* Now, we do the remaining detection. If no `force' parameter is used. */
Index: at91/drivers/i2c/i2c-core.c
===================================================================
--- at91.orig/drivers/i2c/i2c-core.c	2007-03-12 09:38:15.000000000 -0700
+++ at91/drivers/i2c/i2c-core.c	2007-03-12 10:56:35.000000000 -0700
@@ -96,7 +96,6 @@ static int i2c_device_probe(struct devic
 
 	if (!driver->probe)
 		return -ENODEV;
-	client->driver = driver;
 	dev_dbg(dev, "probe\n");
 	return driver->probe(client);
 }
@@ -105,22 +104,15 @@ static int i2c_device_remove(struct devi
 {
 	struct i2c_client	*client = to_i2c_client(dev);
 	struct i2c_driver	*driver;
-	int			status;
 
 	if (!dev->driver)
 		return 0;
-
 	driver = to_i2c_driver(dev->driver);
-	if (driver->remove) {
-		dev_dbg(dev, "remove\n");
-		status = driver->remove(client);
-	} else {
-		dev->driver = NULL;
-		status = 0;
-	}
-	if (status == 0)
-		client->driver = NULL;
-	return status;
+
+	if (!driver->remove)
+		return 0;
+	dev_dbg(dev, "remove\n");
+	return driver->remove(client);
 }
 
 static void i2c_device_shutdown(struct device *dev)
@@ -252,7 +244,7 @@ EXPORT_SYMBOL_GPL(i2c_new_device);
 void i2c_unregister_device(struct i2c_client *client)
 {
 	struct i2c_adapter	*adap = client->adapter;
-	struct i2c_driver	*driver = client->driver;
+	struct i2c_driver	*driver = to_i2c_driver(client->dev.driver);
 	int			status;
 
 	if (driver && !is_newstyle_driver(driver)) {
@@ -512,7 +504,9 @@ int i2c_del_adapter(struct i2c_adapter *
 		struct i2c_driver	*driver;
 
 		client = list_entry(item, struct i2c_client, list);
-		driver = client->driver;
+		driver = client->dev.driver
+			? to_i2c_driver(client->dev.driver)
+			: NULL;
 
 		/* new style, follow standard driver model */
 		if (!driver || is_newstyle_driver(driver)) {
@@ -637,8 +631,9 @@ int i2c_del_driver(struct i2c_driver *dr
 			}
 		} else {
 			list_for_each_safe(item2, _n, &adap->clients) {
-				client = list_entry(item2, struct i2c_client, list);
-				if (client->driver != driver)
+				client = list_entry(item2, struct i2c_client,
+						list);
+				if (client->dev.driver != &driver->driver)
 					continue;
 				dev_dbg(&adap->dev, "detaching client [%s] "
 					"at 0x%02x\n", client->name,
@@ -707,8 +702,6 @@ int i2c_attach_client(struct i2c_client 
 	client->usage_count = 0;
 
 	client->dev.parent = &client->adapter->dev;
-	if (client->driver)
-		client->dev.driver = &client->driver->driver;
 	client->dev.bus = &i2c_bus_type;
 	client->dev.release = &i2c_client_release;
 
@@ -777,10 +770,10 @@ EXPORT_SYMBOL(i2c_detach_client);
 static int i2c_inc_use_client(struct i2c_client *client)
 {
 
-	if (!try_module_get(client->driver->driver.owner))
+	if (!try_module_get(client->dev.driver->owner))
 		return -ENODEV;
 	if (!try_module_get(client->adapter->owner)) {
-		module_put(client->driver->driver.owner);
+		module_put(client->dev.driver->owner);
 		return -ENODEV;
 	}
 
@@ -789,7 +782,7 @@ static int i2c_inc_use_client(struct i2c
 
 static void i2c_dec_use_client(struct i2c_client *client)
 {
-	module_put(client->driver->driver.owner);
+	module_put(client->dev.driver->owner);
 	module_put(client->adapter->owner);
 }
 
@@ -829,15 +822,18 @@ void i2c_clients_command(struct i2c_adap
 
 	mutex_lock(&adap->clist_lock);
 	list_for_each(item,&adap->clients) {
+		struct i2c_driver *driver;
+
 		client = list_entry(item, struct i2c_client, list);
-		if (!try_module_get(client->driver->driver.owner))
+		driver = to_i2c_driver(client->dev.driver);
+		if (!try_module_get(driver->driver.owner))
 			continue;
-		if (NULL != client->driver->command) {
+		if (NULL != driver->command) {
 			mutex_unlock(&adap->clist_lock);
-			client->driver->command(client,cmd,arg);
+			driver->command(client,cmd,arg);
 			mutex_lock(&adap->clist_lock);
 		}
-		module_put(client->driver->driver.owner);
+		module_put(driver->driver.owner);
        }
        mutex_unlock(&adap->clist_lock);
 }
Index: at91/drivers/i2c/i2c-dev.c
===================================================================
--- at91.orig/drivers/i2c/i2c-dev.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/i2c-dev.c	2007-03-12 10:54:06.000000000 -0700
@@ -372,7 +372,7 @@ static int i2cdev_open(struct inode *ino
 		return -ENOMEM;
 	}
 	snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr);
-	client->driver = &i2cdev_driver;
+	client->dev.driver = &i2cdev_driver.driver;
 
 	/* registered with adapter, passed as client to user */
 	client->adapter = adap;
Index: at91/drivers/i2c/busses/i2c-isa.c
===================================================================
--- at91.orig/drivers/i2c/busses/i2c-isa.c	2007-03-12 09:38:14.000000000 -0700
+++ at91/drivers/i2c/busses/i2c-isa.c	2007-03-12 10:54:06.000000000 -0700
@@ -109,7 +109,7 @@ int i2c_isa_del_driver(struct i2c_driver
 	/* Detach all clients belonging to this one driver */
 	list_for_each_safe(item, _n, &isa_adapter.clients) {
 		client = list_entry(item, struct i2c_client, list);
-		if (client->driver != driver)
+		if (client->dev.driver != &driver->driver)
 			continue;
 		dev_dbg(&isa_adapter.dev, "Detaching client %s at 0x%x\n",
 			client->name, client->addr);
@@ -177,7 +177,7 @@ static void __exit i2c_isa_exit(void)
 	list_for_each_safe(item, _n, &isa_adapter.clients) {
 		client = list_entry(item, struct i2c_client, list);
 		dev_err(&isa_adapter.dev, "Driver %s still has an active "
-			"ISA client at 0x%x\n", client->driver->driver.name,
+			"ISA client at 0x%x\n", client->dev.driver->name,
 			client->addr);
 	}
 	if (client != NULL)
Index: at91/drivers/rtc/rtc-pcf8563.c
===================================================================
--- at91.orig/drivers/rtc/rtc-pcf8563.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-pcf8563.c	2007-03-12 10:54:06.000000000 -0700
@@ -293,7 +293,7 @@ static int pcf8563_probe(struct i2c_adap
 
 	client = &pcf8563->client;
 	client->addr = address;
-	client->driver = &pcf8563_driver;
+	client->dev.driver = &pcf8563_driver.driver;
 	client->adapter	= adapter;
 
 	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-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-rs5c372.c	2007-03-12 10:54:06.000000000 -0700
@@ -522,7 +522,7 @@ static int rs5c372_probe(struct i2c_adap
 
 	/* I2C client */
 	client->addr = address;
-	client->driver = &rs5c372_driver;
+	client->dev.driver = &rs5c372_driver.driver;
 	client->adapter = adapter;
 
 	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-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-ds1672.c	2007-03-12 10:54:06.000000000 -0700
@@ -213,7 +213,7 @@ static int ds1672_probe(struct i2c_adapt
 
 	/* I2C client */
 	client->addr = address;
-	client->driver = &ds1672_driver;
+	client->dev.driver = &ds1672_driver.driver;
 	client->adapter	= adapter;
 
 	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-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-pcf8583.c	2007-03-12 10:54:06.000000000 -0700
@@ -340,7 +340,7 @@ static int pcf8583_probe(struct i2c_adap
 
 	client->addr		= addr;
 	client->adapter	= adap;
-	client->driver	= &pcf8583_driver;
+	client->dev.driver = &pcf8583_driver.driver;
 
 	strlcpy(client->name, pcf8583_driver.driver.name, I2C_NAME_SIZE);
 
Index: at91/drivers/rtc/rtc-x1205.c
===================================================================
--- at91.orig/drivers/rtc/rtc-x1205.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-x1205.c	2007-03-12 10:54:06.000000000 -0700
@@ -520,7 +520,7 @@ static int x1205_probe(struct i2c_adapte
 
 	/* I2C client */
 	client->addr = address;
-	client->driver = &x1205_driver;
+	client->dev.driver = &x1205_driver.driver;
 	client->adapter	= adapter;
 
 	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-08 12:13:11.000000000 -0800
+++ at91/drivers/rtc/rtc-isl1208.c	2007-03-12 10:54:06.000000000 -0700
@@ -483,7 +483,7 @@ isl1208_probe(struct i2c_adapter *adapte
 
 	new_client->addr = addr;
 	new_client->adapter = adapter;
-	new_client->driver = &isl1208_driver;
+	new_client->dev.driver = &isl1208_driver.driver;
 	new_client->flags = 0;
 	strcpy(new_client->name, DRV_NAME);
 
Index: at91/drivers/i2c/chips/tps65010.c
===================================================================
--- at91.orig/drivers/i2c/chips/tps65010.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/tps65010.c	2007-03-12 10:54:06.000000000 -0700
@@ -512,7 +512,7 @@ tps65010_probe(struct i2c_adapter *bus, 
 	tps->irq = -1;
 	tps->client.addr = address;
 	tps->client.adapter = bus;
-	tps->client.driver = &tps65010_driver;
+	tps->client.dev.driver = &tps65010_driver.driver;
 	strlcpy(tps->client.name, DRIVER_NAME, I2C_NAME_SIZE);
 
 	status = i2c_attach_client(&tps->client);
Index: at91/drivers/i2c/chips/ds1337.c
===================================================================
--- at91.orig/drivers/i2c/chips/ds1337.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/ds1337.c	2007-03-12 10:54:06.000000000 -0700
@@ -256,7 +256,7 @@ static int ds1337_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &ds1337_driver;
+	new_client->dev.driver = &ds1337_driver.driver;
 	new_client->flags = 0;
 
 	/*
Index: at91/drivers/i2c/chips/eeprom.c
===================================================================
--- at91.orig/drivers/i2c/chips/eeprom.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/eeprom.c	2007-03-12 10:54:06.000000000 -0700
@@ -181,7 +181,7 @@ static int eeprom_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &eeprom_driver;
+	new_client->dev.driver = &eeprom_driver.driver;
 	new_client->flags = 0;
 
 	/* Fill in the remaining client fields */
Index: at91/drivers/i2c/chips/pcf8574.c
===================================================================
--- at91.orig/drivers/i2c/chips/pcf8574.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/pcf8574.c	2007-03-12 10:54:06.000000000 -0700
@@ -146,7 +146,7 @@ static int pcf8574_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &pcf8574_driver;
+	new_client->dev.driver = &pcf8574_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we would do the remaining detection. But the PCF8574 is plainly
Index: at91/drivers/i2c/chips/pca9539.c
===================================================================
--- at91.orig/drivers/i2c/chips/pca9539.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/pca9539.c	2007-03-12 10:54:06.000000000 -0700
@@ -131,7 +131,7 @@ static int pca9539_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &pca9539_driver;
+	new_client->dev.driver = &pca9539_driver.driver;
 	new_client->flags = 0;
 
 	if (kind < 0) {
Index: at91/drivers/i2c/chips/pcf8591.c
===================================================================
--- at91.orig/drivers/i2c/chips/pcf8591.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/pcf8591.c	2007-03-12 10:54:06.000000000 -0700
@@ -210,7 +210,7 @@ static int pcf8591_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &pcf8591_driver;
+	new_client->dev.driver = &pcf8591_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we would do the remaining detection. But the PCF8591 is plainly
Index: at91/drivers/i2c/chips/m41t00.c
===================================================================
--- at91.orig/drivers/i2c/chips/m41t00.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/m41t00.c	2007-03-12 10:54:06.000000000 -0700
@@ -305,7 +305,7 @@ m41t00_probe(struct i2c_adapter *adap, i
 	strlcpy(client->name, m41t00_chip->name, I2C_NAME_SIZE);
 	client->addr = addr;
 	client->adapter = adap;
-	client->driver = &m41t00_driver;
+	client->dev.driver = &m41t00_driver.driver;
 
 	if ((rc = i2c_attach_client(client)))
 		goto attach_err;
Index: at91/drivers/i2c/chips/ds1374.c
===================================================================
--- at91.orig/drivers/i2c/chips/ds1374.c	2007-03-12 09:38:14.000000000 -0700
+++ at91/drivers/i2c/chips/ds1374.c	2007-03-12 10:54:06.000000000 -0700
@@ -204,7 +204,7 @@ static int ds1374_probe(struct i2c_adapt
 	strncpy(client->name, DS1374_DRV_NAME, I2C_NAME_SIZE);
 	client->addr = addr;
 	client->adapter = adap;
-	client->driver = &ds1374_driver;
+	client->dev.driver = &ds1374_driver.driver;
 
 	ds1374_workqueue = create_singlethread_workqueue("ds1374");
 	if (!ds1374_workqueue) {
Index: at91/drivers/i2c/chips/isp1301_omap.c
===================================================================
--- at91.orig/drivers/i2c/chips/isp1301_omap.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/isp1301_omap.c	2007-03-12 10:54:06.000000000 -0700
@@ -1503,7 +1503,7 @@ static int isp1301_probe(struct i2c_adap
 	isp->client.addr = address;
 	i2c_set_clientdata(&isp->client, isp);
 	isp->client.adapter = bus;
-	isp->client.driver = &isp1301_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/i2c/chips/max6875.c	2007-03-12 10:54:06.000000000 -0700
@@ -193,7 +193,7 @@ static int max6875_detect(struct i2c_ada
 	i2c_set_clientdata(real_client, data);
 	real_client->addr = address;
 	real_client->adapter = adapter;
-	real_client->driver = &max6875_driver;
+	real_client->dev.driver = &max6875_driver.driver;
 	real_client->flags = 0;
 	strlcpy(real_client->name, "max6875", I2C_NAME_SIZE);
 	mutex_init(&data->update_lock);
@@ -202,7 +202,7 @@ static int max6875_detect(struct i2c_ada
 	i2c_set_clientdata(fake_client, NULL);
 	fake_client->addr = address | 1;
 	fake_client->adapter = adapter;
-	fake_client->driver = &max6875_driver;
+	fake_client->dev.driver = &max6875_driver.driver;
 	fake_client->flags = 0;
 	strlcpy(fake_client->name, "max6875 subclient", I2C_NAME_SIZE);
 
Index: at91/drivers/macintosh/windfarm_smu_sat.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_smu_sat.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/windfarm_smu_sat.c	2007-03-12 10:54:06.000000000 -0700
@@ -256,7 +256,7 @@ static void wf_sat_create(struct i2c_ada
 	init_MUTEX(&sat->mutex);
 	sat->i2c.addr = (addr >> 1) & 0x7f;
 	sat->i2c.adapter = adapter;
-	sat->i2c.driver = &wf_sat_driver;
+	sat->i2c.dev.driver = &wf_sat_driver.driver;
 	strncpy(sat->i2c.name, "smu-sat", I2C_NAME_SIZE-1);
 
 	if (i2c_attach_client(&sat->i2c)) {
Index: at91/drivers/macintosh/therm_adt746x.c
===================================================================
--- at91.orig/drivers/macintosh/therm_adt746x.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/therm_adt746x.c	2007-03-12 10:54:06.000000000 -0700
@@ -388,7 +388,7 @@ static int attach_one_thermostat(struct 
 	memset(th, 0, sizeof(*th));
 	th->clt.addr = addr;
 	th->clt.adapter = adapter;
-	th->clt.driver = &thermostat_driver;
+	th->clt.dev.driver = &thermostat_driver.driver;
 	strcpy(th->clt.name, "thermostat");
 
 	rc = read_reg(th, 0);
Index: at91/drivers/macintosh/therm_windtunnel.c
===================================================================
--- at91.orig/drivers/macintosh/therm_windtunnel.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/therm_windtunnel.c	2007-03-12 10:54:06.000000000 -0700
@@ -437,7 +437,7 @@ do_probe( struct i2c_adapter *adapter, i
 
 	cl->addr = addr;
 	cl->adapter = adapter;
-	cl->driver = &g4fan_driver;
+	cl->dev.driver = &g4fan_driver.driver;
 	cl->flags = 0;
 
 	if( addr < 0x48 )
Index: at91/drivers/macintosh/therm_pm72.c
===================================================================
--- at91.orig/drivers/macintosh/therm_pm72.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/therm_pm72.c	2007-03-12 10:54:06.000000000 -0700
@@ -326,7 +326,7 @@ static struct i2c_client *attach_i2c_chi
 
 	clt->addr = (id >> 1) & 0x7f;
 	clt->adapter = adap;
-	clt->driver = &therm_pm72_driver;
+	clt->dev.driver = &therm_pm72_driver.driver;
 	strncpy(clt->name, name, I2C_NAME_SIZE-1);
 
 	if (i2c_attach_client(clt)) {
Index: at91/drivers/macintosh/windfarm_max6690_sensor.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_max6690_sensor.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/windfarm_max6690_sensor.c	2007-03-12 10:54:06.000000000 -0700
@@ -93,7 +93,7 @@ static void wf_max6690_create(struct i2c
 	max->sens.name = name;
 	max->i2c.addr = addr >> 1;
 	max->i2c.adapter = adapter;
-	max->i2c.driver = &wf_max6690_driver;
+	max->i2c.dev.driver = &wf_max6690_driver.driver;
 	strncpy(max->i2c.name, name, I2C_NAME_SIZE-1);
 
 	if (i2c_attach_client(&max->i2c)) {
Index: at91/drivers/macintosh/windfarm_lm75_sensor.c
===================================================================
--- at91.orig/drivers/macintosh/windfarm_lm75_sensor.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/macintosh/windfarm_lm75_sensor.c	2007-03-12 10:54:06.000000000 -0700
@@ -136,7 +136,7 @@ static struct wf_lm75_sensor *wf_lm75_cr
 	lm->ds1775 = ds1775;
 	lm->i2c.addr = (addr >> 1) & 0x7f;
 	lm->i2c.adapter = adapter;
-	lm->i2c.driver = &wf_lm75_driver;
+	lm->i2c.dev.driver = &wf_lm75_driver.driver;
 	strncpy(lm->i2c.name, lm->sens.name, I2C_NAME_SIZE-1);
 
 	rc = i2c_attach_client(&lm->i2c);
Index: at91/arch/arm/mach-pxa/akita-ioexp.c
===================================================================
--- at91.orig/arch/arm/mach-pxa/akita-ioexp.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/arch/arm/mach-pxa/akita-ioexp.c	2007-03-12 10:54:06.000000000 -0700
@@ -133,8 +133,8 @@ static struct i2c_driver max7310_i2c_dri
 };
 
 static struct i2c_client max7310_template = {
-	name:   "akita-max7310",
-	driver: &max7310_i2c_driver,
+	.name =   "akita-max7310",
+	.dev.driver = &max7310_i2c_driver.driver,
 };
 
 void akita_set_ioexp(struct device *dev, unsigned char bit)
Index: at91/drivers/w1/masters/ds2482.c
===================================================================
--- at91.orig/drivers/w1/masters/ds2482.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/w1/masters/ds2482.c	2007-03-12 10:54:06.000000000 -0700
@@ -449,7 +449,7 @@ static int ds2482_detect(struct i2c_adap
 	new_client = &data->client;
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
-	new_client->driver = &ds2482_driver;
+	new_client->dev.driver = &ds2482_driver.driver;
 	new_client->adapter = adapter;
 
 	/* Reset the device (sets the read_ptr to status) */
Index: at91/drivers/usb/host/ohci-pnx4008.c
===================================================================
--- at91.orig/drivers/usb/host/ohci-pnx4008.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/usb/host/ohci-pnx4008.c	2007-03-12 10:54:06.000000000 -0700
@@ -143,7 +143,7 @@ static int isp1301_attach(struct i2c_ada
 	c->flags = 0;
 	c->addr = addr;
 	c->adapter = adap;
-	c->driver = &isp1301_driver;
+	c->dev.driver = &isp1301_driver.driver;
 
 	isp1301_i2c_client = c;
 
Index: at91/drivers/video/matrox/matroxfb_maven.c
===================================================================
--- at91.orig/drivers/video/matrox/matroxfb_maven.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/video/matrox/matroxfb_maven.c	2007-03-12 10:54:06.000000000 -0700
@@ -1250,7 +1250,7 @@ static int maven_detect_client(struct i2
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &maven_driver;
+	new_client->dev.driver = &maven_driver.driver;
 	new_client->flags = 0;
 	strlcpy(new_client->name, "maven", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(new_client)))
Index: at91/sound/ppc/keywest.c
===================================================================
--- at91.orig/sound/ppc/keywest.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/ppc/keywest.c	2007-03-12 10:54:06.000000000 -0700
@@ -71,7 +71,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->driver = &keywest_driver;
+	new_client->dev.driver = &keywest_driver.driver;
 	new_client->flags = 0;
 
 	strcpy(i2c_device_name(new_client), keywest_ctx->name);
Index: at91/sound/soc/codecs/wm8750.c
===================================================================
--- at91.orig/sound/soc/codecs/wm8750.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/soc/codecs/wm8750.c	2007-03-12 10:54:06.000000000 -0700
@@ -950,7 +950,7 @@ static struct i2c_driver wm8750_i2c_driv
 
 static struct i2c_client client_template = {
 	.name =   "WM8750",
-	.driver = &wm8750_i2c_driver,
+	.dev.driver = &wm8750_i2c_driver.driver,
 };
 #endif
 
Index: at91/sound/soc/codecs/wm8731.c
===================================================================
--- at91.orig/sound/soc/codecs/wm8731.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/soc/codecs/wm8731.c	2007-03-12 10:54:06.000000000 -0700
@@ -678,7 +678,7 @@ static struct i2c_driver wm8731_i2c_driv
 
 static struct i2c_client client_template = {
 	.name =   "WM8731",
-	.driver = &wm8731_i2c_driver,
+	.dev.driver = &wm8731_i2c_driver.driver,
 };
 #endif
 
Index: at91/sound/aoa/codecs/snd-aoa-codec-onyx.c
===================================================================
--- at91.orig/sound/aoa/codecs/snd-aoa-codec-onyx.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/aoa/codecs/snd-aoa-codec-onyx.c	2007-03-12 10:54:06.000000000 -0700
@@ -1015,7 +1015,7 @@ static int onyx_create(struct i2c_adapte
 		return -ENOMEM;
 
 	mutex_init(&onyx->mutex);
-	onyx->i2c.driver = &onyx_driver;
+	onyx->i2c.dev.driver = &onyx_driver.driver;
 	onyx->i2c.adapter = adapter;
 	onyx->i2c.addr = addr & 0x7f;
 	strlcpy(onyx->i2c.name, "onyx audio codec", I2C_NAME_SIZE-1);
Index: at91/sound/aoa/codecs/snd-aoa-codec-tas.c
===================================================================
--- at91.orig/sound/aoa/codecs/snd-aoa-codec-tas.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/aoa/codecs/snd-aoa-codec-tas.c	2007-03-12 10:54:06.000000000 -0700
@@ -894,7 +894,7 @@ static int tas_create(struct i2c_adapter
 		return -ENOMEM;
 
 	mutex_init(&tas->mtx);
-	tas->i2c.driver = &tas_driver;
+	tas->i2c.dev.driver = &tas_driver.driver;
 	tas->i2c.adapter = adapter;
 	tas->i2c.addr = addr;
 	/* seems that half is a saner default */
Index: at91/drivers/hwmon/asb100.c
===================================================================
--- at91.orig/drivers/hwmon/asb100.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/asb100.c	2007-03-12 10:54:06.000000000 -0700
@@ -707,7 +707,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]->driver = &asb100_driver;
+		data->lm75[i]->dev.driver = &asb100_driver.driver;
 		data->lm75[i]->flags = 0;
 		strlcpy(data->lm75[i]->name, "asb100 subclient", I2C_NAME_SIZE);
 	}
@@ -765,7 +765,7 @@ static int asb100_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &asb100_driver;
+	new_client->dev.driver = &asb100_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/smsc47m192.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47m192.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/smsc47m192.c	2007-03-12 10:54:06.000000000 -0700
@@ -502,7 +502,7 @@ static int smsc47m192_detect(struct i2c_
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &smsc47m192_driver;
+	client->dev.driver = &smsc47m192_driver.driver;
 
 	if (kind == 0)
 		kind = smsc47m192;
Index: at91/drivers/hwmon/adm1025.c
===================================================================
--- at91.orig/drivers/hwmon/adm1025.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm1025.c	2007-03-12 10:54:06.000000000 -0700
@@ -384,7 +384,7 @@ static int adm1025_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &adm1025_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm85.c	2007-03-12 10:54:06.000000000 -0700
@@ -1132,7 +1132,7 @@ static int lm85_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm85_driver;
+	new_client->dev.driver = &lm85_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/adm1031.c
===================================================================
--- at91.orig/drivers/hwmon/adm1031.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm1031.c	2007-03-12 10:54:06.000000000 -0700
@@ -805,7 +805,7 @@ static int adm1031_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &adm1031_driver;
+	new_client->dev.driver = &adm1031_driver.driver;
 	new_client->flags = 0;
 
 	if (kind < 0) {
Index: at91/drivers/hwmon/w83627hf.c
===================================================================
--- at91.orig/drivers/hwmon/w83627hf.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83627hf.c	2007-03-12 10:54:06.000000000 -0700
@@ -1102,7 +1102,7 @@ static int w83627hf_detect(struct i2c_ad
 	new_client->addr = address;
 	mutex_init(&data->lock);
 	new_client->adapter = adapter;
-	new_client->driver = &w83627hf_driver;
+	new_client->dev.driver = &w83627hf_driver.driver;
 	new_client->flags = 0;
 
 
Index: at91/sound/oss/dmasound/tas_common.c
===================================================================
--- at91.orig/sound/oss/dmasound/tas_common.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/oss/dmasound/tas_common.c	2007-03-12 10:54:06.000000000 -0700
@@ -141,7 +141,7 @@ tas_detect_client(struct i2c_adapter *ad
 
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &tas_driver;
+	new_client->dev.driver = &tas_driver.driver;
 	strlcpy(new_client->name, client_name, DEVICE_NAME_SIZE);
 
         if (driver_hooks->init(new_client))
Index: at91/drivers/hwmon/lm75.c
===================================================================
--- at91.orig/drivers/hwmon/lm75.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm75.c	2007-03-12 10:54:06.000000000 -0700
@@ -149,7 +149,7 @@ static int lm75_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm75_driver;
+	new_client->dev.driver = &lm75_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. There is no identification-
Index: at91/drivers/hwmon/gl520sm.c
===================================================================
--- at91.orig/drivers/hwmon/gl520sm.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/gl520sm.c	2007-03-12 10:54:06.000000000 -0700
@@ -574,7 +574,7 @@ static int gl520_detect(struct i2c_adapt
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &gl520_driver;
+	new_client->dev.driver = &gl520_driver.driver;
 	new_client->flags = 0;
 
 	/* Determine the chip type. */
Index: at91/drivers/hwmon/adm1021.c
===================================================================
--- at91.orig/drivers/hwmon/adm1021.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm1021.c	2007-03-12 10:54:06.000000000 -0700
@@ -229,7 +229,7 @@ static int adm1021_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &adm1021_driver;
+	new_client->dev.driver = &adm1021_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/ds1621.c
===================================================================
--- at91.orig/drivers/hwmon/ds1621.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/ds1621.c	2007-03-12 10:54:06.000000000 -0700
@@ -225,7 +225,7 @@ static int ds1621_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &ds1621_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/via686a.c	2007-03-12 10:54:06.000000000 -0700
@@ -676,7 +676,7 @@ static int via686a_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &via686a_driver;
+	new_client->dev.driver = &via686a_driver.driver;
 	new_client->flags = 0;
 
 	/* Fill in the remaining client fields and put into the global list */
Index: at91/drivers/hwmon/adm1026.c
===================================================================
--- at91.orig/drivers/hwmon/adm1026.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm1026.c	2007-03-12 10:54:06.000000000 -0700
@@ -1596,7 +1596,7 @@ static int adm1026_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &adm1026_driver;
+	new_client->dev.driver = &adm1026_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/w83627ehf.c
===================================================================
--- at91.orig/drivers/hwmon/w83627ehf.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83627ehf.c	2007-03-12 10:54:06.000000000 -0700
@@ -1210,7 +1210,7 @@ static int w83627ehf_detect(struct i2c_a
 	client->addr = address;
 	mutex_init(&data->lock);
 	client->adapter = adapter;
-	client->driver = &w83627ehf_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm92.c	2007-03-12 10:54:06.000000000 -0700
@@ -329,7 +329,7 @@ static int lm92_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm92_driver;
+	new_client->dev.driver = &lm92_driver.driver;
 	new_client->flags = 0;
 
 	/* A negative kind means that the driver was loaded with no force
Index: at91/drivers/hwmon/adm9240.c
===================================================================
--- at91.orig/drivers/hwmon/adm9240.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm9240.c	2007-03-12 10:54:06.000000000 -0700
@@ -527,7 +527,7 @@ static int adm9240_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &adm9240_driver;
+	new_client->dev.driver = &adm9240_driver.driver;
 	new_client->flags = 0;
 
 	if (kind == 0) {
Index: at91/drivers/hwmon/w83781d.c
===================================================================
--- at91.orig/drivers/hwmon/w83781d.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83781d.c	2007-03-12 10:54:06.000000000 -0700
@@ -908,7 +908,7 @@ w83781d_detect_subclients(struct i2c_ada
 		/* store all data in w83781d */
 		i2c_set_clientdata(data->lm75[i], NULL);
 		data->lm75[i]->adapter = adapter;
-		data->lm75[i]->driver = &w83781d_driver;
+		data->lm75[i]->dev.driver = &w83781d_driver.driver;
 		data->lm75[i]->flags = 0;
 		strlcpy(data->lm75[i]->name, client_name,
 			I2C_NAME_SIZE);
@@ -1081,7 +1081,9 @@ w83781d_detect(struct i2c_adapter *adapt
 	client->addr = address;
 	mutex_init(&data->lock);
 	client->adapter = adapter;
-	client->driver = is_isa ? &w83781d_isa_driver : &w83781d_driver;
+	client->dev.driver = is_isa
+			? &w83781d_isa_driver.driver
+			: &w83781d_driver.driver;
 	client->flags = 0;
 	dev = &client->dev;
 
Index: at91/drivers/hwmon/sis5595.c
===================================================================
--- at91.orig/drivers/hwmon/sis5595.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/sis5595.c	2007-03-12 10:54:06.000000000 -0700
@@ -575,7 +575,7 @@ static int sis5595_detect(struct i2c_ada
 	mutex_init(&data->lock);
 	i2c_set_clientdata(new_client, data);
 	new_client->adapter = adapter;
-	new_client->driver = &sis5595_driver;
+	new_client->dev.driver = &sis5595_driver.driver;
 	new_client->flags = 0;
 
 	/* Check revision and pin registers to determine whether 4 or 5 voltages */
Index: at91/drivers/hwmon/w83792d.c
===================================================================
--- at91.orig/drivers/hwmon/w83792d.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83792d.c	2007-03-12 10:54:06.000000000 -0700
@@ -882,7 +882,7 @@ w83792d_create_subclient(struct i2c_adap
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
 	sub_client->adapter = adapter;
-	sub_client->driver = &w83792d_driver;
+	sub_client->dev.driver = &w83792d_driver.driver;
 	sub_client->flags = 0;
 	strlcpy(sub_client->name, "w83792d subclient", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(sub_client))) {
@@ -1274,7 +1274,7 @@ w83792d_detect(struct i2c_adapter *adapt
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &w83792d_driver;
+	client->dev.driver = &w83792d_driver.driver;
 	client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/smsc47m1.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47m1.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/smsc47m1.c	2007-03-12 10:54:06.000000000 -0700
@@ -438,7 +438,7 @@ static int smsc47m1_detect(struct i2c_ad
 	new_client->addr = address;
 	mutex_init(&data->lock);
 	new_client->adapter = adapter;
-	new_client->driver = &smsc47m1_driver;
+	new_client->dev.driver = &smsc47m1_driver.driver;
 	new_client->flags = 0;
 
 	strlcpy(new_client->name, "smsc47m1", I2C_NAME_SIZE);
Index: at91/drivers/hwmon/gl518sm.c
===================================================================
--- at91.orig/drivers/hwmon/gl518sm.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/gl518sm.c	2007-03-12 10:54:06.000000000 -0700
@@ -413,7 +413,7 @@ static int gl518_detect(struct i2c_adapt
 
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &gl518_driver;
+	new_client->dev.driver = &gl518_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/sound/oss/dmasound/dac3550a.c
===================================================================
--- at91.orig/sound/oss/dmasound/dac3550a.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/sound/oss/dmasound/dac3550a.c	2007-03-12 10:54:06.000000000 -0700
@@ -169,7 +169,7 @@ static int daca_detect_client(struct i2c
 
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &daca_driver;
+	new_client->dev.driver = &daca_driver.driver;
 	new_client->flags = 0;
 	strcpy(new_client->name, client_name);
 
Index: at91/drivers/hwmon/w83791d.c
===================================================================
--- at91.orig/drivers/hwmon/w83791d.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83791d.c	2007-03-12 10:54:06.000000000 -0700
@@ -819,7 +819,7 @@ static int w83791d_create_subclient(stru
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
 	sub_client->adapter = adapter;
-	sub_client->driver = &w83791d_driver;
+	sub_client->dev.driver = &w83791d_driver.driver;
 	strlcpy(sub_client->name, "w83791d subclient", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(sub_client))) {
 		dev_err(&client->dev, "subclient registration "
@@ -919,7 +919,7 @@ static int w83791d_detect(struct i2c_ada
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &w83791d_driver;
+	client->dev.driver = &w83791d_driver.driver;
 	mutex_init(&data->update_lock);
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/lm87.c
===================================================================
--- at91.orig/drivers/hwmon/lm87.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm87.c	2007-03-12 10:54:06.000000000 -0700
@@ -638,7 +638,7 @@ static int lm87_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm87_driver;
+	new_client->dev.driver = &lm87_driver.driver;
 	new_client->flags = 0;
 
 	/* Default to an LM87 if forced */
Index: at91/drivers/hwmon/w83l785ts.c
===================================================================
--- at91.orig/drivers/hwmon/w83l785ts.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83l785ts.c	2007-03-12 10:54:06.000000000 -0700
@@ -168,7 +168,7 @@ static int w83l785ts_detect(struct i2c_a
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &w83l785ts_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm77.c	2007-03-12 10:54:06.000000000 -0700
@@ -253,7 +253,7 @@ static int lm77_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm77_driver;
+	new_client->dev.driver = &lm77_driver.driver;
 	new_client->flags = 0;
 
 	/* Here comes the remaining detection.  Since the LM77 has no
Index: at91/drivers/hwmon/w83793.c
===================================================================
--- at91.orig/drivers/hwmon/w83793.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/w83793.c	2007-03-12 10:54:06.000000000 -0700
@@ -1126,7 +1126,7 @@ w83793_create_subclient(struct i2c_adapt
 	sub_client->addr = 0x48 + addr;
 	i2c_set_clientdata(sub_client, NULL);
 	sub_client->adapter = adapter;
-	sub_client->driver = &w83793_driver;
+	sub_client->dev.driver = &w83793_driver.driver;
 	strlcpy(sub_client->name, "w83793 subclient", I2C_NAME_SIZE);
 	if ((err = i2c_attach_client(sub_client))) {
 		dev_err(&client->dev, "subclient registration "
@@ -1228,7 +1228,7 @@ static int w83793_detect(struct i2c_adap
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &w83793_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/fscpos.c	2007-03-12 10:54:06.000000000 -0700
@@ -502,7 +502,7 @@ static int fscpos_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &fscpos_driver;
+	new_client->dev.driver = &fscpos_driver.driver;
 	new_client->flags = 0;
 
 	/* Do the remaining detection unless force or force_fscpos parameter */
Index: at91/drivers/hwmon/lm83.c
===================================================================
--- at91.orig/drivers/hwmon/lm83.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm83.c	2007-03-12 10:54:06.000000000 -0700
@@ -313,7 +313,7 @@ static int lm83_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm83_driver;
+	new_client->dev.driver = &lm83_driver.driver;
 	new_client->flags = 0;
 
 	/* Now we do the detection and identification. A negative kind
Index: at91/drivers/hwmon/max1619.c
===================================================================
--- at91.orig/drivers/hwmon/max1619.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/max1619.c	2007-03-12 10:54:06.000000000 -0700
@@ -226,7 +226,7 @@ static int max1619_detect(struct i2c_ada
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &max1619_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/fscher.c	2007-03-12 10:54:06.000000000 -0700
@@ -314,7 +314,7 @@ static int fscher_detect(struct i2c_adap
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &fscher_driver;
+	new_client->dev.driver = &fscher_driver.driver;
 	new_client->flags = 0;
 
 	/* Do the remaining detection unless force or force_fscher parameter */
Index: at91/drivers/hwmon/smsc47b397.c
===================================================================
--- at91.orig/drivers/hwmon/smsc47b397.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/smsc47b397.c	2007-03-12 10:54:06.000000000 -0700
@@ -270,7 +270,7 @@ static int smsc47b397_detect(struct i2c_
 	new_client->addr = address;
 	mutex_init(&data->lock);
 	new_client->adapter = adapter;
-	new_client->driver = &smsc47b397_driver;
+	new_client->dev.driver = &smsc47b397_driver.driver;
 	new_client->flags = 0;
 
 	strlcpy(new_client->name, "smsc47b397", I2C_NAME_SIZE);
Index: at91/drivers/hwmon/pc87360.c
===================================================================
--- at91.orig/drivers/hwmon/pc87360.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/pc87360.c	2007-03-12 10:54:06.000000000 -0700
@@ -931,7 +931,7 @@ static int pc87360_detect(struct i2c_ada
 	client->addr = address;
 	mutex_init(&data->lock);
 	client->adapter = adapter;
-	client->driver = &pc87360_driver;
+	client->dev.driver = &pc87360_driver.driver;
 	client->flags = 0;
 
 	data->fannr = 2;
Index: at91/drivers/hwmon/lm78.c
===================================================================
--- at91.orig/drivers/hwmon/lm78.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm78.c	2007-03-12 10:54:06.000000000 -0700
@@ -596,7 +596,9 @@ static int lm78_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = is_isa ? &lm78_isa_driver : &lm78_driver;
+	new_client->dev.driver = is_isa
+			? &lm78_isa_driver.driver
+			: &lm78_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. */
Index: at91/drivers/hwmon/lm63.c
===================================================================
--- at91.orig/drivers/hwmon/lm63.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm63.c	2007-03-12 10:54:06.000000000 -0700
@@ -442,7 +442,7 @@ static int lm63_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm63_driver;
+	new_client->dev.driver = &lm63_driver.driver;
 	new_client->flags = 0;
 
 	/* Default to an LM63 if forced */
Index: at91/drivers/hwmon/vt8231.c
===================================================================
--- at91.orig/drivers/hwmon/vt8231.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/vt8231.c	2007-03-12 10:54:06.000000000 -0700
@@ -726,7 +726,7 @@ int vt8231_detect(struct i2c_adapter *ad
 	i2c_set_clientdata(client, data);
 	client->addr = isa_address;
 	client->adapter = adapter;
-	client->driver = &vt8231_driver;
+	client->dev.driver = &vt8231_driver.driver;
 
 	/* Fill in the remaining client fields and put into the global list */
 	strlcpy(client->name, "vt8231", I2C_NAME_SIZE);
Index: at91/drivers/hwmon/lm90.c
===================================================================
--- at91.orig/drivers/hwmon/lm90.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm90.c	2007-03-12 10:54:06.000000000 -0700
@@ -494,7 +494,7 @@ static int lm90_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm90_driver;
+	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-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/atxp1.c	2007-03-12 10:54:06.000000000 -0700
@@ -290,7 +290,7 @@ static int atxp1_detect(struct i2c_adapt
 
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &atxp1_driver;
+	new_client->dev.driver = &atxp1_driver.driver;
 	new_client->flags = 0;
 
 	/* Detect ATXP1, checking if vendor ID registers are all zero */
Index: at91/drivers/hwmon/adm1029.c
===================================================================
--- at91.orig/drivers/hwmon/adm1029.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/adm1029.c	2007-03-12 10:54:06.000000000 -0700
@@ -316,7 +316,7 @@ static int adm1029_detect(struct i2c_ada
 	i2c_set_clientdata(client, data);
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &adm1029_driver;
+	client->dev.driver = &adm1029_driver.driver;
 
 	/* Now we do the detection and identification. A negative kind
 	 * means that the driver was loaded with no force parameter
Index: at91/drivers/hwmon/lm80.c
===================================================================
--- at91.orig/drivers/hwmon/lm80.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/lm80.c	2007-03-12 10:54:06.000000000 -0700
@@ -459,7 +459,7 @@ static int lm80_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = address;
 	new_client->adapter = adapter;
-	new_client->driver = &lm80_driver;
+	new_client->dev.driver = &lm80_driver.driver;
 	new_client->flags = 0;
 
 	/* Now, we do the remaining detection. It is lousy. */
Index: at91/drivers/hwmon/it87.c
===================================================================
--- at91.orig/drivers/hwmon/it87.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/hwmon/it87.c	2007-03-12 10:54:06.000000000 -0700
@@ -950,7 +950,7 @@ static int it87_detect(struct i2c_adapte
 	i2c_set_clientdata(new_client, data);
 	new_client->addr = isa_address;
 	new_client->adapter = adapter;
-	new_client->driver = &it87_isa_driver;
+	new_client->dev.driver = &it87_isa_driver.driver;
 
 	/* Now, we do the remaining detection. */
 	if ((it87_read_value(new_client, IT87_REG_CONFIG) & 0x80)
Index: at91/drivers/media/video/tlv320aic23b.c
===================================================================
--- at91.orig/drivers/media/video/tlv320aic23b.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tlv320aic23b.c	2007-03-12 10:54:06.000000000 -0700
@@ -143,7 +143,7 @@ static int tlv320aic23b_attach(struct i2
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "tlv320aic23b");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/saa7127.c
===================================================================
--- at91.orig/drivers/media/video/saa7127.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7127.c	2007-03-12 10:54:06.000000000 -0700
@@ -683,7 +683,7 @@ static int saa7127_attach(struct i2c_ada
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa7127;
+	client->dev.driver = &i2c_driver_saa7127.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7127");
 
 	v4l_dbg(1, debug, client, "detecting saa7127 client on address 0x%x\n", address << 1);
Index: at91/drivers/media/video/upd64083.c
===================================================================
--- at91.orig/drivers/media/video/upd64083.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/upd64083.c	2007-03-12 10:54:06.000000000 -0700
@@ -184,7 +184,7 @@ static int upd64083_attach(struct i2c_ad
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "uPD64083");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/tea6415c.c
===================================================================
--- at91.orig/drivers/media/video/tea6415c.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tea6415c.c	2007-03-12 10:54:06.000000000 -0700
@@ -202,7 +202,7 @@ static struct i2c_driver driver = {
 
 static struct i2c_client client_template = {
 	.name = "tea6415c",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init this_module_init(void)
Index: at91/drivers/media/video/wm8775.c
===================================================================
--- at91.orig/drivers/media/video/wm8775.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/wm8775.c	2007-03-12 10:54:06.000000000 -0700
@@ -172,7 +172,7 @@ static int wm8775_attach(struct i2c_adap
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "wm8775");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/ov7670.c
===================================================================
--- at91.orig/drivers/media/video/ov7670.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/ov7670.c	2007-03-12 10:54:06.000000000 -0700
@@ -1226,7 +1226,7 @@ static int ov7670_attach(struct i2c_adap
 		return -ENOMEM;
 	client->adapter = adapter;
 	client->addr = OV7670_I2C_ADDR;
-	client->driver = &ov7670_driver,
+	client->dev.driver = &ov7670_driver.driver,
 	strcpy(client->name, "OV7670");
 	/*
 	 * Set up our info structure.
Index: at91/drivers/media/video/tuner-core.c
===================================================================
--- at91.orig/drivers/media/video/tuner-core.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tuner-core.c	2007-03-12 10:54:06.000000000 -0700
@@ -216,7 +216,7 @@ 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->driver->driver.name, c->addr << 1, type,
+		  c->adapter->name, c->dev.driver->name, c->addr << 1, type,
 		  t->mode_mask);
 }
 
@@ -845,7 +845,7 @@ static struct i2c_driver driver = {
 };
 static struct i2c_client client_template = {
 	.name = "(tuner unset)",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init tuner_init_module(void)
Index: at91/drivers/media/video/tuner-3036.c
===================================================================
--- at91.orig/drivers/media/video/tuner-3036.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tuner-3036.c	2007-03-12 10:54:06.000000000 -0700
@@ -187,7 +187,7 @@ i2c_driver_tuner =
 
 static struct i2c_client client_template =
 {
-	.driver		= &i2c_driver_tuner,
+	.dev.driver	= &i2c_driver_tuner.driver,
 	.name		= "SAB3036",
 };
 
Index: at91/drivers/media/video/adv7170.c
===================================================================
--- at91.orig/drivers/media/video/adv7170.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/adv7170.c	2007-03-12 10:54:06.000000000 -0700
@@ -413,7 +413,7 @@ adv7170_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_adv7170;
+	client->dev.driver = &i2c_driver_adv7170.driver;
 	if ((client->addr == I2C_ADV7170 >> 1) ||
 	    (client->addr == (I2C_ADV7170 >> 1) + 1)) {
 		dname = adv7170_name;
Index: at91/drivers/media/video/tea6420.c
===================================================================
--- at91.orig/drivers/media/video/tea6420.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tea6420.c	2007-03-12 10:54:06.000000000 -0700
@@ -178,7 +178,7 @@ static struct i2c_driver driver = {
 
 static struct i2c_client client_template = {
 	.name = "tea6420",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init this_module_init(void)
Index: at91/drivers/media/video/adv7175.c
===================================================================
--- at91.orig/drivers/media/video/adv7175.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/adv7175.c	2007-03-12 10:54:06.000000000 -0700
@@ -431,7 +431,7 @@ adv7175_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_adv7175;
+	client->dev.driver = &i2c_driver_adv7175.driver;
 	if ((client->addr == I2C_ADV7175 >> 1) ||
 	    (client->addr == (I2C_ADV7175 >> 1) + 1)) {
 		dname = adv7175_name;
Index: at91/drivers/media/video/saa6588.c
===================================================================
--- at91.orig/drivers/media/video/saa6588.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa6588.c	2007-03-12 10:54:06.000000000 -0700
@@ -498,7 +498,7 @@ static struct i2c_driver driver = {
 
 static struct i2c_client client_template = {
 	.name = "saa6588",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init saa6588_init_module(void)
Index: at91/drivers/media/video/vpx3220.c
===================================================================
--- at91.orig/drivers/media/video/vpx3220.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/vpx3220.c	2007-03-12 10:54:06.000000000 -0700
@@ -628,7 +628,7 @@ vpx3220_detect_client (struct i2c_adapte
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &vpx3220_i2c_driver;
+	client->dev.driver = &vpx3220_i2c_driver.driver;
 
 	/* Check for manufacture ID and part number */
 	if (kind < 0) {
Index: at91/drivers/media/video/ir-kbd-i2c.c
===================================================================
--- at91.orig/drivers/media/video/ir-kbd-i2c.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/ir-kbd-i2c.c	2007-03-12 10:54:06.000000000 -0700
@@ -293,7 +293,7 @@ static struct i2c_driver driver = {
 static struct i2c_client client_template =
 {
 	.name = "unset",
-	.driver = &driver
+	.dev.driver = &driver.driver,
 };
 
 static int ir_attach(struct i2c_adapter *adap, int addr,
Index: at91/drivers/media/video/cs53l32a.c
===================================================================
--- at91.orig/drivers/media/video/cs53l32a.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/cs53l32a.c	2007-03-12 10:54:06.000000000 -0700
@@ -147,7 +147,7 @@ static int cs53l32a_attach(struct i2c_ad
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "cs53l32a");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/tveeprom.c
===================================================================
--- at91.orig/drivers/media/video/tveeprom.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tveeprom.c	2007-03-12 10:54:06.000000000 -0700
@@ -750,7 +750,7 @@ tveeprom_detect_client(struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_tveeprom;
+	client->dev.driver = &i2c_driver_tveeprom.driver;
 	snprintf(client->name, sizeof(client->name), "tveeprom");
 	i2c_attach_client(client);
 
Index: at91/drivers/media/video/saa711x.c
===================================================================
--- at91.orig/drivers/media/video/saa711x.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa711x.c	2007-03-12 10:54:06.000000000 -0700
@@ -490,7 +490,7 @@ saa711x_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa711x;
+	client->dev.driver = &i2c_driver_saa711x.driver;
 	strlcpy(I2C_NAME(client), "saa711x", sizeof(I2C_NAME(client)));
 	decoder = kzalloc(sizeof(struct saa711x), GFP_KERNEL);
 	if (decoder == NULL) {
Index: at91/drivers/media/video/wm8739.c
===================================================================
--- at91.orig/drivers/media/video/wm8739.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/wm8739.c	2007-03-12 10:54:06.000000000 -0700
@@ -272,7 +272,7 @@ static int wm8739_attach(struct i2c_adap
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "wm8739");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/saa7114.c
===================================================================
--- at91.orig/drivers/media/video/saa7114.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7114.c	2007-03-12 10:54:06.000000000 -0700
@@ -848,7 +848,7 @@ saa7114_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa7114;
+	client->dev.driver = &i2c_driver_saa7114.driver;
 	strlcpy(I2C_NAME(client), "saa7114", sizeof(I2C_NAME(client)));
 
 	decoder = kzalloc(sizeof(struct saa7114), GFP_KERNEL);
Index: at91/drivers/media/video/msp3400-driver.c
===================================================================
--- at91.orig/drivers/media/video/msp3400-driver.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/msp3400-driver.c	2007-03-12 10:54:06.000000000 -0700
@@ -819,7 +819,7 @@ static int msp_attach(struct i2c_adapter
 	memset(client, 0, sizeof(*client));
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "msp3400");
 
 	if (msp_reset(client) == -1) {
Index: at91/drivers/media/video/tda9875.c
===================================================================
--- at91.orig/drivers/media/video/tda9875.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tda9875.c	2007-03-12 10:54:06.000000000 -0700
@@ -375,7 +375,7 @@ static struct i2c_driver driver = {
 static struct i2c_client client_template =
 {
 	.name      = "tda9875",
-	.driver    = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init tda9875_init(void)
Index: at91/drivers/media/video/bt866.c
===================================================================
--- at91.orig/drivers/media/video/bt866.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/bt866.c	2007-03-12 10:54:06.000000000 -0700
@@ -300,7 +300,7 @@ static struct i2c_client bt866_client_tm
 	.name = "(nil)",
 	.addr = 0,
 	.adapter = NULL,
-	.driver = &i2c_driver_bt866,
+	.dev.driver = &i2c_driver_bt866.driver,
 	.usage_count = 0
 };
 
Index: at91/drivers/media/video/saa5246a.c
===================================================================
--- at91.orig/drivers/media/video/saa5246a.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa5246a.c	2007-03-12 10:54:06.000000000 -0700
@@ -167,7 +167,7 @@ static struct i2c_driver i2c_driver_vide
 };
 
 static struct i2c_client client_template = {
-	.driver		= &i2c_driver_videotext,
+	.dev.driver	= &i2c_driver_videotext.driver,
 	.name		= "(unset)",
 };
 
Index: at91/drivers/media/video/saa7110.c
===================================================================
--- at91.orig/drivers/media/video/saa7110.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7110.c	2007-03-12 10:54:06.000000000 -0700
@@ -492,7 +492,7 @@ saa7110_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa7110;
+	client->dev.driver = &i2c_driver_saa7110.driver;
 	strlcpy(I2C_NAME(client), "saa7110", sizeof(I2C_NAME(client)));
 
 	decoder = kzalloc(sizeof(struct saa7110), GFP_KERNEL);
Index: at91/drivers/media/video/bt856.c
===================================================================
--- at91.orig/drivers/media/video/bt856.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/bt856.c	2007-03-12 10:54:06.000000000 -0700
@@ -316,7 +316,7 @@ bt856_detect_client (struct i2c_adapter 
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_bt856;
+	client->dev.driver = &i2c_driver_bt856.driver;
 	strlcpy(I2C_NAME(client), "bt856", sizeof(I2C_NAME(client)));
 
 	encoder = kzalloc(sizeof(struct bt856), GFP_KERNEL);
Index: at91/drivers/media/video/saa7115.c
===================================================================
--- at91.orig/drivers/media/video/saa7115.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7115.c	2007-03-12 10:54:06.000000000 -0700
@@ -1469,7 +1469,7 @@ static int saa711x_attach(struct i2c_ada
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa711x;
+	client->dev.driver = &i2c_driver_saa711x.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7115");
 
 	for (i = 0; i < 0x0f; i++) {
Index: at91/drivers/media/video/tda9840.c
===================================================================
--- at91.orig/drivers/media/video/tda9840.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tda9840.c	2007-03-12 10:54:06.000000000 -0700
@@ -233,7 +233,7 @@ static struct i2c_driver driver = {
 
 static struct i2c_client client_template = {
 	.name = "tda9840",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init this_module_init(void)
Index: at91/drivers/media/video/ks0127.c
===================================================================
--- at91.orig/drivers/media/video/ks0127.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/ks0127.c	2007-03-12 10:54:06.000000000 -0700
@@ -763,7 +763,7 @@ static struct i2c_client ks0127_client_t
 	.name = "(ks0127 unset)",
 	.addr = 0,
 	.adapter = NULL,
-	.driver = &i2c_driver_ks0127,
+	.dev.driver = &i2c_driver_ks0127.driver,
 	.usage_count = 0
 };
 
Index: at91/drivers/media/video/tvaudio.c
===================================================================
--- at91.orig/drivers/media/video/tvaudio.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tvaudio.c	2007-03-12 10:54:06.000000000 -0700
@@ -1792,7 +1792,7 @@ static struct i2c_driver driver = {
 static struct i2c_client client_template =
 {
 	.name       = "(unset)",
-	.driver     = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int __init audiochip_init_module(void)
Index: at91/drivers/media/video/tvp5150.c
===================================================================
--- at91.orig/drivers/media/video/tvp5150.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tvp5150.c	2007-03-12 10:54:06.000000000 -0700
@@ -32,16 +32,16 @@ module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
 #define tvp5150_err(fmt, arg...) do { \
-	printk(KERN_ERR "%s %d-%04x: " fmt, c->driver->driver.name, \
+	printk(KERN_ERR "%s %d-%04x: " fmt, c->dev.driver->name, \
 	       i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
 #define tvp5150_info(fmt, arg...) do { \
-	printk(KERN_INFO "%s %d-%04x: " fmt, c->driver->driver.name, \
+	printk(KERN_INFO "%s %d-%04x: " fmt, c->dev.driver->name, \
 	       i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
 #define tvp5150_dbg(num, fmt, arg...) \
 	do { \
 		if (debug >= num) \
 			printk(KERN_DEBUG "%s debug %d-%04x: " fmt,\
-				c->driver->driver.name, \
+				c->dev.driver->name, \
 				i2c_adapter_id(c->adapter), \
 				c->addr , ## arg); } while (0)
 
@@ -1036,7 +1036,7 @@ static struct i2c_driver driver;
 
 static struct i2c_client client_template = {
 	.name = "(unset)",
-	.driver = &driver,
+	.dev.driver = &driver.driver,
 };
 
 static int tvp5150_detect_client(struct i2c_adapter *adapter,
Index: at91/drivers/media/video/upd64031a.c
===================================================================
--- at91.orig/drivers/media/video/upd64031a.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/upd64031a.c	2007-03-12 10:54:06.000000000 -0700
@@ -207,7 +207,7 @@ static int upd64031a_attach(struct i2c_a
 
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver;
+	client->dev.driver = &i2c_driver.driver;
 	snprintf(client->name, sizeof(client->name) - 1, "uPD64031A");
 
 	v4l_info(client, "chip found @ 0x%x (%s)\n", address << 1, adapter->name);
Index: at91/drivers/media/video/saa7111.c
===================================================================
--- at91.orig/drivers/media/video/saa7111.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7111.c	2007-03-12 10:54:06.000000000 -0700
@@ -514,7 +514,7 @@ saa7111_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa7111;
+	client->dev.driver = &i2c_driver_saa7111.driver;
 	strlcpy(I2C_NAME(client), "saa7111", sizeof(I2C_NAME(client)));
 
 	decoder = kzalloc(sizeof(struct saa7111), GFP_KERNEL);
Index: at91/drivers/media/video/saa5249.c
===================================================================
--- at91.orig/drivers/media/video/saa5249.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa5249.c	2007-03-12 10:54:06.000000000 -0700
@@ -236,7 +236,7 @@ static struct i2c_driver i2c_driver_vide
 };
 
 static struct i2c_client client_template = {
-	.driver		= &i2c_driver_videotext,
+	.dev.driver	= &i2c_driver_videotext.driver,
 	.name		= "(unset)",
 };
 
Index: at91/drivers/media/video/bt819.c
===================================================================
--- at91.orig/drivers/media/video/bt819.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/bt819.c	2007-03-12 10:54:06.000000000 -0700
@@ -528,7 +528,7 @@ bt819_detect_client (struct i2c_adapter 
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_bt819;
+	client->dev.driver = &i2c_driver_bt819.driver;
 
 	decoder = kzalloc(sizeof(struct bt819), GFP_KERNEL);
 	if (decoder == NULL) {
Index: at91/drivers/media/video/indycam.c
===================================================================
--- at91.orig/drivers/media/video/indycam.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/indycam.c	2007-03-12 10:54:06.000000000 -0700
@@ -299,7 +299,7 @@ static int indycam_attach(struct i2c_ada
 
 	client->addr = addr;
 	client->adapter = adap;
-	client->driver = &i2c_driver_indycam;
+	client->dev.driver = &i2c_driver_indycam.driver;
 	client->flags = 0;
 	strcpy(client->name, "IndyCam client");
 	i2c_set_clientdata(client, camera);
Index: at91/drivers/media/video/saa7185.c
===================================================================
--- at91.orig/drivers/media/video/saa7185.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7185.c	2007-03-12 10:54:06.000000000 -0700
@@ -408,7 +408,7 @@ saa7185_detect_client (struct i2c_adapte
 		return -ENOMEM;
 	client->addr = address;
 	client->adapter = adapter;
-	client->driver = &i2c_driver_saa7185;
+	client->dev.driver = &i2c_driver_saa7185.driver;
 	strlcpy(I2C_NAME(client), "saa7185", sizeof(I2C_NAME(client)));
 
 	encoder = kzalloc(sizeof(struct saa7185), GFP_KERNEL);
Index: at91/drivers/media/video/saa7191.c
===================================================================
--- at91.orig/drivers/media/video/saa7191.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/saa7191.c	2007-03-12 10:54:06.000000000 -0700
@@ -581,7 +581,7 @@ static int saa7191_attach(struct i2c_ada
 
 	client->addr = addr;
 	client->adapter = adap;
-	client->driver = &i2c_driver_saa7191;
+	client->dev.driver = &i2c_driver_saa7191.driver;
 	client->flags = 0;
 	strcpy(client->name, "saa7191 client");
 	i2c_set_clientdata(client, decoder);
Index: at91/drivers/media/video/v4l2-common.c
===================================================================
--- at91.orig/drivers/media/video/v4l2-common.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/v4l2-common.c	2007-03-12 10:54:06.000000000 -0700
@@ -957,7 +957,9 @@ int v4l2_chip_match_i2c_client(struct i2
 {
 	switch (match_type) {
 	case V4L2_CHIP_MATCH_I2C_DRIVER:
-		return (c != NULL && c->driver != NULL && c->driver->id == match_chip);
+		if (c == NULL || c->dev.driver == NULL)
+			return 0;
+		return to_i2c_driver(c->dev.driver)->id == match_chip;
 	case V4L2_CHIP_MATCH_I2C_ADDR:
 		return (c != NULL && c->addr == match_chip);
 	default:
Index: at91/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c
===================================================================
--- at91.orig/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c	2007-03-12 10:54:06.000000000 -0700
@@ -54,7 +54,7 @@ static const struct pvr2_i2c_op * const 
 void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
 {
 	int id;
-	id = cp->client->driver->id;
+	id = to_i2c_driver(cp->client->dev.driver)->id;
 	cp->ctl_mask = ((1 << OP_STANDARD) |
 			(1 << OP_AUDIOMODE) |
 			(1 << OP_BCSH) |
Index: at91/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
===================================================================
--- at91.orig/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c	2007-03-12 10:54:06.000000000 -0700
@@ -527,12 +527,18 @@ static int pvr2_i2c_core_singleton(struc
 				   unsigned int cmd,void *arg)
 {
 	int stat;
+	struct i2c_driver *driver;
+
 	if (!cp) return -EINVAL;
-	if (!(cp->driver)) return -EINVAL;
-	if (!(cp->driver->command)) return -EINVAL;
-	if (!try_module_get(cp->driver->driver.owner)) return -EAGAIN;
-	stat = cp->driver->command(cp,cmd,arg);
-	module_put(cp->driver->driver.owner);
+	if (!cp->dev.driver)
+		return -EINVAL;
+	driver = to_i2c_driver(cp->dev.driver);
+	if (!driver->command)
+		return -EINVAL;
+	if (!try_module_get(driver->driver.owner))
+		return -EAGAIN;
+	stat = driver->command(cp,cmd,arg);
+	module_put(driver->driver.owner);
 	return stat;
 }
 
Index: at91/drivers/media/video/ovcamchip/ovcamchip_core.c
===================================================================
--- at91.orig/drivers/media/video/ovcamchip/ovcamchip_core.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/ovcamchip/ovcamchip_core.c	2007-03-12 10:54:06.000000000 -0700
@@ -421,7 +421,7 @@ static struct i2c_driver driver = {
 
 static struct i2c_client client_template = {
 	.name =		"(unset)",
-	.driver =	&driver,
+	.dev.driver =	&driver.driver,
 };
 
 static int __init ovcamchip_init(void)
Index: at91/drivers/media/video/w9968cf.c
===================================================================
--- at91.orig/drivers/media/video/w9968cf.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/w9968cf.c	2007-03-12 10:54:06.000000000 -0700
@@ -1509,7 +1509,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);
-	int id = client->driver->id, err = 0;
+	struct i2c_driver *driver = to_i2c_driver(client->dev.driver);
+	int id = driver->id, err = 0;
 
 	if (id == I2C_DRIVERID_OVCAMCHIP) {
 		cam->sensor_client = client;
@@ -1520,12 +1521,12 @@ static int w9968cf_i2c_attach_inform(str
 		}
 	} else {
 		DBG(4, "Rejected client [%s] with driver [%s]",
-		    client->name, client->driver->driver.name)
+		    client->name, driver->driver.name)
 		return -EINVAL;
 	}
 
 	DBG(5, "I2C attach client [%s] with driver [%s]",
-	    client->name, client->driver->driver.name)
+	    client->name, driver->driver.name)
 
 	return 0;
 }
@@ -2178,12 +2179,16 @@ static int
 w9968cf_sensor_cmd(struct w9968cf_device* cam, unsigned int cmd, void* arg)
 {
 	struct i2c_client* c = cam->sensor_client;
+	struct i2c_driver *driver;
 	int rc = 0;
 
-	if (!c || !c->driver || !c->driver->command)
+	if (!c || !c->dev.driver)
+		return -EINVAL;
+	driver = to_i2c_driver(c->dev.driver);
+	if (!driver->command)
 		return -EINVAL;
 
-	rc = c->driver->command(c, cmd, arg);
+	rc = driver->command(c, cmd, arg);
 	/* The I2C driver returns -EPERM on non-supported controls */
 	return (rc < 0 && rc != -EPERM) ? rc : 0;
 }
Index: at91/drivers/media/video/tda9887.c
===================================================================
--- at91.orig/drivers/media/video/tda9887.c	2007-03-08 12:13:11.000000000 -0800
+++ at91/drivers/media/video/tda9887.c	2007-03-12 10:54:06.000000000 -0700
@@ -593,7 +593,7 @@ int tda9887_tuner_init(struct i2c_client
 	strlcpy(c->name, "tda9887", sizeof(c->name));
 
 	tda9887_info("tda988[5/6/7] found @ 0x%x (%s)\n", t->i2c.addr,
-						t->i2c.driver->driver.name);
+						t->i2c.dev.driver->name);
 
 	t->set_tv_freq = tda9887_set_freq;
 	t->set_radio_freq = tda9887_set_freq;



More information about the i2c mailing list