[PATCH] i2c: make better use of IDR in i2c-core
This patch uses the already existing IDR mechanism to simplify and improve the i2c_get_adapter function in i2c-core. Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
5da69ba42a
commit
a0920e1043
1 changed files with 6 additions and 11 deletions
|
@ -156,7 +156,7 @@ int i2c_add_adapter(struct i2c_adapter *adap)
|
|||
goto out_unlock;
|
||||
}
|
||||
|
||||
res = idr_get_new(&i2c_adapter_idr, NULL, &id);
|
||||
res = idr_get_new(&i2c_adapter_idr, adap, &id);
|
||||
if (res < 0) {
|
||||
if (res == -EAGAIN)
|
||||
res = -ENOMEM;
|
||||
|
@ -765,20 +765,15 @@ int i2c_adapter_id(struct i2c_adapter *adap)
|
|||
|
||||
struct i2c_adapter* i2c_get_adapter(int id)
|
||||
{
|
||||
struct list_head *item;
|
||||
struct i2c_adapter *adapter;
|
||||
|
||||
down(&core_lists);
|
||||
list_for_each(item,&adapters) {
|
||||
adapter = list_entry(item, struct i2c_adapter, list);
|
||||
if (id == adapter->nr &&
|
||||
try_module_get(adapter->owner)) {
|
||||
up(&core_lists);
|
||||
return adapter;
|
||||
}
|
||||
}
|
||||
adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
|
||||
if (adapter && !try_module_get(adapter->owner))
|
||||
adapter = NULL;
|
||||
|
||||
up(&core_lists);
|
||||
return NULL;
|
||||
return adapter;
|
||||
}
|
||||
|
||||
void i2c_put_adapter(struct i2c_adapter *adap)
|
||||
|
|
Loading…
Reference in a new issue