Pull i2c updates from Wolfram Sang: - core supports now bus regulators controlling power for SCL/SDA - quite some DT binding conversions to YAML - added a seperate DT binding for the optional SMBus Alert feature - documentation with examples how to deal with I2C sysfs files - some bigger rework for the i801 driver - and a few usual driver updates * 'i2c/for-mergewindow' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (42 commits) i2c: ali1535: mention that the device should not be disabled i2c: mpc: Restore reread of I2C status register i2c: core-smbus: Expose PEC calculate function for generic use Documentation: i2c: Add doc for I2C sysfs i2c: core: Disable client irq on reboot/shutdown dt-bindings: i2c: update bindings for MT8195 SoC i2c: imx: Fix some checkpatch warnings i2c: davinci: Simplify with dev_err_probe() i2c: cadence: Simplify with dev_err_probe() i2c: xiic: Simplify with dev_err_probe() i2c: cadence: Clear HOLD bit before xfer_size register rolls over dt-bindings: i2c: ce4100: Replace "ti,pcf8575" by "nxp,pcf8575" i2c: i801: Improve i801_setup_hstcfg i2c: i801: Use driver name constant instead of function dev_driver_string i2c: i801: Simplify initialization of i2c_board_info in i801_probe_optional_slaves i2c: i801: Improve status polling i2c: cht-wc: Replace of_node by NULL i2c: riic: Add RZ/G2L support dt-bindings: i2c: renesas,riic: Document RZ/G2L I2C controller dt-bindings: i2c: renesas,iic: Convert to json-schema ...
81 lines
2.5 KiB
Plaintext
81 lines
2.5 KiB
Plaintext
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 i2c-mux.yaml in this directory.
|
|
* I2C child bus nodes. See i2c-mux.yaml 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 relevant 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>;
|
|
};
|
|
};
|
|
|
|
i2c@3 {
|
|
reg = <3>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
pca9555: pca9555@20 {
|
|
compatible = "nxp,pca9555";
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
reg = <0x20>;
|
|
};
|
|
};
|
|
};
|