162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/usb/gpio-sbu-mux.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: GPIO-based SBU mux
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Bjorn Andersson <andersson@kernel.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription:
1362306a36Sopenharmony_ci  In USB Type-C applications the SBU lines needs to be connected, disconnected
1462306a36Sopenharmony_ci  and swapped depending on the altmode and orientation. This binding describes
1562306a36Sopenharmony_ci  a family of hardware solutions which switches between these modes using GPIO
1662306a36Sopenharmony_ci  signals.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciproperties:
1962306a36Sopenharmony_ci  compatible:
2062306a36Sopenharmony_ci    items:
2162306a36Sopenharmony_ci      - enum:
2262306a36Sopenharmony_ci          - onnn,fsusb43l10x
2362306a36Sopenharmony_ci          - pericom,pi3usb102
2462306a36Sopenharmony_ci      - const: gpio-sbu-mux
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci  enable-gpios:
2762306a36Sopenharmony_ci    description: Switch enable GPIO
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci  select-gpios:
3062306a36Sopenharmony_ci    description: Orientation select
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci  vcc-supply:
3362306a36Sopenharmony_ci    description: power supply
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  mode-switch:
3662306a36Sopenharmony_ci    description: Flag the port as possible handle of altmode switching
3762306a36Sopenharmony_ci    type: boolean
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  orientation-switch:
4062306a36Sopenharmony_ci    description: Flag the port as possible handler of orientation switching
4162306a36Sopenharmony_ci    type: boolean
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  port:
4462306a36Sopenharmony_ci    $ref: /schemas/graph.yaml#/properties/port
4562306a36Sopenharmony_ci    description:
4662306a36Sopenharmony_ci      A port node to link the SBU mux to a TypeC controller for the purpose of
4762306a36Sopenharmony_ci      handling altmode muxing and orientation switching.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cirequired:
5062306a36Sopenharmony_ci  - compatible
5162306a36Sopenharmony_ci  - enable-gpios
5262306a36Sopenharmony_ci  - select-gpios
5362306a36Sopenharmony_ci  - mode-switch
5462306a36Sopenharmony_ci  - orientation-switch
5562306a36Sopenharmony_ci  - port
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciadditionalProperties: false
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciexamples:
6062306a36Sopenharmony_ci  - |
6162306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci    tcpm {
6462306a36Sopenharmony_ci        connector {
6562306a36Sopenharmony_ci            compatible = "usb-c-connector";
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci            ports {
6862306a36Sopenharmony_ci                #address-cells = <1>;
6962306a36Sopenharmony_ci                #size-cells = <0>;
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci                port@0 {
7262306a36Sopenharmony_ci                    reg = <0>;
7362306a36Sopenharmony_ci                    tcpm_hs_out: endpoint {
7462306a36Sopenharmony_ci                        remote-endpoint = <&usb_hs_phy_in>;
7562306a36Sopenharmony_ci                    };
7662306a36Sopenharmony_ci                };
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci                port@1 {
7962306a36Sopenharmony_ci                    reg = <1>;
8062306a36Sopenharmony_ci                    tcpm_ss_out: endpoint {
8162306a36Sopenharmony_ci                        remote-endpoint = <&usb_ss_phy_in>;
8262306a36Sopenharmony_ci                    };
8362306a36Sopenharmony_ci                };
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci                port@2 {
8662306a36Sopenharmony_ci                    reg = <2>;
8762306a36Sopenharmony_ci                    tcpm_sbu_out: endpoint {
8862306a36Sopenharmony_ci                        remote-endpoint = <&sbu_mux_in>;
8962306a36Sopenharmony_ci                    };
9062306a36Sopenharmony_ci                };
9162306a36Sopenharmony_ci            };
9262306a36Sopenharmony_ci        };
9362306a36Sopenharmony_ci    };
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci    sbu-mux {
9662306a36Sopenharmony_ci        compatible = "pericom,pi3usb102", "gpio-sbu-mux";
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci        enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>;
9962306a36Sopenharmony_ci        select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci        mode-switch;
10262306a36Sopenharmony_ci        orientation-switch;
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci        port {
10562306a36Sopenharmony_ci            sbu_mux_in: endpoint {
10662306a36Sopenharmony_ci                remote-endpoint = <&tcpm_sbu_out>;
10762306a36Sopenharmony_ci            };
10862306a36Sopenharmony_ci        };
10962306a36Sopenharmony_ci    };
11062306a36Sopenharmony_ci...
111