[i2c] [PATCH] remove hardcoded #ifdef .. and use cpu_is_pxaXXX in i2c-pxa.c
eric miao
eric.y.miao at gmail.com
Wed Nov 7 07:25:44 CET 2007
On 11/6/07, Jean Delvare <khali at linux-fr.org> wrote:
> 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...
Yes, thanks for pointing this out :-)
>
> > + }
> > + }
> > +}
> > +
> > +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
>
--
Cheers
- eric
More information about the i2c
mailing list