This adds the support for GPIO based USB-C SS data lane muxing.
Signed-off-by: Marco Felsch <[email protected]>
---
.../devicetree/bindings/usb/gpio-sbu-mux.yaml | 82 +++++++++++++++++++---
1 file changed, 71 insertions(+), 11 deletions(-)
diff --git a/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
index bf4b1d016e1f..796f3283ac02 100644
--- a/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
+++ b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
@@ -4,24 +4,26 @@
$id: "http://devicetree.org/schemas/usb/gpio-sbu-mux.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
-title: GPIO-based SBU mux
+title: GPIO-based SS/SBU mux
maintainers:
- Bjorn Andersson <[email protected]>
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.
+ In USB Type-C applications the SS/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
+ oneOf:
+ - items:
+ - enum:
+ - onnn,fsusb43l10x
+ - pericom,pi3usb102
+ - const: gpio-sbu-mux
+ - const: gpio-ss-mux
enable-gpios:
description: Switch enable GPIO
@@ -50,10 +52,18 @@ required:
- compatible
- enable-gpios
- select-gpios
- - mode-switch
- orientation-switch
- port
+if:
+ properties:
+ compatible:
+ contains:
+ const: gpio-sbu-mux
+then:
+ required:
+ - mode-switch
+
additionalProperties: false
examples:
@@ -107,4 +117,54 @@ 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_ss_mux_out: endpoint {
+ remote-endpoint = <&ss_mux_in>;
+ };
+ };
+ };
+ };
+ };
+
+ usb-ss-mux {
+ compatible = "gpio-ss-mux";
+
+ enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>;
+ select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;
+
+ orientation-switch;
+
+ port {
+ ss_mux_in: endpoint {
+ remote-endpoint = <&tcpm_ss_mux_out>;
+ };
+ };
+ };
...
--
2.39.2
On Thu, 04 May 2023 15:46:50 +0200, Marco Felsch wrote:
> This adds the support for GPIO based USB-C SS data lane muxing.
>
> Signed-off-by: Marco Felsch <[email protected]>
> ---
> .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 82 +++++++++++++++++++---
> 1 file changed, 71 insertions(+), 11 deletions(-)
>
My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dts:96.47-98.27: ERROR (duplicate_label): /example-1/tcpm/connector/ports/port@0/endpoint: Duplicate label 'tcpm_hs_out' on /example-1/tcpm/connector/ports/port@0/endpoint and /example-0/tcpm/connector/ports/port@0/endpoint
Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dts:103.47-105.27: ERROR (duplicate_label): /example-1/tcpm/connector/ports/port@1/endpoint: Duplicate label 'tcpm_ss_out' on /example-1/tcpm/connector/ports/port@1/endpoint and /example-0/tcpm/connector/ports/port@1/endpoint
ERROR: Input tree has errors, aborting (use -f to force output)
make[1]: *** [scripts/Makefile.lib:419: Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dtb] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1512: dt_binding_check] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20230504-b4-v6-3-topic-boards-imx8mp-evk-dual-role-usb-v2-1-3889b1b2050c@pengutronix.de
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
On 23-05-04, Rob Herring wrote:
>
> On Thu, 04 May 2023 15:46:50 +0200, Marco Felsch wrote:
> > This adds the support for GPIO based USB-C SS data lane muxing.
> >
> > Signed-off-by: Marco Felsch <[email protected]>
> > ---
> > .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 82 +++++++++++++++++++---
> > 1 file changed, 71 insertions(+), 11 deletions(-)
> >
>
> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> on your patch (DT_CHECKER_FLAGS is new in v5.13):
>
> yamllint warnings/errors:
>
> dtschema/dtc warnings/errors:
> Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dts:96.47-98.27: ERROR (duplicate_label): /example-1/tcpm/connector/ports/port@0/endpoint: Duplicate label 'tcpm_hs_out' on /example-1/tcpm/connector/ports/port@0/endpoint and /example-0/tcpm/connector/ports/port@0/endpoint
> Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dts:103.47-105.27: ERROR (duplicate_label): /example-1/tcpm/connector/ports/port@1/endpoint: Duplicate label 'tcpm_ss_out' on /example-1/tcpm/connector/ports/port@1/endpoint and /example-0/tcpm/connector/ports/port@1/endpoint
> ERROR: Input tree has errors, aborting (use -f to force output)
> make[1]: *** [scripts/Makefile.lib:419: Documentation/devicetree/bindings/usb/gpio-sbu-mux.example.dtb] Error 2
> make[1]: *** Waiting for unfinished jobs....
> make: *** [Makefile:1512: dt_binding_check] Error 2
While adding the example I thought about the need for it. Is it okay for
you if I drop the example since most of it is just copy'n'paste.
Regards,
Marco
On Thu, May 04, 2023 at 03:46:50PM +0200, Marco Felsch wrote:
> This adds the support for GPIO based USB-C SS data lane muxing.
>
> Signed-off-by: Marco Felsch <[email protected]>
> ---
> .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 82 +++++++++++++++++++---
> 1 file changed, 71 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
> index bf4b1d016e1f..796f3283ac02 100644
> --- a/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
> +++ b/Documentation/devicetree/bindings/usb/gpio-sbu-mux.yaml
> @@ -4,24 +4,26 @@
> $id: "http://devicetree.org/schemas/usb/gpio-sbu-mux.yaml#"
> $schema: "http://devicetree.org/meta-schemas/core.yaml#"
>
> -title: GPIO-based SBU mux
> +title: GPIO-based SS/SBU mux
>
> maintainers:
> - Bjorn Andersson <[email protected]>
>
> 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.
> + In USB Type-C applications the SS/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.
Consider whether the mux-control binding would work for this purpose.
Then what controls the muxing can be anything.
>
> properties:
> compatible:
> - items:
> - - enum:
> - - onnn,fsusb43l10x
> - - pericom,pi3usb102
> - - const: gpio-sbu-mux
> + oneOf:
> + - items:
> + - enum:
> + - onnn,fsusb43l10x
> + - pericom,pi3usb102
> + - const: gpio-sbu-mux
> + - const: gpio-ss-mux
>
> enable-gpios:
> description: Switch enable GPIO
> @@ -50,10 +52,18 @@ required:
> - compatible
> - enable-gpios
> - select-gpios
> - - mode-switch
> - orientation-switch
> - port
>
> +if:
> + properties:
> + compatible:
> + contains:
> + const: gpio-sbu-mux
> +then:
> + required:
> + - mode-switch
> +
> additionalProperties: false
>
> examples:
> @@ -107,4 +117,54 @@ 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_ss_mux_out: endpoint {
> + remote-endpoint = <&ss_mux_in>;
> + };
> + };
port@2 already has a defined use for SBU signals. You can't use it.
port@1 corresponds to the SS signals.
> + };
> + };
> + };
> +
> + usb-ss-mux {
> + compatible = "gpio-ss-mux";
> +
> + enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>;
> + select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;
> +
> + orientation-switch;
> +
> + port {
This is a mux device. It needs an output port and N input ports.
Please present a complete picture of your USB-C related h/w. It's hard
to review with just 'I have a GPIO controlling the SS muxing'.
Rob