12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- GPIO-based I2C Bus Mux
- This binding describes an I2C bus multiplexer that uses GPIOs to
- route the I2C signals.
- +-----+ +-----+
- | dev | | dev |
- +------------+ +-----+ +-----+
- | SoC | | |
- | | /--------+--------+
- | +------+ | +------+ child bus A, on GPIO value set to 0
- | | I2C |-|--| Mux |
- | +------+ | +--+---+ child bus B, on GPIO value set to 1
- | | | \----------+--------+--------+
- | +------+ | | | | |
- | | GPIO |-|-----+ +-----+ +-----+ +-----+
- | +------+ | | dev | | dev | | dev |
- +------------+ +-----+ +-----+ +-----+
- Required properties:
- - compatible: i2c-mux-gpio
- - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side
- port is connected to.
- - mux-gpios: list of gpios used to control the muxer
- * Standard I2C mux properties. See mux.txt in this directory.
- * I2C child bus nodes. See mux.txt in this directory.
- Optional properties:
- - idle-state: value to set the muxer to when idle. When no value is
- given, it defaults to the last value used.
- For each i2c child node, an I2C child bus will be created. They will
- be numbered based on their order in the device tree.
- Whenever an access is made to a device on a child bus, the value set
- in the revelant node's reg property will be output using the list of
- GPIOs, the first in the list holding the least-significant value.
- If an idle state is defined, using the idle-state (optional) property,
- whenever an access is not being made to a device on a child bus, the
- GPIOs will be set according to the idle value.
- If an idle state is not defined, the most recently used value will be
- left programmed into hardware whenever no access is being made to a
- device on a child bus.
- Example:
- i2cmux {
- compatible = "i2c-mux-gpio";
- #address-cells = <1>;
- #size-cells = <0>;
- mux-gpios = <&gpio1 22 0 &gpio1 23 0>;
- i2c-parent = <&i2c1>;
- i2c@1 {
- reg = <1>;
- #address-cells = <1>;
- #size-cells = <0>;
- ssd1307: oled@3c {
- compatible = "solomon,ssd1307fb-i2c";
- reg = <0x3c>;
- pwms = <&pwm 4 3000>;
- reset-gpios = <&gpio2 7 1>;
- reset-active-low;
- };
- };
- i2c@3 {
- reg = <3>;
- #address-cells = <1>;
- #size-cells = <0>;
- pca9555: pca9555@20 {
- compatible = "nxp,pca9555";
- gpio-controller;
- #gpio-cells = <2>;
- reg = <0x20>;
- };
- };
- };
|