Re: [PATCH 3/6] dt-bindings: mux: Convert mux controller bindings to schema

From: Jonathan Cameron
Date: Sat May 22 2021 - 06:40:31 EST


On Tue, 18 May 2021 18:28:55 -0500
Rob Herring <robh@xxxxxxxxxx> wrote:

> Convert the mux controller bindings to DT schema.
>
> Cc: Peter Rosin <peda@xxxxxxxxxx>
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
One trivial inline, but otherwise this looks pretty good to me.
Given I'll send out a yaml conversion of the IIO file in a few mins
anyway, perhaps better for it to get cleaned up during that.

I did wonder if carrying examples in both the top level
mux-controller binding and the various controller bindings
was worth while duplication, but it doesn't do much harm.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>

> ---
> .../devicetree/bindings/i2c/i2c-mux-gpmux.txt | 2 +-
> .../bindings/i2c/i2c-mux-pca954x.txt | 2 +-
> .../iio/multiplexer/io-channel-mux.txt | 2 +-
> .../devicetree/bindings/mtd/ti,am654-hbmc.txt | 2 +-
> .../devicetree/bindings/mux/adi,adg792a.txt | 2 +-
> .../devicetree/bindings/mux/adi,adgs1408.txt | 2 +-
> .../devicetree/bindings/mux/gpio-mux.txt | 69 -------
> .../devicetree/bindings/mux/gpio-mux.yaml | 92 +++++++++
> .../devicetree/bindings/mux/mux-consumer.yaml | 46 +++++
> .../bindings/mux/mux-controller.txt | 157 ---------------
> .../bindings/mux/mux-controller.yaml | 182 ++++++++++++++++++
> .../devicetree/bindings/mux/reg-mux.txt | 129 -------------
> .../devicetree/bindings/mux/reg-mux.yaml | 143 ++++++++++++++
> .../bindings/net/mdio-mux-multiplexer.txt | 2 +-
> 14 files changed, 470 insertions(+), 362 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/mux/gpio-mux.txt
> create mode 100644 Documentation/devicetree/bindings/mux/gpio-mux.yaml
> create mode 100644 Documentation/devicetree/bindings/mux/mux-consumer.yaml
> delete mode 100644 Documentation/devicetree/bindings/mux/mux-controller.txt
> create mode 100644 Documentation/devicetree/bindings/mux/mux-controller.yaml
> delete mode 100644 Documentation/devicetree/bindings/mux/reg-mux.txt
> create mode 100644 Documentation/devicetree/bindings/mux/reg-mux.yaml
>
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt
> index 8b444b94e92f..057083a8ba17 100644
> --- a/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt
> +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.txt
> @@ -25,7 +25,7 @@ Required properties:
> mux.
> * Standard I2C mux properties. See i2c-mux.txt in this directory.
> * I2C child bus nodes. See i2c-mux.txt in this directory. The sub-bus number
> - is also the mux-controller state described in ../mux/mux-controller.txt
> + is also the mux-controller state described in ../mux/mux-controller.yaml
>
> Optional properties:
> - mux-locked: If present, explicitly allow unrelated I2C transactions on the
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
> index 7abda506b828..9f3f3eb67e87 100644
> --- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
> +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt
> @@ -26,7 +26,7 @@ Optional Properties:
>
> - reset-gpios: Reference to the GPIO connected to the reset input.
> - idle-state: if present, overrides i2c-mux-idle-disconnect,
> - Please refer to Documentation/devicetree/bindings/mux/mux-controller.txt
> + Please refer to Documentation/devicetree/bindings/mux/mux-controller.yaml
> - i2c-mux-idle-disconnect: Boolean; if defined, forces mux to disconnect all
> children in idle state. This is necessary for example, if there are several
> multiplexers on the bus and the devices behind them use same I2C addresses.
> diff --git a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
> index 89647d714387..d2b3105dba67 100644
> --- a/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
> +++ b/Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
> @@ -17,7 +17,7 @@ For each non-empty string in the channels property, an io-channel will
> be created. The number of this io-channel is the same as the index into
> the list of strings in the channels property, and also matches the mux
> controller state. The mux controller state is described in
> -../mux/mux-controller.txt
> +../mux/mux-controller.yaml

Cross reference is wrong in original I think.
Should be
../../mux/mux-controller.yaml

I'll send out conversion of this file in a few mins though so can tidy this up
in that. I'll change it to a full reference anyway to make this more
future proof.

>
> Example:
> mux: mux-controller {
> diff --git a/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt b/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt
> index faa81c2e5da6..ccfd37b8a0ad 100644
> --- a/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt
> +++ b/Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt
> @@ -13,7 +13,7 @@ Optional properties:
> - mux-controls : phandle to the multiplexer that controls selection of
> HBMC vs OSPI inside Flash SubSystem (FSS). Default is OSPI,
> if property is absent.
> - See Documentation/devicetree/bindings/mux/reg-mux.txt
> + See Documentation/devicetree/bindings/mux/reg-mux.yaml
> for mmio-mux binding details
>
> Example:
> diff --git a/Documentation/devicetree/bindings/mux/adi,adg792a.txt b/Documentation/devicetree/bindings/mux/adi,adg792a.txt
> index 96b787a69f50..b0e5bf6903d8 100644
> --- a/Documentation/devicetree/bindings/mux/adi,adg792a.txt
> +++ b/Documentation/devicetree/bindings/mux/adi,adg792a.txt
> @@ -5,7 +5,7 @@ Required properties:
> - #mux-control-cells : <0> if parallel (the three muxes are bound together
> with a single mux controller controlling all three muxes), or <1> if
> not (one mux controller for each mux).
> -* Standard mux-controller bindings as described in mux-controller.txt
> +* Standard mux-controller bindings as described in mux-controller.yaml
>
> Optional properties for ADG792G:
> - gpio-controller : if present, #gpio-cells below is required.
> diff --git a/Documentation/devicetree/bindings/mux/adi,adgs1408.txt b/Documentation/devicetree/bindings/mux/adi,adgs1408.txt
> index be6947f4d86b..453a38961c13 100644
> --- a/Documentation/devicetree/bindings/mux/adi,adgs1408.txt
> +++ b/Documentation/devicetree/bindings/mux/adi,adgs1408.txt
> @@ -4,7 +4,7 @@ Required properties:
> - compatible : Should be one of
> * "adi,adgs1408"
> * "adi,adgs1409"
> -* Standard mux-controller bindings as described in mux-controller.txt
> +* Standard mux-controller bindings as described in mux-controller.yaml
>
> Optional properties for ADGS1408/1409:
> - gpio-controller : if present, #gpio-cells is required.
> diff --git a/Documentation/devicetree/bindings/mux/gpio-mux.txt b/Documentation/devicetree/bindings/mux/gpio-mux.txt
> deleted file mode 100644
> index b8f746344d80..000000000000
> --- a/Documentation/devicetree/bindings/mux/gpio-mux.txt
> +++ /dev/null
> @@ -1,69 +0,0 @@
> -GPIO-based multiplexer controller bindings
> -
> -Define what GPIO pins are used to control a multiplexer. Or several
> -multiplexers, if the same pins control more than one multiplexer.
> -
> -Required properties:
> -- compatible : "gpio-mux"
> -- mux-gpios : list of gpios used to control the multiplexer, least
> - significant bit first.
> -- #mux-control-cells : <0>
> -* Standard mux-controller bindings as decribed in mux-controller.txt
> -
> -Optional properties:
> -- idle-state : if present, the state the mux will have when idle. The
> - special state MUX_IDLE_AS_IS is the default.
> -
> -The multiplexer state is defined as the number represented by the
> -multiplexer GPIO pins, where the first pin is the least significant
> -bit. An active pin is a binary 1, an inactive pin is a binary 0.
> -
> -Example:
> -
> - mux: 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 = <&mux>;
> -
> - channels = "sync-1", "in", "out", "sync-2";
> - };
> -
> - i2c-mux {
> - compatible = "i2c-mux";
> - i2c-parent = <&i2c1>;
> -
> - mux-controls = <&mux>;
> -
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - i2c@0 {
> - reg = <0>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - ssd1307: oled@3c {
> - /* ... */
> - };
> - };
> -
> - i2c@3 {
> - reg = <3>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - pca9555: pca9555@20 {
> - /* ... */
> - };
> - };
> - };
> diff --git a/Documentation/devicetree/bindings/mux/gpio-mux.yaml b/Documentation/devicetree/bindings/mux/gpio-mux.yaml
> new file mode 100644
> index 000000000000..0a7c8d64981a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mux/gpio-mux.yaml
> @@ -0,0 +1,92 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mux/gpio-mux.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: GPIO-based multiplexer controller bindings
> +
> +maintainers:
> + - Peter Rosin <peda@xxxxxxxxxx>
> +
> +description: |+
> + Define what GPIO pins are used to control a multiplexer. Or several
> + multiplexers, if the same pins control more than one multiplexer.
> +
> + The multiplexer state is defined as the number represented by the
> + multiplexer GPIO pins, where the first pin is the least significant
> + bit. An active pin is a binary 1, an inactive pin is a binary 0.
> +
> +properties:
> + compatible:
> + const: gpio-mux
> +
> + mux-gpios:
> + description:
> + List of gpios used to control the multiplexer, least significant bit first.
> +
> + '#mux-control-cells':
> + const: 0
> +
> + idle-state:
> + default: -1
> +
> +required:
> + - compatible
> + - mux-gpios
> + - "#mux-control-cells"
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> +
> + mux: 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 = <&mux>;
> +
> + channels = "sync-1", "in", "out", "sync-2";
> + };
> +
> + i2c-mux {
> + compatible = "i2c-mux";
> + i2c-parent = <&i2c1>;
> +
> + mux-controls = <&mux>;
> +
> + #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>;
> + };
> + };
> + };
> +...
> diff --git a/Documentation/devicetree/bindings/mux/mux-consumer.yaml b/Documentation/devicetree/bindings/mux/mux-consumer.yaml
> new file mode 100644
> index 000000000000..7af93298ab5c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mux/mux-consumer.yaml
> @@ -0,0 +1,46 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mux/mux-consumer.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Common multiplexer controller consumer bindings
> +
> +maintainers:
> + - Peter Rosin <peda@xxxxxxxxxx>
> +
> +description: |
> + Mux controller consumers should specify a list of mux controllers that they
> + want to use with a property containing a 'mux-ctrl-list':
> +
> + mux-ctrl-list ::= <single-mux-ctrl> [mux-ctrl-list]
> + single-mux-ctrl ::= <mux-ctrl-phandle> [mux-ctrl-specifier]
> + mux-ctrl-phandle : phandle to mux controller node
> + mux-ctrl-specifier : array of #mux-control-cells specifying the
> + given mux controller (controller specific)
> +
> + Mux controller properties should be named "mux-controls". The exact meaning of
> + each mux controller property must be documented in the device tree binding for
> + each consumer. An optional property "mux-control-names" may contain a list of
> + strings to label each of the mux controllers listed in the "mux-controls"
> + property.
> +
> + mux-ctrl-specifier typically encodes the chip-relative mux controller number.
> + If the mux controller chip only provides a single mux controller, the
> + mux-ctrl-specifier can typically be left out.
> +
> +select: true
> +
> +properties:
> + mux-controls:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> + mux-control-names:
> + description:
> + Devices that use more than a single mux controller can use the
> + "mux-control-names" property to map the name of the requested mux
> + controller to an index into the list given by the "mux-controls" property.
> +
> +additionalProperties: true
> +
> +...
> diff --git a/Documentation/devicetree/bindings/mux/mux-controller.txt b/Documentation/devicetree/bindings/mux/mux-controller.txt
> deleted file mode 100644
> index 4f47e4bd2fa0..000000000000
> --- a/Documentation/devicetree/bindings/mux/mux-controller.txt
> +++ /dev/null
> @@ -1,157 +0,0 @@
> -Common multiplexer controller bindings
> -======================================
> -
> -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.
> -
> -
> -Consumers
> ----------
> -
> -Mux controller consumers should specify a list of mux controllers that they
> -want to use with a property containing a 'mux-ctrl-list':
> -
> - mux-ctrl-list ::= <single-mux-ctrl> [mux-ctrl-list]
> - single-mux-ctrl ::= <mux-ctrl-phandle> [mux-ctrl-specifier]
> - mux-ctrl-phandle : phandle to mux controller node
> - mux-ctrl-specifier : array of #mux-control-cells specifying the
> - given mux controller (controller specific)
> -
> -Mux controller properties should be named "mux-controls". The exact meaning of
> -each mux controller property must be documented in the device tree binding for
> -each consumer. An optional property "mux-control-names" may contain a list of
> -strings to label each of the mux controllers listed in the "mux-controls"
> -property.
> -
> -Drivers for devices that use more than a single mux controller can use the
> -"mux-control-names" property to map the name of the requested mux controller
> -to an index into the list given by the "mux-controls" property.
> -
> -mux-ctrl-specifier typically encodes the chip-relative mux controller number.
> -If the mux controller chip only provides a single mux controller, the
> -mux-ctrl-specifier can typically be left out.
> -
> -Example:
> -
> - /* 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";
> - };
> -
> -Note that in the example above, specifying the "mux-control-names" is redundant
> -because there is only one mux controller in the list. However, if the driver
> -for the consumer node in fact asks for a named mux controller, that name is of
> -course still required.
> -
> - /*
> - * 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.
> - */
> - mux: 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 = <&mux>;
> -
> - channels = "sync-1", "in", "out", "sync-2";
> - };
> -
> - i2c-mux {
> - compatible = "i2c-mux";
> - i2c-parent = <&i2c1>;
> -
> - mux-controls = <&mux>;
> -
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - i2c@0 {
> - reg = <0>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - ssd1307: oled@3c {
> - /* ... */
> - };
> - };
> -
> - i2c@3 {
> - reg = <3>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - pca9555: pca9555@20 {
> - /* ... */
> - };
> - };
> - };
> -
> -
> -Mux controller nodes
> ---------------------
> -
> -Mux controller nodes must specify the number of cells used for the
> -specifier using the '#mux-control-cells' property.
> -
> -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>;
> - };
> diff --git a/Documentation/devicetree/bindings/mux/mux-controller.yaml b/Documentation/devicetree/bindings/mux/mux-controller.yaml
> new file mode 100644
> index 000000000000..736a84c3b6a5
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mux/mux-controller.yaml
> @@ -0,0 +1,182 @@
> +# 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 bindings
> +
> +maintainers:
> + - Peter Rosin <peda@xxxxxxxxxx>
> +
> +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' property.
> +
> + 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'
> +
> +properties:
> + $nodename:
> + pattern: '^mux-controller(@.*|-[0-9a-f]+)?$'
> +
> + '#mux-control-cells':
> + enum: [ 0, 1 ]
> +
> + 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>;
> + };
> + };
> + };
> +...
> diff --git a/Documentation/devicetree/bindings/mux/reg-mux.txt b/Documentation/devicetree/bindings/mux/reg-mux.txt
> deleted file mode 100644
> index 4afd7ba73d60..000000000000
> --- a/Documentation/devicetree/bindings/mux/reg-mux.txt
> +++ /dev/null
> @@ -1,129 +0,0 @@
> -Generic register bitfield-based multiplexer controller bindings
> -
> -Define register bitfields to be used to control multiplexers. The parent
> -device tree node must be a device node to provide register r/w access.
> -
> -Required properties:
> -- compatible : should be one of
> - "reg-mux" : if parent device of mux controller is not syscon device
> - "mmio-mux" : if parent device of mux controller is syscon device
> -- #mux-control-cells : <1>
> -- mux-reg-masks : an array of register offset and pre-shifted bitfield mask
> - pairs, each describing a single mux control.
> -* Standard mux-controller bindings as decribed in mux-controller.txt
> -
> -Optional properties:
> -- idle-states : if present, the state the muxes will have when idle. The
> - special state MUX_IDLE_AS_IS is the default.
> -
> -The multiplexer state of each multiplexer is defined as the value of the
> -bitfield described by the corresponding register offset and bitfield mask
> -pair in the mux-reg-masks array.
> -
> -Example 1:
> -The parent device of mux controller is not a syscon device.
> -
> -&i2c0 {
> - fpga@66 { // fpga connected to i2c
> - compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c",
> - "simple-mfd";
> - reg = <0x66>;
> -
> - mux: mux-controller {
> - compatible = "reg-mux";
> - #mux-control-cells = <1>;
> - mux-reg-masks = <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
> - <0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
> - };
> - };
> -};
> -
> -mdio-mux-1 {
> - compatible = "mdio-mux-multiplexer";
> - mux-controls = <&mux 0>;
> - mdio-parent-bus = <&emdio1>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - mdio@0 {
> - reg = <0x0>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - };
> -
> - mdio@8 {
> - reg = <0x8>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - };
> -
> - ..
> - ..
> -};
> -
> -mdio-mux-2 {
> - compatible = "mdio-mux-multiplexer";
> - mux-controls = <&mux 1>;
> - mdio-parent-bus = <&emdio2>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - mdio@0 {
> - reg = <0x0>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - };
> -
> - mdio@1 {
> - reg = <0x1>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - };
> -
> - ..
> - ..
> -};
> -
> -Example 2:
> -The parent device of mux controller is syscon device.
> -
> -syscon {
> - compatible = "syscon";
> -
> - mux: mux-controller {
> - compatible = "mmio-mux";
> - #mux-control-cells = <1>;
> -
> - mux-reg-masks = <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
> - <0x3 0x40>, /* 1: reg 0x3, bit 6 */
> - idle-states = <MUX_IDLE_AS_IS>, <0>;
> - };
> -};
> -
> -video-mux {
> - compatible = "video-mux";
> - mux-controls = <&mux 0>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - ports {
> - /* inputs 0..3 */
> - port@0 {
> - reg = <0>;
> - };
> - port@1 {
> - reg = <1>;
> - };
> - port@2 {
> - reg = <2>;
> - };
> - port@3 {
> - reg = <3>;
> - };
> -
> - /* output */
> - port@4 {
> - reg = <4>;
> - };
> - };
> -};
> diff --git a/Documentation/devicetree/bindings/mux/reg-mux.yaml b/Documentation/devicetree/bindings/mux/reg-mux.yaml
> new file mode 100644
> index 000000000000..60d5746eb39d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mux/reg-mux.yaml
> @@ -0,0 +1,143 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mux/reg-mux.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Generic register bitfield-based multiplexer controller bindings
> +
> +maintainers:
> + - Peter Rosin <peda@xxxxxxxxxx>
> +
> +description: |+
> + Define register bitfields to be used to control multiplexers. The parent
> + device tree node must be a device node to provide register r/w access.
> +
> +properties:
> + compatible:
> + enum:
> + - reg-mux # parent device of mux controller is not syscon device
> + - mmio-mux # parent device of mux controller is syscon device
> +
> + reg: true
> +
> + '#mux-control-cells':
> + const: 1
> +
> + mux-reg-masks:
> + description: an array of register offset and pre-shifted bitfield mask
> + pairs, each describing a single mux control.
> +
> + idle-states: true
> +
> +required:
> + - compatible
> + - mux-reg-masks
> + - '#mux-control-cells'
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + /* The parent device of mux controller is not a syscon device. */
> +
> + #include <dt-bindings/mux/mux.h>
> +
> + mux-controller {
> + compatible = "reg-mux";
> + #mux-control-cells = <1>;
> + mux-reg-masks =
> + <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
> + <0x54 0x07>; /* 1: reg 0x54, bits 2:0 */
> + };
> +
> + mdio-mux-1 {
> + compatible = "mdio-mux-multiplexer";
> + mux-controls = <&mux1 0>;
> + mdio-parent-bus = <&emdio1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + mdio@0 {
> + reg = <0x0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + mdio@8 {
> + reg = <0x8>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> + };
> +
> + mdio-mux-2 {
> + compatible = "mdio-mux-multiplexer";
> + mux-controls = <&mux1 1>;
> + mdio-parent-bus = <&emdio2>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + mdio@0 {
> + reg = <0x0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + mdio@1 {
> + reg = <0x1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> + };
> +
> + - |
> + /* The parent device of mux controller is syscon device. */
> +
> + #include <dt-bindings/mux/mux.h>
> + syscon@1000 {
> + compatible = "fsl,imx7d-iomuxc-gpr", "fsl,imx6q-iomuxc-gpr", "syscon", "simple-mfd";
> + reg = <0x1000 0x100>;
> +
> + mux2: mux-controller {
> + compatible = "mmio-mux";
> + #mux-control-cells = <1>;
> +
> + mux-reg-masks =
> + <0x3 0x30>, /* 0: reg 0x3, bits 5:4 */
> + <0x3 0x40>; /* 1: reg 0x3, bit 6 */
> + idle-states = <MUX_IDLE_AS_IS>, <0>;
> + };
> + };
> +
> + video-mux {
> + compatible = "video-mux";
> + mux-controls = <&mux2 0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* inputs 0..3 */
> + port@0 {
> + reg = <0>;
> + };
> + port@1 {
> + reg = <1>;
> + };
> + port@2 {
> + reg = <2>;
> + };
> + port@3 {
> + reg = <3>;
> + };
> +
> + /* output */
> + port@4 {
> + reg = <4>;
> + };
> + };
> + };
> +...
> diff --git a/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt b/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt
> index 534e38058fe0..87fd0b4f654f 100644
> --- a/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt
> +++ b/Documentation/devicetree/bindings/net/mdio-mux-multiplexer.txt
> @@ -14,7 +14,7 @@ each child node of mdio bus multiplexer consumer device represent a mdio
> bus.
>
> for more information please refer
> -Documentation/devicetree/bindings/mux/mux-controller.txt
> +Documentation/devicetree/bindings/mux/mux-controller.yaml
> and Documentation/devicetree/bindings/net/mdio-mux.txt
>
> Example: