82 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								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>;
							 | 
						||
| 
								 | 
							
											};
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
									};
							 |