mirror of
https://github.com/joel16/android_kernel_sony_msm8994_rework.git
synced 2024-12-29 07:44:24 +00:00
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
@ -425,14 +425,14 @@ static int __i2c_check_addr_busy(struct device *dev, void *addrp)
|
|||||||
/* walk up mux tree */
|
/* walk up mux tree */
|
||||||
static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
||||||
{
|
{
|
||||||
|
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = device_for_each_child(&adapter->dev, &addr,
|
result = device_for_each_child(&adapter->dev, &addr,
|
||||||
__i2c_check_addr_busy);
|
__i2c_check_addr_busy);
|
||||||
|
|
||||||
if (!result && i2c_parent_is_i2c_adapter(adapter))
|
if (!result && parent)
|
||||||
result = i2c_check_mux_parents(
|
result = i2c_check_mux_parents(parent, addr);
|
||||||
to_i2c_adapter(adapter->dev.parent), addr);
|
|
||||||
|
|
||||||
return result;
|
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)
|
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;
|
int result = 0;
|
||||||
|
|
||||||
if (i2c_parent_is_i2c_adapter(adapter))
|
if (parent)
|
||||||
result = i2c_check_mux_parents(
|
result = i2c_check_mux_parents(parent, addr);
|
||||||
to_i2c_adapter(adapter->dev.parent), addr);
|
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
result = device_for_each_child(&adapter->dev, &addr,
|
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)
|
void i2c_lock_adapter(struct i2c_adapter *adapter)
|
||||||
{
|
{
|
||||||
if (i2c_parent_is_i2c_adapter(adapter))
|
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||||
i2c_lock_adapter(to_i2c_adapter(adapter->dev.parent));
|
|
||||||
|
if (parent)
|
||||||
|
i2c_lock_adapter(parent);
|
||||||
else
|
else
|
||||||
rt_mutex_lock(&adapter->bus_lock);
|
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)
|
static int i2c_trylock_adapter(struct i2c_adapter *adapter)
|
||||||
{
|
{
|
||||||
if (i2c_parent_is_i2c_adapter(adapter))
|
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||||
return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent));
|
|
||||||
|
if (parent)
|
||||||
|
return i2c_trylock_adapter(parent);
|
||||||
else
|
else
|
||||||
return rt_mutex_trylock(&adapter->bus_lock);
|
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)
|
void i2c_unlock_adapter(struct i2c_adapter *adapter)
|
||||||
{
|
{
|
||||||
if (i2c_parent_is_i2c_adapter(adapter))
|
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||||
i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent));
|
|
||||||
|
if (parent)
|
||||||
|
i2c_unlock_adapter(parent);
|
||||||
else
|
else
|
||||||
rt_mutex_unlock(&adapter->bus_lock);
|
rt_mutex_unlock(&adapter->bus_lock);
|
||||||
}
|
}
|
||||||
|
@ -192,13 +192,12 @@ static int i2cdev_check(struct device *dev, void *addrp)
|
|||||||
/* walk up mux tree */
|
/* walk up mux tree */
|
||||||
static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr)
|
||||||
{
|
{
|
||||||
|
struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = device_for_each_child(&adapter->dev, &addr, i2cdev_check);
|
result = device_for_each_child(&adapter->dev, &addr, i2cdev_check);
|
||||||
|
if (!result && parent)
|
||||||
if (!result && i2c_parent_is_i2c_adapter(adapter))
|
result = i2cdev_check_mux_parents(parent, addr);
|
||||||
result = i2cdev_check_mux_parents(
|
|
||||||
to_i2c_adapter(adapter->dev.parent), addr);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -222,11 +221,11 @@ static int i2cdev_check_mux_children(struct device *dev, void *addrp)
|
|||||||
driver bound to it, as NOT busy. */
|
driver bound to it, as NOT busy. */
|
||||||
static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)
|
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;
|
int result = 0;
|
||||||
|
|
||||||
if (i2c_parent_is_i2c_adapter(adapter))
|
if (parent)
|
||||||
result = i2cdev_check_mux_parents(
|
result = i2cdev_check_mux_parents(parent, addr);
|
||||||
to_i2c_adapter(adapter->dev.parent), addr);
|
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
result = device_for_each_child(&adapter->dev, &addr,
|
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);
|
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
|
struct device *parent = adapter->dev.parent;
|
||||||
&& adapter->dev.parent->type == &i2c_adapter_type;
|
|
||||||
|
if (parent != NULL && parent->type == &i2c_adapter_type)
|
||||||
|
return to_i2c_adapter(parent);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Adapter locking functions, exported for shared pin cases */
|
/* Adapter locking functions, exported for shared pin cases */
|
||||||
|
Loading…
Reference in New Issue
Block a user