diff options
author | eric miao <eric.y.miao@gmail.com> | 2008-01-27 18:14:46 +0100 |
---|---|---|
committer | Jean Delvare <khali@hyperion.delvare> | 2008-01-27 18:14:46 +0100 |
commit | 59d70df025473931c500d6d60510798e4bfa3279 (patch) | |
tree | 8b434d43a66e690755eaa07daf0bb9b147ac92f7 /drivers | |
parent | 7e8b99251be8b6f992baa88e3a6ba3c4ae01660b (diff) | |
download | blackbird-op-linux-59d70df025473931c500d6d60510798e4bfa3279.tar.gz blackbird-op-linux-59d70df025473931c500d6d60510798e4bfa3279.zip |
i2c-pxa: Remove hardcoded #ifdef and use cpu_is_pxa27x
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@marvell.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/busses/i2c-pxa.c | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index 6426a61f8d4d..da3ecf5c591b 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c @@ -840,6 +840,32 @@ 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(); + break; + } + } +} + +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 +925,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 +969,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 +990,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); |