高通MDM平台-ChargeIC

2023-11-16

    Charge IC 是负责管理外部供电以及电池充放电,在MDM平台上采用的是比较便宜的ChargeIC,MP2617, 其作用也仅限于控制对电池充放电。下面就简单的介绍下内核中关于chargeIC的驱动,以及dts配置

    内核DTS

    关于chargeIC的配置在mdmxx_mtp.dtsi

	mp2617 {
		cell-index = <0>;
		compatible = "mps,mp2617";//match name
		mps,chg-current-ma = <1000>;//充电电流1A
		mps,chg-vbat-div = <3>; 
		mps,chg-en-gpio = <&msm_gpio 86 0>; //充电使能
		mps,chg-ok-gpio = <&msm_gpio 83 0>;//充电OK
		mps,ac-ok-gpio = <&msm_gpio 84 0>;//充电检测
		mps,chg-m0-gpio = <&msm_gpio 85 0>;//充电电流
		qcom,client-vadc = <&pmd9635_vadc>//PMIC
    };

    compatible 后续再驱动挂载的时候platform_driver_register 会匹配,如果匹配ok后调用驱动的probe函数,驱动在drivers/power中注明了compatible:

static const struct of_device_id mp2617_match[] = {
	{ .compatible = "mps,mp2617", },
	{ },
};

   mps,chg-en-gpio 、mps,chg-ok-gpio、 mps,ac-ok-gpio  、mps,chg-m0-gpio 为GPIO值

   qcom,client-vadc 指定了PMIC的node,同样也是在mdmxx_mtp.dtsi中,详细的在PMIC的部分再说。

  驱动

    主体在probe函数中,接下来对该函数简单的分析下:

static int mp2617_probe(struct platform_device *pdev)
{

	rc = mp2617_gpio_configs(chip);//读取dts中的gpio配置
	if (rc) {
		return rc;
	}

	rc = mp2617_apply_dt_configs(chip);//读取dts中其他配置,PMIC设备
	if (rc) {
		return rc;
	}

	rc = qpnp_vadc_read(chip->vadc_dev, P_MUX1_1_1, &results);//读取pmic中电压值
	init_voltage =  ((int)(results.physical * chip->charging_vbat_div)/1000);

	chip->psy.name			 = "battery";
	chip->psy.type			 = POWER_SUPPLY_TYPE_BATTERY;
	chip->psy.properties		 = mp2617_power_properties;
	chip->psy.num_properties	 = ARRAY_SIZE(mp2617_power_properties);
	chip->psy.get_property		 = mp2617_power_get_property;
	chip->psy.set_property		 = mp2617_power_set_property;
	chip->psy.property_is_writeable  = mp2617_property_is_writeable;
	chip->psy.external_power_changed = mp2617_external_power_changed;//配置变化后重新配置IC

	rc = power_supply_register(dev, &chip->psy);//注册power supply

	mp2617_external_power_changed(&chip->psy);//开始充电配置

	rc = mp2617_init_usb_detect(chip);//注册充电自动检测
	return rc;
}

mp2617_gpio_configs 函数是读取DTS中的gpio值

mp2617_apply_dt_configs 这个函数比较重要,他需要获取dts中配置的PMIC设备qcom,client-vadc = <&pmd9635_vadc>,后续可以从PMIC中获取相应的电压值。

qpnp_vadc_read就是从PMIC中获取电池电压

mp2617_external_power_changed 开始充电配置,这个是主要控制充电的步骤,初始化时不充电,后面中断函数中会再次调用

mp2617_init_usb_detect 初始化自动检测电池的中断以及相应的work

mp2617_init_usb_detect 中schedule_work(&chip->usb_plug_det.work),handler就是mp2617_usb_det_work_func

static void mp2617_usb_det_work_func(struct work_struct *work)
{
	struct mp2617_usb_plug_det_st *bdata =
		container_of(work, struct mp2617_usb_plug_det_st, work);
	int state = ((gpio_get_value_cansleep(bdata->gpio) ? 1 : 0) ^ bdata->active_low);//读取GPIO值

	if(bdata->usb_online != state) {
		if(1 == state) {
			handle_usb_insertion(bdata->chip);//usb插入
		} else {
			handle_usb_removal(bdata->chip);//usb移除
		}

		bdata->usb_online = state;
	} else {
		dev_err(&bdata->chip->client->dev, "some usb hotplug event may be lost\n");
	}

}

如果启动时未插入USB,那么就什么都不做,而是等待GPIO 中断,也是在mp2617_init_usb_detect注册的

static int mp2617_init_usb_detect(struct mp2617_chip *chip)
{
	chip->usb_plug_det.gpio = chip->charging_ac_ok_gpio;
	chip->usb_plug_det.irq = gpio_to_irq(chip->usb_plug_det.gpio);
	isr = mp2617_usb_det_isr;
	irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
	request_any_context_irq(chip->usb_plug_det.irq, isr, irqflags, "usb_plug_detect", (void *)&chip->usb_plug_det);

}

不管是启动就有USB,还是中断响应处理函数mp2617_usb_det_isr,最后都会调用上面det 的handler,mp2617_usb_det_work_func调用栈如下:

mp2617_usb_det_work_func
    ---handle_usb_insertion
        ---power_supply_set_present
            ---mp2617_power_set_property
                ---power_supply_changed
                    ---mp2617_external_power_changed//开始充电

sysfs

probe函数中已定义了支持的sys fs参数值

static enum power_supply_property mp2617_power_properties[] = {
	POWER_SUPPLY_PROP_HEALTH,
	POWER_SUPPLY_PROP_PRESENT,
	POWER_SUPPLY_PROP_VOLTAGE_MIN,
	POWER_SUPPLY_PROP_VOLTAGE_NOW,
	POWER_SUPPLY_PROP_TEMP,
	POWER_SUPPLY_PROP_CHARGING_ENABLED,
	POWER_SUPPLY_PROP_CURRENT_MAX,
	POWER_SUPPLY_PROP_TECHNOLOGY,
	POWER_SUPPLY_PROP_MODEL_NAME,
	POWER_SUPPLY_PROP_MANUFACTURER,
	POWER_SUPPLY_PROP_CHG_OK,
};

对应的get set handler分别为mp2617_power_get_property & mp2617_power_set_property

对应的sysfs为

charging_enabled 可以开关充电

temp 读取温度

current_max 最大充电电流

voltage_now 电池电压

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高通MDM平台-ChargeIC 的相关文章

  • 第2讲 KMD ISP子系统缩略词及目录结构

    QCOM Camera子系统缩略词介绍 CPAS Camera Peripherals and Support CDM Camera Data Mover TFE Thin Front End IFE Image Front End OPE
  • 骁龙435和骁龙625处理器哪个好?

    2016年2月 美国高通公司推出了三款中低端芯片 它们分别是骁龙425 骁龙435 骁龙625 这三款芯片配备更快的LTE网络基带 可实现全网通 骁龙425市场表现比较平淡 而骁龙625是目前较为热销的手机芯片 其中骁龙435也逐渐在市场活
  • MIPI-DSI 三种 Video Mode 理解

    D PHY的物理层支持HS High Speed 和LP Low Power 两种工作模式 HS模式 低压查分信号 功耗大 高速率 80M 1Gbps 信号幅值 100mv 300mv LP模式 单端信号 功耗小 速率低 lt 10Mbps
  • 高通平台MSM8916LCM模块移植(一)-bootloader部分

    目录 LK中LCM启动流程 oem panel select mdss dsi initialize read panel id 此次移植打算分成两个模块来说 bootloader部分和kernel部分 在实际的移植调试过程中也是这么分成了
  • Apple iOS MDM开发流程

    一年前曾参与一个企业移动平台项目 实现了通过MDM对iOS设备进行管理 由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享 并没有对具体实现的文档进行公开 所以这方面的资料非常少 现在把实现的过程分享给大家 希望能对大家有所帮
  • MDM命令操作介绍

    MDM涉及到的命令的操作介绍 一 Control Commands 控制类命令 1 Device Lock 设备锁屏 RequestType为RequestType 原文 Immediately locks the device If a
  • MIPI-DSI 三种 Video Mode 理解

    D PHY的物理层支持HS High Speed 和LP Low Power 两种工作模式 HS模式 低压查分信号 功耗大 高速率 80M 1Gbps 信号幅值 100mv 300mv LP模式 单端信号 功耗小 速率低 lt 10Mbps
  • 高通LK显示屏分辨率太大,下半部分显示异常-FB buff超了的问题

    问题解决 bootable bootloader lk include dev fbcon h define LOGO IMG OFFSET 12 1024 1024 改成 define LOGO IMG OFFSET 20 1024 10
  • LCD 亮度相关(背光) 正负压相关

    LCD 亮度相关 背光 kernel msm 3 18 drivers video msm mdss mdss fb c 调用led classdev register 注册lcd backlight sys class leds lcd
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 高通MDM平台-ChargeIC

    Charge IC 是负责管理外部供电以及电池充放电 在MDM平台上采用的是比较便宜的ChargeIC MP2617 其作用也仅限于控制对电池充放电 下面就简单的介绍下内核中关于chargeIC的驱动 以及dts配置 内核DTS 关于cha
  • 主数据管理系统(MDM)调研总结!!!

    文章目录 一 引言 1 1 主数据背景 1 2 主数据定义 1 3 主数据管理 1 3 1 什么是主数据管理系统 1 3 2 主数据管理的两体系一工具 1 3 3 主数据管理的挑战 1 4 主数据与其它数据的关系 1 4 1 主数据与元数据
  • 使用autonomousSingleAppModePermissionAppIDs和UIAccessibilityRequestGuidedAccessSession与Meraki一起作为MDM进入单一应用程序模式

    我使用 Apple Configurator 将少量设备设置为受监管 但是 我无法使用以下命令让应用程序成功进入单一应用程序模式UIAccessibilityRequestGuidedAccessSession API 我创建了一个配置文件
  • 在 MDM 中更新 iOS 设备中安装的配置文件

    我想将配置有效负载发送到设备 例如 我想向特定设备发送限制负载 禁止 safari 即我想更新设备上安装的配置文件 我是否需要以与发送查询有效负载相同的方式发送此配置文件有效负载 我是否需要包含设备上存在的配置文件的所有配置负载 或者只需发
  • 更新企业应用程序的 iOS 开发和 APNs 生产 [AirWatch]

    我为我的公司开发了一个 iOS 应用程序 我们通过 AirWatch 分发它 有些证书即将过期 试图弄清楚该怎么做是非常令人困惑的 我用谷歌搜索了一下 似乎每个页面都有不同的信息 如果有人能指出我正确的方向 我真的很高兴 我有一张 iOS
  • /profile 的 iOS MDM 注册配置文件请求使用 java 签署证书

    您好 我们正在尝试使用 java 创建 iOS MDM 服务器 我陷入了必须签署证书并发送 SCEP 的第一点 我首先将 enroll plist 文件发送到 ios 设备 作为响应 当我们从设备上单击 安装 时 我会收到来自 ios 设备
  • 如何访问 MDM 设置的 UWP 应用程序设置?

    我正在使用 EnterpriseModernAppManagement CSP 来安装和设置某些 UWP 应用程序的设置 如下定义 https msdn microsoft com en us library windows hardwar
  • 如何在整个组织内共享数据

    组织在多个部门和应用程序之间共享关键数据有哪些好方法 举个例子 假设有一个主要应用程序和数据库来管理客户数据 组织中还有十个其他应用程序和数据库读取该数据并将其与自己的数据关联起来 目前 这种数据共享是通过数据库 DB 链接 物化视图 触发
  • 如何使用 Android 管理 API 静默推送 apk 并通过 Android 设备策略安装它?

    我正在尝试将 APK 推送到设备并通过 Android 设备策略 设备所有者 安装它 而不是从 Play 商店推送应用程序 我可以使用以下方式推送 Play 商店上可用的应用程序 设备策略 packageName string instal
  • Android Lollipop 中应用程序外部配置文件和内部配置文件之间的数据传输

    相关问题安卓工作版 我的应用程序是一个设备管理员特权应用程序 现在我修改了创建托管工作配置文件并将其自身设置为配置文件所有者的代码 问题是 如果我upgrade我的应用程序 它成为设备管理员的配置文件所有者 现在将会有两份我的应用程序 一个

随机推荐

  • 浅谈伺服电机三种控制方式

    速度控制和转矩控制都是用模拟量来控制的 位置控制是通过发脉冲来控制的 具体采用什么控制方式要根据客户的要求 满足何种运动功能来选择 如果您对电机的速度 位置都没有要求 只要输出一个恒转矩 当然是用转矩模式 如果对位置和速度有一定的精度要求
  • Vue中Rule的使用

    日常的rule效验 能帮我们省很多时间去做if eles判断 下边记录一下我在入职新公司的使用 1 需要效验的字段 要在from item上家prop属性 可以和字段同名 2 在data中创建一个rules对象 绑定当前的from表单 并把
  • dev c++无法识别汇编代码_新手福利丨超详细的Tengine GEMM矩阵乘法汇编教程

    很多刚入门Tengine的开发者想研读Tengine汇编代码 却苦于没有好的汇编入门教程 没有大神带入门 自己看又看不懂 怎么办 福利来了 Tengine带来了一份超详细的gemm汇编教程 GEMM简介 什么是GEMM 它的英文全称是 GE
  • 常见服务知识点罗列--haproxy/keepalived

    一 haproxy 1 haproxy配置的主要模块 global defaults 主要功能 实现负载均衡 root k8s ha1 vim etc haproxy haproxy cfg listen k8s 6443 bind 192
  • Prometheus监控 controller-manager scheduler etcd

    用prometheus插件监控kubernetes控制平面 例如 您使用kubeadm构建k8s集群 然后kube控制器管理器 kube调度程序和etcd需要一些额外的工作来进行发现 create service for kube cont
  • 利用pandas生成csv文件和读取csv文件中的方法

    方法一 1 我构造了一个cont list 结构为列表嵌套字典 字典是每一个样本 类似于我们爬虫爬下来的数据的结构 2 利用pd DataFrame方法先将数据转换成一个二维结构数据 如下方打印的内容所示 cloumns指定列表 列表必须是
  • MySQL主从复制与读写分离

    目录 主从复制与读写分离 读写分离 MySQL 读写分离原理 读写分离分类 主从复制 mysq支持的复制类型 主从复制的工作过程 MySQL主从复制延迟 搭建 MySQL主从复制 搭建 MySQL读写分离 主从复制与读写分离 在实际的生产环
  • python拆解字典中包含list的数据,全排列全部组合

    效果就是把类似 my dict config 1 1 2 3 4 config 2 test config 3 4 config 4 a b config 5 a 这样的数据拆解为 config 2 test config 3 4 conf
  • vue中使用vue-touch

    如果想让vue能够监听移动端的上滑 下滑 左滑 点击等等动作 可以使用vue touch插件 vue touch的使用十分简单 首先在vue项目中安装vue touch npm install vue touch next save 然后在
  • Unknown column in ‘where clause‘ 报错异常

    这时候我们首先要想到肯定是sql出现问题 打印出sql语句 用查询来执行 明显 在需要查询的字段 应该是加上引号 正确查询如下 解决方法 修改拼接查询语句的函数 在用测试类测试 完美解决
  • Matlab实战系列(一)——一些常用的绘图语句

    之前一直用Python的matplotlib pyplot包画图 很少用matlab 这次作业想用一下发现很多调整画图版式的函数都不太会用 网上系统一点的代码也不多 于是写一篇这个记录一下 母函数plot plot lambda R col
  • python---三元表达式

    三元表达式适用于二选一的场景 其结构为 值1 if 条件 else 值2 条件如果成立则使用值1 if前面的数据 条件如果不成立则使用值2 else后面的数据 写一个电影系统 需要决定电影是否收费 is change input 是否收费
  • 动手深度学习13:计算机视觉——语义分割、风格迁移

    文章目录 一 语义分割 1 1 语义分割简介 1 2 Pascal VOC2012 语义分割数据集 1 2 1下载 读取数据集 1 2 2 构建字典 RGB颜色值和类名互相映射 1 2 3 数据预处理 1 2 4 整合所有组件 读取Pasc
  • 栈的原理以及应用(制作一个简单的计算器)

    说在前面 其实有一段时间没有更新了 主要是这段时间学习了很多很多的新东西 现在也渐渐做一些整理 栈 stack 1 基础介绍 1 栈是一种先入后出 FILO 的有序列表 2 栈是限制线性表中元素插入和删除只能在线性表同一侧进行的一种特殊线性
  • STM32G031 HAL库TIM2 PWM使用 占空比可调

    废话不多直接上代码 void HAL TIM MspPostInit GPIO InitTypeDef GPIO InitStruct 0 HAL RCC GPIOA CLK ENABLE GPIO InitStruct Pin GPIO
  • 飞凌RZ/G2L的开发板实上的时视频编码推流设计与实现

    飞凌RZ G2L的开发板测评 实时视频编码推流设计与实现 大信 QQ 8125036 在完成RZ G2L板上视频采集的试用测试基础上 逐渐熟悉了RZ G2L开发板的SDK 在研究过它的音视频硬件与软件包后 想进一步利用该开发板做音视频的深度
  • YOLOv5算法原理与网络结构

    YOLOv5算法原理与网络结构 1 1 YOLOv5算法 YOLOv5算法共有4种网络结构 分别是YOLOv5s YOLOv5m YOLOv5l和YOLOv5x 这四种网络结构在宽度和深度上不同 原理上基本一样 接下来以 YOLOv5s 为
  • 【MySQL】 Linux平台MySQL安装

    Linux平台MySQL安装 太淦了 Linux平台MySQL安装 方式1 使用包管理器进行自动安装 方式2 编译源代码安装 1 下载源代码 1 1在 官网 https dev mysql com downloads mysql 下载源代码
  • 黑盒测试靶机(cmcc)以及对应系统加固方案

    目录 一 信息收集 二 进入web界面 三 redis 6379连接 四 连接蚁剑成功 这是个沙箱 五 redis入手 使用密钥连接 六 尝试docker越狱 七 针对docker进行入侵排查 从系统层面 1 检查进程 2 木马样本可以保留
  • 高通MDM平台-ChargeIC

    Charge IC 是负责管理外部供电以及电池充放电 在MDM平台上采用的是比较便宜的ChargeIC MP2617 其作用也仅限于控制对电池充放电 下面就简单的介绍下内核中关于chargeIC的驱动 以及dts配置 内核DTS 关于cha