On Tue, Jan 26, 2010 at 03:41:29PM -0800, Kevin Hilman wrote: > From: Chaithrika U S <chaithrika@xxxxxx> > > Cleanup the DaVinci I2C driver. Remove MOD_REG_BIT macro. > Also use ioremap instead of IO_ADDRESS macro. would have been nicer to do each of these seperately. > Signed-off-by: Chaithrika U S <chaithrika@xxxxxx> > Acked-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > --- > drivers/i2c/busses/i2c-davinci.c | 77 +++++++++++++++++++------------------- > 1 files changed, 38 insertions(+), 39 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c > index 444a9f2..34a48d0 100644 > --- a/drivers/i2c/busses/i2c-davinci.c > +++ b/drivers/i2c/busses/i2c-davinci.c > @@ -37,7 +37,6 @@ > #include <linux/io.h> > > #include <mach/hardware.h> > - > #include <mach/i2c.h> > > /* ----- global defines ----------------------------------------------- */ > @@ -71,37 +70,29 @@ > #define DAVINCI_I2C_IVR_NACK 0x02 > #define DAVINCI_I2C_IVR_AL 0x01 > > -#define DAVINCI_I2C_STR_BB (1 << 12) > -#define DAVINCI_I2C_STR_RSFULL (1 << 11) > -#define DAVINCI_I2C_STR_SCD (1 << 5) > -#define DAVINCI_I2C_STR_ARDY (1 << 2) > -#define DAVINCI_I2C_STR_NACK (1 << 1) > -#define DAVINCI_I2C_STR_AL (1 << 0) > - > -#define DAVINCI_I2C_MDR_NACK (1 << 15) > -#define DAVINCI_I2C_MDR_STT (1 << 13) > -#define DAVINCI_I2C_MDR_STP (1 << 11) > -#define DAVINCI_I2C_MDR_MST (1 << 10) > -#define DAVINCI_I2C_MDR_TRX (1 << 9) > -#define DAVINCI_I2C_MDR_XA (1 << 8) > -#define DAVINCI_I2C_MDR_RM (1 << 7) > -#define DAVINCI_I2C_MDR_IRS (1 << 5) > - > -#define DAVINCI_I2C_IMR_AAS (1 << 6) > -#define DAVINCI_I2C_IMR_SCD (1 << 5) > -#define DAVINCI_I2C_IMR_XRDY (1 << 4) > -#define DAVINCI_I2C_IMR_RRDY (1 << 3) > -#define DAVINCI_I2C_IMR_ARDY (1 << 2) > -#define DAVINCI_I2C_IMR_NACK (1 << 1) > -#define DAVINCI_I2C_IMR_AL (1 << 0) > - > -#define MOD_REG_BIT(val, mask, set) do { \ > - if (set) { \ > - val |= mask; \ > - } else { \ > - val &= ~mask; \ > - } \ > -} while (0) > +#define DAVINCI_I2C_STR_BB BIT(12) > +#define DAVINCI_I2C_STR_RSFULL BIT(11) > +#define DAVINCI_I2C_STR_SCD BIT(5) > +#define DAVINCI_I2C_STR_ARDY BIT(2) > +#define DAVINCI_I2C_STR_NACK BIT(1) > +#define DAVINCI_I2C_STR_AL BIT(0) > + > +#define DAVINCI_I2C_MDR_NACK BIT(15) > +#define DAVINCI_I2C_MDR_STT BIT(13) > +#define DAVINCI_I2C_MDR_STP BIT(11) > +#define DAVINCI_I2C_MDR_MST BIT(10) > +#define DAVINCI_I2C_MDR_TRX BIT(9) > +#define DAVINCI_I2C_MDR_XA BIT(8) > +#define DAVINCI_I2C_MDR_RM BIT(7) > +#define DAVINCI_I2C_MDR_IRS BIT(5) > + > +#define DAVINCI_I2C_IMR_AAS BIT(6) > +#define DAVINCI_I2C_IMR_SCD BIT(5) > +#define DAVINCI_I2C_IMR_XRDY BIT(4) > +#define DAVINCI_I2C_IMR_RRDY BIT(3) > +#define DAVINCI_I2C_IMR_ARDY BIT(2) > +#define DAVINCI_I2C_IMR_NACK BIT(1) > +#define DAVINCI_I2C_IMR_AL BIT(0) surely 1 << x isn't too difficult to understand?? > struct davinci_i2c_dev { > struct device *dev; > @@ -155,7 +146,7 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev) > > /* put I2C into reset */ > w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); > - MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 0); > + w &= ~DAVINCI_I2C_MDR_IRS; > davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); > > /* NOTE: I2C Clock divider programming info > @@ -205,7 +196,7 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev) > > /* Take the I2C module out of reset: */ > w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); > - MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 1); > + w |= DAVINCI_I2C_MDR_IRS; > davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); > > /* Enable interrupts */ > @@ -287,9 +278,9 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop) > /* Enable receive or transmit interrupts */ > w = davinci_i2c_read_reg(dev, DAVINCI_I2C_IMR_REG); > if (msg->flags & I2C_M_RD) > - MOD_REG_BIT(w, DAVINCI_I2C_IMR_RRDY, 1); > + w |= DAVINCI_I2C_IMR_RRDY; > else > - MOD_REG_BIT(w, DAVINCI_I2C_IMR_XRDY, 1); > + w |= DAVINCI_I2C_IMR_XRDY; > davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w); > > dev->terminate = 0; > @@ -346,7 +337,7 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop) > return msg->len; > if (stop) { > w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); > - MOD_REG_BIT(w, DAVINCI_I2C_MDR_STP, 1); > + w |= DAVINCI_I2C_MDR_STP; > davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); > } > return -EREMOTEIO; > @@ -482,7 +473,7 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id) > > w = davinci_i2c_read_reg(dev, > DAVINCI_I2C_IMR_REG); > - MOD_REG_BIT(w, DAVINCI_I2C_IMR_XRDY, 0); > + w &= ~DAVINCI_I2C_IMR_XRDY; > davinci_i2c_write_reg(dev, > DAVINCI_I2C_IMR_REG, > w); > @@ -561,7 +552,12 @@ static int davinci_i2c_probe(struct platform_device *pdev) > } > clk_enable(dev->clk); > > - dev->base = (void __iomem *)IO_ADDRESS(mem->start); > + dev->base = ioremap(mem->start, resource_size(mem)); > + if (!dev->base) { > + r = -EBUSY; > + goto err_mem_ioremap; > + } > + this looks like you've got >1 change per patch? > i2c_davinci_init(dev); > > r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev); > @@ -591,6 +587,8 @@ static int davinci_i2c_probe(struct platform_device *pdev) > err_free_irq: > free_irq(dev->irq, dev); > err_unuse_clocks: > + iounmap(dev->base); > +err_mem_ioremap: > clk_disable(dev->clk); > clk_put(dev->clk); > dev->clk = NULL; > @@ -619,6 +617,7 @@ static int davinci_i2c_remove(struct platform_device *pdev) > > davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); > free_irq(IRQ_I2C, dev); > + iounmap(dev->base); > kfree(dev); > > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > -- > 1.6.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-i2c" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Ben (ben@xxxxxxxxx, http://www.fluff.org/) 'a smiley only costs 4 bytes' -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html