1# SPDX-License-Identifier: GPL-2.0 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/mux/mux-controller.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: Common multiplexer controller provider 8 9maintainers: 10 - Peter Rosin <peda@axentia.se> 11 12description: | 13 A multiplexer (or mux) controller will have one, or several, consumer devices 14 that uses the mux controller. Thus, a mux controller can possibly control 15 several parallel multiplexers. Presumably there will be at least one 16 multiplexer needed by each consumer, but a single mux controller can of course 17 control several multiplexers for a single consumer. 18 19 A mux controller provides a number of states to its consumers, and the state 20 space is a simple zero-based enumeration. I.e. 0-1 for a 2-way multiplexer, 21 0-7 for an 8-way multiplexer, etc. 22 23 24 Mux controller nodes 25 -------------------- 26 27 Mux controller nodes must specify the number of cells used for the 28 specifier using the '#mux-control-cells' or '#mux-state-cells' property. 29 The value of '#mux-state-cells' will always be one greater than the value 30 of '#mux-control-cells'. 31 32 Optionally, mux controller nodes can also specify the state the mux should 33 have when it is idle. The idle-state property is used for this. If the 34 idle-state is not present, the mux controller is typically left as is when 35 it is idle. For multiplexer chips that expose several mux controllers, the 36 idle-state property is an array with one idle state for each mux controller. 37 38 The special value (-1) may be used to indicate that the mux should be left 39 as is when it is idle. This is the default, but can still be useful for 40 mux controller chips with more than one mux controller, particularly when 41 there is a need to "step past" a mux controller and set some other idle 42 state for a mux controller with a higher index. 43 44 Some mux controllers have the ability to disconnect the input/output of the 45 multiplexer. Using this disconnected high-impedance state as the idle state 46 is indicated with idle state (-2). 47 48 These constants are available in 49 50 #include <dt-bindings/mux/mux.h> 51 52 as MUX_IDLE_AS_IS (-1) and MUX_IDLE_DISCONNECT (-2). 53 54 An example mux controller node look like this (the adg972a chip is a triple 55 4-way multiplexer): 56 57 mux: mux-controller@50 { 58 compatible = "adi,adg792a"; 59 reg = <0x50>; 60 #mux-control-cells = <1>; 61 62 idle-state = <MUX_IDLE_DISCONNECT MUX_IDLE_AS_IS 2>; 63 }; 64 65select: 66 anyOf: 67 - properties: 68 $nodename: 69 pattern: '^mux-controller' 70 - required: 71 - '#mux-control-cells' 72 - required: 73 - '#mux-state-cells' 74 75properties: 76 $nodename: 77 pattern: '^mux-controller(@.*|-[0-9a-f]+)?$' 78 79 '#mux-control-cells': 80 enum: [ 0, 1 ] 81 82 '#mux-state-cells': 83 enum: [ 1, 2 ] 84 85 idle-state: 86 $ref: /schemas/types.yaml#/definitions/int32 87 minimum: -2 88 89 idle-states: 90 description: | 91 Mux controller nodes can specify the state the mux should have when it is 92 idle. If the idle-state is not present, the mux controller is typically 93 left as is when it is idle. For multiplexer chips that expose several mux 94 controllers, the idle-state property is an array with one idle state for 95 each mux controller. 96 97 The special value (-1) may be used to indicate that the mux should be left 98 as is when it is idle. This is the default, but can still be useful for 99 mux controller chips with more than one mux controller, particularly when 100 there is a need to "step past" a mux controller and set some other idle 101 state for a mux controller with a higher index. 102 103 Some mux controllers have the ability to disconnect the input/output of the 104 multiplexer. Using this disconnected high-impedance state as the idle state 105 is indicated with idle state (-2). 106 $ref: /schemas/types.yaml#/definitions/int32-array 107 items: 108 minimum: -2 109 110additionalProperties: true 111 112examples: 113 - | 114 #include <dt-bindings/gpio/gpio.h> 115 116 /* One consumer of a 2-way mux controller (one GPIO-line) */ 117 mux: mux-controller { 118 compatible = "gpio-mux"; 119 #mux-control-cells = <0>; 120 121 mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>; 122 }; 123 124 adc-mux { 125 compatible = "io-channel-mux"; 126 io-channels = <&adc 0>; 127 io-channel-names = "parent"; 128 129 mux-controls = <&mux>; 130 mux-control-names = "adc"; 131 132 channels = "sync", "in"; 133 }; 134 135 - | 136 #include <dt-bindings/gpio/gpio.h> 137 138 /* 139 * Two consumers (one for an ADC line and one for an i2c bus) of 140 * parallel 4-way multiplexers controlled by the same two GPIO-lines. 141 */ 142 mux2: mux-controller { 143 compatible = "gpio-mux"; 144 #mux-control-cells = <0>; 145 146 mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>, 147 <&pioA 1 GPIO_ACTIVE_HIGH>; 148 }; 149 150 adc-mux { 151 compatible = "io-channel-mux"; 152 io-channels = <&adc 0>; 153 io-channel-names = "parent"; 154 155 mux-controls = <&mux2>; 156 157 channels = "sync-1", "in", "out", "sync-2"; 158 }; 159 160 i2c-mux { 161 compatible = "i2c-mux"; 162 i2c-parent = <&i2c1>; 163 164 mux-controls = <&mux2>; 165 166 #address-cells = <1>; 167 #size-cells = <0>; 168 169 i2c@0 { 170 reg = <0>; 171 #address-cells = <1>; 172 #size-cells = <0>; 173 174 ssd1307: oled@3c { 175 reg = <0x3c>; 176 }; 177 }; 178 179 i2c@3 { 180 reg = <3>; 181 #address-cells = <1>; 182 #size-cells = <0>; 183 184 pca9555: pca9555@20 { 185 reg = <0x20>; 186 }; 187 }; 188 }; 189 190 - | 191 #include <dt-bindings/gpio/gpio.h> 192 193 mux1: mux-controller { 194 compatible = "gpio-mux"; 195 #mux-state-cells = <1>; 196 mux-gpios = <&exp_som 2 GPIO_ACTIVE_HIGH>; 197 }; 198 199 transceiver4: can-phy4 { 200 compatible = "ti,tcan1042"; 201 #phy-cells = <0>; 202 max-bitrate = <5000000>; 203 standby-gpios = <&exp_som 7 GPIO_ACTIVE_HIGH>; 204 mux-states = <&mux1 1>; 205 }; 206... 207