i2c: Drivers stop using the redundant client list
Jean Delvare [Sun, 27 Jan 2008 17:14:51 +0000 (18:14 +0100)]
The redundant i2c client list maintained by i2c-core is going away
soon, so drivers should stop using it now. Instead, they can use the
standard iterator provided by the device driver model
(device_for_each_child).

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: David Brownell <david-b@pacbell.net>
Cc: Michael Hunold <michael@mihu.de>

drivers/media/video/dpc7146.c
drivers/media/video/mxb.c

index 255dae3..566e479 100644 (file)
@@ -87,11 +87,24 @@ struct dpc
        int cur_input;  /* current input */
 };
 
+static int dpc_check_clients(struct device *dev, void *data)
+{
+       struct dpc* dpc = data;
+       struct i2c_client *client = i2c_verify_client(dev);
+
+       if( !client )
+               return 0;
+
+       if( I2C_SAA7111A == client->addr )
+               dpc->saa7111a = client;
+
+       return 0;
+}
+
 /* fixme: add vbi stuff here */
 static int dpc_probe(struct saa7146_dev* dev)
 {
        struct dpc* dpc = NULL;
-       struct i2c_client *client;
 
        dpc = kzalloc(sizeof(struct dpc), GFP_KERNEL);
        if( NULL == dpc ) {
@@ -115,9 +128,7 @@ static int dpc_probe(struct saa7146_dev* dev)
        }
 
        /* loop through all i2c-devices on the bus and look who is there */
-       list_for_each_entry(client, &dpc->i2c_adapter.clients, list)
-               if( I2C_SAA7111A == client->addr )
-                       dpc->saa7111a = client;
+       device_for_each_child(&dpc->i2c_adapter.dev, dpc, dpc_check_clients);
 
        /* check if all devices are present */
        if( 0 == dpc->saa7111a ) {
index 98ad309..add6d0d 100644 (file)
@@ -149,10 +149,33 @@ struct mxb
 
 static struct saa7146_extension extension;
 
+static int mxb_check_clients(struct device *dev, void *data)
+{
+       struct mxb* mxb = data;
+       struct i2c_client *client = i2c_verify_client(dev);
+
+       if( !client )
+               return 0;
+
+       if( I2C_ADDR_TEA6420_1 == client->addr )
+               mxb->tea6420_1 = client;
+       if( I2C_ADDR_TEA6420_2 == client->addr )
+               mxb->tea6420_2 = client;
+       if( I2C_TEA6415C_2 == client->addr )
+               mxb->tea6415c = client;
+       if( I2C_ADDR_TDA9840 == client->addr )
+               mxb->tda9840 = client;
+       if( I2C_SAA7111 == client->addr )
+               mxb->saa7111a = client;
+       if( 0x60 == client->addr )
+               mxb->tuner = client;
+
+       return 0;
+}
+
 static int mxb_probe(struct saa7146_dev* dev)
 {
        struct mxb* mxb = NULL;
-       struct i2c_client *client;
        int result;
 
        if ((result = request_module("saa7111")) < 0) {
@@ -195,20 +218,7 @@ static int mxb_probe(struct saa7146_dev* dev)
        }
 
        /* loop through all i2c-devices on the bus and look who is there */
-       list_for_each_entry(client, &mxb->i2c_adapter.clients, list) {
-               if( I2C_ADDR_TEA6420_1 == client->addr )
-                       mxb->tea6420_1 = client;
-               if( I2C_ADDR_TEA6420_2 == client->addr )
-                       mxb->tea6420_2 = client;
-               if( I2C_TEA6415C_2 == client->addr )
-                       mxb->tea6415c = client;
-               if( I2C_ADDR_TDA9840 == client->addr )
-                       mxb->tda9840 = client;
-               if( I2C_SAA7111 == client->addr )
-                       mxb->saa7111a = client;
-               if( 0x60 == client->addr )
-                       mxb->tuner = client;
-       }
+       device_for_each_child(&mxb->i2c_adapter.dev, mxb, mxb_check_clients);
 
        /* check if all devices are present */
        if(    0 == mxb->tea6420_1      || 0 == mxb->tea6420_2  || 0 == mxb->tea6415c