[i2c] [PATCH] remove hardcoded #ifdef .. and use cpu_is_pxaXXX in i2c-pxa.c

eric miao eric.y.miao at gmail.com
Tue Nov 6 01:57:26 CET 2007


>From 328e7409dabf4010965eb3c29e762fc9ea63fe5a Mon Sep 17 00:00:00 2001
From: eric miao <eric.y.miao at gmail.com>
Date: Thu, 25 Oct 2007 17:05:03 +0800
Subject: [PATCH] remove hardcoded #ifdef .. and use cpu_is_pxaXXX in i2c-pxa.c

remove #ifdef CONFIG_PXA27x .. #endif and use cpu_is_pxaXXXX() macros
so that a single binary can support PXA25x/PXA27x/PXA3xx at run-time.

Signed-off-by: eric miao <eric.miao at marvell.com>
---
 drivers/i2c/busses/i2c-pxa.c |   57 ++++++++++++++++++++---------------------
 1 files changed, 28 insertions(+), 29 deletions(-)

diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 6426a61..30c9f55 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -840,6 +840,31 @@ static const struct i2c_algorithm i2c_pxa_algorithm = {
 	.functionality	= i2c_pxa_functionality,
 };

+static void i2c_pxa_enable(struct platform_device *dev)
+{
+	if (cpu_is_pxa27x()) {
+		switch (dev->id) {
+		case 0:
+			pxa_gpio_mode(GPIO117_I2CSCL_MD);
+			pxa_gpio_mode(GPIO118_I2CSDA_MD);
+			break;
+		case 1:
+			local_irq_disable();
+			PCFR |= PCFR_PI2CEN;
+			local_irq_enable();
+		}
+	}
+}
+
+static void i2c_pxa_disable(struct platform_device *dev)
+{
+	if (cpu_is_pxa27x() && dev->id == 1) {
+		local_irq_disable();
+		PCFR &= ~PCFR_PI2CEN;
+		local_irq_enable();
+	}
+}
+
 #define res_len(r)		((r)->end - (r)->start + 1)
 static int i2c_pxa_probe(struct platform_device *dev)
 {
@@ -899,25 +924,13 @@ static int i2c_pxa_probe(struct platform_device *dev)
 #endif

 	clk_enable(i2c->clk);
-#ifdef CONFIG_PXA27x
-	switch (dev->id) {
-	case 0:
-		pxa_gpio_mode(GPIO117_I2CSCL_MD);
-		pxa_gpio_mode(GPIO118_I2CSDA_MD);
-		break;
-	case 1:
-		local_irq_disable();
-		PCFR |= PCFR_PI2CEN;
-		local_irq_enable();
-	}
-#endif
+	i2c_pxa_enable(dev);

 	ret = request_irq(irq, i2c_pxa_handler, IRQF_DISABLED,
 			  i2c->adap.name, i2c);
 	if (ret)
 		goto ereqirq;

-
 	i2c_pxa_reset(i2c);

 	i2c->adap.algo_data = i2c;
@@ -955,14 +968,7 @@ eadapt:
 	free_irq(irq, i2c);
 ereqirq:
 	clk_disable(i2c->clk);
-
-#ifdef CONFIG_PXA27x
-	if (dev->id == 1) {
-		local_irq_disable();
-		PCFR &= ~PCFR_PI2CEN;
-		local_irq_enable();
-	}
-#endif
+	i2c_pxa_disable(dev);
 eremap:
 	clk_put(i2c->clk);
 eclk:
@@ -983,14 +989,7 @@ static int i2c_pxa_remove(struct platform_device *dev)

 	clk_disable(i2c->clk);
 	clk_put(i2c->clk);
-
-#ifdef CONFIG_PXA27x
-	if (dev->id == 1) {
-		local_irq_disable();
-		PCFR &= ~PCFR_PI2CEN;
-		local_irq_enable();
-	}
-#endif
+	i2c_pxa_disable(dev);

 	release_mem_region(i2c->iobase, i2c->iosize);
 	kfree(i2c);
-- 
1.5.2.5.GIT



More information about the i2c mailing list