MTK Linux Charger驱动分析(十二)- mtk_pd_adapter.c

MTK USB PD适配器驱动详解

1. 代码整体分析

mtk_pd_adapter.c(源文件)
  • 主要内容
    • 该文件实现了MediaTek平台的USB PD(Power Delivery)适配器驱动,基于Linux内核的电源管理和Type-C端口控制器(TCPC)框架。
    • 它处理PD协议事件,包括PD连接状态、Type-C状态、水检测(WD_STATUS)、Sink VBUS变化等。
    • 支持APDO(Augmented PDO)和PPS(Programmable Power Supply),包括能力查询、认证、电压/电流请求。
    • 与电源供应(power_supply)子系统集成,用于控制电源路径和高电压充电。
    • 使用PHY接口处理DPDM pulldown(用于水检测恢复)。
    • 定义了适配器操作接口(adapter_ops),包括获取/设置能力、输出、状态、认证等。
    • 支持DT解析配置(如适配器名称、force_cv、ita_min)。
    • 驱动注册为平台驱动(mtk_pd_adapter_driver),支持探针、移除和关机。
    • 代码遵循GPL-2.0许可,作者为Wy Chuang(2019年,MediaTek Inc.)。
  • 作用:桥接TCPC硬件和上层充电器驱动(如mtk_charger.c),处理PD事件通知、能力协商和控制。支持高功率充电(PPS/APDO)、异常保护(OCP/OTP/OVP)和水检测。代码依赖外部模块如tcpm.h(TCPC管理)和adapter_class.h(适配器类)。它不直接处理充电算法,而是提供接口给其他模块(如mtk_charger.c中的notify_adapter_event)。
  • 关键特性
    • 事件驱动:通过TCP通知器处理PD/Type-C事件,并广播到上层。
    • 能力支持:查询和设置PD/APDO能力,认证适配器是否支持PPS/CC。
    • 错误转换:将TCPC返回码映射到MTK适配器返回码。
    • 空实现:看门狗相关函数为空(pd_set_wdt/pd_enable_wdt)。
    • 静态表:apdo_pps_tbl定义PPS电压范围,用于计算PDP(Power Delivery Power)。
  • 注意:代码中有些函数标记为__maybe_unused(如pd_authentication、pd_is_cc),表示可能未使用但保留。驱动依赖"type_c_port0" TCPC设备,如果未就绪则延迟探针。

总体上,这是一个模块化的PD适配器驱动,与USB Type-C/PD硬件集成,支持快充协议,并与其他MTK充电模块(如mtk_charger)协作。

2. 函数的主要作用

以下列出主要函数(从代码中提取),按类别分组。仅列出关键函数,忽略内联或辅助函数。作用基于代码逻辑描述。

初始化和配置函数(从mtk_pd_adapter_probe调用)
  • mtk_pd_adapter_probe:驱动探针函数。分配内存,解析DT,注册适配器设备,获取TCPC设备,注册TCP通知器。如果TCPC未就绪,则延迟探针。返回0表示成功。
  • adapter_parse_dt:从设备树(DT)解析适配器配置(如名称、force_cv、ita_min、bootmode)。设置默认值,返回0表示成功。
  • mtk_pd_adapter_remove:驱动移除函数(空实现,返回0)。
  • mtk_pd_adapter_shutdown:关机处理函数(空实现)。
PD控制和能力函数
  • pd_set_cap:设置适配器能力(如MTK_PD_APDO_START/END、MTK_PD_APDO、MTK_PD)。使用tcpm_dpm_pd_request或tcpm_set_apdo_charging_policy请求电压/电流。返回MTK_ADAPTER_OK或错误码。
  • pd_get_output:获取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值