* [PATCH 2/2] i2c: Let i2c_parent_is_i2c_adapter return the parent adapter
@ 2010-08-23 10:53 Jean Delvare
[not found] ` <20100823125354.38563c3d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Jean Delvare @ 2010-08-23 10:53 UTC (permalink / raw)
To: Linux I2C; +Cc: Michael Lawnick
This makes the calling site's code clearer IMHO.
Signed-off-by: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
Cc: Michael Lawnick <ml.lawnick-Mmb7MZpHnFY@public.gmane.org>
---
Michael, what do you think? Admittedly this makes the code (very)
slightly larger, but think the improvement in code clarity justifies it.
drivers/i2c/i2c-core.c | 30 ++++++++++++++++++------------
drivers/i2c/i2c-dev.c | 13 ++++++-------
include/linux/i2c.h | 11 ++++++++---
3 files changed, 32 insertions(+), 22 deletions(-)
--- linux-2.6.36-rc1.orig/drivers/i2c/i2c-core.c 2010-08-23 08:32:39.000000000 +0200
+++ linux-2.6.36-rc1/drivers/i2c/i2c-core.c 2010-08-23 11:39:37.000000000 +0200
@@ -428,14 +428,14 @@ static int __i2c_check_addr_busy(struct
/* 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;
}
@@ -456,11 +456,11 @@ static int i2c_check_mux_children(struct
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,
@@ -475,8 +475,10 @@ static int i2c_check_addr_busy(struct i2
*/
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);
}
@@ -488,8 +490,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);
}
@@ -500,8 +504,10 @@ static int i2c_trylock_adapter(struct i2
*/
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);
}
--- linux-2.6.36-rc1.orig/drivers/i2c/i2c-dev.c 2010-08-23 08:32:39.000000000 +0200
+++ linux-2.6.36-rc1/drivers/i2c/i2c-dev.c 2010-08-23 11:42:38.000000000 +0200
@@ -192,13 +192,12 @@ static int i2cdev_check(struct device *d
/* 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(str
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,
--- linux-2.6.36-rc1.orig/include/linux/i2c.h 2010-08-23 10:10:33.000000000 +0200
+++ linux-2.6.36-rc1/include/linux/i2c.h 2010-08-23 10:39:12.000000000 +0200
@@ -384,10 +384,15 @@ static inline void i2c_set_adapdata(stru
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 */
--
Jean Delvare
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 2/2] i2c: Let i2c_parent_is_i2c_adapter return the parent adapter
[not found] ` <20100823125354.38563c3d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
@ 2010-08-23 11:24 ` Michael Lawnick
0 siblings, 0 replies; 2+ messages in thread
From: Michael Lawnick @ 2010-08-23 11:24 UTC (permalink / raw)
To: Jean Delvare; +Cc: Linux I2C
Jean Delvare said the following:
> This makes the calling site's code clearer IMHO.
>
> Signed-off-by: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
> Cc: Michael Lawnick <ml.lawnick-Mmb7MZpHnFY@public.gmane.org>
> ---
> Michael, what do you think? Admittedly this makes the code (very)
> slightly larger, but think the improvement in code clarity justifies it.
Well, at least it overcomes these awful 80 char break adjustments ...
ACK
--
KR
Michael
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-08-23 11:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-23 10:53 [PATCH 2/2] i2c: Let i2c_parent_is_i2c_adapter return the parent adapter Jean Delvare
[not found] ` <20100823125354.38563c3d-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2010-08-23 11:24 ` Michael Lawnick
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).