mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
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: Jean Delvare <khali@linux-fr.org> Cc: David Brownell <david-b@pacbell.net>
This commit is contained in:
parent
bdc511f438
commit
e48d33193d
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user