| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| # Copyright (c) 2020 MediaTek |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/usb/mediatek,mtu3.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: MediaTek USB3 DRD Controller Device Tree Bindings |
| |
| maintainers: |
| - Chunfeng Yun <chunfeng.yun@mediatek.com> |
| |
| allOf: |
| - $ref: "usb-drd.yaml" |
| |
| description: | |
| The DRD controller has a glue layer IPPC (IP Port Control), and its host is |
| based on xHCI. |
| |
| properties: |
| compatible: |
| items: |
| - enum: |
| - mediatek,mt2712-mtu3 |
| - mediatek,mt8173-mtu3 |
| - mediatek,mt8183-mtu3 |
| - mediatek,mt8192-mtu3 |
| - const: mediatek,mtu3 |
| |
| reg: |
| items: |
| - description: the registers of device MAC |
| - description: the registers of IP Port Control |
| |
| reg-names: |
| items: |
| - const: mac |
| - const: ippc |
| |
| interrupts: |
| description: |
| use "interrupts-extended" when the interrupts are connected to the |
| separate interrupt controllers |
| minItems: 1 |
| items: |
| - description: SSUSB device controller interrupt |
| - description: optional, wakeup interrupt used to support runtime PM |
| |
| interrupt-names: |
| items: |
| - const: device |
| - const: wakeup |
| |
| power-domains: |
| description: A phandle to USB power domain node to control USB's MTCMOS |
| maxItems: 1 |
| |
| clocks: |
| minItems: 1 |
| items: |
| - description: Controller clock used by normal mode |
| - description: Reference clock used by low power mode etc |
| - description: Mcu bus clock for register access |
| - description: DMA bus clock for data transfer |
| |
| clock-names: |
| minItems: 1 |
| items: |
| - const: sys_ck # required, others are optional |
| - const: ref_ck |
| - const: mcu_ck |
| - const: dma_ck |
| |
| phys: |
| description: |
| List of all the USB PHYs used, it's better to keep the sequence |
| as the hardware layout. |
| minItems: 1 |
| items: |
| - description: USB2/HS PHY # required, others are optional |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY # the following for backward compatible |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| |
| vusb33-supply: |
| description: Regulator of USB AVDD3.3v |
| |
| vbus-supply: |
| deprecated: true |
| description: | |
| Regulator of USB VBUS5v, needed when supports dual-role mode. |
| Particularly, if use an output GPIO to control a VBUS regulator, should |
| model it as a regulator. See bindings/regulator/fixed-regulator.yaml |
| It's considered valid for compatibility reasons, not allowed for |
| new bindings, and put into a usb-connector node. |
| |
| dr_mode: |
| enum: [host, peripheral, otg] |
| default: otg |
| |
| maximum-speed: |
| enum: [super-speed-plus, super-speed, high-speed, full-speed] |
| |
| "#address-cells": |
| enum: [1, 2] |
| |
| "#size-cells": |
| enum: [1, 2] |
| |
| ranges: true |
| |
| extcon: |
| deprecated: true |
| description: | |
| Phandle to the extcon device detecting the IDDIG state, needed |
| when supports dual-role mode. |
| It's considered valid for compatibility reasons, not allowed for |
| new bindings, and use "usb-role-switch" property instead. |
| |
| usb-role-switch: |
| $ref: /schemas/types.yaml#/definitions/flag |
| description: Support role switch. |
| type: boolean |
| |
| role-switch-default-mode: |
| enum: [host, peripheral] |
| default: host |
| |
| connector: |
| $ref: /connector/usb-connector.yaml# |
| description: |
| Connector for dual role switch, especially for "gpio-usb-b-connector" |
| type: object |
| |
| port: |
| description: |
| Any connector to the data bus of this controller should be modelled |
| using the OF graph bindings specified, if the "usb-role-switch" |
| property is used. See graph.txt |
| $ref: /schemas/graph.yaml#/properties/port |
| |
| enable-manual-drd: |
| $ref: /schemas/types.yaml#/definitions/flag |
| description: |
| supports manual dual-role switch via debugfs; usually used when |
| receptacle is TYPE-A and also wants to support dual-role mode. |
| type: boolean |
| |
| wakeup-source: |
| description: enable USB remote wakeup, see power/wakeup-source.txt |
| type: boolean |
| |
| mediatek,syscon-wakeup: |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| maxItems: 1 |
| description: |
| A phandle to syscon used to access the register of the USB wakeup glue |
| layer between xHCI and SPM, the field should always be 3 cells long. |
| items: |
| items: |
| - description: |
| The first cell represents a phandle to syscon |
| - description: |
| The second cell represents the register base address of the glue |
| layer in syscon |
| - description: | |
| The third cell represents the hardware version of the glue layer, |
| 1 - used by mt8173 etc, revision 1 without following IPM rule; |
| 2 - used by mt2712 etc, revision 2 with following IPM rule; |
| 101 - used by mt8183, specific 1.01; |
| 102 - used by mt8192, specific 1.02; |
| enum: [1, 2, 101, 102] |
| |
| mediatek,u3p-dis-msk: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: The mask to disable u3ports, bit0 for u3port0, |
| bit1 for u3port1, ... etc |
| |
| mediatek,u2p-dis-msk: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: The mask to disable u2ports, bit0 for u2port0, |
| bit1 for u2port1, ... etc; but can't disable u2port0 if dual role mode |
| is enabled, so will be skipped in this case. |
| |
| # Required child node when support dual-role |
| patternProperties: |
| "^usb@[0-9a-f]+$": |
| type: object |
| $ref: /usb/mediatek,mtk-xhci.yaml# |
| description: |
| The xhci should be added as subnode to mtu3 as shown in the following |
| example if the host mode is enabled. |
| |
| dependencies: |
| connector: [ 'usb-role-switch' ] |
| port: [ 'usb-role-switch' ] |
| role-switch-default-mode: [ 'usb-role-switch' ] |
| wakeup-source: [ 'mediatek,syscon-wakeup' ] |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - interrupts |
| - clocks |
| - clock-names |
| |
| additionalProperties: false |
| |
| examples: |
| # Dual role switch by extcon |
| - | |
| #include <dt-bindings/clock/mt8173-clk.h> |
| #include <dt-bindings/interrupt-controller/arm-gic.h> |
| #include <dt-bindings/interrupt-controller/irq.h> |
| #include <dt-bindings/phy/phy.h> |
| #include <dt-bindings/power/mt8173-power.h> |
| |
| usb@11271000 { |
| compatible = "mediatek,mt8173-mtu3", "mediatek,mtu3"; |
| reg = <0x11271000 0x3000>, <0x11280700 0x0100>; |
| reg-names = "mac", "ippc"; |
| interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_LOW>; |
| phys = <&phy_port0 PHY_TYPE_USB3>, <&phy_port1 PHY_TYPE_USB2>; |
| power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; |
| clocks = <&topckgen CLK_TOP_USB30_SEL>; |
| clock-names = "sys_ck"; |
| vusb33-supply = <&mt6397_vusb_reg>; |
| vbus-supply = <&usb_p0_vbus>; |
| extcon = <&extcon_usb>; |
| dr_mode = "otg"; |
| wakeup-source; |
| mediatek,syscon-wakeup = <&pericfg 0x400 1>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| xhci: usb@11270000 { |
| compatible = "mediatek,mt8173-xhci", "mediatek,mtk-xhci"; |
| reg = <0x11270000 0x1000>; |
| reg-names = "mac"; |
| interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>; |
| power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; |
| clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; |
| clock-names = "sys_ck", "ref_ck"; |
| vusb33-supply = <&mt6397_vusb_reg>; |
| }; |
| }; |
| |
| # Dual role switch by gpio-usb-b-connector |
| - | |
| #include <dt-bindings/gpio/gpio.h> |
| #include <dt-bindings/power/mt2712-power.h> |
| |
| usb@112c1000 { |
| compatible = "mediatek,mt2712-mtu3", "mediatek,mtu3"; |
| reg = <0x112c1000 0x3000>, <0x112d0700 0x0100>; |
| reg-names = "mac", "ippc"; |
| interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_LOW>; |
| phys = <&u2port2 PHY_TYPE_USB2>; |
| power-domains = <&scpsys MT2712_POWER_DOMAIN_USB2>; |
| clocks = <&topckgen CLK_TOP_USB30_SEL>; |
| clock-names = "sys_ck"; |
| dr_mode = "otg"; |
| usb-role-switch; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| host0: usb@11270000 { |
| compatible = "mediatek,mt2712-xhci", "mediatek,mtk-xhci"; |
| reg = <0x11270000 0x1000>; |
| reg-names = "mac"; |
| interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_LOW>; |
| power-domains = <&scpsys MT2712_POWER_DOMAIN_USB>; |
| clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; |
| clock-names = "sys_ck", "ref_ck"; |
| }; |
| |
| connector { |
| compatible = "gpio-usb-b-connector", "usb-b-connector"; |
| type = "micro"; |
| id-gpios = <&pio 12 GPIO_ACTIVE_HIGH>; |
| vbus-supply = <&usb_p0_vbus>; |
| }; |
| }; |
| |
| # Dual role switch with type-c |
| - | |
| usb@11201000 { |
| compatible ="mediatek,mt8183-mtu3", "mediatek,mtu3"; |
| reg = <0x11201000 0x2e00>, <0x11203e00 0x0100>; |
| reg-names = "mac", "ippc"; |
| interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_LOW>; |
| phys = <&u2port0 PHY_TYPE_USB2>; |
| clocks = <&clk26m>; |
| clock-names = "sys_ck"; |
| mediatek,syscon-wakeup = <&pericfg 0x400 1>; |
| wakeup-source; |
| dr_mode = "otg"; |
| usb-role-switch; |
| role-switch-default-mode = "host"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| host: usb@11200000 { |
| compatible = "mediatek,mt8183-xhci", "mediatek,mtk-xhci"; |
| reg = <0x11200000 0x1000>; |
| reg-names = "mac"; |
| interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_LOW>; |
| clocks = <&clk26m>; |
| clock-names = "sys_ck"; |
| }; |
| |
| port { |
| usb_role_sw: endpoint { |
| remote-endpoint = <&hs_ep>; |
| }; |
| }; |
| }; |
| |
| ... |