Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 611e12ea authored by Vladimir Zapolskiy's avatar Vladimir Zapolskiy Committed by Wolfram Sang
Browse files

i2c: core: manage i2c bus device refcount in i2c_[get|put]_adapter



In addition to module_get()/module_put() add get_device()/put_device()
calls into i2c_get_adapter()/i2c_put_adapter() exported
interfaces. This is done to lock I2C bus device, if it is in use by a
client.

Signed-off-by: default avatarVladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 141124e6
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -2413,9 +2413,15 @@ struct i2c_adapter *i2c_get_adapter(int nr)

	mutex_lock(&core_lock);
	adapter = idr_find(&i2c_adapter_idr, nr);
	if (adapter && !try_module_get(adapter->owner))
	if (!adapter)
		goto exit;

	if (try_module_get(adapter->owner))
		get_device(&adapter->dev);
	else
		adapter = NULL;

 exit:
	mutex_unlock(&core_lock);
	return adapter;
}
@@ -2423,7 +2429,10 @@ EXPORT_SYMBOL(i2c_get_adapter);

void i2c_put_adapter(struct i2c_adapter *adap)
{
	if (adap)
	if (!adap)
		return;

	put_device(&adap->dev);
	module_put(adap->owner);
}
EXPORT_SYMBOL(i2c_put_adapter);