前面的几篇都有涉及,所以本文学习一下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. mybatis关于大于小于:元素内容必须由格式正确的字符数据或标记组成。

    首先是原因: mybatis中< >这两个符号会被识别为标签的开始和结束,用了就会报解析的错误 会报错类似下面这些 1.元素内容必须由格式正确的字符数据或标记组成. 2.Error cre ...

  2. 使用Git bash切换Gitee、GitHub多个Git账号

    使用Git bash切换Gitee.GitHub多个Git账号 ​ Git是分布式代码管理工具,使用命令行的方式提交commit.revert回滚代码.这里介绍使用Git bash软件来切换Gitee ...

  3. 【Project】原生JavaWeb工程 01 概述,搭建

    一.环境准备: 操作系统:Windows7 或者 Windows10 IDE集成环境:IDEA 2018版本或者更高 数据库:MySQL 5版本或者更高 服务器:Tomcat 8版本或者更高 二.数据 ...

  4. 创绘-AI一键小说转漫画视频

    创绘-AI一键小说转漫画视频 创绘简介 一键智能AI推理提示词,自动关联上下文,画面匹配度更高 一键批量绘图,同时支持本地和云端模式(没有显卡也能畅享绘图) 一键导出剪映草稿,自动生成关键帧,快速图文 ...

  5. 哈哈哈,我就说未来要研发无人的AI潜艇嘛 —— 说啥来啥 —— AI驱动的无人潜艇

    相关: 沉默5个月后,美国对华发出挑战书,万没想到,中方打法早就变了

  6. 【转载】pip install 使用多个.local环境

    原文地址: https://zhuanlan.zhihu.com/p/351468170 ================================ 我们都知道anaconda可以安装不同的py ...

  7. ChatGPT的训练费用以及成功原因

    参考: https://baijiahao.baidu.com/s?id=1772914234034992726&wfr=spider&for=pc ================= ...

  8. PIL 和 python-opencv 从内存字节码中读取图片并转为np.array格式

    把某个RGB格式的图片以字节码的形式读入到内存中,然后使用PIL 和 CV2 来进行读写,并转成np.array 格式. 代码: from PIL import Image import cv2 im ...

  9. 代码随想录Day7

    454.四数相加Ⅱ 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k ...

  10. MFC对话框程序:实现程序启动画面

    MFC对话框程序:实现程序启动画面 对于比较大的程序,在启动的时候都会显示一个画面,以告诉用户程序正在加载,或者显示一些关于软件的信息,如Visual C++,Word, PhotoShop等.那么对 ...