IIC(4) | Device Drivers Manual | IIC(4)

# NAME

`iic` —
Inter IC (I2C) bus

# SYNOPSIS

`iic* at alipm? # alpha amd64 i386 sparc64`
`iic* at amdpm? # amd64 i386`
`iic* at armadillo9iic? # evbarm`
`iic0 at at91twi? # evbarm`
`iic0 at ausmbus0 # evbmips`
`iic* at awiniic? # evbarm`
`iic* at bcmi2c? # evbarm`
`iic* at coram? # amd64 i386`
`iic* at cuda? # macppc`
`iic* at cxdtv? # amd64 i386`
`iic* at diic? # acorn32 evbppc`
`iic* at dwiic? # amd64 i386`
`iic* at exyoi2c? # evbarm`
`iic* at g2i2c? # evbarm`
`iic0 at gpiic? # evbppc`
`iic* at gpioiic? # amd64 i386`
`iic* at gttwsi? # evbarm evbppc`
`iic* at gxiic? # evbarm`
`iic* at i2cbus? # evbarm`
`iic* at ichsmb? # amd64 i386`
`iic* at imcsmb? # amd64 i386`
`iic* at imxi2c? # evbarm`
`iic0 at iomdiic? # acorn32`
`iic0 at iopiic? # evbarm iyonix`
`iic* at ismt? # amd64 i386`
`iic* at jziic? # evbmips`
`iic* at ki2c? # macppc`
`iic* at nbpiic? # hpcarm`
`iic* at nfsmb? # amd64 i386`
`iic* at ociic? # sandpoint`
`iic* at omapiic? # evbarm`
`iic* at pcfiic? # sparc64`
`iic* at piixpm? # amd64 i386`
`iic* at pmu? # macppc`
`iic* at ri2c? # evbmips`
`iic* at rtciic? # mmeye`
`iic0 at slugiic0 # evbarm`
`iic* at tegrai2c? # evbarm`
`iic* at tiiic? # evbarm`
`iic* at tsciic? # alpha`
`iic* at viapcib? # i386`
`iic* at voyager0 # evbmips`
`iic0 at ziic? # evbmips zaurus`

# DESCRIPTION

I2C is a two-wire bus developed by Philips used for connecting integrated circuits. It is commonly used for connecting devices such as EEPROMs, temperature sensors, fan controllers, real-time clocks, tuners, and other types of integrated circuits.

The `iic` driver provides a uniform programming interface layer between I2C master controllers and various I2C slave devices. Each I2C master controller attaches an `iic` framework; several slave devices can then be attached to the `iic` bus.

All I2C slave devices are uniquely identified by the address on the bus. The master accesses a particular slave device using its address.

System Management Bus (SMBus) protocol is also supported by emulating it with the I2C commands.

# IOCTLS

The following ioctl(2) calls apply to IIC devices. They are defined in the header file `<dev/i2c/i2c_io.h>`:

`I2C_IOCTL_EXEC (i2c_ioctl_exec_t)`
  User ioctl to execute an i2c operation.

      typedef enum {
              I2C_OP_READ,
              I2C_OP_READ_WITH_STOP,
              I2C_OP_WRITE,
              I2C_OP_WRITE_WITH_STOP,
              I2C_OP_READ_BLOCK,
              I2C_OP_WRITE_BLOCK
      } i2c_op_t;

      typedef struct i2c_ioctl_exec {
      	i2c_op_t iie_op;	/* operation to perform */
      	i2c_addr_t iie_addr;	/* address of device */
      	const void *iie_cmd;	/* pointer to command */
      	size_t iie_cmdlen;	/* length of command */
      	void *iie_buf;		/* pointer to data buffer */
      	size_t iie_buflen;	/* length of data buffer */
      } i2c_ioctl_exec_t;

# SUPPORTED MASTERS

A wide list of I2C masters are supported, among them are:

acpismbus(4)
  ACPI SMBus Control Method Interface
alipm(4)
  Acer Labs M7101 SMBus controller
amdpm(4)
  AMD768 Power Management Controller and AMD8111 System Management Controller
armadillo9iic(4)
at91twi(4)
ausmbus(4)
awiniic(4)
awinp2wi(4)
bcmi2c(4)
coram(4)
  digital video driver for Conexant CX23885 based cards
cuda(4)
  support for CUDA microcontrollers found in many Power Macintosh and compatible computers
cxdtv(4)
  digital video driver for Conexant CX2388x based cards
diic(4)
exyoiic(4)
g2i2c(4)
gpiic(4)
gpioiic(4)
  GPIO I2C controller
gttwsi(4)
i2cbus(4)
gxiic(4)
ichsmb(4)
  Intel Chipset internal SMBus controller
imxi2c(4)
iociic(4)
iomdiic(4)
iopiic(4)
ismt(4)
  Intel Chipset internal SMBus 2.0 controller with DMA
jziic(4)
ki2c(4)
nbpiic(4)
nfsmb(4)
  NVIDIA nForce 2/3/4 SMBus controller and SMBus driver
ociic(4)
omapiic(4)
pcfiic(4)
piixpm(4)
  Intel PIIX and compatible Power Management controller
ri2c(4)
rkiic(4)
rtciic(4)
slugiic(4)
tegrai2c(4)
tiiic(4)
tsciic(4)
viapcib(4)

# SUPPORTED SLAVES

A wide list of slaves are supported, among them:

dbcool(4)
  dbCool(tm) family of environmental monitors and fan controllers
dsrtc(4)
ioexp(4)
m41trtc(4)
nbppcon(4)
pcf8563rtc(4)
  NXP PCF8563 real-time clock
r2025rtc(4)
rs5c372rtc(4)
  RICOH RS5C372A and RS5C372B real-time clock
s390rtc(4)
  Seiko Instruments S-35390 real-time clock
sdtemp(4)
  JEDEC JC-42.4 compatible memory module temperature sensors
seeprom(4)
  24-series I2C EEPROM driver
sgsmix(4)
  driver for SGS 7433 Basic Audio Processor found in some Apple machines
spdmem(4)
  Generic Memory Module Serial Presence Detect
ssdfb(4)
  OLED/PLED framebuffer modules

# FILES

/dev/iicu
  I2C device unit u file.

# SEE ALSO

dtviic(4), intro(4), i2cscan(8), iic(9)

# HISTORY

The I2C framework first appeared in NetBSD 2.0. OpenBSD support was added in OpenBSD 3.6. This manpage first appeared in NetBSD 6.0, it was ported from OpenBSD.

# AUTHORS

The I2C framework was written by Steve C. Woodford and Jason R. Thorpe for NetBSD and then ported to OpenBSD by Alexander Yurchenko <grange@openbsd.org>.

February 27, 2021 | NetBSD 9.4