| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- # SPDX-License-Identifier: GPL-2.0
- %YAML 1.2
- ---
- $id: http://devicetree.org/schemas/mux/mux-controller.yaml#
- $schema: http://devicetree.org/meta-schemas/core.yaml#
- title: Common multiplexer controller provider
- maintainers:
- - Peter Rosin <peda@axentia.se>
- description: |
- A multiplexer (or mux) controller will have one, or several, consumer devices
- that uses the mux controller. Thus, a mux controller can possibly control
- several parallel multiplexers. Presumably there will be at least one
- multiplexer needed by each consumer, but a single mux controller can of course
- control several multiplexers for a single consumer.
- A mux controller provides a number of states to its consumers, and the state
- space is a simple zero-based enumeration. I.e. 0-1 for a 2-way multiplexer,
- 0-7 for an 8-way multiplexer, etc.
- Mux controller nodes
- --------------------
- Mux controller nodes must specify the number of cells used for the
- specifier using the '#mux-control-cells' or '#mux-state-cells' property.
- The value of '#mux-state-cells' will always be one greater than the value
- of '#mux-control-cells'.
- Optionally, mux controller nodes can also specify the state the mux should
- have when it is idle. The idle-state property is used for this. If the
- idle-state is not present, the mux controller is typically left as is when
- it is idle. For multiplexer chips that expose several mux controllers, the
- idle-state property is an array with one idle state for each mux controller.
- The special value (-1) may be used to indicate that the mux should be left
- as is when it is idle. This is the default, but can still be useful for
- mux controller chips with more than one mux controller, particularly when
- there is a need to "step past" a mux controller and set some other idle
- state for a mux controller with a higher index.
- Some mux controllers have the ability to disconnect the input/output of the
- multiplexer. Using this disconnected high-impedance state as the idle state
- is indicated with idle state (-2).
- These constants are available in
- #include <dt-bindings/mux/mux.h>
- as MUX_IDLE_AS_IS (-1) and MUX_IDLE_DISCONNECT (-2).
- An example mux controller node look like this (the adg972a chip is a triple
- 4-way multiplexer):
- mux: mux-controller@50 {
- compatible = "adi,adg792a";
- reg = <0x50>;
- #mux-control-cells = <1>;
- idle-state = <MUX_IDLE_DISCONNECT MUX_IDLE_AS_IS 2>;
- };
- select:
- anyOf:
- - properties:
- $nodename:
- pattern: '^mux-controller'
- - required:
- - '#mux-control-cells'
- - required:
- - '#mux-state-cells'
- properties:
- $nodename:
- pattern: '^mux-controller(@.*|-([0-9]|[1-9][0-9]+))?$'
- '#mux-control-cells':
- enum: [ 0, 1 ]
- '#mux-state-cells':
- enum: [ 1, 2 ]
- idle-state:
- $ref: /schemas/types.yaml#/definitions/int32
- minimum: -2
- idle-states:
- description: |
- Mux controller nodes can specify the state the mux should have when it is
- idle. If the idle-state is not present, the mux controller is typically
- left as is when it is idle. For multiplexer chips that expose several mux
- controllers, the idle-state property is an array with one idle state for
- each mux controller.
- The special value (-1) may be used to indicate that the mux should be left
- as is when it is idle. This is the default, but can still be useful for
- mux controller chips with more than one mux controller, particularly when
- there is a need to "step past" a mux controller and set some other idle
- state for a mux controller with a higher index.
- Some mux controllers have the ability to disconnect the input/output of the
- multiplexer. Using this disconnected high-impedance state as the idle state
- is indicated with idle state (-2).
- $ref: /schemas/types.yaml#/definitions/int32-array
- items:
- minimum: -2
- additionalProperties: true
- examples:
- - |
- #include <dt-bindings/gpio/gpio.h>
- /* One consumer of a 2-way mux controller (one GPIO-line) */
- mux: mux-controller {
- compatible = "gpio-mux";
- #mux-control-cells = <0>;
- mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>;
- };
- adc-mux {
- compatible = "io-channel-mux";
- io-channels = <&adc 0>;
- io-channel-names = "parent";
- mux-controls = <&mux>;
- mux-control-names = "adc";
- channels = "sync", "in";
- };
- - |
- #include <dt-bindings/gpio/gpio.h>
- /*
- * Two consumers (one for an ADC line and one for an i2c bus) of
- * parallel 4-way multiplexers controlled by the same two GPIO-lines.
- */
- mux2: mux-controller {
- compatible = "gpio-mux";
- #mux-control-cells = <0>;
- mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
- <&pioA 1 GPIO_ACTIVE_HIGH>;
- };
- adc-mux {
- compatible = "io-channel-mux";
- io-channels = <&adc 0>;
- io-channel-names = "parent";
- mux-controls = <&mux2>;
- channels = "sync-1", "in", "out", "sync-2";
- };
- i2c-mux {
- compatible = "i2c-mux";
- i2c-parent = <&i2c1>;
- mux-controls = <&mux2>;
- #address-cells = <1>;
- #size-cells = <0>;
- i2c@0 {
- reg = <0>;
- #address-cells = <1>;
- #size-cells = <0>;
- ssd1307: oled@3c {
- reg = <0x3c>;
- };
- };
- i2c@3 {
- reg = <3>;
- #address-cells = <1>;
- #size-cells = <0>;
- pca9555: pca9555@20 {
- reg = <0x20>;
- };
- };
- };
- - |
- #include <dt-bindings/gpio/gpio.h>
- mux1: mux-controller {
- compatible = "gpio-mux";
- #mux-state-cells = <1>;
- mux-gpios = <&exp_som 2 GPIO_ACTIVE_HIGH>;
- };
- transceiver4: can-phy4 {
- compatible = "ti,tcan1042";
- #phy-cells = <0>;
- max-bitrate = <5000000>;
- standby-gpios = <&exp_som 7 GPIO_ACTIVE_HIGH>;
- mux-states = <&mux1 1>;
- };
- ...
|