> Date: Sun, 1 Aug 2010 14:13:02 +0100
> From: Stuart Henderson <s...@spacehopper.org>
> 
> iic(4) doesn't seem to work well on a Blade 2500; devices on the bus
> are detected but reading from them fails:
> 
> pcfiic0 at ebus0 addr 320-321 ivec 0x2e
> iic0 at pcfiic0
> "SUNW,i2c-imax" at iic0 addr 0x9 not configured
> "pca9556" at iic0 addr 0x18 not configured
> admtt0 at iic0 addr 0x2c, unable to read fan setting
> admtt1 at iic0 addr 0x2e, unable to read fan setting
> "fm3560" at iic0 addr 0x37 not configured
> "fm3560" at iic0 addr 0x4e not configured
> spdmem0 at iic0 addr 0x5d: no EEPROM found
> spdmem1 at iic0 addr 0x5e: no EEPROM found
> spdmem2 at iic0 addr 0x65: no EEPROM found
> spdmem3 at iic0 addr 0x66: no EEPROM found
> "ics951601" at iic0 addr 0x69 not configured

Can you try the attached diff?

Index: pcf8584.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/pcf8584.c,v
retrieving revision 1.10
diff -u -p -r1.10 pcf8584.c
--- pcf8584.c   30 Apr 2010 15:18:29 -0000      1.10
+++ pcf8584.c   1 Aug 2010 13:59:36 -0000
@@ -274,9 +274,12 @@ pcfiic_read(struct pcfiic_softc *sc, bus
 void
 pcfiic_write(struct pcfiic_softc *sc, bus_size_t r, u_int8_t v)
 {
+       volatile u_int8_t dummy;
+
        bus_space_write_1(sc->sc_iot, sc->sc_ioh, sc->sc_regmap[r], v);
        bus_space_barrier(sc->sc_iot, sc->sc_ioh, sc->sc_regmap[r], 1,
-           BUS_SPACE_BARRIER_WRITE);
+           BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+       dummy = bus_space_read_1(sc->sc_iot, sc->sc_ioh, sc->sc_regmap[r]);
 }
 
 void

Reply via email to