.\" $NetBSD: iic.4,v 1.37 2024/12/16 16:42:22 brad Exp $ .\" $OpenBSD: iic.4,v 1.74 2008/09/10 16:13:43 reyk Exp $ .\" .\" Copyright (c) 2004, 2006 Alexander Yurchenko .\" Copyright (c) 2009 Hubert Feyrer .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .Dd November 6, 2021 .Dt IIC 4 .Os .Sh NAME .Nm iic .Nd Inter IC (I2C) bus .Sh SYNOPSIS .\" .\" Use the following commands in (t)csh to output the list below (note .\" the first sed command includes a and character in each .\" of the bracket expressions): .\" cd .../src/sys/arch .\" grep -h '^iic.*at' */conf/* | sort -u -k +3 | sed -e 's,[ ][ ]*, ,g' -e 's, *#.*,,' | sh -c 'while read iic at ic ; do printf ".Cd \"$iic $at %-20s # %s\"\n" "$ic" "`grep \"iic.*at.*$ic\" */conf/* | sed \"s,/.*,,\" | sort -u | tr \"\012\" \ `" ; done' | uniq | tee /tmp/x .\" cat /tmp/x .\" .Cd "iic* at alipm? # alpha amd64 i386 sparc64 " .Cd "iic* at amdpm? # amd64 i386 " .Cd "iic* at armadillo9iic? # evbarm " .Cd "iic0 at at91twi? # evbarm " .Cd "iic0 at ausmbus0 # evbmips " .Cd "iic* at awiniic? # evbarm " .Cd "iic* at bcmi2c? # evbarm " .Cd "iic* at coram? # amd64 i386 " .Cd "iic* at cuda? # macppc " .Cd "iic* at cxdtv? # amd64 i386 " .Cd "iic* at diic? # acorn32 evbppc " .Cd "iic* at dwiic? # amd64 i386 " .Cd "iic* at exyoi2c? # evbarm " .Cd "iic* at g2i2c? # evbarm " .Cd "iic0 at gpiic? # evbppc " .Cd "iic* at gpioiic? # amd64 i386 " .Cd "iic* at gttwsi? # evbarm evbppc " .Cd "iic* at gxiic? # evbarm " .Cd "iic* at i2cbus? # evbarm " .Cd "iic* at ichsmb? # amd64 i386 " .Cd "iic* at imcsmb? # amd64 i386 " .Cd "iic* at imxi2c? # evbarm " .Cd "iic0 at iomdiic? # acorn32 " .Cd "iic0 at iopiic? # evbarm iyonix " .Cd "iic* at ismt? # amd64 i386 " .Cd "iic* at jziic? # evbmips " .Cd "iic* at ki2c? # macppc " .Cd "iic* at nbpiic? # hpcarm " .Cd "iic* at nfsmb? # amd64 i386 " .Cd "iic* at ociic? # sandpoint " .Cd "iic* at omapiic? # evbarm " .Cd "iic* at pcfiic? # sparc64 " .Cd "iic* at piixpm? # amd64 i386 " .Cd "iic* at pmu? # macppc " .Cd "iic* at ri2c? # evbmips " .Cd "iic* at rtciic? # mmeye " .Cd "iic0 at slugiic0 # evbarm " .Cd "iic* at tegrai2c? # evbarm " .Cd "iic* at tiiic? # evbarm " .Cd "iic* at tsciic? # alpha " .Cd "iic* at umcpmio? # USB " .Cd "iic* at viapcib? # i386 " .Cd "iic* at voyager0 # evbmips " .Cd "iic0 at ziic? # evbmips zaurus " .Sh 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. .Pp The .Nm driver provides a uniform programming interface layer between I2C master controllers and various I2C slave devices. Each I2C master controller attaches an .Nm framework; several slave devices can then be attached to the .Nm bus. .Pp All I2C slave devices are uniquely identified by the address on the bus. The master accesses a particular slave device using its address. .\" Devices are found on the bus using a sophisticated scanning routine .\" which attempts to identify commonly available devices. .\" On other machines (such as sparc64 and macppc) where the machine ROM .\" supplies a list of I2C devices, that list is used instead. .Pp System Management Bus (SMBus) protocol is also supported by emulating it with the I2C commands. .Sh IOCTLS The following .Xr ioctl 2 calls apply to .Em IIC devices. They are defined in the header file .In dev/i2c/i2c_io.h : .Bl -tag -width indent .It Dv I2C_IOCTL_EXEC (i2c_ioctl_exec_t) User ioctl to execute an i2c operation. .Bd -literal 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; .Ed .El .Sh SUPPORTED MASTERS A wide list of I2C masters are supported, among them are: .Pp .\" .\" Generate the following list with these (t)csh commands: .\" cd .../src/sys/arch .\" grep -h '^iic.*at' */conf/* | awk '{print $3}' | sed 's,.$,,' | sort -u | sh -c 'while read i ; do echo .It Xr $i 4; n=`grep -h ^.Nd ../../share/man/man4/$i* | sed "s,^.Nd ,,"`; if [ -n "$n" ]; then echo $n ; else echo "" ; fi ; done' | tee /tmp/x .\" cat /tmp/x .\" .Bl -tag -width 18n -compact -offset indent .It Xr acpismbus 4 ACPI SMBus Control Method Interface .It Xr alipm 4 Acer Labs M7101 SMBus controller .It Xr amdpm 4 AMD768 Power Management Controller and AMD8111 System Management Controller .It Xr coram 4 Digital video driver for Conexant CX23885 based cards .It Xr cuda 4 Support for CUDA microcontrollers found in many Power Macintosh and compatible computers .It Xr cxdtv 4 Digital video driver for Conexant CX2388x based cards .It Xr gpioiic 4 GPIO I2C controller .It Xr ichsmb 4 Intel Chipset internal SMBus controller .It Xr ismt 4 Intel Chipset internal SMBus 2.0 controller with DMA .It Xr nfsmb 4 NVIDIA nForce 2/3/4 SMBus controller and SMBus driver .It Xr piixpm 4 Intel PIIX and compatible Power Management controller .It Xr umcpmio 4 MCP-2221 / 2221A USB multi-io chip .El .Sh SUPPORTED SLAVES A wide list of slaves are supported, among them: .Pp .\" .\" Create the following list with these commands: .\" cd .../src/sys/arch .\" grep -h '.* at iic.*' */conf/* | sed -e 's,^#,,' -e 's, .*,,' -e 's,.$,,' | sort -u | sh -c 'while read i ; do echo .It Xr $i 4 ; n=`grep ^.Nd ../../share/man/man4/$i* | sed "s,^.Nd ,,"` ; if [ -n "$n" ]; then echo $n ; else echo "" ; fi ; done' | tee /tmp/x .\" cat /tmp/x .\" .Bl -tag -width 13n -compact -offset indent .It Xr adm1026hm 4 Analog Devices ADM1026 complete thermal system management controller .It Xr admtemp 4 Analog Devices ADM1021 temperature sensor .It Xr aht20temp 4 Aosong AHT20 humidity/temperature sensors .It Xr am2315temp 4 Aosong AM2315 humidity/temperature sensors .It Xr bmx280thp 4 Bosch BMP280/BME280 humidity/temperature/pressure sensors .It Xr ddc 4 VESA Display Data Channel V2 devices .It Xr dbcool 4 dbCool(tm) family of environmental monitors and fan controllers .It Xr ds2482ow 4 Maxim DS2482-100 and DS2482-800 I2C to 1-Wire bridge .It Xr g760a 4 Global Mixed-mode Technology Inc. G760a fan speed controller .It Xr hythygtemp 4 IST-AG HYT-221/271/939 humidity/temperature sensors .It Xr ibmhawk 4 Temperature, voltage, and fan sensors present on IBM eServers .It Xr ims 4 I2C mice and touch panels .It Xr lm 4 National Semiconductor LM78, LM79, and compatible hardware monitors .It Xr lmenv 4 National Semiconductor LM81, LM87, and compatible hardware monitors .It Xr lmtemp 4 National Semiconductor LM75, LM77, and compatible hardware monitors .It Xr mcp980x 4 Microchip 9800/1/2/3 I2C temperature sensor .It Xr mpl115a 4 Freescale MPL115A2 absolute pressure sensor .It Xr pcf8563rtc 4 NXP PCF8563 real-time clock .It Xr rs5c372rtc 4 RICOH RS5C372A and RS5C372B real-time clock .It Xr s390rtc 4 Seiko Instruments S-35390 real-time clock .It Xr scmdi2c 4 I2C frontend for the Sparkfun Serial Controlled Motor Driver. .It Xr sdtemp 4 JEDEC JC-42.4 compatible memory module temperature sensors .It Xr seeprom 4 24-series I2C EEPROM driver .It Xr sgp40mox 4 Sensirion SGP40 MOx gas sensors .It Xr sgsmix 4 SGS 7433 Basic Audio Processor found in some Apple machines .It Xr sht3xtemp 4 Sensirion SHT30/SHT31/SHT35 temperature/humidity sensors .It Xr sht4xtemp 4 Sensirion SHT40/SHT41/SHT45 temperature/humidity sensors .It Xr si70xxtemp 4 Silicon Labs SI7013/SI7020/SI7021 humidity/temperature sensors .It Xr smscmon 4 Standard Microsystems Corporation LPC47M192 and LPC47M997 sensors .It Xr spdmem 4 Generic Memory Module Serial Presence Detect .It Xr ssdfb 4 OLED/PLED framebuffer modules .It Xr tea5767radio 4 Philips/NXP TEA5767 FM stereo radio .It Xr tps65217pmic 4 Texas Instruments TPS65217 Power Management IC .It Xr tsllux 4 Taos TSL256x Light-to-Digital Converter .El .Sh FILES .Bl -tag -width "/dev/iicu" -compact .It /dev/iic Ns Ar u I2C device unit .Ar u file. .El .Sh SEE ALSO .Xr dtviic 4 , .Xr intro 4 , .Xr i2cscan 8 , .Xr iic 9 .Sh HISTORY The I2C framework first appeared in .Nx 2.0 . .Ox support was added in .Ox 3.6 . This manpage first appeared in .Nx 6.0 , it was ported from .Ox . .Sh AUTHORS .An -nosplit The I2C framework was written by .An Steve C. Woodford and .An Jason R. Thorpe for .Nx and then ported to .Ox by .An Alexander Yurchenko Aq Mt grange@openbsd.org .