Ejemplo n.º 1
0
/*
 * write command and read single byte in transaction.
 */
int
ig4iic_smb_readb(device_t dev, u_char slave, char cmd, char *byte)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	error = smb_transaction(sc, cmd, SMB_TRANS_NOCNT,
				NULL, 0, byte, 1, NULL);

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 2
0
int
ig4iic_smb_bwrite(device_t dev, u_char slave, char cmd,
		  u_char wcount, char *buf)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	error = smb_transaction(sc, cmd, 0,
				buf, wcount, NULL, 0, NULL);

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 3
0
/*
 * Write command and single byte in transaction.
 */
int
ig4iic_smb_writeb(device_t dev, u_char slave, char cmd, char byte)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	int error;

	sx_xlock(&sc->call_lock);
	mtx_lock(&sc->io_lock);

	set_slave_addr(sc, slave, 0);
	error = smb_transaction(sc, cmd, SMB_TRANS_NOCNT,
				&byte, 1, NULL, 0, NULL);

	mtx_unlock(&sc->io_lock);
	sx_xunlock(&sc->call_lock);
	return (error);
}
Ejemplo n.º 4
0
int
ig4iic_smb_trans(device_t dev, u_char slave, char cmd, int op,
		 char *wbuf, int wcount, char *rbuf, int rcount,
		 int *actualp)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, op);
	error = smb_transaction(sc, cmd, op,
				wbuf, wcount, rbuf, rcount, actualp);

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 5
0
int
ig4iic_smb_bread(device_t dev, u_char slave, char cmd,
		 u_char *countp_char, char *buf)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	int rcount = *countp_char;
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	error = smb_transaction(sc, cmd, 0,
				NULL, 0, buf, rcount, &rcount);
	*countp_char = rcount;

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 6
0
/*
 * write command and read word in transaction.
 */
int
ig4iic_smb_readw(device_t dev, u_char slave, char cmd, short *word)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	char buf[2];
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	if ((error = smb_transaction(sc, cmd, SMB_TRANS_NOCNT,
				     NULL, 0, buf, 2, NULL)) == 0) {
		*word = (u_char)buf[0] | ((u_char)buf[1] << 8);
	}

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 7
0
/*
 * Write command and single word in transaction.
 */
int
ig4iic_smb_writew(device_t dev, u_char slave, char cmd, short word)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	char buf[2];
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	buf[0] = word & 0xFF;
	buf[1] = word >> 8;
	error = smb_transaction(sc, cmd, SMB_TRANS_NOCNT,
				buf, 2, NULL, 0, NULL);

	mtx_unlock(&sc->mtx);
	return error;
}
Ejemplo n.º 8
0
/*
 * write command and word and read word in transaction
 */
int
ig4iic_smb_pcall(device_t dev, u_char slave, char cmd,
		 short sdata, short *rdata)
{
	ig4iic_softc_t *sc = device_get_softc(dev);
	char rbuf[2];
	char wbuf[2];
	int error;

	mtx_lock(&sc->mtx);

	set_slave_addr(sc, slave, 0);
	wbuf[0] = sdata & 0xFF;
	wbuf[1] = sdata >> 8;
	if ((error = smb_transaction(sc, cmd, SMB_TRANS_NOCNT,
				     wbuf, 2, rbuf, 2, NULL)) == 0) {
		*rdata = (u_char)rbuf[0] | ((u_char)rbuf[1] << 8);
	}

	mtx_unlock(&sc->mtx);
	return error;
}