Index: mcp980x.c =================================================================== RCS file: /cvsroot/src/sys/dev/i2c/mcp980x.c,v retrieving revision 1.1 diff -u -r1.1 mcp980x.c --- mcp980x.c 6 May 2013 22:04:12 -0000 1.1 +++ mcp980x.c 27 May 2013 18:32:35 -0000 @@ -69,8 +69,9 @@ static int mcp980x_match(device_t, cfdata_t, void *); static void mcp980x_attach(device_t, device_t, void *); -/*static uint8_t mcp980x_reg_read_1(struct mcp980x_softc *sc, uint8_t);*/ +static uint8_t mcp980x_reg_read_1(struct mcp980x_softc *sc, uint8_t); static uint16_t mcp980x_reg_read_2(struct mcp980x_softc *sc, uint8_t reg); +static uint8_t mcp980x_reg_write_1(struct mcp980x_softc *sc, uint8_t reg, uint8_t value); static uint32_t mcp980x_temperature(struct mcp980x_softc *sc); @@ -105,6 +106,10 @@ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE); + aprint_normal_dev(sc->sc_dev, "MCP980X_CONFIG %x\n", mcp980x_reg_read_1(sc, MCP980X_CONFIG)); + mcp980x_reg_write_1(sc, MCP980X_CONFIG, 96); + aprint_normal_dev(sc->sc_dev, "MCP980X_CONFIG %x\n", mcp980x_reg_read_1(sc, MCP980X_CONFIG)); + mcp980x_envsys_register(sc); } @@ -132,21 +137,19 @@ return be16toh(rv); } -/* Will need that later for reading config register. */ -/* static uint8_t mcp980x_reg_read_1(struct mcp980x_softc *sc, uint8_t reg) { - uint8_t rv, wbuf[2]; + uint8_t rv, wbuf; if (iic_acquire_bus(sc->sc_tag, I2C_F_POLL) != 0) { aprint_error_dev(sc->sc_dev, "cannot acquire bus for read\n"); return 0; } - wbuf[0] = reg; + wbuf = reg; - if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP, sc->sc_addr, wbuf, + if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP, sc->sc_addr, &wbuf, 1, &rv, 1, I2C_F_POLL)) { aprint_error_dev(sc->sc_dev, "cannot execute operation\n"); iic_release_bus(sc->sc_tag, I2C_F_POLL); @@ -155,7 +158,18 @@ iic_release_bus(sc->sc_tag, I2C_F_POLL); return rv; -}*/ +} + +static uint8_t +mcp980x_reg_write_1(struct mcp980x_softc *sc, uint8_t reg, uint8_t value) +{ + uint8_t cmdbuf[2]; + cmdbuf[0] = reg; + cmdbuf[1] = value; + + return iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP, + sc->sc_addr, cmdbuf, 1, &cmdbuf[1], 1, I2C_F_POLL); +} /* Get temperature in microKelvins. */ static uint32_t