首页 > 其他分享 >Android Qcom USB Driver学习(五)

Android Qcom USB Driver学习(五)

时间:2024-08-21 11:06:02浏览次数:10  
标签:usb icl charger Driver limit current Qcom votable Android

前面的几篇都有涉及,所以本文学习一下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

标签:usb,icl,charger,Driver,limit,current,Qcom,votable,Android
From: https://www.cnblogs.com/linhaostudy/p/18371189

相关文章

  • android开发将charles证书安装到安卓系统根目录实现https抓包
    android开发将charles证书安装到安卓系统根目录实现https抓包1.安装charles,然后先将charles证书到电脑端下载地址:https://www.charlesproxy.com/安装证书到电脑端先:点击Help->SSLProxying->InstallCharlesRootCertificate->安装证书...->本地计算机->下一步......
  • Android10.0 人脸解锁流程分析
    人脸解锁概述人脸解锁即用户通过注视设备的正面方便地解锁手机或平板。Android10为支持人脸解锁的设备在人脸认证期间添加了一个新的可以安全处理相机帧、保持隐私与安全的人脸认证栈的支持,也为安全合规地启用集成交易的应用(网上银行或其他服务)提供了一种容易实现的方式......
  • Android开发 - BleConnectOptions 类设置蓝牙连接选项解析
    BleConnectOptions是什么BleConnectOptions类是与蓝牙设备连接相关的一个配置类。它主要用于设置蓝牙连接的选项,确保与蓝牙设备的连接能够根据需求进行调整和优化。常用于配置蓝牙设备的连接参数,例如连接超时时间、是否自动连接等。这些配置可以帮助你更好地控制蓝牙连接过程,......
  • [Android 逆向整理笔记] Frida
    妈的终于考过科目三了......
  • Android实战:实现注册界面
    目录前言布局图实现过程1.导入图片2.创建分割线样式3.创建文本样式4.创建输入框样式5.XML布局文件测试6.实现注册功能前言在前面,我们已经学习了一些常见的界面布局和界面控件,那么本篇我们就来结合前面所学的知识,来实现一个注册界面。布局图我们最终要实现的界......
  • Android T don't abort background activity starts
    log:2024-08-2015:45:12.457581-1128ActivityTaskManagersystem_processISTARTu0{act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]flg=0x10000000pkg=acr.browser.lightningcmp=acr.browser.lightning/.Ma......
  • Android 11.0 通过系统属性适配多种分辨率开机动画功能实现
    1.前言 在11.0的系统ROM定制化开发中,在关于开机动画这部分由于产品需要适配多种分辨率,所以就需要在出rom固件的时候,就需要根据系统属性来适配显示哪种分辨率开机动画,所以接下来就来看怎么设置系统属性,然后在开机动画阶段怎么实现这个功能2.通过系统属性适配多种分辨率开......
  • Android CDD(兼容性定义文档)
    1.什么是AndroidCDDAndroid兼容性定义文档(CDD)列举了设备需要满足哪些要求才能与最新的Android版本兼容。也就是说每当Android新版本更新时,我们需要检查Android最新的CDD,保证我们的系统满足AndroidCDD的要求。设备实现必须满足此兼容性定义文档(包括以参考资料的形式纳入......
  • Android逆向题解-攻防世界-Ph0en1x-100
    jeb反编译apk主要代码是if那个判断,getFlag取字符串用getSecret加密,和输入字符串encrypt加密后再getSecret加密,进行比较,两边同样都是getSecret加密,那比较可以简化成this.getFlag()==this.encrypt(s)。也就是输入字符经过encrypt加密后等于getFlag的字符串即可。protec......
  • Android about event log
    EventLogTags.logtags,它是个日志工具,很多模块有该文件.eventlog在framework层常常使用,通过类似EventLog.writeEvent()写log,这种log被保存在/system/etc/event-log-tags../frameworks/base/services/core/java/com/android/server/wm/EventLogTags.logtagswm_set_resumed_......