Platform: RK3399
OS: Android 8.1
硬件环境:
使用3串3并锂电池供电
充电IC:BQ24610RGER
电量计IC:CW2015
问题1
1.CW2015 i2c通信失败
解决方法:
1.确定CW2015 i2c地址为0X62
2.使用示波器查看I2C上确实存在数据
3.怀疑硬件问题,查看PCB图发现管脚顺序错误,下图高亮管脚应为PIN5
问题2
1.cw2015可以获取电量,但是无法获取充电状态
解决方法:
1.cw2015驱动中直接上报充电状态为正在充电,显示依然为未充电
2.深度分析android power supply系统,下文介绍的比较详细
https://blog.csdn.net/u012830148/article/details/80227903
3.如果要进入充电状态,必须有battery设备,所以将CW2015注册为battery设备,需要再添加charger设备.
static const struct power_supply_desc cw2015_bat_desc = {.name = "rk-bat",.type = POWER_SUPPLY_TYPE_BATTERY,.properties = cw_battery_properties,.num_properties = ARRAY_SIZE(cw_battery_properties),.get_property = cw_battery_get_property,
};
4.因为我们的充电芯片没有I2C接口,只是在硬件上增加了一个充电器检测的GPIO
5.在 /kernel/drivers/power#目录下刚好存在一个gpio-charger.c文件,完全符合项目的需求
6.在kenel下make menuconfig,使能gpio-charger.c
7.将gpio注册为POWER_SUPPLY_TYPE_MAINS
8.dts中增加节点
gpio-charger{status = "okay";compatible = "gpio-charger";gpios = <&gpio1 23 GPIO_ACTIVE_LOW>;charger-type = "mains";};
总结
目前功能基本实现,但是电量不够准确,需要继续修改CW2015驱动,持续更新