From 1aef11be0e197bfe1c73b553383951011604361a Mon Sep 17 00:00:00 2001 From: Rafal Jaworowski Date: Mon, 26 Jan 2009 13:53:39 +0000 Subject: [PATCH] Teach iic(4) the 'repeated start' I2C condition. This will be used by the upcoming i2c(8) diag utility. Reviewed by: bms, stas Obtained from: Semihalf --- share/man/man4/iic.4 | 8 +++++++- sys/dev/iicbus/iic.c | 5 +++++ sys/dev/iicbus/iic.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/share/man/man4/iic.4 b/share/man/man4/iic.4 index 0112ff8a34f1..7d6141ca7377 100644 --- a/share/man/man4/iic.4 +++ b/share/man/man4/iic.4 @@ -45,13 +45,19 @@ In order to control I2C devices, use .Pa /dev/iic? with the following ioctls: -.Bl -tag -width ".Dv I2CRSTCARD" +.Bl -tag -width ".Dv I2CRPTSTART" .It Dv I2CSTART .Pq Vt "struct iiccmd" Sends the start condition to the slave specified by the .Va slave element to the bus. All other elements are ignored. +.It Dv I2CRPTSTART +.Pq Vt "struct iiccmd" +Sends the repeated start condition to the slave specified by the +.Va slave +element to the bus. +All other elements are ignored. .It Dv I2CSTOP No argument is passed. Sends the stop condition to the bus. diff --git a/sys/dev/iicbus/iic.c b/sys/dev/iicbus/iic.c index ebc167deec67..673d635d02b0 100644 --- a/sys/dev/iicbus/iic.c +++ b/sys/dev/iicbus/iic.c @@ -368,6 +368,11 @@ iicioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, struct thread *t } free(usrbufs, M_TEMP); break; + + case I2CRPTSTART: + error = iicbus_repeated_start(parent, s->slave, 0); + break; + default: error = ENOTTY; } diff --git a/sys/dev/iicbus/iic.h b/sys/dev/iicbus/iic.h index 471f9768d2a6..bc29fa01518e 100644 --- a/sys/dev/iicbus/iic.h +++ b/sys/dev/iicbus/iic.h @@ -60,5 +60,6 @@ struct iic_rdwr_data { #define I2CWRITE _IOW('i', 4, struct iiccmd) /* send data */ #define I2CREAD _IOW('i', 5, struct iiccmd) /* receive data */ #define I2CRDWR _IOW('i', 6, struct iic_rdwr_data) /* General read/write interface */ +#define I2CRPTSTART _IOW('i', 7, struct iiccmd) /* repeated start */ #endif