Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
IICMUX(4)		 BSD Kernel Interfaces Manual		     IICMUX(4)

     iicmux -- I2C bus mulitiplexer framework

     To	compile	this driver into the kernel, place the following line in your
     kernel configuration file:

	   device iicmux

     Alternatively, to load the	driver as a module at boot time, place the
     following line in loader.conf(5):


     Note that it is usually not necessary to explicitly load the driver mod-
     ule, as it	will be	loaded automatically along with	the driver for the
     specific mux hardware in use.

     The iicmux	framework provides support code	to help	implement drivers for
     various I2C bus multiplexer (mux) hardware.  iicmux is not	a standalone
     driver, it	is a collection	of support functions and driver	methods	which
     are used by individual mux	hardware drivers.  It will be loaded automati-
     cally when	needed by a mux	hardware driver.  This manual page provides an
     overview of the I2C mux framework and its behavior.

     Generally speaking, an I2C	mux is connected to an upstream	I2C bus, and
     to	one or more downstream I2C buses, and it can be	commanded to connect
     any one of	the downstream buses to	the upstream bus.  Some	hardware may
     be	able to	connect	multiple downstream buses at the same time, but	that
     concept is	not supported by iicmux.

     The iicmux	framework operates automatically when I2C slave	devices	initi-
     ate I/O.  It does not require (or even allow for) any external control to
     select the	active downstream bus.

     When there	is no I/O in progress, the mux is said to be in	the "idle"
     state.  Some mux hardware has the ability to disconnect all downstream
     buses when	in an idle state.  Other hardware must always have one of the
     downstream	buses connected.  Individual mux hardware drivers typically
     provide a way to select which downstream bus (if any) should be connected
     while in the idle state.  In the absence of such configuration, whichever
     downstream	bus was	last used remains connected to the upstream bus.

     When an I2C slave device on a bus downstream of a mux initiates I/O, it
     first requests exclusive use of the bus by	calling	iicbus_request_bus().
     This request is communicated to the bus's parent, which is	the iicmux
     framework mux driver.  Once exclusive bus ownership is obtained, the mux
     driver connects the upstream I2C bus to the downstream bus	which hosts
     the slave device that requested bus ownership.  The mux hardware main-
     tains that	upstream-to-downstream connection until	the slave device calls
     iicbus_release_bus().  Before releasing ownership,	the mux	driver returns
     the mux hardware to the idle state.

     On	an fdt(4) based	system,	an I2C mux device node is defined as a child
     node of its upstream I2C bus when the mux device is an I2C	slave itself.
     It	may be defined as a child node of any other bus	or device in the sys-
     tem when it is not	an I2C slave, in which case the	i2c-parent property
     indicates which upstream bus the mux is attached to.  In either case, the
     children of the mux node are additional I2C buses,	which will have	one or
     more I2C slave devices described in their child nodes.

     Drivers using the iicmux framework	conform	to the standard
     i2c/i2c-mux.txt bindings document.

     On	a device.hints(5) based	system,	these values are configurable for
     iicmux framework drivers :
	     The upstream iicbus(4) the	iicmux instance	is attached to.

     When configured via hints,	the driver automatically adds an iicbus	in-
     stance for	every downstream bus supported by the chip.  There is cur-
     rently no way to indicate used versus unused downstream buses.


     The iicmux	framework first	appeared in FreeBSD 13.0.

BSD				January	1, 2020				   BSD


Want to link to this manual page? Use this URL:

home | help