SYNOPSIS
device iicIn dev/iicbus/iic.h
DESCRIPTION
The device driver provides generic I/O to any iicbus(4) instance. In order to control I2C devices, use /dev/iic? with the following ioctls:- I2CSTART
- (Vt struct iiccmd ) Sends the start condition to the slave specified by the slave element to the bus. The slave element consists of a 7-bit address and a read/write bit (i.e., 7-bit address << 1 | r/w). If the read/write bit is set a read operation is initiated, if the read/write bit is cleared a write operation is initiated. All other elements are ignored.
- I2CRPTSTART
- (Vt struct iiccmd ) Sends the repeated start condition to the slave specified by the slave element to the bus. The slave address should be specified as in I2CSTART All other elements are ignored.
- I2CSTOP
- No argument is passed. Sends the stop condition to the bus. This terminates the current transaction.
- I2CRSTCARD
- (Vt struct iiccmd ) Resets the bus. The argument is completely ignored.
- I2CWRITE
- (Vt struct iiccmd ) Writes data to the iicbus(4). The bus should already be started. The slave element is ignored. The count element is the number of bytes to write. The last element is a boolean flag. It is non-zero when additional write commands will follow. The buf element is a pointer to the data to write to the bus.
- I2CREAD
- (Vt struct iiccmd ) Reads data from the iicbus(4). The bus should already be started. The slave element is ignored. The count element is the number of bytes to write. The last element is a boolean flag. It is non-zero when additional write commands will follow. The buf element is a pointer to where to store the data read from the bus. Short reads on the bus produce undefined results.
- I2CRDWR
- (Vt struct iic_rdwr_data ) Generic read/write interface. Allows for an arbitrary number of commands to be sent to an arbitrary number of devices on the bus. A read transfer is specified if IIC_M_RD is set in flags Otherwise the transfer is a write transfer. The slave element specifies the 7-bit address with the read/write bit for the transfer. The read/write bit will be handled by the iicbus stack based on the specified transfer operation. The len element is the number of (Vt struct iic_msg ) messages encoded on (Vt struct iic_rdwr_data ) The buf element is a buffer for that data. This ioctl is intended to be Linux compatible.
The following data structures are defined in In dev/iicbus/iic.h and referenced above:
struct iiccmd { u_char slave; int count; int last; char *buf; }; /* Designed to be compatible with linux's struct i2c_msg */ struct iic_msg { uint16_t slave; uint16_t flags; #define IIC_M_RD 0x0001 /* read vs write */ uint16_t len; /* msg length */ uint8_t * buf; }; struct iic_rdwr_data { struct iic_msg *msgs; uint32_t nmsgs; };
It is also possible to use read/write routines, then I2C start/stop handshake is managed by the iicbus(4) system. However, the address used for the read/write routines is the one passed to last I2CSTART ioctl(2) to this device.