[PATCH 0/3]: Sparc OF I2C support.
Jon Smirl
jonsmirl at gmail.com
Fri Aug 22 07:53:02 EST 2008
On 8/21/08, David Miller <davem at davemloft.net> wrote:
>
> I'm working on some drivers for I2C bus support on some of my sparc64
> workstations (for lm-sensor and eeprom type devices sitting behind
> them) so I went back to trying to get of_i2c.c usable on sparc.
>
> Mostly straightforward stuff _except_ for the I2C address encoding.
>
> What I2C IEEE1275 device binding was used to write that code in
> of_i2c.c? Is it some PowerPC specific thing? Was it "invented"
> by the embedded folks (I hope not)?
>
> On sparc, the encoding is either 1 cell or 2 cell.
>
> If it's one cell, it's just the device address.
>
> If it's two cells, it's a bus number (for I2C controllers that
> can manage multiple I2C bus segments, think PCI domains) in the
> first cell and the device address in the second cell.
>
> And, furthermore, the device address is shifted up 1 bit higher
> than the Linux I2C layer expects. It includes the low direction
> bit, bit 0, so we have to shift it down by 1 bit before we give
> it to the Linux I2C layer.
>
> Does PowerPC really encode these things differently? And if so what
> IEEE1275 I2C device binding specification covers that?
>
> If PowerPC really does encode the device address in the same format as
> the Linux I2C layer expects, that's OK and I used some property tests
> and ifdefs to make it all work out. What I did in these patches is:
>
> 1) Check the #address-cells property. If not present, assume the value
> is "1". Only accept values of "1" and "2".
>
> 2) When CONFIG_SPARC, shift the device address down by one bit before
> giving it to the Linux I2C layer.
How do you deal with a 10-bit address i2c device? Is it multiplied by two too?
Here's the i2c spec,
http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf
It says the basic addresses are 7 bit.
> I haven't added support to the I2C layer for the bus number yet, that
> will come later.
>
> The first patch in this series add the powerpc-compat IRQ probing
> interfaces, mostly straightforward stuff as we precompute these
> IRQs in of_device objects so we just search for the of_device corresponding
> to the device node and return the interrupt, if any. Dispost is a NOP.
>
> The second patch deals with the addressing issues described above and
> lets it be compiled on non-ppc systems.
>
> The third patch adds device modaliases for a couple of I2C chip devices
> I've seen on my SunBlade2500 workstation. More will come later as I
> flesh out my I2C sparc64 drivers which are not being posted here yet.
> I have a fully functional Sun pcf8584 I2C bus driver.
>
> Signed-off-by: David S. Miller <davem at davemloft.net>
>
--
Jon Smirl
jonsmirl at gmail.com
More information about the Linuxppc-dev
mailing list