static int i2c_bit_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) { struct nouveau_i2c_port *port = adap->algo_data; struct i2c_msg *msg = msgs; int ret = 0, mcnt = num; if (port->func->acquire) port->func->acquire(port); while (!ret && mcnt--) { u8 remaining = msg->len; u8 *ptr = msg->buf; ret = i2c_start(port); if (ret == 0) ret = i2c_addr(port, msg); if (msg->flags & I2C_M_RD) { while (!ret && remaining--) ret = i2c_get_byte(port, ptr++, !remaining); } else { while (!ret && remaining--) ret = i2c_put_byte(port, *ptr++); } msg++; } i2c_stop(port); return (ret < 0) ? ret : num; }
int nvkm_i2c_bit_xfer(struct nvkm_i2c_bus *bus, struct i2c_msg *msgs, int num) { struct i2c_msg *msg = msgs; int ret = 0, mcnt = num; while (!ret && mcnt--) { u8 remaining = msg->len; u8 *ptr = msg->buf; ret = i2c_start(bus); if (ret == 0) ret = i2c_addr(bus, msg); if (msg->flags & I2C_M_RD) { while (!ret && remaining--) ret = nvkm_i2c_get_byte(bus, ptr++, !remaining); } else { while (!ret && remaining--) ret = nvkm_i2c_put_byte(bus, *ptr++); } msg++; } i2c_stop(bus); return (ret < 0) ? ret : num; }