diff mbox series

[v7] dt-bindings: usb: add documentation for typec switch simple driver

Message ID 1607913744-27217-1-git-send-email-jun.li@nxp.com
State New
Headers show
Series [v7] dt-bindings: usb: add documentation for typec switch simple driver | expand

Commit Message

Jun Li Dec. 14, 2020, 2:42 a.m. UTC
Some platforms need a simple driver to do some controls according to
typec orientation, this can be extended to be a generic driver with
compatible with "typec-orientation-switch".

Signed-off-by: Li Jun <jun.li@nxp.com>
---
change for v7:
- Use existing mux control binding node for actual typec switch
  control, and new typec-orientation-switch as the consumer of
  it to provide typec_switch for typec subsystem, this way typec
  switch can use any existing mux control bindings and no need
  change current common typec switch interface.
- Only send this binding patch for v7, will send out drivers
  changes after binding finalized.

changes for v6:
- Use general mux bindings for typec switch, one typec switch
  may have 1 or 2 GPIOs for channel selection, if 1 GPIO, only
  can be used to select cc1 or cc2; if 2 GPIOs, the second GPIO
  can be used to deselect both channels or keep normal operations.
- Add one more connection to usb controller.

No changes for v5.

changes on v4:
- Use compatible instead of bool property for switch matching.
- Change switch GPIO to be switch simple.
- Change the active channel selection GPIO to be optional.

previous discussion:
http://patchwork.ozlabs.org/patch/1054342/

 .../bindings/usb/typec-switch-simple.yaml          | 113 +++++++++++++++++++++
 1 file changed, 113 insertions(+)
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/usb/typec-switch-simple.yaml b/Documentation/devicetree/bindings/usb/typec-switch-simple.yaml
new file mode 100644
index 0000000..ae1ef87
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/typec-switch-simple.yaml
@@ -0,0 +1,113 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/typec-switch-simple.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Typec Orientation Switch Simple Solution Bindings
+
+maintainers:
+  - Li Jun <jun.li@nxp.com>
+
+description: -|
+  USB SuperSpeed (SS) lanes routing to which side of typec connector is
+  decided by orientation, this maybe achieved by some simple control like
+  GPIO toggle. This control is through a mux controller, so there are 2
+  nodes, one is the mux control provider(e.g. gpio-mux), the other one is
+  the typec-orientation-switch node as the consumer of mux control.
+
+properties:
+  compatible:
+    const: typec-orientation-switch
+
+  mux-controls:
+    description: -|
+      Phandle to mux controller node, the mux controller node see
+      Documentation/devicetree/bindings/mux/mux-controller.txt,
+      we have the fixed state of 0 for CC1, and fixed state 1 for
+      CC2.
+
+  mux-control-names:
+    const: mux-typec-switch
+
+  port:
+    type: object
+    additionalProperties: false
+    description: -|
+      Connection to the remote endpoint using OF graph bindings that model
+      SS data bus to typec connector.
+
+    properties:
+      '#address-cells':
+        const: 1
+
+      '#size-cells':
+        const: 0
+
+      endpoint@0:
+        type: object
+        description: Endpoint connected to typec connector.
+        additionalProperties: false
+
+        properties:
+          reg:
+            const: 0
+          remote-endpoint: true
+
+        required:
+          - remote-endpoint
+
+      endpoint@1:
+        type: object
+        description: Endpoint connected to usb controller.
+        additionalProperties: false
+
+        properties:
+          reg:
+            const: 1
+          remote-endpoint: true
+
+        required:
+          - remote-endpoint
+
+    required:
+      - endpoint@0
+
+required:
+  - compatible
+  - port
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    mux: mux-controller {
+        #mux-control-cells = <0>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&pinctrl_ss_sel>;
+        mux-gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>,
+                    <&gpio2 20 GPIO_ACTIVE_HIGH>;
+        idle-state = <2>;
+    };
+
+    typec_switch {
+        compatible = "typec-orientation-switch";
+        mux-controls = <&mux>;
+        mux-control-names = "mux-typec-switch";
+
+        port {
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                usb3_orien_sel: endpoint@0 {
+                        reg = <0>;
+                        remote-endpoint = <&typec_con_ss>;
+                };
+
+                usb3_con_data: endpoint@1 {
+                        reg = <1>;
+                        remote-endpoint = <&dwc3_0>;
+                };
+        };
+    };