[i2c] [PATCH] remove hardcoded #ifdef .. and use cpu_is_pxaXXX in i2c-pxa.c
Jean Delvare
khali at linux-fr.org
Tue Nov 6 11:44:23 CET 2007
Hi Eric,
On Tue, 6 Nov 2007 08:57:26 +0800, eric miao wrote:
> 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.
Looks good, applied, thanks.
>
> 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();
I've added a "break" here, in case a 3rd channel is added someday...
> + }
> + }
> +}
> +
> +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);
--
Jean Delvare
More information about the i2c
mailing list