Re: [PATCH] dt-bindings: add register based devices' mux controller DT bindings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx>
> ---
>  .../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>;
> +		};
> +
> +		..
> +		..
> +	};
> 





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux