dt-bindings: add register based devices' mux controller DT bindings
diff mbox series

Message ID 20190218105246.23488-1-pankaj.bansal@nxp.com
State Superseded
Headers show
Series
  • dt-bindings: add register based devices' mux controller DT bindings
Related show

Checks

Context Check Description
robh/checkpatch success

Commit Message

Pankaj Bansal Feb. 18, 2019, 5:28 a.m. UTC
This adds device tree binding documentation for generic register
based multiplexer controlled by a bitfields in a parent device's
register range.

Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
---
 .../devicetree/bindings/mux/reg-mux.txt      | 84 ++++++++++++++++++
 1 file changed, 84 insertions(+)

Comments

Peter Rosin Feb. 18, 2019, 8:37 a.m. UTC | #1
Hi!

On 2019-02-18 06:28, Pankaj Bansal wrote:
> This adds device tree binding documentation for generic register
> based multiplexer controlled by a bitfields in a parent device's
> register range.
> 
> Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
> ---
>  .../devicetree/bindings/mux/reg-mux.txt      | 84 ++++++++++++++++++
>  1 file changed, 84 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mux/reg-mux.txt b/Documentation/devicetree/bindings/mux/reg-mux.txt
> new file mode 100644
> index 000000000000..c5e6faa2a7cf
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mux/reg-mux.txt
> @@ -0,0 +1,84 @@
> +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.

For people with more device-tree bindings experience: Is that a valid thing
to say in a bindings context?

The text is a modified copy from the mmio-mux binding which similar except
that it has "must be a syscon node" instead of "must be a device node". syscon
is a concept that exists in the devicetree, but what is wanted here is some
description that indicates that the driver of the parent node provides a
regmap.

I don't know how to say that without getting linux-specific?

> +
> +Required properties:
> +- compatible : "reg-mux"
> +- #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, accessed through the parent syscon.

syscon?

> +
> +Example:
> +
> +&i2c0 {
> +	status = "okay";

"okay" in examples are not needed, please remove.

> +
> +	fpga@66 { // fpga connected to i2c
> +		compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c",
> +			     "simple-mfd";
> +		reg = <0x66>;
> +
> +		mux: mux-controller { // Mux Producer
> +			compatible = "reg-mux";
> +			#mux-control-cells = <1>;
> +			mux-reg-masks = <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
> +					<0x54 0x07>; /* 1: reg 0x54, bit 2:0 */

bits 2:0

> +		};
> +	};
> +};

This first block is not indented to the same level as the following blocks.

> +
> +	mdio-mux-1 { // Mux consumer
> +		compatible = "mdio-mux";

I do not see this compatible described under Documentation/devicetree/bindings.
Is this also new? Where can I find it if so? And perhaps a corresponding driver?

To me is seems as if existing usage of the "mdio-mux" compatible is some kind of
generic fallback compatible that should perhaps /not/ be associated with a new
driver?

> +		mux-controls = <&mux 0>;
> +		mdio-parent-bus = <&emdio1>;
> +		#address-cells=<1>;

Spaces around the equal sign, please.

> +		#size-cells = <0>;
> +
> +		mdio@0 {
> +			reg = <0x00>;

Drop the surplus zero -> <0x0>
Or perhaps just a decimal <0>? Fitting 10 or more muxes in one register
should be rare and your comment in the mux-controller node has plain old
decimal "0" and "1".

> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +		};
> +
> +		mdio@40 {
> +			reg = <0x40>;
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +		};
> +
> +		..
> +		..
> +	};
> +
> +	mdio-mux-2 { // Mux consumer
> +		compatible = "mdio-mux";
> +		mux-controls = <&mux 1>;
> +		mdio-parent-bus = <&emdio2>;
> +		#address-cells=<1>;

Spaces around the equal sign, please.

> +		#size-cells = <0>;
> +
> +		mdio@0 {
> +			reg = <0x00>;

Drop the surplus zero -> <0x0>   (Or <0>)

> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +		};
> +
> +		mdio@1 {
> +			reg = <0x01>;

Drop the surplus zero -> <0x1>   (Or <1>)

Cheers,
Peter

> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +		};
> +
> +		..
> +		..
> +	};
>

Patch
diff mbox series

diff --git a/Documentation/devicetree/bindings/mux/reg-mux.txt b/Documentation/devicetree/bindings/mux/reg-mux.txt
new file mode 100644
index 000000000000..c5e6faa2a7cf
--- /dev/null
+++ b/Documentation/devicetree/bindings/mux/reg-mux.txt
@@ -0,0 +1,84 @@ 
+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 : "reg-mux"
+- #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, accessed through the parent syscon.
+
+Example:
+
+&i2c0 {
+	status = "okay";
+
+	fpga@66 { // fpga connected to i2c
+		compatible = "fsl,lx2160aqds-fpga", "fsl,fpga-qixis-i2c",
+			     "simple-mfd";
+		reg = <0x66>;
+
+		mux: mux-controller { // Mux Producer
+			compatible = "reg-mux";
+			#mux-control-cells = <1>;
+			mux-reg-masks = <0x54 0xf8>, /* 0: reg 0x54, bits 7:3 */
+					<0x54 0x07>; /* 1: reg 0x54, bit 2:0 */
+		};
+	};
+};
+
+	mdio-mux-1 { // Mux consumer
+		compatible = "mdio-mux";
+		mux-controls = <&mux 0>;
+		mdio-parent-bus = <&emdio1>;
+		#address-cells=<1>;
+		#size-cells = <0>;
+
+		mdio@0 {
+			reg = <0x00>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		mdio@40 {
+			reg = <0x40>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		..
+		..
+	};
+
+	mdio-mux-2 { // Mux consumer
+		compatible = "mdio-mux";
+		mux-controls = <&mux 1>;
+		mdio-parent-bus = <&emdio2>;
+		#address-cells=<1>;
+		#size-cells = <0>;
+
+		mdio@0 {
+			reg = <0x00>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		mdio@1 {
+			reg = <0x01>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+		};
+
+		..
+		..
+	};