174 lines · yaml
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)2%YAML 1.23---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 Demultiplexer8 9maintainers:10 - Wolfram Sang <wsa+renesas@sang-engineering.com>11 12description: |13 This binding describes an I2C bus demultiplexer that uses pin multiplexing to14 route the I2C signals, and represents the pin multiplexing configuration15 using the pinctrl device tree bindings. This may be used to select one I2C16 IP core at runtime which may have a better feature set for a given task than17 another I2C IP core on the SoC. The most simple example is to fall back to18 GPIO bitbanging if your current runtime configuration hits an errata of the19 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: /schemas/i2c/i2c-controller.yaml#36 37properties:38 compatible:39 const: i2c-demux-pinctrl40 41 i2c-parent:42 $ref: /schemas/types.yaml#/definitions/phandle-array43 items:44 maxItems: 145 description:46 List of phandles of I2C masters available for selection. The first one47 will be used as default.48 49 i2c-bus-name:50 $ref: /schemas/types.yaml#/definitions/string51 description:52 The name of this bus. Also needed as pinctrl-name for the I2C parents.53 54required:55 - compatible56 - i2c-parent57 - i2c-bus-name58 59unevaluatedProperties: false60 61examples:62 - |63 #include <dt-bindings/gpio/gpio.h>64 #include <dt-bindings/interrupt-controller/irq.h>65 66 gpioi2c2: i2c-9 {67 #address-cells = <1>;68 #size-cells = <0>;69 compatible = "i2c-gpio";70 scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;71 sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;72 i2c-gpio,delay-us = <5>;73 74 // The I2C controller must have its status "disabled". The I2C bus75 // demultiplexer will enable it at runtime when needed.76 status = "disabled";77 };78 79 iic2: i2c@e6520000 {80 reg = <0xe6520000 0x425>;81 pinctrl-0 = <&iic2_pins>;82 // The pinctrl property for the parent I2C controller needs a pinctrl83 // state with the same name as i2c-bus-name in the I2C bus demultiplexer84 // node, not "default"!85 pinctrl-names = "i2c-hdmi";86 87 clock-frequency = <100000>;88 89 // The I2C controller must have its status "disabled". The I2C bus90 // demultiplexer will enable it at runtime when needed.91 status = "disabled";92 };93 94 i2c2: i2c@e6530000 {95 reg = <0 0xe6530000 0 0x40>;96 pinctrl-0 = <&i2c2_pins>;97 // The pinctrl property for the parent I2C controller needs a pinctrl98 // state with the same name as i2c-bus-name in the I2C bus demultiplexer99 // node, not "default"!100 pinctrl-names = "i2c-hdmi";101 102 clock-frequency = <100000>;103 104 // The I2C controller must have its status "disabled". The I2C bus105 // demultiplexer will enable it at runtime when needed.106 status = "disabled";107 };108 109 // Example for a bus to be demuxed. It contains various I2C clients for110 // HDMI, so the bus is named "i2c-hdmi":111 i2chdmi: i2c-mux3 {112 compatible = "i2c-demux-pinctrl";113 i2c-parent = <&iic2>, <&i2c2>, <&gpioi2c2>;114 i2c-bus-name = "i2c-hdmi";115 #address-cells = <1>;116 #size-cells = <0>;117 118 ak4643: codec@12 {119 compatible = "asahi-kasei,ak4643";120 #sound-dai-cells = <0>;121 reg = <0x12>;122 };123 124 composite-in@20 {125 compatible = "adi,adv7180";126 reg = <0x20>;127 128 port {129 adv7180: endpoint {130 bus-width = <8>;131 remote-endpoint = <&vin1ep0>;132 };133 };134 };135 136 hdmi@39 {137 compatible = "adi,adv7511w";138 reg = <0x39>;139 interrupt-parent = <&gpio1>;140 interrupts = <15 IRQ_TYPE_LEVEL_LOW>;141 clocks = <&cec_clock>;142 clock-names = "cec";143 144 avdd-supply = <&fixedregulator1v8>;145 dvdd-supply = <&fixedregulator1v8>;146 pvdd-supply = <&fixedregulator1v8>;147 dvdd-3v-supply = <&fixedregulator3v3>;148 bgvdd-supply = <&fixedregulator1v8>;149 150 adi,input-depth = <8>;151 adi,input-colorspace = "rgb";152 adi,input-clock = "1x";153 154 ports {155 #address-cells = <1>;156 #size-cells = <0>;157 158 port@0 {159 reg = <0>;160 adv7511_in: endpoint {161 remote-endpoint = <&lvds0_out>;162 };163 };164 165 port@1 {166 reg = <1>;167 adv7511_out: endpoint {168 remote-endpoint = <&hdmi_con_out>;169 };170 };171 };172 };173 };174