i2c: Change prototypes of refcounting functions
authorJean Delvare <khali@linux-fr.org>
Sun, 27 Jan 2008 17:14:48 +0000 (18:14 +0100)
committerJean Delvare <khali@hyperion.delvare>
Sun, 27 Jan 2008 17:14:48 +0000 (18:14 +0100)
Use more standard prototypes for i2c_use_client() and
i2c_release_client(). The former now returns a pointer to the client,
and the latter no longer returns anything. This matches what all other
subsystems do.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: David Brownell <david-b@pacbell.net>
drivers/i2c/i2c-core.c
drivers/media/video/vino.c
include/linux/i2c.h

index 9b9d808578b9bef5ed1393efc1c45e7fec3fab6a..f75344ac4663af1a753255767964199a1aac30d5 100644 (file)
@@ -764,17 +764,33 @@ int i2c_detach_client(struct i2c_client *client)
 }
 EXPORT_SYMBOL(i2c_detach_client);
 
-int i2c_use_client(struct i2c_client *client)
+/**
+ * i2c_use_client - increments the reference count of the i2c client structure
+ * @client: the client being referenced
+ *
+ * Each live reference to a client should be refcounted. The driver model does
+ * that automatically as part of driver binding, so that most drivers don't
+ * need to do this explicitly: they hold a reference until they're unbound
+ * from the device.
+ *
+ * A pointer to the client with the incremented reference counter is returned.
+ */
+struct i2c_client *i2c_use_client(struct i2c_client *client)
 {
        get_device(&client->dev);
-       return 0;
+       return client;
 }
 EXPORT_SYMBOL(i2c_use_client);
 
-int i2c_release_client(struct i2c_client *client)
+/**
+ * i2c_release_client - release a use of the i2c client structure
+ * @client: the client being no longer referenced
+ *
+ * Must be called when a user of a client is finished with it.
+ */
+void i2c_release_client(struct i2c_client *client)
 {
        put_device(&client->dev);
-       return 0;
 }
 EXPORT_SYMBOL(i2c_release_client);
 
index 9a03dc82c6cae270db019cc0e749f929214c97f8..5bb75294b5aa8142ef1e94b2d321db8955def494 100644 (file)
@@ -2589,11 +2589,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
        /* First try D1 and then SAA7191 */
        if (vino_drvdata->camera.driver
            && (vino_drvdata->camera.owner == VINO_NO_CHANNEL)) {
-               if (i2c_use_client(vino_drvdata->camera.driver)) {
-                       ret = -ENODEV;
-                       goto out;
-               }
-
+               i2c_use_client(vino_drvdata->camera.driver);
                vino_drvdata->camera.owner = vcs->channel;
                vcs->input = VINO_INPUT_D1;
                vcs->data_norm = VINO_DATA_NORM_D1;
@@ -2602,11 +2598,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
                int input, data_norm;
                int saa7191_input;
 
-               if (i2c_use_client(vino_drvdata->decoder.driver)) {
-                       ret = -ENODEV;
-                       goto out;
-               }
-
+               i2c_use_client(vino_drvdata->decoder.driver);
                input = VINO_INPUT_COMPOSITE;
 
                saa7191_input = vino_get_saa7191_input(input);
@@ -2688,10 +2680,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
                }
 
                if (vino_drvdata->decoder.owner == VINO_NO_CHANNEL) {
-                       if (i2c_use_client(vino_drvdata->decoder.driver)) {
-                               ret = -ENODEV;
-                               goto out;
-                       }
+                       i2c_use_client(vino_drvdata->decoder.driver);
                        vino_drvdata->decoder.owner = vcs->channel;
                }
 
@@ -2759,10 +2748,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input)
                }
 
                if (vino_drvdata->camera.owner == VINO_NO_CHANNEL) {
-                       if (i2c_use_client(vino_drvdata->camera.driver)) {
-                               ret = -ENODEV;
-                               goto out;
-                       }
+                       i2c_use_client(vino_drvdata->camera.driver);
                        vino_drvdata->camera.owner = vcs->channel;
                }
 
index f7cd2f370c39714ac398b2ebf7e86bdc5afa7f5d..78a305bed8eb9d4535fdb164ca0ccf55fd2dee8a 100644 (file)
@@ -386,11 +386,8 @@ static inline int i2c_add_driver(struct i2c_driver *driver)
 extern int i2c_attach_client(struct i2c_client *);
 extern int i2c_detach_client(struct i2c_client *);
 
-/* Should be used to make sure that client-struct is valid and that it
-   is okay to access the i2c-client.
-   returns -ENODEV if client has gone in the meantime */
-extern int i2c_use_client(struct i2c_client *);
-extern int i2c_release_client(struct i2c_client *);
+extern struct i2c_client *i2c_use_client(struct i2c_client *client);
+extern void i2c_release_client(struct i2c_client *client);
 
 /* call the i2c_client->command() of all attached clients with
  * the given arguments */