linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).