summaryrefslogtreecommitdiffstats
path: root/sys/dev/smbus
diff options
context:
space:
mode:
authornsouch <nsouch@FreeBSD.org>1999-01-09 18:08:24 +0000
committernsouch <nsouch@FreeBSD.org>1999-01-09 18:08:24 +0000
commite670443158fa0f8567cc666000f1cf5819c156ca (patch)
treedc9371aa53218a6e6b09f54a5dd8c837e4342de9 /sys/dev/smbus
parent674988520c88d8bdd31977e29964f169a47a72b1 (diff)
downloadFreeBSD-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.c48
-rw-r--r--sys/dev/smbus/smb.h7
-rw-r--r--sys/dev/smbus/smbconf.c5
-rw-r--r--sys/dev/smbus/smbus.c3
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);
OpenPOWER on IntegriCloud