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:獲取