Re: [PATCH 1/2] dt-bindings: mux: Document mux-states property

From: Rob Herring
Date: Tue Nov 30 2021 - 15:14:51 EST


On Tue, Nov 30, 2021 at 05:48:46PM +0530, Aswath Govindraju wrote:
> In some cases, it is required to provide the state to which the mux
> controller has be set to, from the consumer device tree node. Document the
> property mux-states that can be used for adding this support.

I having a hard time understanding why you need this. One consumer
configures a mux one way and another consumer another way? How do you
arbitrate that? Please elaborate on what 'some cases' are and why it's
required.

Can't you just add a cell for the 'state' allowing for 1-2 cells
instead of 0-1?

> Signed-off-by: Aswath Govindraju <a-govindraju@xxxxxx>
> ---
> .../devicetree/bindings/mux/gpio-mux.yaml | 11 ++++++--
> .../devicetree/bindings/mux/mux-consumer.yaml | 14 ++++++++++
> .../bindings/mux/mux-controller.yaml | 26 ++++++++++++++++++-
> 3 files changed, 48 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mux/gpio-mux.yaml b/Documentation/devicetree/bindings/mux/gpio-mux.yaml
> index 0a7c8d64981a..ee4de9fbaf4d 100644
> --- a/Documentation/devicetree/bindings/mux/gpio-mux.yaml
> +++ b/Documentation/devicetree/bindings/mux/gpio-mux.yaml
> @@ -26,7 +26,10 @@ properties:
> List of gpios used to control the multiplexer, least significant bit first.
>
> '#mux-control-cells':
> - const: 0
> + enum: [ 0, 1 ]
> +
> + '#mux-state-cells':
> + enum: [ 1, 2 ]
>
> idle-state:
> default: -1
> @@ -34,7 +37,11 @@ properties:
> required:
> - compatible
> - mux-gpios
> - - "#mux-control-cells"
> +anyOf:
> + - required:
> + - "#mux-control-cells"
> + - required:
> + - "#mux-state-cells"
>
> additionalProperties: false
>
> diff --git a/Documentation/devicetree/bindings/mux/mux-consumer.yaml b/Documentation/devicetree/bindings/mux/mux-consumer.yaml
> index 7af93298ab5c..64f353714227 100644
> --- a/Documentation/devicetree/bindings/mux/mux-consumer.yaml
> +++ b/Documentation/devicetree/bindings/mux/mux-consumer.yaml
> @@ -25,6 +25,11 @@ description: |
> strings to label each of the mux controllers listed in the "mux-controls"
> property.
>
> + If it is required to provide the state that the mux controller needs to
> + be set to, the property "mux-states" must be used. An optional property
> + "mux-state-names" can be used to provide a list of strings, to label
> + each of the mux controllers listed in the "mux-states" 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.
> @@ -35,12 +40,21 @@ properties:
> mux-controls:
> $ref: /schemas/types.yaml#/definitions/phandle-array
>
> + mux-states:
> + $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.
>
> + mux-state-names:
> + description:
> + Devices that use more than a single mux controller can use the
> + "mux-state-names" property to map the name of the requested mux
> + controller to an index into the list given by the "mux-states" property.
> +
> additionalProperties: true
>
> ...
> diff --git a/Documentation/devicetree/bindings/mux/mux-controller.yaml b/Documentation/devicetree/bindings/mux/mux-controller.yaml
> index 736a84c3b6a5..b29dbf521f01 100644
> --- a/Documentation/devicetree/bindings/mux/mux-controller.yaml
> +++ b/Documentation/devicetree/bindings/mux/mux-controller.yaml
> @@ -25,7 +25,9 @@ description: |
> --------------------
>
> Mux controller nodes must specify the number of cells used for the
> - specifier using the '#mux-control-cells' property.
> + specifier using the '#mux-control-cells' or 'mux-state-cells'
> + property. Value of '#mux-state-cells' will always be one greater then
> + 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
> @@ -67,6 +69,8 @@ select:
> pattern: '^mux-controller'
> - required:
> - '#mux-control-cells'
> + - required:
> + - '#mux-state-cells'
>
> properties:
> $nodename:
> @@ -75,6 +79,9 @@ properties:
> '#mux-control-cells':
> enum: [ 0, 1 ]
>
> + '#mux-state-cells':
> + enum: [ 1, 2 ]
> +
> idle-state:
> $ref: /schemas/types.yaml#/definitions/int32
> minimum: -2
> @@ -179,4 +186,21 @@ examples:
> };
> };
> };
> +
> + - |
> + #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>;
> + };
> ...
> --
> 2.17.1
>
>