diff options
author | nsouch <nsouch@FreeBSD.org> | 1999-01-09 18:08:24 +0000 |
---|---|---|
committer | nsouch <nsouch@FreeBSD.org> | 1999-01-09 18:08:24 +0000 |
commit | e670443158fa0f8567cc666000f1cf5819c156ca (patch) | |
tree | dc9371aa53218a6e6b09f54a5dd8c837e4342de9 /sys/dev/smbus | |
parent | 674988520c88d8bdd31977e29964f169a47a72b1 (diff) | |
download | FreeBSD-src-e670443158fa0f8567cc666000f1cf5819c156ca.zip FreeBSD-src-e670443158fa0f8567cc666000f1cf5819c156ca.tar.gz |
Change /dev/smb and /dev/iic interface to allow user programs to interact with
devices dynamically. That means,
+ only one /dev/iic or /dev/smb device for each smb/iic bus to access
+ I2C/SMB device address must be given to any ioctl
+ new devices may be plugged and accessed after boot, which was
impossible previously (device addresses were hardcoded into
the kernel)
Diffstat (limited to 'sys/dev/smbus')
-rw-r--r-- | sys/dev/smbus/smb.c | 48 | ||||
-rw-r--r-- | sys/dev/smbus/smb.h | 7 | ||||
-rw-r--r-- | sys/dev/smbus/smbconf.c | 5 | ||||
-rw-r--r-- | sys/dev/smbus/smbus.c | 3 |
4 files changed, 22 insertions, 41 deletions
diff --git a/sys/dev/smbus/smb.c b/sys/dev/smbus/smb.c index 72c4780..1ecca51 100644 --- a/sys/dev/smbus/smb.c +++ b/sys/dev/smbus/smb.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smb.c,v 1.3 1998/09/09 18:57:38 nsouch Exp $ + * $Id: smb.c,v 1.4 1998/12/07 21:58:17 archie Exp $ * */ #include <sys/param.h> @@ -157,24 +157,9 @@ smbclose(dev_t dev, int flags, int fmt, struct proc *p) static int smbwrite(dev_t dev, struct uio * uio, int ioflag) { - device_t smbdev = IIC_DEVICE(minor(dev)); - struct smb_softc *sc = IIC_SOFTC(minor(dev)); - int count; - - if (!sc || !smbdev) - return (EINVAL); - - if (sc->sc_count == 0) - return (EINVAL); - - count = min(uio->uio_resid, BUFSIZE); - uiomove(sc->sc_buffer, count, uio); - - /* we consider the command char as the first character to send */ - smbus_bwrite(device_get_parent(smbdev), sc->sc_addr, - sc->sc_buffer[0], count-1, sc->sc_buffer+1); + /* not supported */ - return (0); + return (EINVAL); } static int @@ -195,65 +180,62 @@ smbioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) int error = 0; struct smbcmd *s = (struct smbcmd *)data; - if (!sc) + if (!sc || !s) return (EINVAL); switch (cmd) { case SMB_QUICK_WRITE: - smbus_quick(parent, sc->sc_addr, SMB_QWRITE); + smbus_quick(parent, s->slave, SMB_QWRITE); goto end; case SMB_QUICK_READ: - smbus_quick(parent, sc->sc_addr, SMB_QREAD); + smbus_quick(parent, s->slave, SMB_QREAD); goto end; }; - if (!s) - return (EINVAL); - switch (cmd) { case SMB_SENDB: - smbus_sendb(parent, sc->sc_addr, s->cmd); + smbus_sendb(parent, s->slave, s->cmd); break; case SMB_RECVB: - smbus_recvb(parent, sc->sc_addr, &s->cmd); + smbus_recvb(parent, s->slave, &s->cmd); break; case SMB_WRITEB: - smbus_writeb(parent, sc->sc_addr, s->cmd, s->data.byte); + smbus_writeb(parent, s->slave, s->cmd, s->data.byte); break; case SMB_WRITEW: - smbus_writew(parent, sc->sc_addr, s->cmd, s->data.word); + smbus_writew(parent, s->slave, s->cmd, s->data.word); break; case SMB_READB: if (s->data.byte_ptr) - smbus_readb(parent, sc->sc_addr, s->cmd, + smbus_readb(parent, s->slave, s->cmd, s->data.byte_ptr); break; case SMB_READW: if (s->data.word_ptr) - smbus_readw(parent, sc->sc_addr, s->cmd, s->data.word_ptr); + smbus_readw(parent, s->slave, s->cmd, s->data.word_ptr); break; case SMB_PCALL: if (s->data.process.rdata) - smbus_pcall(parent, sc->sc_addr, s->cmd, + smbus_pcall(parent, s->slave, s->cmd, s->data.process.sdata, s->data.process.rdata); break; case SMB_BWRITE: if (s->count && s->data.byte_ptr) - smbus_bwrite(parent, sc->sc_addr, s->cmd, s->count, + smbus_bwrite(parent, s->slave, s->cmd, s->count, s->data.byte_ptr); break; case SMB_BREAD: if (s->count && s->data.byte_ptr) - smbus_bread(parent, sc->sc_addr, s->cmd, s->count, + smbus_bread(parent, s->slave, s->cmd, s->count, s->data.byte_ptr); break; diff --git a/sys/dev/smbus/smb.h b/sys/dev/smbus/smb.h index 1338a15..e0ebef8 100644 --- a/sys/dev/smbus/smb.h +++ b/sys/dev/smbus/smb.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smb.h,v 1.1 1998/08/13 17:13:20 son Exp $ + * $Id: smb.h,v 1.1 1998/09/03 21:00:08 nsouch Exp $ * */ #ifndef __SMB_H @@ -34,6 +34,7 @@ struct smbcmd { char cmd; int count; + u_char slave; union { char byte; short word; @@ -48,8 +49,8 @@ struct smbcmd { } data; }; -#define SMB_QUICK_WRITE _IO('i', 1) -#define SMB_QUICK_READ _IO('i', 2) +#define SMB_QUICK_WRITE _IOW('i', 1, struct smbcmd) +#define SMB_QUICK_READ _IOW('i', 2, struct smbcmd) #define SMB_SENDB _IOW('i', 3, struct smbcmd) #define SMB_RECVB _IOW('i', 4, struct smbcmd) #define SMB_WRITEB _IOW('i', 5, struct smbcmd) diff --git a/sys/dev/smbus/smbconf.c b/sys/dev/smbus/smbconf.c index dbf417b..458916f 100644 --- a/sys/dev/smbus/smbconf.c +++ b/sys/dev/smbus/smbconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbconf.c,v 1.2 1998/10/31 11:39:54 nsouch Exp $ + * $Id: smbconf.c,v 1.3 1998/11/22 22:01:42 nsouch Exp $ * */ #include <sys/param.h> @@ -65,9 +65,6 @@ smbus_alloc_bus(device_t parent) /* add the bus to the parent */ child = device_add_child(parent, "smbus", -1, NULL); - if (child) - device_set_desc(child, "System Management Bus"); - return (child); } diff --git a/sys/dev/smbus/smbus.c b/sys/dev/smbus/smbus.c index 0ab21a4..ca06710 100644 --- a/sys/dev/smbus/smbus.c +++ b/sys/dev/smbus/smbus.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbus.c,v 1.5 1998/12/10 02:31:08 archie Exp $ + * $Id: smbus.c,v 1.6 1998/12/28 19:07:51 nsouch Exp $ * */ #include <sys/param.h> @@ -159,3 +159,4 @@ smbus_read_ivar(device_t bus, device_t dev, int index, u_long* result) DRIVER_MODULE(smbus, iicsmb, smbus_driver, smbus_devclass, 0, 0); DRIVER_MODULE(smbus, bti2c, smbus_driver, smbus_devclass, 0, 0); DRIVER_MODULE(smbus, intsmb, smbus_driver, smbus_devclass, 0, 0); +DRIVER_MODULE(smbus, smbv, smbus_driver, smbus_devclass, 0, 0); |