本文轉載自:http://blog.csdn.net/dearsq/article/details/72770295
Platform: RK3399
OS: Android 6.0
Kernel: 4.4
Version: v2017.04
IC: TI BQ25700、RK808
已知問題
cw2015 的代碼默認是 rk3288 平台的,3399 平台有一些接口已經升級。
所以默認編譯是無法通過的。
所以當前的問題是進行代碼的修改以適用於當前 3399 平台。
磨刀不誤砍柴工,我們先磨好刀,下一章再開始砍柴。
驅動分析
我在驅動中添加了 cw_init_power_supply 和 cw_turn_on_bq_hw_init。
在前者里面完成了 power_supply 設備的注冊(利用升級后的 register_power_supply 接口)
在后者中完成了電池狀態的檢測,並傳給 bq25700_charger IC。
函數調用鏈
cw_bat_probe
cw2015_parse_dt // 解析 dts。 // 包括 bat_config_info、dc_det_gpio、bat_low_gpio、chg_ok_gpio // chg_mode_sel_gpio、 // is_dc_charge 是否支持 dc 充電 // is_usb_charge 是否支持 usb 充電 cw_bat_gpio_init // 申請 GPIO 並分配 dc_det_gpio、bat_low_gpio、chg_ok_gpio 為 input // 分配 chg_mode_sel_gpio 為 output cw_init // 初始化 cw2015 的寄存器。 // 設置工作模式,如果是 SLEEP MODE 就將其喚醒進入 NORMAL MODE; // 設置警報寄存器 ATHD; // 更新還未設置的寄存器信息 cw_init_power_supply // 注冊 power_supply 設備(三種 battery、usb、ac) cw_update_time_member_capacity_change // 更新到現在開始充電系統啟動的用時,以及到現在為止系統休眠了多長時間 cw_update_time_member_charge_start // 更新到現在電量改變系統啟動的用時,以及到現在為止系統休眠了多長時間 battery_workqueue = create_singlethread_workqueue // 創建單線程工作隊列 rk_battery INIT_DELAYED_WORK // 初始化 cw_bat_work 綁定到 battery_delay_work cw_bat_work // 不斷更新電池信息 rk_ac_update_online // 更新 DC 狀態 power_supply_changed(cw_bat->rk_ac) // rk_usb_update_online // 更新 usb 狀態 power_supply_changed(cw_bat->rk_usb) INIT_DELAYED_WORK // 初始化 dc_detect_do_wakeup 綁定到 dc_wakeup_work dc_detect_do_wakeup // 獲取 dc_det irq 號,根據現在中斷狀態來設置下一次中斷的觸發條件 cw_turn_on_bq_hw_init // 獲取 VCELL Voltage 並且傳遞標志位給 BQ IC 的驅動,用以決定是否配置 BQ IC
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
歡迎轉載,轉載請著名作者 Younix 和原文地址:
http://blog.csdn.net/dearsq/article/details/72770295
謝謝。
