本文将深入分析基于RK3588芯片的Linux内核中的充电驱动源码,探讨其工作原理和技术细节。
充电模块在嵌入式系统尤其是Android设备中的作用至关重要,它负责管理和控制电池的充放电过程。本段落以bq25700为例,深入解析RK3588内核中charger驱动代码的设计与实现方式,旨在理解如何配置和管理充电芯片。
该驱动程序位于kernel-5.10/drivers/powersupply/bq25700_charger.c文件下。此驱动设计兼容多种型号的充电芯片,如bq25700、bq25703、sc8885、sc8885s和sc8886等。其中,bq25700与sc8885系列采用相同的I2C从设备地址(即为0x09),而bq25703及sc8886则使用不同的地址(如:0x6B)。驱动程序通过解析设备树(dts)中的compatible属性来识别具体的芯片型号,进而确定相应的寄存器列表和参数配置。
在probe函数中,该驱动根据dts文件里的compatible属性判断芯片类型。如果匹配ti,bq25700或southchip,sc8885,则使用bq25700的设置;否则,默认采用bq25703的相关配置。初始化阶段会读取芯片ID,若无法成功读取则表明I2C通信出现异常,此时驱动程序将返回错误信息。
通过`bq25700_fw_probe`和`bq25700_fw_read_u32_props`函数获取dts中定义的初始化参数。这些参数包括电池充电电流、最大充电电压、SDP类型适配器输入电流限制等,用于设定charger的工作状态。
最小系统电压(MIN_SYS_VOTAGE)是在无充电功能或电池电量不足时由充电芯片提供的最低供电电压,确保高于系统运行所需的最小值以维持正常工作。当开启充电模式时,则不受此参数影响;在适配器和电池同时连接但关闭充放电的情况下,若电池电压超过设定的最小值则系统依赖于电池供电;反之,将输出规定的最低电源。
`bq25700_hw_init`函数负责初始化charger的各种参数设置。例如:禁用看门狗定时器以防止芯片进入休眠模式、配置充电电流和最大/最小工作电压等。此外还涉及调整运行模式(如睡眠与低功耗状态)以及开启充电开关等功能,Learn模式允许对电池电量计算法进行校准或减少长期充放电影响;ADC检测设置为连续监测模式以获取实时数据。
总而言之,RK3588内核中的charger驱动程序通过解析设备树信息精确控制和管理着充电芯片的行为表现,在各种工况下提供稳定供电并优化电池的使用效率。深入理解该代码能够帮助开发者更好地调试及定制充放电方案来适应不同的应用场景需求。