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