RK3588 kernel-6.1 drivers/usb/typec 代码功能与实现原理

RK3588 kernel-6.1 drivers/usb/typec 代码功能与实现原理

1. 子系统在 Linux 中的定位

drivers/usb/typec 实现 USB Type‑C 连接器类(connector class) 与用户可见的设备模型,并串联:

  • CC(Configuration Channel) 检测结果(接入方向、角色、供电模式)
  • USB PD(Power Delivery) 能力协商(电压/电流、.swap)
  • Alternate Mode(替换模式)(如 DisplayPort)与 物理开关orientation mux / SBU mux / retimer

它不替代 drivers/usb/coredwc3 的 USB 数据通路本身;而是通过 typec_portusb_role_switchpdmux告知或驱动 SoC 上 USB/Pinctrl/DRM 等相关组件。

内核文档:Documentation/driver-api/usb/typec.rst,ABI:Documentation/ABI/testing/sysfs-class-typec


2. 顶层构建(Makefile

对象 源文件 / 子目录 作用
typec class.omux.obus.opd.oretimer.o 连接器类、Mux/Switch、Alt Mode 总线、PD sysfs、Retimer 绑定
altmodes/ DP Alt Mode 等 替换模式高层驱动
tcpm/ CONFIG_TYPEC_TCPM Type‑C Port Manager + PD 协议状态机在软件侧的实现(适配 TCPM/I²C PHY)
ucsi/ CONFIG_TYPEC_UCSI UACPI/UCSI:OS 通过规范接口驱动 PPM(Platform Policy Manager),常见于笔记本 ACPI
tipd/ CONFIG_TYPEC_TPS6598X TI TPS6598x:片上 PD 固件为主,驱动暴露 typec/role
mux/ CONFIG_TYPEC_MUX_* Cross-switch / PI3USB30532 / FSA4480mux 芯片驱动
单片端口控制器 anx7411hd3ss3220stusb160xrt1719wusb3801qcom-pmic-typec 绑定 DT,调用 typec/TCPM API

3. 核心对象模型(class.h / class.c

  • struct typec_port
    对应 一个物理 Type‑C 口数据角色(DFP/UFP)电源角色(Source/Sink)VCONN功率档位 pwr_opmode朝向 orientation,以及 cap/ops(底层端口驱动回调)。
    关联 typec_switch(插头翻转)、typec_mux(SBU/USB 路由)、typec_retimer(高速/redriver)。

  • struct typec_partner
    对端插头侧设备节点:是否 USB PDCable Identitypd_revision、挂 usb_power_delivery

  • struct typec_cable
    线缆身份(主动/被动等)。

  • class.c
    注册 /sys/class/typec/ 下层次结构,导出 partner、cable、端口属性(PD Identity、product type、端口类型切换 sysfs 等)。

原理:把规范里的 连接器状态 变成 统一的 Linux device/class,便于 udev、电源管理、DRM DP Alt Mode 订阅。


4. Alternate Mode 子系统(bus.c

bus.c 提供 typec_altmode_* API:

  • typec_altmode_enter / exit:进入/退出某 SVID 模式。
  • typec_altmode_notifyAlt Mode 驱动 ↔ 端口/Mux:把协商好的 引脚配置 传到 typec_mux_set,并可回调 notify

原理:PD Vendor Defined Message / Structured VDM 协商出的 模式号,落到 内核 Alt Mode 驱动(如 DP),再 驱动 muxSuperSpeed 线与 DP Lane 接到正确 PHY。


5. Mux / Switch / Retimer(mux.cmux/retimer.c

  • mux.cfwnode_typec_switch_getfwnode_typec_mux_get,通过 设备树 graph / 属性(如 orientation-switch)解析 多颗开关
  • mux/*.c:具体芯片 设置 SAFE/USB/USB+SBU/DP 等路由。
  • retimer.cUSB‑C Retimer(高速链路中继)与 端口 绑定,fwnode_typec_retimer_get

原理:Type‑C 插头正反插Alt Mode 都要求 模拟开关 在电气层切换;与 PD 逻辑解耦,由 class + DT 组合装配。


6. USB PD sysfs(pd.c

注册 usb_power_delivery class,把 PDO(Power Data Object)RDO 等变成属性(固定供电、dual_role_powerEPR 等相关字段)。

原理:用户空间 功率面板 / 调试 可读协商结果;电源路径仍由 PMIC/charger端口驱动 实际控制。


7. TCPM:tcpm/tcpm.cCONFIG_TYPEC_TCPM

TCPM(Type‑C Port Manager)tcpm.c 中实现大规模 状态机(文件头注明 USB Power Delivery protocol stack),涵盖:

  • SRC_*/SNK_*:供电端/用电端 附加、能力广播、协商、Transition
  • DR_SWAP / PR_SWAP / VCONN_SWAP / FR_SWAP
  • Hard/Soft ResetTry.SRC/SNKAccessory(音频/Debug)

底层通过 tcpc_dev(如 FUSB302、TCPci)收发 PD 消息;对上 typec_register_port、通知 partner/cable、触发 role switch

适用PD 状态机在操作系统运行 的方案(简单 TCPC + PHY)。


8. UCSI:ucsi/ucsi.cCONFIG_TYPEC_UCSI

UCSI = OS 与 嵌入式策略模块(PPM) 之间的 命令/事件 ABI(常见于 ACPI _DSM/UCMT)。

驱动:sync_write/read 执行 GET_CONNECTOR_STATUSSET_UORSET_PDR 等;Connector Change 中断后经 ucsi_execute 同步 typec 世界。

适用笔记本/平板电脑,PD 策略与 PHY 多在 EC/PMIC 固件,OS 只做高层策略与 sysfs


9. TIPD(TPS6598x):tipd/core.c

I²C 访问 TI PD 控制器寄存器;芯片内部跑 任务式固件(APP/DISC/BIST),驱动侧:

  • STATUS / POWER_STATUS
  • 处理 中断
  • 注册 typec port、usb_role_switchpower_supply

与 TCPM 区别:许多逻辑在 芯片 FW,驱动偏 寄存器适配,不一定跑完整 tcpm.c 状态机。


10. Alt Mode 示例:altmodes/displayport.c

实现 DisplayPort Alt Mode

  • 解析 VDMpin assignmentDFP_D/UFP_D
  • drm_connector / typec_displayport_data 协作
  • 通过 typec_altmode_notify 切换 mux(USB 仅 / DP 仅 / 多功能)

11. ACPI:port-mapper.cCONFIG_ACPI

ACPI 机器上映射 物理连接器编号 ↔ Type‑C 设备,便于 没有统一 DT 的 x86 平台注册端口。


12. 实现原理总览(一张图)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
      ┌─────────────────────────────────────────┐
│ sysfs / userspace (policy, charging UI) │
└─────────────────────────────────────────┘

┌────────────────────┼────────────────────┐
▼ ▼ ▼
typec_class pd_class altmode bus
(class.c) (pd.c) (bus.c)
│ │ │
└────────────────────┼────────────────────┘

┌───────────────┴───────────────┐
▼ ▼
TCPM (tcpm.c) UCSI (ucsi.c)
+ tcpci/fusb302 + ACPI/CCG/STM32…
│ │
└───────────────┬───────────────┘

┌───────────────┼───────────────┐
▼ ▼ ▼
usb_role_switch mux/switch retimer
│ │ │
└───────────────┴───────────────┘

SoC USB (DWC3…) / DP PHY / charger

13. RK3588 相关提示

RK3588 常见:端口控制器 + PHY + dwc3;具体启用 TCPM/TYPEC_* 哪几项取决于 板级 PD 芯片(独立 TCPC、PMIC 集成 UCSI、或仅 Sink)。需在 arch/arm64/boot/dts/rockchip/ 中核对 typectcpcivbusextcon 节点与 drivers/usb/typeccompatible 是否匹配。


14. 延伸阅读(本仓库)

文档
drivers-usb目录结构与分层原理.md
drivers-usb-dwc3详细分析.md

基于 rk3588/kernel-6.1/drivers/usb/typec 源码归纳。

文章互动

阅读 --

留言

0 条留言

正在加载留言…