Re: [PATCH v2 1/2] dt-bindings: display: bridge: Add GPIO display mux binding

From: Rob Herring
Date: Tue Jan 17 2023 - 16:58:02 EST


On Mon, Jan 16, 2023 at 07:08:19PM +0800, Pin-yen Lin wrote:
> From: Nicolas Boichat <drinkcat@xxxxxxxxxxxx>
>
> Add bindings for Generic GPIO mux driver.
>
> Signed-off-by: Nicolas Boichat <drinkcat@xxxxxxxxxxxx>
> Signed-off-by: Pin-yen Lin <treapking@xxxxxxxxxxxx>
> ---
>
> Changes in v2:
> - Referenced existing dt-binding schemas from graph.yaml
> - Added ddc-i2c-bus into the bindings
>
> .../bindings/display/bridge/gpio-mux.yaml | 95 +++++++++++++++++++
> 1 file changed, 95 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/bridge/gpio-mux.yaml
>
> diff --git a/Documentation/devicetree/bindings/display/bridge/gpio-mux.yaml b/Documentation/devicetree/bindings/display/bridge/gpio-mux.yaml
> new file mode 100644
> index 000000000000..da29ba078f05
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/bridge/gpio-mux.yaml
> @@ -0,0 +1,95 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/bridge/gpio-mux.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Generic display mux (1 input, 2 outputs)
> +
> +maintainers:
> + - Nicolas Boichat <drinkcat@xxxxxxxxxxxx>
> +
> +description: |
> + This bindings describes a simple display (e.g. HDMI) mux, that has 1
> + input, and 2 outputs. The mux status is controlled by hardware, and
> + its status is read back using a GPIO.
> +
> +properties:
> + compatible:
> + const: gpio-display-mux
> +
> + detect-gpios:
> + maxItems: 1
> + description: GPIO that indicates the active output

What are we detecting? That implies an input, but this is selecting the
output path, right? Or what does 'mux status is controlled by hardware'
mean exactly? Something else? That does not sound very generic.

In any case, we have a common mux binding so any kind of mux control
could be used here, not just GPIO. Then you can make this just a generic
display mux.

> +
> + ddc-i2c-bus:
> + description: phandle link to the I2C controller used for DDC EDID probing
> + $ref: /schemas/types.yaml#/definitions/phandle

This belongs in the connector node(s).

> +
> + ports:
> + $ref: /schemas/graph.yaml#/properties/ports
> +
> + properties:
> + port@0:
> + $ref: /schemas/graph.yaml#/properties/port
> + description: |
> + Video port for input.
> +
> + port@1:
> + $ref: /schemas/graph.yaml#/properties/port
> + description: |
> + 2 video ports for output.
> + The reg value in the endpoints matches the GPIO status: when
> + GPIO is asserted, endpoint with reg value <1> is selected.
> +
> + required:
> + - port@0
> + - port@1
> +
> +required:
> + - compatible
> + - detect-gpios
> + - ports
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> + hdmi_mux: hdmi_mux {
> + compatible = "gpio-display-mux";
> + detect-gpios = <&pio 36 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&hdmi_mux_pins>;
> + ddc-i2c-bus = <&hdmiddc0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 { /* input */
> + reg = <0>;
> +
> + hdmi_mux_in: endpoint {
> + remote-endpoint = <&hdmi0_out>;
> + };
> + };
> +
> + port@1 { /* output */
> + reg = <1>;
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hdmi_mux_out_anx: endpoint@0 {
> + reg = <0>;
> + remote-endpoint = <&dp_bridge_in>;
> + };
> +
> + hdmi_mux_out_hdmi: endpoint@1 {
> + reg = <1>;
> + remote-endpoint = <&hdmi_connector_in>;
> + };
> + };
> + };
> + };
> --
> 2.39.0.314.g84b9a713c41-goog
>