1 # SPDX-License-Identifier: (GPL-2.0-only OR BS 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 %YAML 1.2 2 %YAML 1.2 3 --- 3 --- 4 $id: http://devicetree.org/schemas/i2c/i2c-dem 4 $id: http://devicetree.org/schemas/i2c/i2c-demux-pinctrl.yaml# 5 $schema: http://devicetree.org/meta-schemas/co 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 6 6 7 title: Pinctrl-based I2C Bus Demultiplexer 7 title: Pinctrl-based I2C Bus Demultiplexer 8 8 9 maintainers: 9 maintainers: 10 - Wolfram Sang <wsa+renesas@sang-engineering. 10 - Wolfram Sang <wsa+renesas@sang-engineering.com> 11 11 12 description: | 12 description: | 13 This binding describes an I2C bus demultiple 13 This binding describes an I2C bus demultiplexer that uses pin multiplexing to 14 route the I2C signals, and represents the pi 14 route the I2C signals, and represents the pin multiplexing configuration 15 using the pinctrl device tree bindings. Thi 15 using the pinctrl device tree bindings. This may be used to select one I2C 16 IP core at runtime which may have a better f 16 IP core at runtime which may have a better feature set for a given task than 17 another I2C IP core on the SoC. The most si 17 another I2C IP core on the SoC. The most simple example is to fall back to 18 GPIO bitbanging if your current runtime conf 18 GPIO bitbanging if your current runtime configuration hits an errata of the 19 internal IP core. 19 internal IP core. 20 20 21 +-------------------------------+ 21 +-------------------------------+ 22 | SoC | 22 | SoC | 23 | | +--- 23 | | +-----+ +-----+ 24 | +------------+ | | de 24 | +------------+ | | dev | | dev | 25 | |I2C IP Core1|--\ | +--- 25 | |I2C IP Core1|--\ | +-----+ +-----+ 26 | +------------+ \-------+ | | 26 | +------------+ \-------+ | | | 27 | |Pinctrl|--|------+ 27 | |Pinctrl|--|------+--------+ 28 | +------------+ +-------+ | 28 | +------------+ +-------+ | 29 | |I2C IP Core2|--/ | 29 | |I2C IP Core2|--/ | 30 | +------------+ | 30 | +------------+ | 31 | | 31 | | 32 +-------------------------------+ 32 +-------------------------------+ 33 33 34 allOf: 34 allOf: 35 - $ref: /schemas/i2c/i2c-controller.yaml# 35 - $ref: /schemas/i2c/i2c-controller.yaml# 36 36 37 properties: 37 properties: 38 compatible: 38 compatible: 39 const: i2c-demux-pinctrl 39 const: i2c-demux-pinctrl 40 40 41 i2c-parent: 41 i2c-parent: 42 $ref: /schemas/types.yaml#/definitions/pha 42 $ref: /schemas/types.yaml#/definitions/phandle-array 43 items: 43 items: 44 maxItems: 1 44 maxItems: 1 45 description: 45 description: 46 List of phandles of I2C masters availabl 46 List of phandles of I2C masters available for selection. The first one 47 will be used as default. 47 will be used as default. 48 48 49 i2c-bus-name: 49 i2c-bus-name: 50 $ref: /schemas/types.yaml#/definitions/str 50 $ref: /schemas/types.yaml#/definitions/string 51 description: 51 description: 52 The name of this bus. Also needed as pi 52 The name of this bus. Also needed as pinctrl-name for the I2C parents. 53 53 54 required: 54 required: 55 - compatible 55 - compatible 56 - i2c-parent 56 - i2c-parent 57 - i2c-bus-name 57 - i2c-bus-name 58 58 59 unevaluatedProperties: false 59 unevaluatedProperties: false 60 60 61 examples: 61 examples: 62 - | 62 - | 63 #include <dt-bindings/gpio/gpio.h> 63 #include <dt-bindings/gpio/gpio.h> 64 #include <dt-bindings/interrupt-controller 64 #include <dt-bindings/interrupt-controller/irq.h> 65 65 66 gpioi2c2: i2c-9 { 66 gpioi2c2: i2c-9 { 67 #address-cells = <1>; 67 #address-cells = <1>; 68 #size-cells = <0>; 68 #size-cells = <0>; 69 compatible = "i2c-gpio"; 69 compatible = "i2c-gpio"; 70 scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIG 70 scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; 71 sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIG 71 sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; 72 i2c-gpio,delay-us = <5>; 72 i2c-gpio,delay-us = <5>; 73 73 74 // The I2C controller must have its st 74 // The I2C controller must have its status "disabled". The I2C bus 75 // demultiplexer will enable it at run 75 // demultiplexer will enable it at runtime when needed. 76 status = "disabled"; 76 status = "disabled"; 77 }; 77 }; 78 78 79 iic2: i2c@e6520000 { 79 iic2: i2c@e6520000 { 80 reg = <0xe6520000 0x425>; 80 reg = <0xe6520000 0x425>; 81 pinctrl-0 = <&iic2_pins>; 81 pinctrl-0 = <&iic2_pins>; 82 // The pinctrl property for the parent 82 // The pinctrl property for the parent I2C controller needs a pinctrl 83 // state with the same name as i2c-bus 83 // state with the same name as i2c-bus-name in the I2C bus demultiplexer 84 // node, not "default"! 84 // node, not "default"! 85 pinctrl-names = "i2c-hdmi"; 85 pinctrl-names = "i2c-hdmi"; 86 86 87 clock-frequency = <100000>; 87 clock-frequency = <100000>; 88 88 89 // The I2C controller must have its st 89 // The I2C controller must have its status "disabled". The I2C bus 90 // demultiplexer will enable it at run 90 // demultiplexer will enable it at runtime when needed. 91 status = "disabled"; 91 status = "disabled"; 92 }; 92 }; 93 93 94 i2c2: i2c@e6530000 { 94 i2c2: i2c@e6530000 { 95 reg = <0 0xe6530000 0 0x40>; 95 reg = <0 0xe6530000 0 0x40>; 96 pinctrl-0 = <&i2c2_pins>; 96 pinctrl-0 = <&i2c2_pins>; 97 // The pinctrl property for the parent 97 // The pinctrl property for the parent I2C controller needs a pinctrl 98 // state with the same name as i2c-bus 98 // state with the same name as i2c-bus-name in the I2C bus demultiplexer 99 // node, not "default"! 99 // node, not "default"! 100 pinctrl-names = "i2c-hdmi"; 100 pinctrl-names = "i2c-hdmi"; 101 101 102 clock-frequency = <100000>; 102 clock-frequency = <100000>; 103 103 104 // The I2C controller must have its st 104 // The I2C controller must have its status "disabled". The I2C bus 105 // demultiplexer will enable it at run 105 // demultiplexer will enable it at runtime when needed. 106 status = "disabled"; 106 status = "disabled"; 107 }; 107 }; 108 108 109 // Example for a bus to be demuxed. It co 109 // Example for a bus to be demuxed. It contains various I2C clients for 110 // HDMI, so the bus is named "i2c-hdmi": 110 // HDMI, so the bus is named "i2c-hdmi": 111 i2chdmi: i2c-mux3 { 111 i2chdmi: i2c-mux3 { 112 compatible = "i2c-demux-pinctrl"; 112 compatible = "i2c-demux-pinctrl"; 113 i2c-parent = <&iic2>, <&i2c2>, <&gpioi 113 i2c-parent = <&iic2>, <&i2c2>, <&gpioi2c2>; 114 i2c-bus-name = "i2c-hdmi"; 114 i2c-bus-name = "i2c-hdmi"; 115 #address-cells = <1>; 115 #address-cells = <1>; 116 #size-cells = <0>; 116 #size-cells = <0>; 117 117 118 ak4643: codec@12 { 118 ak4643: codec@12 { 119 compatible = "asahi-kasei,ak4643"; 119 compatible = "asahi-kasei,ak4643"; 120 #sound-dai-cells = <0>; 120 #sound-dai-cells = <0>; 121 reg = <0x12>; 121 reg = <0x12>; 122 }; 122 }; 123 123 124 composite-in@20 { 124 composite-in@20 { 125 compatible = "adi,adv7180"; 125 compatible = "adi,adv7180"; 126 reg = <0x20>; 126 reg = <0x20>; 127 127 128 port { 128 port { 129 adv7180: endpoint { 129 adv7180: endpoint { 130 bus-width = <8>; 130 bus-width = <8>; 131 remote-endpoint = <&vin1ep 131 remote-endpoint = <&vin1ep0>; 132 }; 132 }; 133 }; 133 }; 134 }; 134 }; 135 135 136 hdmi@39 { 136 hdmi@39 { 137 compatible = "adi,adv7511w"; 137 compatible = "adi,adv7511w"; 138 reg = <0x39>; 138 reg = <0x39>; 139 interrupt-parent = <&gpio1>; 139 interrupt-parent = <&gpio1>; 140 interrupts = <15 IRQ_TYPE_LEVEL_LO 140 interrupts = <15 IRQ_TYPE_LEVEL_LOW>; 141 clocks = <&cec_clock>; 141 clocks = <&cec_clock>; 142 clock-names = "cec"; 142 clock-names = "cec"; 143 143 144 avdd-supply = <&fixedregulator1v8> 144 avdd-supply = <&fixedregulator1v8>; 145 dvdd-supply = <&fixedregulator1v8> 145 dvdd-supply = <&fixedregulator1v8>; 146 pvdd-supply = <&fixedregulator1v8> 146 pvdd-supply = <&fixedregulator1v8>; 147 dvdd-3v-supply = <&fixedregulator3 147 dvdd-3v-supply = <&fixedregulator3v3>; 148 bgvdd-supply = <&fixedregulator1v8 148 bgvdd-supply = <&fixedregulator1v8>; 149 149 150 adi,input-depth = <8>; 150 adi,input-depth = <8>; 151 adi,input-colorspace = "rgb"; 151 adi,input-colorspace = "rgb"; 152 adi,input-clock = "1x"; 152 adi,input-clock = "1x"; 153 153 154 ports { 154 ports { 155 #address-cells = <1>; 155 #address-cells = <1>; 156 #size-cells = <0>; 156 #size-cells = <0>; 157 157 158 port@0 { 158 port@0 { 159 reg = <0>; 159 reg = <0>; 160 adv7511_in: endpoint { 160 adv7511_in: endpoint { 161 remote-endpoint = <&lv 161 remote-endpoint = <&lvds0_out>; 162 }; 162 }; 163 }; 163 }; 164 164 165 port@1 { 165 port@1 { 166 reg = <1>; 166 reg = <1>; 167 adv7511_out: endpoint { 167 adv7511_out: endpoint { 168 remote-endpoint = <&hd 168 remote-endpoint = <&hdmi_con_out>; 169 }; 169 }; 170 }; 170 }; 171 }; 171 }; 172 }; 172 }; 173 }; 173 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.