[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