On Tue, Jan 17, 2023 at 11:56:57AM -0600, Rob Herring wrote: > On Thu, Jan 12, 2023 at 08:11:14PM -0800, Bjorn Andersson wrote: > > From: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > > > > Introduce a binding for GPIO-based mux hardware used for connecting, > > disconnecting and switching orientation of the SBU lines in USB Type-C > > applications. > > > > Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > > Signed-off-by: Bjorn Andersson <quic_bjorande@xxxxxxxxxxx> > > --- > > > > Changes since v1: > > - Expanded the example to indicate how this fits with the TCPM > > - Updated maintainer email address. > > > > .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 110 ++++++++++++++++++ > > 1 file changed, 110 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml > > > > diff --git a/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml > > new file mode 100644 > > index 000000000000..bf4b1d016e1f > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml > > @@ -0,0 +1,110 @@ > > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause > > +%YAML 1.2 > > +--- > > +$id: "http://devicetree.org/schemas/usb/gpio-sbu-mux.yaml#" > > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > > + > > +title: GPIO-based SBU mux > > + > > +maintainers: > > + - Bjorn Andersson <andersson@xxxxxxxxxx> > > + > > +description: > > + In USB Type-C applications the SBU lines needs to be connected, disconnected > > + and swapped depending on the altmode and orientation. This binding describes > > + a family of hardware solutions which switches between these modes using GPIO > > + signals. > > + > > +properties: > > + compatible: > > + items: > > + - enum: > > + - onnn,fsusb43l10x > > + - pericom,pi3usb102 > > + - const: gpio-sbu-mux > > + > > + enable-gpios: > > + description: Switch enable GPIO > > + > > + select-gpios: > > + description: Orientation select > > + > > + vcc-supply: > > + description: power supply > > + > > + mode-switch: > > + description: Flag the port as possible handle of altmode switching > > + type: boolean > > + > > + orientation-switch: > > + description: Flag the port as possible handler of orientation switching > > + type: boolean > > + > > + port: > > + $ref: /schemas/graph.yaml#/properties/port > > + description: > > + A port node to link the SBU mux to a TypeC controller for the purpose of > > + handling altmode muxing and orientation switching. > > + > > +required: > > + - compatible > > + - enable-gpios > > + - select-gpios > > + - mode-switch > > + - orientation-switch > > + - port > > + > > +additionalProperties: false > > + > > +examples: > > + - | > > + #include <dt-bindings/gpio/gpio.h> > > + > > + tcpm { > > + connector { > > + compatible = "usb-c-connector"; > > + > > + ports { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + port@0 { > > + reg = <0>; > > + tcpm_hs_out: endpoint { > > + remote-endpoint = <&usb_hs_phy_in>; > > + }; > > + }; > > + > > + port@1 { > > + reg = <1>; > > + tcpm_ss_out: endpoint { > > + remote-endpoint = <&usb_ss_phy_in>; > > + }; > > + }; > > + > > + port@2 { > > + reg = <2>; > > + tcpm_sbu_out: endpoint { > > + remote-endpoint = <&sbu_mux_in>; > > + }; > > + }; > > + }; > > + }; > > + }; > > + > > + sbu-mux { > > + compatible = "pericom,pi3usb102", "gpio-sbu-mux"; > > + > > + enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>; > > + select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>; > > + > > + mode-switch; > > + orientation-switch; > > + > > + port { > > + sbu_mux_in: endpoint { > > + remote-endpoint = <&tcpm_sbu_out>; > > + }; > > Don't you need a connection to whatever drives SBU? Maybe your case is > fixed because the phy does the DP/USB muxing? But the binding needs to > support the worst case which I guess would be all the muxing/switching > is done by separate board level components. > Perhaps I'm misunderstanding your request, but I think this is the worst case you're talking about. &usb_ss_phy_in is a reference to the PHY, which does switching/muxing of the SuperSpeed lanes in the connector, but the PHY provides no control over the SBU signals. So this sbu-mux is a separate component between the SBU-pads on the SoC and the usb-c-connector, referenced through he &sbu_mux_in reference. So upon e.g. a orientation switch, the typec_switch_set() call the tcpm implementation will request orientation switching from port@1 and port@2 (no orientation-switch on port@0/HS pins). Regards, Bjorn