
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