> 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