mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[PATCH] i2c: Rework client usage count, 2 of 3
Make I2C_CLIENT_ALLOW_USE the default for all i2c clients. It doesn't hurt if the usage count is actually never used for any given driver, and allows for nice code simplifications in i2c-core. Signed-off-by: Jean Delvare <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
cb748fb201
commit
cde7859bda
29 changed files with 10 additions and 46 deletions
|
|
@ -155,7 +155,6 @@ static int rtc8564_attach(struct i2c_adapter *adap, int addr, int kind)
|
|||
|
||||
strlcpy(new_client->name, "RTC8564", I2C_NAME_SIZE);
|
||||
i2c_set_clientdata(new_client, d);
|
||||
new_client->flags = I2C_CLIENT_ALLOW_USE;
|
||||
new_client->addr = addr;
|
||||
new_client->adapter = adap;
|
||||
new_client->driver = &rtc8564_driver;
|
||||
|
|
|
|||
|
|
@ -419,8 +419,7 @@ int i2c_attach_client(struct i2c_client *client)
|
|||
}
|
||||
}
|
||||
|
||||
if (client->flags & I2C_CLIENT_ALLOW_USE)
|
||||
client->usage_count = 0;
|
||||
client->usage_count = 0;
|
||||
|
||||
client->dev.parent = &client->adapter->dev;
|
||||
client->dev.driver = &client->driver->driver;
|
||||
|
|
@ -443,8 +442,7 @@ int i2c_detach_client(struct i2c_client *client)
|
|||
struct i2c_adapter *adapter = client->adapter;
|
||||
int res = 0;
|
||||
|
||||
if ((client->flags & I2C_CLIENT_ALLOW_USE)
|
||||
&& (client->usage_count > 0)) {
|
||||
if (client->usage_count > 0) {
|
||||
dev_warn(&client->dev, "Client [%s] still busy, "
|
||||
"can't detach\n", client->name);
|
||||
return -EBUSY;
|
||||
|
|
@ -499,12 +497,9 @@ int i2c_use_client(struct i2c_client *client)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (client->flags & I2C_CLIENT_ALLOW_USE) {
|
||||
if (client->usage_count > 0)
|
||||
goto busy;
|
||||
else
|
||||
client->usage_count++;
|
||||
}
|
||||
if (client->usage_count > 0)
|
||||
goto busy;
|
||||
client->usage_count++;
|
||||
|
||||
return 0;
|
||||
busy:
|
||||
|
|
@ -514,16 +509,13 @@ int i2c_use_client(struct i2c_client *client)
|
|||
|
||||
int i2c_release_client(struct i2c_client *client)
|
||||
{
|
||||
if(client->flags & I2C_CLIENT_ALLOW_USE) {
|
||||
if(client->usage_count>0)
|
||||
client->usage_count--;
|
||||
else {
|
||||
pr_debug("i2c-core: %s used one too many times\n",
|
||||
__FUNCTION__);
|
||||
return -EPERM;
|
||||
}
|
||||
if (!client->usage_count) {
|
||||
pr_debug("i2c-core: %s used one too many times\n",
|
||||
__FUNCTION__);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
client->usage_count--;
|
||||
i2c_dec_use_client(client);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue