Read status register after all writes to the pcf8584 controller. Alegedly
authorkettenis <kettenis@openbsd.org>
Sun, 1 Aug 2010 18:48:41 +0000 (18:48 +0000)
committerkettenis <kettenis@openbsd.org>
Sun, 1 Aug 2010 18:48:41 +0000 (18:48 +0000)
this is what (Open)Solaris does and it makes the i2c controller on the
blade2.5k work.  From NetBSD.

Tested by sthen@, ok deraadt@

sys/dev/ic/pcf8584.c

index 949e5eb..b86f6fe 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pcf8584.c,v 1.10 2010/04/30 15:18:29 kettenis Exp $ */
+/*     $OpenBSD: pcf8584.c,v 1.11 2010/08/01 18:48:41 kettenis Exp $ */
 
 /*
  * Copyright (c) 2006 David Gwynne <dlg@openbsd.org>
@@ -275,8 +275,9 @@ void
 pcfiic_write(struct pcfiic_softc *sc, bus_size_t r, u_int8_t v)
 {
        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(sc->sc_iot, sc->sc_ioh, 0, 4,
+           BUS_SPACE_BARRIER_WRITE | BUS_SPACE_BARRIER_READ);
+       bus_space_read_1(sc->sc_iot, sc->sc_ioh, sc->sc_regmap[PCF_S1]);
 }
 
 void