linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Rob Herring <robh@kernel.org>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	Prashant Malani <pmalani@chromium.org>,
	Stephen Boyd <swboyd@chromium.org>,
	Pin-yen Lin <treapking@chromium.org>
Subject: Re: [PATCH 1/2] dt-bindings: usb: Introduce GPIO-based SBU mux
Date: Wed, 17 Aug 2022 18:00:05 -0500	[thread overview]
Message-ID: <Yv1y9Wjp16CstJvK@baldur> (raw)
In-Reply-To: <20220814210104.GA690892-robh@kernel.org>

On Sun 14 Aug 16:01 CDT 2022, Rob Herring wrote:

> On Thu, Aug 11, 2022 at 12:14:48PM +0300, Krzysztof Kozlowski wrote:
> > On 10/08/2022 23:47, Bjorn Andersson wrote:
> > > 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@linaro.org>
> > > ---
> > >  .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 77 +++++++++++++++++++
> > >  1 file changed, 77 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..7d8aca40c7ca
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
> > > @@ -0,0 +1,77 @@
> > > +# 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 <bjorn.andersson@linaro.org>
> > > +
> > > +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 which perform this based on GPIO controls.
> > 
> > +Cc few folks.
> > 
> > This looks familiar to:
> > 
> > https://lore.kernel.org/linux-devicetree/eaf2fda8-0cd6-b518-10cb-4e21b5f8c909@linaro.org/T/#m39254b7f8970b3e1264f9d1a979557bb46ab162c
> > 
> > Rob and Stephen had several concerns about that approach.
> 
> My overall concern is a bunch of one-off bindings with no one thinking 
> about a variety of USB-C h/w. I need h/w diagrams and corresponding 
> bindings. The key part being more than 1. I'm not all that familiar with 
> the former to help on the bindings.
> 

This is the setup that we're dealing with:

                     +------------- - -
 USB connector       | SoC
 +-+                 |
 | |                 |   +-----+
 |*|<------- HS -----|-->| HS  |
 |*|<------- HS -----|-->| phy |<-+   +--------+
 | |                 |   +-----+   \->|        |
 | |                 |                |  dwc3  |
 | |                 |   +-----+   /->|        |
 |*|<------- SS -----|-->|     |<-+   +--------+
 |*|<------- SS -----|-->| QMP |
 |*|<------- SS -----|-->| phy |
 |*|<------- SS -----|-->|     |<-\   +------------+
 | |                 |   +-----+   \->|            |
 | |                 |                |     DP     |
 | |    +-----+      |                | controller |
 |*|<-->| SBU |<-----|--------------->|            |
 |*|<-->| mux |<-----|--------------->|            |
 | |    +----+       |                +------------+
 +-+                 |
                     +------------- - -

The dwc3 controller is connected to the HS phy for HighSpeed signals and
QMP phy to be muxed out on 0, 2 or 4 of the SuperSpeed pins (for
DP-only, USB/DP combo or USB-only mode).

The DisplayPort controller is connected to the same QMP phy, for and is
muxed onto the same 0, 2 or 4 of the SuperSpeed pins (for USB-only,
USB/DP combo or DP-only mode).

The SuperSpeed pins can be switched around within the QMP phy, to handle
the case where the USB Type-C cable is flipped around.


The AUX pins of the DP controller are connected to the SBU pins in the
connector. These signals needs to be disconnected while DP mode is not
negotiated with the remote. The DP controller does not support swapping
the two lines.
The disconnecting and swapping thereby needs to be performed by an
external entity. For which we have a few examples already, such as
fcs,fsa4480.

Lastly, in USB Power Delivery, the hot-plug signal found in a physical
DisplayPort or HDMI cable is communicated as a message. So the USB
Type-C controller must be able to pass this onto the DP controller.


I model the usb-c-connector as a child of the USB Type-C controller,
with the following representation of the connections:

connector {
  compatible = "usb-c-connector";

  ports {
    port@0 {
      reg = <0>;
      endpoint {
        remote-endpoint = <&dwc3>;
      };
    };

    port@1 {
      reg = <1>;
      endpoint@0 {
        reg = <0>;
        remote-endpoint = <&qmp_phy>;
      };
      endpoint@1 {
        reg = <1>;
        remote-endpoint = <&dp_controller>;
    };

    port@2 {
      reg = <2>;
      endpoint {
        remote-endpoint = <&sbu_mux>;
      };
    };
  };
};

This allows the USB Type-C controller to:
1) Perform USB role switching in the dwc3 on port@0
2) Orientation and muxing of the SuperSpeed lines in the QMP phy on
   port@1:0, implement a drm_bridge for signalling HPD back to the DP
   controller on port@1:1
3) Orientation and muxing (connecting/disconnecting) the SBU/AUX lines
   in the SBU mux on port@2.

The SBU mux in several of these designs is a component that takes a
power supply and two GPIOs, for enabling/disabling the connection and
flip the switch (which is used to swap the lines).

I hope this helps with the bigger picture.

Regards,
Bjorn

  reply	other threads:[~2022-08-17 23:00 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-10 20:47 [PATCH 0/2] usb: typec: mux: GPIO-based SBU mux Bjorn Andersson
2022-08-10 20:47 ` [PATCH 1/2] dt-bindings: usb: Introduce " Bjorn Andersson
2022-08-11  9:14   ` Krzysztof Kozlowski
2022-08-14 21:01     ` Rob Herring
2022-08-17 23:00       ` Bjorn Andersson [this message]
2022-08-19  1:09         ` Stephen Boyd
2022-08-19 20:14           ` Prashant Malani
2022-08-19 20:49             ` Stephen Boyd
2022-08-19 21:39               ` Bjorn Andersson
2022-08-19 22:18                 ` Prashant Malani
2022-08-20  4:04                   ` Bjorn Andersson
2022-08-23 18:21                     ` Prashant Malani
2022-08-19 22:00             ` Bjorn Andersson
2022-08-19 22:55               ` Prashant Malani
2022-08-20  4:09                 ` Bjorn Andersson
2022-08-23 18:54                   ` Prashant Malani
2022-08-26  3:02                     ` Bjorn Andersson
2022-08-19 21:26           ` Bjorn Andersson
2022-08-20  3:51             ` Stephen Boyd
2022-08-20  4:56               ` Bjorn Andersson
2022-08-26  1:49                 ` Stephen Boyd
2022-08-10 20:47 ` [PATCH 2/2] usb: typec: mux: " Bjorn Andersson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yv1y9Wjp16CstJvK@baldur \
    --to=bjorn.andersson@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=pmalani@chromium.org \
    --cc=robh@kernel.org \
    --cc=swboyd@chromium.org \
    --cc=treapking@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).