108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # 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>;
 | |
|         };
 | |
|       };
 | |
|     };    
 |