| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # SPDX-License-Identifier: GPL-2.0-only
- %YAML 1.2
- ---
- $id: http://devicetree.org/schemas/i2c/i2c-mux-gpio.yaml#
- $schema: http://devicetree.org/meta-schemas/core.yaml#
- title: GPIO-based I2C Bus Mux
- maintainers:
- - Wolfram Sang <wsa@kernel.org>
- description: |
- 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 |
- +------------+ +-----+ +-----+ +-----+
- 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.
- properties:
- compatible:
- const: i2c-mux-gpio
- i2c-parent:
- description: phandle of the I2C bus that this multiplexer's master-side port is connected to
- $ref: /schemas/types.yaml#/definitions/phandle
- mux-gpios:
- description: list of GPIOs used to control the muxer
- minItems: 1
- maxItems: 4 # Should be enough
- idle-state:
- description: Value to set the muxer to when idle. When no value is given, it defaults to the
- last value used.
- $ref: /schemas/types.yaml#/definitions/uint32
- settle-time-us:
- description: Delay to wait before doing any transfer when a new bus gets selected.
- allOf:
- - $ref: i2c-mux.yaml
- unevaluatedProperties: false
- required:
- - compatible
- - i2c-parent
- - mux-gpios
- examples:
- - |
- 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>;
- };
- };
- };
|