[i2c] [PATCH 2.6.17] i2c: i2c-algo-bit error handling fix

Mark M. Hoffman mhoffman at lightlink.com
Sat Jul 1 14:40:44 CEST 2006


Hi Jean:

* Jean Delvare <khali at linux-fr.org> [2006-06-21 12:22:29 +0200]:
> Good catch. Looking at the other i2c algorithm drivers, I see that
> others would need the same fix: i2c-algo-pca, i2c-algo-pcf and
> i2c-algo-sibyte. i2c-algo-ite as well, but it's so broken that I'm not
> sure it's worth fixing. Care to provide a patch fixing them all?

---

It is possible for i2c_add_adapter() to fail.  Several I2C algorithm
drivers ignore that fact.  This (compile-tested only) patch fixes them.

Signed-off-by: Mark M. Hoffman <mhoffman at lightlink.com>

--- linux-2.6.17-20060701.orig/drivers/i2c/algos/i2c-algo-bit.c
+++ linux-2.6.17-20060701/drivers/i2c/algos/i2c-algo-bit.c
@@ -544,8 +544,7 @@ int i2c_bit_add_bus(struct i2c_adapter *
 	adap->timeout = 100;	/* default values, should	*/
 	adap->retries = 3;	/* be replaced by defines	*/
 
-	i2c_add_adapter(adap);
-	return 0;
+	return i2c_add_adapter(adap);
 }
 
 
--- linux-2.6.17-20060701.orig/drivers/i2c/algos/i2c-algo-pca.c
+++ linux-2.6.17-20060701/drivers/i2c/algos/i2c-algo-pca.c
@@ -374,10 +374,10 @@ int i2c_pca_add_bus(struct i2c_adapter *
 	adap->timeout = 100;		/* default values, should	*/
 	adap->retries = 3;		/* be replaced by defines	*/
 
-	rval = pca_init(pca_adap);
+	if ((rval = pca_init(pca_adap)))
+		return rval;
 
-	if (!rval)
-		i2c_add_adapter(adap);
+	rval = i2c_add_adapter(adap);
 
 	return rval;
 }
--- linux-2.6.17-20060701.orig/drivers/i2c/algos/i2c-algo-pcf.c
+++ linux-2.6.17-20060701/drivers/i2c/algos/i2c-algo-pcf.c
@@ -479,9 +479,11 @@ int i2c_pcf_add_bus(struct i2c_adapter *
 	adap->timeout = 100;		/* default values, should	*/
 	adap->retries = 3;		/* be replaced by defines	*/
 
-	rval = pcf_init_8584(pcf_adap);
-	if (!rval)
-		i2c_add_adapter(adap);
+	if ((rval = pcf_init_8584(pcf_adap)))
+		return rval;
+
+	rval = i2c_add_adapter(adap);
+
 	return rval;
 }
 
--- linux-2.6.17-20060701.orig/drivers/i2c/algos/i2c-algo-sibyte.c
+++ linux-2.6.17-20060701/drivers/i2c/algos/i2c-algo-sibyte.c
@@ -173,9 +173,7 @@ int i2c_sibyte_add_bus(struct i2c_adapte
 		printk("\n");
 	}
 
-	i2c_add_adapter(i2c_adap);
-
-	return 0;
+	return i2c_add_adapter(i2c_adap);
 }
 
 
--- linux-2.6.17-20060701.orig/drivers/i2c/algos/i2c-algo-ite.c
+++ linux-2.6.17-20060701/drivers/i2c/algos/i2c-algo-ite.c
@@ -742,10 +742,8 @@ int i2c_iic_add_bus(struct i2c_adapter *
 	adap->retries = 3;		/* be replaced by defines	*/
 	adap->flags = 0;
 
-	i2c_add_adapter(adap);
 	iic_init(iic_adap);
-
-	return 0;
+	return i2c_add_adapter(adap);
 }
 
 
-- 
Mark M. Hoffman
mhoffman at lightlink.com




More information about the i2c mailing list