[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