[U-Boot] [PATCH 05/15] iMX28: Add I2C bus driver

Marek Vasut
2011-09-13T13:20:26Z

On Tuesday, September 13, 2011 03:12:40 PM Wolfram Sang wrote:
> > > > diff --git a/drivers/i2c/mxs_i2c.c b/drivers/i2c/mxs_i2c.c
> > > > new file mode 100644
> > > > index 0000000..9f380a0
> > > > --- /dev/null
> > > > +++ b/drivers/i2c/mxs_i2c.c
> > > > @@ -0,0 +1,240 @@
> > > > +/*
> > > > + * Freescale i.MX28 I2C Driver
> > > > + *
> > > > + * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
> > > > + * on behalf of DENX Software Engineering GmbH
> > >
> > > Do you mind adding the copyrights from the kernel driver here? It looks
> > > quite inspired to me, even if you didn't like some of the variable
> > > names and defines :)
> >
> > Bits are from the STMP3xxx driver, not much though.
>
> Could you point me to that driver? Maybe it needs fixing as well,
> because that pattern for example:
>
> + off = i;
> + for (; i < off + blen; i++) {
> + data >>= 8;
> + data |= buf[i - off] << 24;
> + if ((i & 3) == 2)
> + writel(data, &i2c_regs->hw_i2c_data);
> + }
> +
> + remain = 24 - ((i & 3) * 8);
> + if (remain)
> + writel(data >> remain, &i2c_regs->hw_i2c_data);
>
> is highly similar to my reimplementation of the "let's feed the buffer
> code" in the kernel (to name one example). Check current linus-git:
>
> for (i = 0; i < len; i++) {
> data >>= 8;
> data |= buf[i] << 24;
> if ((i & 3) == 2)
> writel(data, i2c->regs + MXS_I2C_DATA);
> }
>
> /* Write out the remaining bytes if any */
> shifts_left = 24 - (i & 3) * 8;
> if (shifts_left)
> writel(data >> shifts_left, i2c->regs + MXS_I2C_DATA);
>
> I'd be very surprised if two programmers would come up with two routines
> that equal?

Oh I2C, not SPI. Sorry.

Will add Based on line, cheers!

>
> Regards,
>
> Wolfram