Android Qcom USB Driver学习(八)

本文深入探讨了Android系统中高通(Qcom)USB驱动与电池管理的细节,包括电池ID识别、温度监控、JEITA充电标准以及SBL1阶段的充电参数配置。内容涉及Kernel、XBL和Battery数据结构,阐述了电池状态检测、充电阶段及电流、电压的调整策略。

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零)

因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧

BAT SCH

在这里插入图片描述
(1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2C_SCL (5)VBATT_VSNS_M
在这里插入图片描述
(1)BATT_ID 没接在电池上,外部下拉的100k电阻,如果电池电压不同还是能做区分的,当然battery-id不一定非得使用adc去读取,既然battery是基于i2c的设备,就一定能做到区分,通过power_supply_desc的get_property的方式同样可以客制化获取电池区分信息包含id。

BAT_THERM

玩转移远SC60 Android开发板------(5)充电和电池管理
VBAT_THERM 引脚若不连接,则会导致不开机、电池不能充电、电池电量显示错误等故障。
如果客户使用的电池没有热敏电阻,或者客户使用电源适配器对模块进行供电,则只需连接VBAT 和GND。
此时为防止系统误判电池不存在而导致无法开机,客户应该将VBAT_THERM 引脚通过一个47KΩ的电阻连接到GND。
可充电电池在不断的循环充电和放电过程中可能会导致电池温度的过高,导致电池原始性能下降,所以需要监控电池温度保持电池性能。

QPNP: Qualcomm Plug and Play(The input can be supplied to the device via either a DC or USB path. Output paths are
the VPH_PWR rail via the buck and a reverse boost feature on VCHG.)

Kernel

power/supply/qcom/qpnp-qg.c  -> iio/inkern.c -> (batt-therm - chip->batt_therm_chan)
&pmi632_qg{
   
   
	io-channels = <&pmi632_vadc ADC_BAT_THERM_PU1>, //SCALE_HW_CALIB_BATT_THERM_30K
					<&pmi632_vadc ADC_BAT_ID_PU2>;
	io-channel-names = "batt-therm", "batt-id"; 
}	

&pmi632_charger{
   
   
	qcom,connector-internal-pull-kohm = <30>;  //write register BATIF_ADC_INTERNAL_PULL_UP_REG 电池ntc电阻
}
power/supply/qcom/qg-util.c  -> iio/inkern.c -> qcom-spmi-adc5.c(pmi632) -> qpnp-vadc-common.c 
qg_get_battery_temp(batt-therm_chan)  -> read_raw -> adc_read_raw(based on kernel iio/iio_info) -> lux_table_30(vadc_map_pt)
依据电池spec去修改30k对应的lux_table_30的vadc_map_pt表

XBL

DalVAdc.c -> VAdc_DeviceInit -> VADC_BSP 获取vadcbsptype = VAdcBspPMI455(vadc_props.xml)

VAdcSettings.c -> gVAdcChannelsPMI455 (vadc channel)
/* BATT_THERM_PU_30K (BAT_THERM pin) */
{
   
   
    .pszName                   = ADC_INPUT_BATT_THERM_PU_30K,
    .uAdcHardwareChannel       = 0x2a,
    .eSettlingDelay            = VADC_SETTLING_DELAY_100_US
diff --git a/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/kernel.te b/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/kernel.te index 95f64bf9bf..a6b1ed65b3 100644 --- a/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/kernel.te +++ b/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/kernel.te @@ -47,3 +47,5 @@ dontaudit kernel kernel:system module_request; allow kernel mnt_vendor_file:dir search; allow kernel mnt_vendor_file:file { read open }; +allow kernel block_device:blk_file { read write open }; +allow kernel vendor_init:fd use; diff --git a/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/vendor_init.te b/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/vendor_init.te index 43c977f784..adafc37f84 100644 --- a/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/vendor_init.te +++ b/VENDOR.13/device/qcom/sepolicy_vndr/generic/vendor/common/vendor_init.te @@ -117,6 +117,8 @@ get_prop(vendor_init, vendor_media_performance_class); allow vendor_init tee_device:chr_file getattr; +allow vendor_init block_device:blk_file { read write open }; + # Allow vendor init to read vendor_pcie_prop get_prop(vendor_init, vendor_pcie_prop); diff --git a/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.rc b/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.rc old mode 100644 new mode 100755 index c4fbdfe32f..861c6b792f --- a/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.rc +++ b/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.rc @@ -845,6 +845,35 @@ on property:sys.usb.ffs.ready=1 && property:sys.usb.config=diag,adb,serial_cdev write /config/usb_gadget/g1/UDC ${sys.usb.controller} setprop sys.usb.state ${sys.usb.config} +on property:sys.usb.config=diag,adb,serial_cdev,mass_storage && property:sys.usb.configfs=2 + write /config/usb_gadget/g1/functions/mass_storage.0/lun.0/file "/dev/block/mmcblk1p1" + +on property:sys.usb.config=diag,adb,serial_cdev,mass_storage && property:sys.usb.configfs=1 + start adbd + +on property:sys.usb.ffs.ready=1 && property:sys.usb.config=diag,adb,serial_cdev,mass_storage && property:sys.usb.configfs=1 + write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "diag_adb_mass_storage" + write /config/usb_gadget/g1/functions/mass_storage.0/lun.0/file "/dev/block/mmcblk1p1" + rm /config/usb_gadget/g1/configs/b.1/f1 + rm /config/usb_gadget/g1/configs/b.1/f2 + rm /config/usb_gadget/g1/configs/b.1/f3 + rm /config/usb_gadget/g1/configs/b.1/f4 + rm /config/usb_gadget/g1/configs/b.1/f5 + rm /config/usb_gadget/g1/configs/b.1/f6 + rm /config/usb_gadget/g1/configs/b.1/f7 + rm /config/usb_gadget/g1/configs/b.1/f8 + rm /config/usb_gadget/g1/configs/b.1/f9 + symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1 + write /config/usb_gadget/g1/idVendor 0x05C6 + write /config/usb_gadget/g1/idProduct 0x901f + write /config/usb_gadget/g1/functions/diag.diag/pid 0x901f + symlink /config/usb_gadget/g1/functions/${vendor.usb.diag.func.name}.diag /config/usb_gadget/g1/configs/b.1/f1 + symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2 + symlink /config/usb_gadget/g1/functions/cser.dun.0 /config/usb_gadget/g1/configs/b.1/f3 + symlink /config/usb_gadget/g1/functions/mass_storage.0 /config/usb_gadget/g1/configs/b.1/f4 + write /config/usb_gadget/g1/UDC ${sys.usb.controller} + setprop sys.usb.state ${sys.usb.config} + on property:sys.usb.config=diag,serial_cdev,rmnet,dpl && property:sys.usb.configfs=1 write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "diag_dun_rmnet_dpl" rm /config/usb_gadget/g1/configs/b.1/f1 diff --git a/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.sh b/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.sh index 77a955265e..b8dc506198 100644 --- a/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.sh +++ b/VENDOR.13/vendor/qcom/opensource/usb/etc/init.qcom.usb.sh @@ -47,13 +47,13 @@ target=`getprop ro.board.platform` # Override USB default composition # # If USB persist config not set, set default configuration -if [ "$(getprop persist.vendor.usb.config)" == "" -a "$(getprop ro.build.type)" != "user" ]; then +if [ "$(getprop ro.build.type)" != "user" ]; then if [ "$esoc_name" != "" ]; then setprop persist.vendor.usb.config diag,diag_mdm,qdss,qdss_mdm,serial_cdev,dpl,rmnet,adb else case "$(getprop ro.baseband)" in "apq") - setprop persist.vendor.usb.config diag,adb,serial_cdev + setprop persist.vendor.usb.config diag,adb,serial_cdev,mass_storage ;; *) case "$soc_hwplatform" in diff --git a/VENDOR.13/vendor/qcom/opensource/usb/hal/usb_compositions.conf b/VENDOR.13/vendor/qcom/opensource/usb/hal/usb_compositions.conf index 263fef49a1..f1eb092136 100644 --- a/VENDOR.13/vendor/qcom/opensource/usb/hal/usb_compositions.conf +++ b/VENDOR.13/vendor/qcom/opensource/usb/hal/usb_compositions.conf @@ -10,6 +10,7 @@ mass_storage 0x05C6 0xF000 mass_storage,adb 0x05C6 0x9015 adb,mass_storage diag,adb 0x05C6 0x901D diag,adb,serial_cdev 0x05C6 0x901F +diag,adb,serial_cdev,mass_storage 0x05C6 0x901F diag 0x05C6 0x900E diag,serial_cdev,rmnet,adb 0x05C6 0x9091 diag,serial_cdev,rmnet 0x05C6 0x9092 如上修改会出现先出现U盘模式,后出现MTP,我想默认MTP,不要出现U盘模式,但是要同时支持U盘功能,怎么修改?
最新发布
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值