Platform: RK3399
OS: Android 8.1
硬件環境:
使用3串3並鋰電池供電
充電IC:BQ24610RGER
電量計IC:CW2015
問題1
1.CW2015 i2c通信失敗
解決方法:
1.確定CW2015 i2c地址爲0X62
2.使用示波器查看I2C上存在數據
3.查看PCB圖發現管腳順序錯誤,芯片第五腳和第八腳相反,飛線解決。
問題2
1.cw2015可以獲取電量,但是無法獲取充電狀態
解決方法:
1.由於CW2015驅動註冊時爲battery設備,所以只能上報電池電量,無法上報充電狀態
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.因爲我們選型的充電IC沒有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驅動,持續更新