Index: i2c.c =================================================================== --- i2c.c (revision 221961) +++ i2c.c (working copy) @@ -119,8 +119,11 @@ } static int -scan_bus(struct iiccmd cmd, char *dev, int skip, char *skip_addr) +scan_bus(char *dev, int skip, char *skip_addr) { + struct iiccmd rst_cmd; + struct iic_rdwr_data rdwr_data; + struct iic_msg msg; struct skip_range addr_range = { 0, 0 }; int *tokens, fd, error, i, index, j; int len = 0, do_skip = 0, no_range = 1; @@ -174,25 +177,24 @@ continue; } - cmd.slave = i << 1; - cmd.last = 1; - cmd.count = 0; - error = ioctl(fd, I2CRSTCARD, &cmd); + error = ioctl(fd, I2CRSTCARD, &rst_cmd); if (error) goto out; - cmd.slave = i << 1; - cmd.last = 1; - error = ioctl(fd, I2CSTART, &cmd); + msg.slave = i << 1; + msg.flags = IIC_M_WR; + msg.len = 0; + msg.buf = NULL; + rdwr_data.msgs = &msg; + rdwr_data.nmsgs = 1; + + error = ioctl(fd, I2CRDWR, &rdwr_data); if (!error) printf("%x ", i); - cmd.slave = i << 1; - cmd.last = 1; - error = ioctl(fd, I2CSTOP, &cmd); } printf("\n"); - error = ioctl(fd, I2CRSTCARD, &cmd); + error = ioctl(fd, I2CRSTCARD, &rst_cmd); out: close(fd); if (skip && no_range) @@ -207,8 +209,9 @@ } static int -reset_bus(struct iiccmd cmd, char *dev) +reset_bus(char *dev) { + struct iiccmd rst_cmd; int fd, error; fd = open(dev, O_RDWR); @@ -219,7 +222,7 @@ } printf("Resetting I2C controller on %s: ", dev); - error = ioctl(fd, I2CRSTCARD, &cmd); + error = ioctl(fd, I2CRSTCARD, &rst_cmd); close (fd); if (error) { @@ -462,7 +465,6 @@ int main(int argc, char** argv) { - struct iiccmd cmd; struct options i2c_opt; char *dev, *skip_addr, *err_msg, *i2c_buf; int error, chunk_size, i, j, ch; @@ -576,14 +578,15 @@ if (i2c_opt.verbose) fprintf(stderr, "dev: %s, addr: 0x%x, r/w: %c, " "offset: 0x%02x, width: %u, count: %u\n", dev, - i2c_opt.addr >> 1, i2c_opt.dir, i2c_opt.off, + i2c_opt.addr_set ? i2c_opt.addr >> 1 : 0, + i2c_opt.dir, i2c_opt.off, i2c_opt.width, i2c_opt.count); if (i2c_opt.scan) - exit(scan_bus(cmd, dev, i2c_opt.skip, skip_addr)); + exit(scan_bus(dev, i2c_opt.skip, skip_addr)); if (i2c_opt.reset) - exit(reset_bus(cmd, dev)); + exit(reset_bus(dev)); i2c_buf = malloc(i2c_opt.count); if (i2c_buf == NULL)