diff options
author | Jean Delvare <khali@linux-fr.org> | 2005-11-26 15:03:41 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-06 01:16:22 -0500 |
commit | cf02df770228350254251fde520007a2709db785 (patch) | |
tree | ef10929d0160ebf27f29bac2a9e285b267a63331 | |
parent | cde7859bda0d1124392b44e50aa11df99707e1d9 (diff) |
[PATCH] i2c: Rework client usage count, 3 of 3
Do not limit the usage count of i2c clients to 1. In other words,
change the client usage count behavior from the old I2C_CLIENT_ALLOW_USE
to the old I2C_CLIENT_ALLOW_MULTIPLE_USE. The rationale is that no
driver actually needs the limiting behavior, and the unlimiting
behavior is slightly easier to implement.
Update the documentation to reflect this change.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | Documentation/i2c/porting-clients | 1 | ||||
-rw-r--r-- | drivers/i2c/i2c-core.c | 5 | ||||
-rw-r--r-- | include/linux/i2c.h | 4 |
3 files changed, 2 insertions, 8 deletions
diff --git a/Documentation/i2c/porting-clients b/Documentation/i2c/porting-clients index 64c610bf2fbc..6b07f23039d2 100644 --- a/Documentation/i2c/porting-clients +++ b/Documentation/i2c/porting-clients | |||
@@ -92,6 +92,7 @@ Technical changes: | |||
92 | Drop client->id. | 92 | Drop client->id. |
93 | Drop any 24RF08 corruption prevention you find, as this is now done | 93 | Drop any 24RF08 corruption prevention you find, as this is now done |
94 | at the i2c-core level, and doing it twice voids it. | 94 | at the i2c-core level, and doing it twice voids it. |
95 | Don't add I2C_CLIENT_ALLOW_USE to client->flags, it's the default now. | ||
95 | 96 | ||
96 | * [Init] Limits must not be set by the driver (can be done later in | 97 | * [Init] Limits must not be set by the driver (can be done later in |
97 | user-space). Chip should not be reset default (although a module | 98 | user-space). Chip should not be reset default (although a module |
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index d16b4998c4c2..a1c5dff85431 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -497,14 +497,9 @@ int i2c_use_client(struct i2c_client *client) | |||
497 | if (ret) | 497 | if (ret) |
498 | return ret; | 498 | return ret; |
499 | 499 | ||
500 | if (client->usage_count > 0) | ||
501 | goto busy; | ||
502 | client->usage_count++; | 500 | client->usage_count++; |
503 | 501 | ||
504 | return 0; | 502 | return 0; |
505 | busy: | ||
506 | i2c_dec_use_client(client); | ||
507 | return -EBUSY; | ||
508 | } | 503 | } |
509 | 504 | ||
510 | int i2c_release_client(struct i2c_client *client) | 505 | int i2c_release_client(struct i2c_client *client) |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 8b4d4695de0e..85c517a9b05b 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -307,9 +307,7 @@ extern struct i2c_client *i2c_get_client(int driver_id, int adapter_id, | |||
307 | extern struct i2c_client *i2c_get_client(int,int,struct i2c_client *); | 307 | extern struct i2c_client *i2c_get_client(int,int,struct i2c_client *); |
308 | to make sure that client-struct is valid and that it is okay to access | 308 | to make sure that client-struct is valid and that it is okay to access |
309 | the i2c-client. | 309 | the i2c-client. |
310 | returns -EACCES if client doesn't allow use (default) | 310 | returns -ENODEV if client has gone in the meantime */ |
311 | returns -EBUSY if client doesn't allow multiple use (default) and | ||
312 | usage_count >0 */ | ||
313 | extern int i2c_use_client(struct i2c_client *); | 311 | extern int i2c_use_client(struct i2c_client *); |
314 | extern int i2c_release_client(struct i2c_client *); | 312 | extern int i2c_release_client(struct i2c_client *); |
315 | 313 | ||