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

Wolfram Sang
2011-09-13T13:12:40Z

> > > 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?

Regards,

Wolfram

--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110913/e7ccc63e/attachment.pgp