[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
谢谢。
[Android6.0][RK3399] 电池系统(三)电量计 CW2015 驱动流程分析【转】的更多相关文章
- [Android6.0][RK3399] 双屏异显代码实现流程分析(一)【转】
本文转载自:http://blog.csdn.net/dearsq/article/details/55049182 Platform: RK3399 OS: Android 6.0 Version: ...
- [Android6.0][RK3399] 双屏异显代码实现流程分析(二)【转】
本文转载自:http://blog.csdn.net/dearsq/article/details/55050125 Patch Code dtsi rk3399-androiddtsi rk3399 ...
- [Android6.0][RK3399] 修改默认按键 KEY-PAD 的功能【转】
本文转载自:http://m.blog.csdn.net/dearsq/article/details/70175637 Platform: RK3399 OS: Android 6.0 Kernel ...
- [RK3288][Android6.0] 系统按键驱动流程分析【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...
- 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...
- android休眠唤醒驱动流程分析【转】
转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501 标准linux休眠过程: l power managemen ...
- (三)golang--执行流程分析
XXX.go--go build XXX.go--XXX.exe XXX.go--go run XXX.go 两种方式的区别:(1)如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没g ...
- Linux网卡驱动架构分析
一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台: ...
随机推荐
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...
- 前端开发利器webStorm 3.0配置使用
安装了phpstorm之后,想配置svn,结果在file->settings->Version Contorl->subversion->with conmand line ...
- bzoj 1787 Meet 紧急集合
Meet 紧急集合 这个题是在脖子oj(清北某奆佬给起的名字)八中oj(大视野在线评测)上的. 给出bzoj链接. 这个题还是求最近公共祖先的问题. 而该题不同于别的题,它是需要求三个点的最近公共祖先 ...
- iOS-runtime-根据类名推送到任意控制器,且实现属性传值
// // WJRuntime.m // RuntimeSkip // // Created by tqh on 15/9/8. // Copyright (c) 2015年 tqh. All rig ...
- [luoguP2073] 送花(set)
传送门 set #include <set> #include <cstdio> #include <iostream> #define LL long long ...
- hdu1875kruskal简单应用。
标记是dificulty 2,水,开始kruskal时练手题,只需开始时数据处理下,不符合要求的边不要,要理解并查集和Kruskal,就简单了,判断下是否联通图,(只需在记加入有效边时候统计连通分支数 ...
- Linux中的进程与线程
介绍了Linux下fork()创建进程以及使用pthread_create()创建线程的方法 1. 基于进程的斐波那契数列 在下面的代码中,由子进程进行斐波那契数列的输出,父进程要等待子进程输出完毕, ...
- 转: 使用valgrind检查内存问题
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree ...
- 基于GDAL的栅格图像空间插值预处理
转自 基于GDAL的栅格图像空间插值预处理——C语言版 基于GDAL的栅格图像预处理 前言 栅格数据和矢量数据构成空间数据的主要来源,怎样以开源方式读取并处理这些空间数据?目前有多种开源支持包,这里只 ...
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的, ...