Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/dev/i2c/i2c.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/dev/i2c/i2c.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.44 retrieving revision 1.44.2.2 diff -u -p -r1.44 -r1.44.2.2 --- src/sys/dev/i2c/i2c.c 2014/07/25 08:10:37 1.44 +++ src/sys/dev/i2c/i2c.c 2015/05/16 04:06:04 1.44.2.2 @@ -1,4 +1,4 @@ -/* $NetBSD: i2c.c,v 1.44 2014/07/25 08:10:37 dholland Exp $ */ +/* $NetBSD: i2c.c,v 1.44.2.2 2015/05/16 04:06:04 snj Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -36,7 +36,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.44 2014/07/25 08:10:37 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.44.2.2 2015/05/16 04:06:04 snj Exp $"); #include #include @@ -519,6 +519,15 @@ iic_ioctl_exec(struct iic_softc *sc, i2c } } + if (iie->iie_buf != NULL && I2C_OP_WRITE_P(iie->iie_op)) { + error = copyin(iie->iie_buf, buf, iie->iie_buflen); + if (error) { + if (cmd) + kmem_free(cmd, iie->iie_cmdlen); + return error; + } + } + iic_acquire_bus(ic, 0); error = iic_exec(ic, iie->iie_op, iie->iie_addr, cmd, iie->iie_cmdlen, buf, iie->iie_buflen, 0); @@ -536,7 +545,7 @@ iic_ioctl_exec(struct iic_softc *sc, i2c if (error) return error; - if (iie->iie_buf) + if (iie->iie_buf != NULL && I2C_OP_READ_P(iie->iie_op)) error = copyout(buf, iie->iie_buf, iie->iie_buflen); return error;