[Android6.0][RK3399] 电池系统(三)电量计 CW2015 驱动流程分析【转】

摘要:
所以默认编译是无法通过的。所以当前的问题是进行代码的修改以适用于当前3399平台。磨刀不误砍柴工,我们先磨好刀,下一章再开始砍柴。驱动分析我在驱动中添加了cw_init_power_supply和cw_turn_on_bq_hw_init。在前者里面完成了power_supply设备的注册在后者中完成了电池状态的检测,并传给bq25700_chargerIC。函数调用链cw_bat_probecw2015_parse_dt//解析dts。

本文转载自: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
谢谢。

免责声明:文章转载自《[Android6.0][RK3399] 电池系统(三)电量计 CW2015 驱动流程分析【转】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇华为交换机常用查询命令组成原理(三):存储器概述,RAM,ROM下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32F1库函数初始化系列:DMA—ADC采集

1 void ADC_Configure(void) 2 { 3 ADC_InitTypeDef ADC_InitStructure; 4   GPIO_InitTypeDef GPIO_InitStructure; 5 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); 6   RCC_AHBPer...

[RK3399] 修改移动网络默认为4G

CPU:RK3399 系统:Android 7.1 现在手机卡都默认是 4G 网路,但是源码中默认的还是 3G网络,每次都要手动改到 4G。 下面在源码中就直接将默认网络改为4G。 PREFERRED_NETWORK_MODE 变量就是开机后系统设置中调用的默认网络类型 SystemProperties.getInt 第一个参数是键值,开机后可以在 adb...

STM32新的IDE -- stm32cubeIde 点亮个LED灯

此IDE是基于eclipse开发的,一键式安装,内部集成了cubeMx;首先去官网下载:https://www.stmicroelectronics.com.cn/content/ccc/resource/technical/software/sw_development_suite/group0/0d/3e/69/1b/13/74/44/8e/stm32...

STM32 0.96OLED I2C 显示(转载)

转载于:https://www.cnblogs.com/hjf-log/p/stm32-oled.html 使用stm32工程模板,移植其他人使用0.96寸的Oled代码,在OLED上显示字符,使用的引脚是PB3和PB4,是用了重映射的引脚 这里使用的IC是stm32f103vet6,软件是keil5 百度网盘链接:https://pan.baidu.c...

openwrt的GPIO控制

为什么有些GPIO可以在/sys/class/gpio中控制,而有些不行呢? 先来看一看普通不需要C程序而是使用脚本的控制方法(Linux普遍适用): First step is making GPIO available inLinux: echo "29" > /sys/class/gpio/export then you need to d...

树莓派wiringPi经常使用的函数介绍

 1.void pinMode (int pin, int mode) ; 这个函数式设置pin脚的输入和输出模式以及PWM的输入和输出模式。在wiringPi中仅仅有 pin 1 (BCM_GPIO 18)是支持PWM的输出的。 2.void digitalWrite (int pin, int value) ; 这个函数式用来设置pin脚的高低电...