Commit e48d3319 authored by Jean Delvare's avatar Jean Delvare Committed by Jean Delvare

i2c: Change prototypes of refcounting functions

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: default avatarJean Delvare <khali@linux-fr.org>
Cc: David Brownell <david-b@pacbell.net>
parent bdc511f4
...@@ -764,17 +764,33 @@ int i2c_detach_client(struct i2c_client *client) ...@@ -764,17 +764,33 @@ int i2c_detach_client(struct i2c_client *client)
} }
EXPORT_SYMBOL(i2c_detach_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); get_device(&client->dev);
return 0; return client;
} }
EXPORT_SYMBOL(i2c_use_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); put_device(&client->dev);
return 0;
} }
EXPORT_SYMBOL(i2c_release_client); EXPORT_SYMBOL(i2c_release_client);
......
...@@ -2589,11 +2589,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs) ...@@ -2589,11 +2589,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
/* First try D1 and then SAA7191 */ /* First try D1 and then SAA7191 */
if (vino_drvdata->camera.driver if (vino_drvdata->camera.driver
&& (vino_drvdata->camera.owner == VINO_NO_CHANNEL)) { && (vino_drvdata->camera.owner == VINO_NO_CHANNEL)) {
if (i2c_use_client(vino_drvdata->camera.driver)) { i2c_use_client(vino_drvdata->camera.driver);
ret = -ENODEV;
goto out;
}
vino_drvdata->camera.owner = vcs->channel; vino_drvdata->camera.owner = vcs->channel;
vcs->input = VINO_INPUT_D1; vcs->input = VINO_INPUT_D1;
vcs->data_norm = VINO_DATA_NORM_D1; vcs->data_norm = VINO_DATA_NORM_D1;
...@@ -2602,11 +2598,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs) ...@@ -2602,11 +2598,7 @@ static int vino_acquire_input(struct vino_channel_settings *vcs)
int input, data_norm; int input, data_norm;
int saa7191_input; int saa7191_input;
if (i2c_use_client(vino_drvdata->decoder.driver)) { i2c_use_client(vino_drvdata->decoder.driver);
ret = -ENODEV;
goto out;
}
input = VINO_INPUT_COMPOSITE; input = VINO_INPUT_COMPOSITE;
saa7191_input = vino_get_saa7191_input(input); saa7191_input = vino_get_saa7191_input(input);
...@@ -2688,10 +2680,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int 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 (vino_drvdata->decoder.owner == VINO_NO_CHANNEL) {
if (i2c_use_client(vino_drvdata->decoder.driver)) { i2c_use_client(vino_drvdata->decoder.driver);
ret = -ENODEV;
goto out;
}
vino_drvdata->decoder.owner = vcs->channel; vino_drvdata->decoder.owner = vcs->channel;
} }
...@@ -2759,10 +2748,7 @@ static int vino_set_input(struct vino_channel_settings *vcs, int input) ...@@ -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 (vino_drvdata->camera.owner == VINO_NO_CHANNEL) {
if (i2c_use_client(vino_drvdata->camera.driver)) { i2c_use_client(vino_drvdata->camera.driver);
ret = -ENODEV;
goto out;
}
vino_drvdata->camera.owner = vcs->channel; vino_drvdata->camera.owner = vcs->channel;
} }
......
...@@ -386,11 +386,8 @@ static inline int i2c_add_driver(struct i2c_driver *driver) ...@@ -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_attach_client(struct i2c_client *);
extern int i2c_detach_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 extern struct i2c_client *i2c_use_client(struct i2c_client *client);
is okay to access the i2c-client. extern void i2c_release_client(struct i2c_client *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 *);
/* call the i2c_client->command() of all attached clients with /* call the i2c_client->command() of all attached clients with
* the given arguments */ * the given arguments */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment