i2c: Let i2c_parent_is_i2c_adapter return the parent adapter
This makes the calling site's code clearer IMHO. Signed-off-by: Jean Delvare <khali@linux-fr.org> Acked-by: Michael Lawnick <ml.lawnick@gmx.de>
This commit is contained in:
parent
d582963a02
commit
97cc4d49cf
3 changed files with 32 additions and 22 deletions
|
@ -425,14 +425,14 @@ static int __i2c_check_addr_busy(struct device *dev, void *addrp)
|
|||
/* walk up mux tree */
|
||||
static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
||||
{
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
int result;
|
||||
|
||||
result = device_for_each_child(&adapter->dev, &addr,
|
||||
__i2c_check_addr_busy);
|
||||
|
||||
if (!result && i2c_parent_is_i2c_adapter(adapter))
|
||||
result = i2c_check_mux_parents(
|
||||
to_i2c_adapter(adapter->dev.parent), addr);
|
||||
if (!result && parent)
|
||||
result = i2c_check_mux_parents(parent, addr);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -453,11 +453,11 @@ static int i2c_check_mux_children(struct device *dev, void *addrp)
|
|||
|
||||
static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
|
||||
{
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
int result = 0;
|
||||
|
||||
if (i2c_parent_is_i2c_adapter(adapter))
|
||||
result = i2c_check_mux_parents(
|
||||
to_i2c_adapter(adapter->dev.parent), addr);
|
||||
if (parent)
|
||||
result = i2c_check_mux_parents(parent, addr);
|
||||
|
||||
if (!result)
|
||||
result = device_for_each_child(&adapter->dev, &addr,
|
||||
|
@ -472,8 +472,10 @@ static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
|
|||
*/
|
||||
void i2c_lock_adapter(struct i2c_adapter *adapter)
|
||||
{
|
||||
if (i2c_parent_is_i2c_adapter(adapter))
|
||||
i2c_lock_adapter(to_i2c_adapter(adapter->dev.parent));
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
|
||||
if (parent)
|
||||
i2c_lock_adapter(parent);
|
||||
else
|
||||
rt_mutex_lock(&adapter->bus_lock);
|
||||
}
|
||||
|
@ -485,8 +487,10 @@ EXPORT_SYMBOL_GPL(i2c_lock_adapter);
|
|||
*/
|
||||
static int i2c_trylock_adapter(struct i2c_adapter *adapter)
|
||||
{
|
||||
if (i2c_parent_is_i2c_adapter(adapter))
|
||||
return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent));
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
|
||||
if (parent)
|
||||
return i2c_trylock_adapter(parent);
|
||||
else
|
||||
return rt_mutex_trylock(&adapter->bus_lock);
|
||||
}
|
||||
|
@ -497,8 +501,10 @@ static int i2c_trylock_adapter(struct i2c_adapter *adapter)
|
|||
*/
|
||||
void i2c_unlock_adapter(struct i2c_adapter *adapter)
|
||||
{
|
||||
if (i2c_parent_is_i2c_adapter(adapter))
|
||||
i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent));
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
|
||||
if (parent)
|
||||
i2c_unlock_adapter(parent);
|
||||
else
|
||||
rt_mutex_unlock(&adapter->bus_lock);
|
||||
}
|
||||
|
|
|
@ -192,13 +192,12 @@ static int i2cdev_check(struct device *dev, void *addrp)
|
|||
/* walk up mux tree */
|
||||
static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
||||
{
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
int result;
|
||||
|
||||
result = device_for_each_child(&adapter->dev, &addr, i2cdev_check);
|
||||
|
||||
if (!result && i2c_parent_is_i2c_adapter(adapter))
|
||||
result = i2cdev_check_mux_parents(
|
||||
to_i2c_adapter(adapter->dev.parent), addr);
|
||||
if (!result && parent)
|
||||
result = i2cdev_check_mux_parents(parent, addr);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -222,11 +221,11 @@ static int i2cdev_check_mux_children(struct device *dev, void *addrp)
|
|||
driver bound to it, as NOT busy. */
|
||||
static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)
|
||||
{
|
||||
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||
int result = 0;
|
||||
|
||||
if (i2c_parent_is_i2c_adapter(adapter))
|
||||
result = i2cdev_check_mux_parents(
|
||||
to_i2c_adapter(adapter->dev.parent), addr);
|
||||
if (parent)
|
||||
result = i2cdev_check_mux_parents(parent, addr);
|
||||
|
||||
if (!result)
|
||||
result = device_for_each_child(&adapter->dev, &addr,
|
||||
|
|
|
@ -384,10 +384,15 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
|
|||
dev_set_drvdata(&dev->dev, data);
|
||||
}
|
||||
|
||||
static inline int i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter)
|
||||
static inline struct i2c_adapter *
|
||||
i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter)
|
||||
{
|
||||
return adapter->dev.parent != NULL
|
||||
&& adapter->dev.parent->type == &i2c_adapter_type;
|
||||
struct device *parent = adapter->dev.parent;
|
||||
|
||||
if (parent != NULL && parent->type == &i2c_adapter_type)
|
||||
return to_i2c_adapter(parent);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Adapter locking functions, exported for shared pin cases */
|
||||
|
|
Loading…
Reference in a new issue