Index: sys/dev/iicbus/iic.c =================================================================== --- sys/dev/iicbus/iic.c +++ sys/dev/iicbus/iic.c @@ -231,6 +231,7 @@ error = iicbus_read(parent, buffer, num_bytes, &transferred_bytes, ((uio->uio_resid <= sizeof(buffer)) ? last : 0), 0); + error = iic2errno(error); if (error == 0) error = uiomove(buffer, transferred_bytes, uio); } @@ -263,6 +264,7 @@ error = iicbus_request_bus(parent, priv->sc->sc_dev, (ioflag & O_NONBLOCK) ? IIC_DONTWAIT : (IIC_WAIT | IIC_INTR)); + error = iic2errno(error); if (error != 0) { IIC_UNLOCK(priv); return (error); @@ -274,6 +276,7 @@ addr = priv->addr & ~LSB; error = iicbus_start(parent, addr, 0); + error = iic2errno(error); if (error != 0) { iicbus_release_bus(parent, priv->sc->sc_dev); @@ -334,12 +337,15 @@ error = copyin(usrbufs[i], m->buf, m->len); } - if (error == 0) + if (error == 0) { error = iicbus_request_bus(parent, iicdev, (flags & O_NONBLOCK) ? IIC_DONTWAIT : (IIC_WAIT | IIC_INTR)); + error = iic2errno(error); + } if (error == 0) { error = iicbus_transfer(iicdev, buf, d->nmsgs); + error = iic2errno(error); iicbus_release_bus(parent, iicdev); } @@ -386,10 +392,12 @@ } error = iicbus_request_bus(parent, iicdev, (flags & O_NONBLOCK) ? IIC_DONTWAIT : (IIC_WAIT | IIC_INTR)); + error = iic2errno(error); - if (error == 0) + if (error == 0) { error = iicbus_start(parent, s->slave, 0); - + error = iic2errno(error); + } if (error == 0) { priv->addr = s->slave; priv->started = true; @@ -401,6 +409,7 @@ case I2CSTOP: if (priv->started) { error = iicbus_stop(parent); + error = iic2errno(error); iicbus_release_bus(parent, iicdev); priv->started = false; } @@ -413,9 +422,11 @@ * We allow the bus to be already owned as the result of an in-progress * sequence; however, bus reset will always be followed by release * (a new start is presumably needed for I/O anyway). */ - if (!priv->started) + if (!priv->started) { error = iicbus_request_bus(parent, iicdev, (flags & O_NONBLOCK) ? IIC_DONTWAIT : (IIC_WAIT | IIC_INTR)); + error = iic2errno(error); + } if (error == 0) { error = iicbus_reset(parent, IIC_UNKNOWN, 0, NULL); @@ -485,6 +496,7 @@ break; } error = iicbus_repeated_start(parent, s->slave, 0); + error = iic2errno(error); break; case I2CSADDR: