前面的几篇都有涉及,所以本文学习一下pmic usb charger都相关的vote机制

OVP:     Over Voltage Protection 过压保护
USB_IN: Input current limit 一般仅支持USB_IN即VBUS在输入(有些能支持DC_IN),
APSD: autonomous power source detection 运行于BC 1.2 SDP/CDP的检测完成之后
QC2.0/3.0: Qcom quick charger 运行于BC1.2 DCP的检测完成之后
AICL: automatic input current limiting 自动最大化从AC/DC适配器中汲取电流
ICL_MAX: Maximum programmed input current limit value pmi632不支持DC_IN,OTG支持输出5v 1000mA
static struct smb_params smb5_pmi632_params{
.icl_stat = {
.name = "input current limit status",
.reg = ICL_STATUS_REG,
.min_u = 0,
.max_u = 3000000, //3A
.step_u = 50000,
},
.otg_cl = {
.name = "usb otg current limit",
.reg = DCDC_OTG_CURRENT_LIMIT_CFG_REG,
.min_u = 500000,
.max_u = 1000000,
.step_u = 250000,
},

高通pmic voter机制

/*
** vote 函数主要用来给 votable 添加投票选项
** votable: 投票的对象
** client_str: 投票者
** enabled: 投票者的内容(val)是否参与投票
** val: 投票内容
**/
int vote(struct votable *votable, const char *client_str, bool enabled, int val) kernel/msm-4.19/drivers/power/supply/qcom/battery.c
votable: usb_icl_votable VOTE_MIN:取投票对象中的最小值
chip->usb_icl_votable = create_votable("USB_ICL", VOTE_MIN,
usb_icl_vote_callback,
chip);

在前面的第二期中,我们知道一些非标的USB的充电类型Floating charger,其具有和普通 DCP 相似的大电流能力,但在最初检测的时候会限制Input current limit到100mA,来进行检测是否是SDP类型,所以要支持大电流输入就需要进行vote操作,

kernel/msm-4.19/drivers/power/supply/qcom/smb5-lib.c
Floating charger:
case POWER_SUPPLY_TYPE_USB_FLOAT:
/*
* limit ICL to 100mA, the USB driver will enumerate to check
* if this is a SDP and appropriately set the current
*/
smblib_info(chg, "debug float set to %d uA\n", chg->dcp_icl_ua);
vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true,
chg->dcp_icl_ua);
break; devicetree pmi632_charger
qcom,usb-icl-ua = <2500000>;//defualt: 3000000 kernel/msm-4.19/drivers/power/supply/qcom/qpnp-smb5.c
smb5_parse_dt_currents
of_property_read_u32(node,"qcom,usb-icl-ua", &chip->dt.usb_icl_ua);
chg->dcp_icl_ua = chip->dt.usb_icl_ua; kernel/msm-4.19/drivers/power/supply/qcom/smb5-lib.c
vote(chg->usb_icl_votable, USB_PSY_VOTER, true, chg->dcp_icl_ua);
vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, false,0);

从log中也可以看出初始input current limit为100mA,检测float类型时,对SW_ICL_MAX_VOTER进行vote取最小值仍然为100mA,所以需要对其重新进行vote操作,才可以将input current提升到2500mA

pmi632_charger: smblib_update_usb_type: APSD=FLOAT PD=0 QC3P5=0
pmi632_charger: smblib_get_charge_param: input current limit status = 100000 (0x02)
pmi632_charger: update_sw_icl_max: float set to 2500000 uA
pmi632_charger: smblib_get_charge_param: input current limit status = 100000 (0x02)
pmi632_charger: smblib_set_charge_param: usb input current limit = 2500000 (0x32)
pmi632_charger: smblib_handle_apsd_done: IRQ: apsd-done rising; FLOAT detected

Android Qcom USB Driver学习(五)的更多相关文章

  1. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. Delphi 调试连接 任意Android手机/平板/盒子(要安装Google USB Driver,并且还有USB的相关许多文章)

    Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...

  3. CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android. Buffer Overflow Vulnerability reported by #plzdonthackme, Soctt.

    CVE-2016-2502-drivers/usb/gadget/f_serial.c in the Qualcomm USB driver in Android.Buffer Overflow Vu ...

  4. Android 开源项目及其学习

    Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...

  5. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  6. Android Wear(手表)开发 - 学习指南

    版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ...

  7. Android系统--输入系统(五)输入系统框架

    Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘 ...

  8. Android群英传笔记——第五章:Android Scroll分析

    Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...

  9. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  10. 20172327 2018-2019-1 《第一行代码Android》第一章学习总结

    学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...

随机推荐

  1. python的Faker使用

    import json from faker import Faker from faker_demo.CustomFaker import CustomProvider myfaker = Fake ...

  2. .NET 开源快捷的数据库文档查询和生成工具

    前言 在实际项目开发中,需求变更和项目迭代是常态.要求我们能够迅速响应,对数据库结构进行相应的调整,如添加新表.更新现有表结构或增加字段等. 为了确保团队成员之间的信息同步,实时更新和维护数据库文档变 ...

  3. Jmeter函数助手15-FiletoString

    FiletoString函数用于一次读取整个文件值. 输入文件的全路径:填入文件路径 File encoding if not the platform default (opt):读取文件的编码格式 ...

  4. 02 IO口的操作

    目录 前言 一.IO的概念 1.IO接口 2.IO端口 二.CPU和外设进行数据传输的方法 1.程序控制方式 1.1 无条件 1.2 查询方式 2.中断方式 3.DMA方式 一.方法介绍和代码编写 1 ...

  5. 【Java】删除项目中多余的SVG图片资源

    在DB库的菜单表,每个菜单会存放对应的svg图片名称,用于菜单渲染 在页面中的渲染: 在项目的目录的存放位置: 需求是这个目录还存放了很多不需要的svg图片,需要把他们删除掉 数量有七八十张,人肉手删 ...

  6. 【MQTT】Mosquitto 入门案例

    参考博主StoneGeek的文章 https://www.cnblogs.com/sxkgeek/p/9140180.html 之前接触的是在应用程序之间的消息中间件技术 RabbitMQ, Kafk ...

  7. 【Scala】09 偏函数 PartialFunction

    更像是策略函数 可拆分成一个部分,是若干个函数的组合 package cn object HelloScala { def main(args: Array[String]): Unit = { // ...

  8. 【OracleDB】 06 多表查询

    多表查询的目的: 从两张以上的数据表中查询每张表的字段 笛卡尔集的问题: 查询职员表一共107条记录 select count(employee_id) from employees; 查询部门表,一 ...

  9. 【转载】SCI审稿过程中的几种状态

    原文地址: http://cjsphd.blog.163.com/blog/static/44718111201191175154300/ 审稿中涉及到的人: EIC-Editor in Chief ...

  10. 作为电脑屏幕的补光灯,到底是应该选Led灯还是荧光灯

    现在的台灯灯具市场基本被Led灯给霸占,这就无形之中要大家买台灯的时候只能选择Led等,我也是如此,手上有一款20年前上高中时候的"孩视宝"荧光灯的台灯,然后还有一款刚刚购入的Le ...