Rockchip RK3588 kernel dts解析之USB模塊_loitawu

Rockchip RK3588 kernel dts解析之USB模塊

文章目錄

Rockchip RK3588 kernel dts解析之USB模塊RK3588 USB DTS 配置USB 芯片級 DTSI 配置Type-C USB 3.1/DP 全功能 DTS 配置Type-C to Type-A USB 3.1/DP DTS 配置Type-C to Type-A USB 2.0/DP DTS 配置Type-C USB 2.0 only DTS 配置Type-A USB 3.1 DTS 配置Type-A USB 2.0 DTS 配置
RK3588 支持 5 個獨立的 USB 控制器,包括:2 個 USB 2.0 HOST 控制器,2 個 USB 3.1 OTG 控制器,1 個 USB 3.1 HOST 控制器。RK3588S 相比 RK3588 少了 1 個 USB 3.1 OTG 控制器。USB 控制器的具體類型如下表 1 所示,如果要了解更詳細的 USB 控制器特性,請參考 RK3588 datasheet。

表 1 RK3588 USB 控制器列表

芯片/控制器USB 2.0 HOST (EHCI&OHCI)USB 3.1 OTG (DWC3&xHCI)USB 3.1 Host(xHCI)
RK3588221
RK3588S211

RK3588 支持 7 個獨立的 USB PHY,包括:4 個 USB 2.0 PHY,2 個 USB 3.1/DP Combo PHY,1 個 USB 3.1/SATA/PCIe Combo PHY。RK3588S 相比 RK3588 少了 1 個 USB 2.0 PHY 和 1 個 USB 3.1/DP Combo PHY。

RK3588 USB DTS 配置

RK3588 USB DTS 配置,包括:芯片級 USB 控制器/PHY DTSI 配置和板級 DTS 配置。

詳細配置方法,請參考內核文檔:

    kernel/Documentation/devicetree/bindings/usb/snps,dwc3.yamlkernel/Documentation/devicetree/bindings/usb/generic-ohci.yamlkernel/Documentation/devicetree/bindings/usb/generic-ehci.yamlkernel/Documentation/devicetree/bindings/connector/usb-connector.yamlkernel/Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yamlkernel/Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yamlkernel/Documentation/devicetree/bindings/phy/phy/phy-rockchip-naneng-combphy.txt

USB 芯片級 DTSI 配置

RK3588 DTSI 文件中 USB 控制器和 PHY 相關的主要節點如下所示,因為 USB DTSI 節點配置的是 USB 控制器和 PHY 的公共資源和屬性,建議開發者不要改動。

USB 3.1 OTG0、USB 2.0 HOST0/1、USB 3.1 HOST2 的 DTSI配置放在 rk3588s-evb.dtsi

USB 3.1 OTG1 的 DTSI 配置放在 rk3588-evb.dts

對應的 DTSI 完整路徑如下:

arch/arm64/boot/dts/rockchip/rk3588s.dtsi

arch/arm64/boot/dts/rockchip/rk3588.dtsi

Note:

RK3588/RK3588S 的所有 USB 控制器和 PHY,在 rk3588s-evb.dtsi 和 rk3588-evb.dtsi 中,全部配置為 status = “okay”,如果產品的板級 DTS 文件有 include 這兩個 EVB DTSI 文件,則只需要在板級 DTS 文件中,將不使用的 USB 節點配置為 “disabled” 即可。

USB 接口和 USB DTS 節點的對應關系如下表 16 所示。

表 16 RK3588 USB 接口和 USB DTS 節點的對應關系

USB 接口名稱(原理圖)USB 控制器 DTS 節點USB PHY DTS 節點
TYPEC0usbdrd3_0
usbdrd_dwc3_0
u2phy0
u2phy0_otg
usbdp_phy0
usbdp_phy0_u3
TYPEC1usbdrd3_1
usbdrd_dwc3_1
u2phy1
u2phy1_otg
usbdp_phy1
usbdp_phy1_u3
USB20_HOST0usb_host0_ehci
usb_host0_ohci
u2phy2
u2phy2_host
USB20_HOST1usb_host1_ehci
usb_host1_ohci
u2phy3
u2phy3_host
USB30_2usbhost3_0
usbhost_dwc3_0
combphy2_psu

USB 控制器 DTSI 節點如下:

#USB3.1 OTG0 Controllerusbdrd3_0: usbdrd3_0 {        compatible = "rockchip,rk3588-dwc3", "rockchip,rk3399-dwc3";        ......        usbdrd_dwc3_0: usb@fc000000 {                compatible = "snps,dwc3";                ......        };};#USB2.0 HOST0 Controllerusb_host0_ehci: usb@fc800000 {        compatible = "generic-ehci";        ......};usb_host0_ohci: usb@fc840000 {        compatible = "generic-ohci";        ......};#USB2.0 HOST1 Controllerusb_host1_ehci: usb@fc880000 {        compatible = "generic-ehci";        ......};usb_host1_ohci: usb@fc8c0000 {        compatible = "generic-ohci";        ......};#USB3.1 HOST2 Controllerusbhost3_0: usbhost3_0 {        compatible = "rockchip,rk3588-dwc3", "rockchip,rk3399-dwc3";        ......        usbhost_dwc3_0: usb@fcd00000 {                compatible = "snps,dwc3";                ......        };};#USB3.1 OTG1 Controllerusbdrd3_1: usbdrd3_1 {        compatible = "rockchip,rk3588-dwc3", "rockchip,rk3399-dwc3";        ......        usbdrd_dwc3_1: usb@fc400000 {                compatible = "snps,dwc3";                ......        };};

USB PHY DTSI 節點如下:

注意:USB PHY 和 USB 控制器具有一一對應的關系,需要成對配置。在芯片內部,USB PHY 和 控制器的連接關系,請參考 [RK3588 USB 控制器和 PHY 簡介](#RK3588 USB 控制器和 PHY 簡介)的圖 1 和 表 16。在DTSI 節點中,通過 USB 控制器節點的 “phys” 屬性關聯對應的 USB PHY。

#USB2.0 PHY0usb2phy0_grf: syscon@fd5d0000 {                compatible = "rockchip,rk3588-usb2phy-grf", "syscon",                             "simple-mfd";                ......                u2phy0: usb2-phy@0 {                        compatible = "rockchip,rk3588-usb2phy";                        ......                        u2phy0_otg: otg-port {                                #phy-cells = <0>;                                status = "disabled";                        };                };        };#USB2.0 PHY1usb2phy1_grf: syscon@fd5d4000 {    ......};#USB2.0 PHY2usb2phy2_grf: syscon@fd5d8000 {    ......};#USB2.0 PHY3usb2phy3_grf: syscon@fd5dc000 {    ......};#USB3.1/DP Combo PHY0usbdp_phy0: phy@fed80000 {        compatible = "rockchip,rk3588-usbdp-phy";        ......        usbdp_phy0_dp: dp-port {                #phy-cells = <0>;                status = "disabled";        };        usbdp_phy0_u3: u3-port {                #phy-cells = <0>;                status = "disabled";        };};#USB3.1/DP Combo PHY1usbdp_phy1: phy@fed90000 {    ......};#USB3.1/SATA/PCIe PHY2combphy2_psu: phy@fee20000 {        compatible = "rockchip,rk3588-naneng-combphy";        ......};

Type-C USB 3.1/DP 全功能 DTS 配置

參考 arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4.dtsi Type-C0 接口的 DTS 配置。

#USB2.0 PHY配置屬性"rockchip,typec-vbus-det",表示支持Type-C VBUS_DET常拉高的硬件設計&u2phy0_otg {        rockchip,typec-vbus-det;};#USB3.1/DP PHY0,需要根據硬件設計,配置屬性"sbu1-dc-gpios"和"sbu2-dc-gpios"&usbdp_phy0 {        orientation-switch;        svid = <0xff01>;        sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;        sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;        port {                #address-cells = <1>;                #size-cells = <0>;                usbdp_phy0_orientation_switch: endpoint@0 {                        reg = <0>;                        remote-endpoint = <&usbc0_orien_sw>;                };                usbdp_phy0_dp_altmode_mux: endpoint@1 {                        reg = <1>;                        remote-endpoint = <&dp_altmode_mux>;                };        };};#USB3.1 OTG0 Controller&usbdrd_dwc3_0 {        dr_mode = "otg";        usb-role-switch;        port {                #address-cells = <1>;                #size-cells = <0>;                dwc3_0_role_switch: endpoint@0 {                        reg = <0>;                        remote-endpoint = <&usbc0_role_sw>;                };        };};#VBUS GPIO配置,在Type-C控制器芯片驅動中控制該GPIOvbus5v0_typec: vbus5v0-typec {        compatible = "regulator-fixed";        regulator-name = "vbus5v0_typec";        regulator-min-microvolt = <5000000>;        regulator-max-microvolt = <5000000>;        enable-active-high;        gpio = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;        vin-supply = <&vcc5v0_usb>;        pinctrl-names = "default";        pinctrl-0 = <&typec5v_pwren>;};#配置外置Type-C控制器芯片FUSB302#需要根據實際的硬件設計,配置"I2C/interrupts/vbus-supply/usb_con"的屬性&i2c2 {        status = "okay";        usbc0: fusb302@22 {                compatible = "fcs,fusb302";                reg = <0x22>;                interrupt-parent = <&gpio3>;                interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;                pinctrl-names = "default";                pinctrl-0 = <&usbc0_int>;                vbus-supply = <&vbus5v0_typec>;                status = "okay";                ports {                        #address-cells = <1>;                        #size-cells = <0>;                        port@0 {                                reg = <0>;                                usbc0_role_sw: endpoint@0 {                                        remote-endpoint = <&dwc3_0_role_switch>;                                };                        };                };                usb_con: connector {                        compatible = "usb-c-connector";                        label = "USB-C";                        data-role = "dual";                        power-role = "dual";                        try-power-role = "sink";                        op-sink-microwatt = <1000000>;                        sink-pdos =                                <PDO_FIXED(5000, 1000, PDO_FIXED_USB_COMM)>;                        source-pdos =                                <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;                        altmodes {                                #address-cells = <1>;                                #size-cells = <0>;                                altmode@0 {                                        reg = <0>;                                        svid = <0xff01>;                                        vdo = <0xffffffff>;                                };                        };                        ports {                        	......                        };                };        };

Note:

如果使用 HUSB311 芯片替換 FUSB302 芯片,只需要基于 FUSB302 的 DTS 配置進行簡單修改即可,參考修改:

#配置外置Type-C控制器芯片HUSB311&i2c2 {        usbc0: husb311@4e {                compatible = "hynetek,husb311";                reg = <0x4e>;                ......        };};

Type-C to Type-A USB 3.1/DP DTS 配置

參考 arch/arm64/boot/dts/rockchip/rk3588-evb2-lp4.dtsi Type-C0 to Type-A USB 3.1/DP 的 DTS 配置。

#USB2.0 PHY0配置"phy-supply"屬性,用于控制VBUS輸出5V#注意:使用phy-supply,無法實現VBUS的動態開關。如果OTG獨占GPIO,不與其他HOST共用,并且OTG需要支持Device/HOST,則應該配置為"vbus-supply = <&vcc5v0_otg>",才能實現VBUS動態開關。&u2phy0_otg {        phy-supply = <&vcc5v0_host>;};#VBUS GPIO配置,在USB2.0 PHY驅動中控制該GPIOvcc5v0_host: vcc5v0-host {        compatible = "regulator-fixed";        regulator-name = "vcc5v0_host";        regulator-boot-on;        regulator-always-on;        regulator-min-microvolt = <5000000>;        regulator-max-microvolt = <5000000>;        enable-active-high;        gpio = <&gpio4 RK_PA1 GPIO_ACTIVE_HIGH>;        vin-supply = <&vcc5v0_usb>;        pinctrl-names = "default";        pinctrl-0 = <&vcc5v0_host_en>;};#USB3.1/DP PHY0,只需配置DP使用lane2/3,驅動會自動分配lane0/1給USB3.1 Rx/Tx#如果硬件設計DP使用lane0/1,則此處應配置"rockchip,dp-lane-mux = <0 1>"&usbdp_phy0 {        rockchip,dp-lane-mux = <2 3>;};#USB3.1 OTG0 Controller#配置"dr_mode"為"otg",同時配置"extcon"屬性,才能支持軟件切換Device/Host mode&usbdrd_dwc3_0 {        dr_mode = "otg";        extcon = <&u2phy0>;        status = "okay";};

Type-C to Type-A USB 2.0/DP DTS 配置

參考 arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi Type-C1 to Type-A USB 2.0/DP 的 DTS 配置。

#USB2.0 PHY1配置"phy-supply"屬性,用于控制VBUS輸出5V&u2phy1_otg {        phy-supply = <&vcc5v0_host>;        status = "okay";};#VBUS GPIO配置,在USB2.0 PHY驅動中控制該GPIOvcc5v0_host: vcc5v0-host-regulator {        compatible = "regulator-fixed";        regulator-name = "vcc5v0_host";        regulator-boot-on;        regulator-always-on;        regulator-min-microvolt = <5000000>;        regulator-max-microvolt = <5000000>;        enable-active-high;        gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;        vin-supply = <&vcc5v0_sys>;        pinctrl-names = "default";        pinctrl-0 = <&vcc5v0_host_en>;};#USB3.1/DP PHY1,配置DP使用lane0/1/2/3#需要根據實際的硬件設計,配置屬性"rockchip,dp-lane-mux"&usbdp_phy1 {        rockchip,dp-lane-mux = < 0 1 2 3 >;        status = "okay";};&usbdp_phy1_dp {        status = "okay";};#配置屬性"maximum-speed",通知USBDP驅動將USB限制為USB2.0 only&usbdp_phy1_u3 {        maximum-speed = "high-speed";        status = "okay";};#配置屬性"maximum-speed",通知DWC3驅動將USB限制為USB2.0 only&usbdrd_dwc3_1 {        dr_mode = "host";        maximum-speed = "high-speed";        status = "okay";};

Type-C USB 2.0 only DTS 配置

配置1. 硬件電路帶外置 Type-C 控制器芯片,支持 PD

參考 arch/arm64/boot/dts/rockchip/rk3588s-tablet-rk806-single.dtsi Type-C0 USB 2.0 OTG 的 DTS 配置

#USB2.0 PHY0注冊typec orientation switch,用于與TCPM子系統交互,獲取USB熱拔插的信息&u2phy0 {        orientation-switch;        status = "okay";        port {                #address-cells = <1>;                #size-cells = <0>;                u2phy0_orientation_switch: endpoint@0 {                        reg = <0>;                        remote-endpoint = <&usbc0_orien_sw>;                };        };};#USB2.0 PHY0 OTG配置#配置屬性"rockchip,sel-pipe-phystatus",表示選擇GRF控制pipe phystatus,替代USBDP PHY的控制#配置屬性"rockchip,typec-vbus-det",表示支持Type-C VBUS_DET常拉高的硬件設計&u2phy0_otg {        rockchip,sel-pipe-phystatus;        rockchip,typec-vbus-det;        status = "okay";};#disable USBDP PHY0的所有相關節點,讓USBDP PHY0處于未初始化狀態,達到最低功耗的目的&usbdp_phy0 {        status = "disabled";};&usbdp_phy0_dp {        status = "disabled";};&usbdp_phy0_u3 {        status = "disabled";};&dp0 {        status = "disabled";};#配置USB3.1 OTG0 Controller#配置"phys = <&u2phy0_otg>",即不引用USBDP PHY#配置maximum-speed = "high-speed",通知DWC3驅動將USB限制為USB2.0 only&usbdrd3_0 {        status = "okay";}&usbdrd_dwc3_0 {        dr_mode = "otg";        status = "okay";        maximum-speed = "high-speed";        phys = <&u2phy0_otg>;        phy-names = "usb2-phy";        usb-role-switch;        port {                #address-cells = <1>;                #size-cells = <0>;                dwc3_0_role_switch: endpoint@0 {                        reg = <0>;                        remote-endpoint = <&usbc0_role_sw>;                };        };};#配置外置Type-C控制器芯片FUSB302#需要根據實際的硬件設計,配置"I2C/interrupts/vbus-supply/usb_con"的屬性#需要配置usbc0_orien_sw的屬性remote-endpoint = <&u2phy0_orientation_switch>&i2c8 {        status = "okay";        pinctrl-names = "default";        pinctrl-0 = <&i2c8m2_xfer>;        usbc0: fusb302@22 {                compatible = "fcs,fusb302";                reg = <0x22>;                interrupt-parent = <&gpio0>;                interrupts = <RK_PC4 IRQ_TYPE_LEVEL_LOW>;                pinctrl-names = "default";                pinctrl-0 = <&usbc0_int>;                vbus-supply = <&vbus5v0_typec>;                status = "okay";                ports {                        #address-cells = <1>;                        #size-cells = <0>;                        port@0 {                                reg = <0>;                                usbc0_role_sw: endpoint@0 {                                        remote-endpoint = <&dwc3_0_role_switch>;                                };                        };                };                usb_con: connector {                        compatible = "usb-c-connector";                        label = "USB-C";                        data-role = "dual";                        power-role = "dual";                        ......						ports {                                #address-cells = <1>;                                #size-cells = <0>;                                port@0 {                                        reg = <0>;                                        usbc0_orien_sw: endpoint {                                                remote-endpoint = <&u2phy0_orientation_switch>;                                        };                                };                        };                };        };

配置2. 硬件電路不帶外置 Type-C 控制器芯片,支持 Device only

參考 arch/arm64/boot/dts/rockchip/rk3588-evb6-lp4.dtsi Type-C0 USB 2.0 Device 的 DTS 配置

#disable USBDP PHY0的所有相關節點,讓USBDP PHY0處于未初始化狀態,達到最低功耗的目的&usbdp_phy0 {        status = "disabled";};&usbdp_phy0_dp {        status = "disabled";};&usbdp_phy0_u3 {        status = "disabled";}#配置USB3.1 OTG0 Controller#配置dr_mode = "peripheral",通知DWC3驅動初始化為Device only mode#配置"phys = <&u2phy0_otg>",即不引用USBDP PHY#配置maximum-speed = "high-speed",通知DWC3驅動將USB限制為USB2.0 only&usbdrd_dwc3_0 {        dr_mode = "peripheral";        phys = <&u2phy0_otg>;        phy-names = "usb2-phy";        maximum-speed = "high-speed";};

配置3. 硬件電路不帶外置 Type-C 控制器芯片,支持 OTG(需要增加 CC to ID 電平轉換電路

#disable USBDP PHY0的所有相關節點,讓USBDP PHY0處于未初始化狀態,達到最低功耗的目的&usbdp_phy0 {        status = "disabled";};&usbdp_phy0_dp {        status = "disabled";};&usbdp_phy0_u3 {        status = "disabled";}#配置USB3.1 OTG0 Controller#配置dr_mode = "otg"#配置"phys = <&u2phy0_otg>",即不引用USBDP PHY#配置maximum-speed = "high-speed",通知DWC3驅動將USB限制為USB2.0 only#配置"extcon"屬性,才能支持自動切換Device/Host mode&usbdrd_dwc3_0 {        dr_mode = "peripheral";        phys = <&u2phy0_otg>;        phy-names = "usb2-phy";        maximum-speed = "high-speed";        extcon = <&u2phy0>;};

Type-A USB 3.1 DTS 配置

參考 arch/arm64/boot/dts/rockchip/rk3588-evb2-lp4.dtsi USB30_2 HOST 的 DTS 配置

#USB2.0 PHY3配置"phy-supply"屬性,用于控制VBUS輸出5V&u2phy3_host {        phy-supply = <&vcc5v0_host>;}#VBUS GPIO配置,在USB2.0 PHY驅動中控制該GPIOvcc5v0_host: vcc5v0-host {        compatible = "regulator-fixed";        regulator-name = "vcc5v0_host";        regulator-boot-on;        regulator-always-on;        regulator-min-microvolt = <5000000>;        regulator-max-microvolt = <5000000>;        enable-active-high;        gpio = <&gpio4 RK_PA1 GPIO_ACTIVE_HIGH>;        vin-supply = <&vcc5v0_usb>;        pinctrl-names = "default";        pinctrl-0 = <&vcc5v0_host_en>;};#使能USB3.1/SATA/PCIe Combo PHY&combphy2_psu {        status = "okay";};#配置USB3.1 HOST2 Controller&usbhost3_0 {        status = "okay";};&usbhost_dwc3_0 {        dr_mode = "host";        status = "okay";};

Type-A USB 2.0 DTS 配置

參考 arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4.dtsi USB 2.0 HOST0/1 的 DTS 配置。

#USB2.0 PHY2/3配置"phy-supply"屬性,用于控制VBUS輸出5V&u2phy2_host {        phy-supply = <&vcc5v0_host>;};&u2phy3_host {        phy-supply = <&vcc5v0_host>;};#VBUS GPIO配置,在USB2.0 PHY驅動中控制該GPIOvcc5v0_host: vcc5v0-host {        compatible = "regulator-fixed";        regulator-name = "vcc5v0_host";        regulator-boot-on;        regulator-always-on;        regulator-min-microvolt = <5000000>;        regulator-max-microvolt = <5000000>;        enable-active-high;        gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;        vin-supply = <&vcc5v0_usb>;        pinctrl-names = "default";        pinctrl-0 = <&vcc5v0_host_en>;};#USB2.0 HOST0/1 Controller&usb_host0_ehci {        status = "okay";};&usb_host0_ohci {        status = "okay";};&usb_host1_ehci {        status = "okay";};&usb_host1_ohci {        status = "okay";};

上一篇:Rockchip RK3588 kernel dts解析之電源模塊

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 日本一道高清不卡免费| 欧美精品亚洲精品日韩专区va| 好大好硬好爽免费视频| 人人玩人人添人人| 18禁免费无码无遮挡不卡网站 | 成人免费激情视频| 免费又黄又爽1000禁片| 91蝌蚪在线视频| 暖暖在线日本免费中文| 国产一级爱做c片免费昨晚你| 一本色道久久综合亚洲精品| 激情小说视频在线观看| 国产精品一区二区久久不卡| 久久亚洲精品无码aⅴ大香| 精品久久久久香蕉网| 国产精品视频h| 四虎国产精品永久地址99| 一个人看的毛片| 欧美在线暴力性xxxx| 国产偷自视频区视频| 一区二区免费电影| 欧美在线视频a| 国产aⅴ激情无码久久久无码 | 精品国产中文字幕| 国产美女mm131爽爽爽毛片| 久久电影www成人网| 粉色视频在线播放| 国产精品一区不卡| 中文字幕中文字字幕码一二区| 欧美黑人vs亚裔videos| 国产成人免费午夜在线观看| 一级做受视频免费是看美女| 欧美成人精品大片免费流量| 国产一级淫片免费播放电影| 99热这里只有精品免费播放| 日韩污视频在线观看| 冠希与阿娇实干13分钟视频| 777精品成人影院| 性满足久久久久久久久| 亚洲人成精品久久久久| 精品国偷自产在线视频|