[Android6.0][RK3399] 電池系統(三)電量計 CW2015 驅動流程分析【轉】


本文轉載自: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 
謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM