高通8916 PMIC休眠关闭LDO 解决LCM极化问题
案例:在调试qcom msm8916 + PM8916平台的时候,遇到一个bug,LCM休眠时候,vdd引脚电压没有拉低,电压还是2.85V,造成1920X1200nt51021b 京东方8寸LCM调试的时候经常因为系统休眠或者不断重启,LCM极化,造成闪屏,或者不能正常显示的问题。
调试经过:
通过查看原理图发现,vdd使用了LDO17作为电源,LDO17在系统休眠的时候没有关闭。
在/sys文件系统下面留有两个调试接口:
/sys/kernel/debug/regulator/pm8917_l17
/sys/class/regulator/regulator.27/
我们使用/sys/kernel/debug/regulator/pm8917_l17
可以看到,一共有两个设备用了l17。其实通过echo 0 >enable两次也可以实现关闭l17,但是就很奇怪为什么要两次才起作用,不禁联想到,ldo被其他设备占用了,而休眠的时候没有关闭。
第一个就是lcm用到的vdd: 1a94000.qcom,mdss_dsi_ctrl0-vdd
在LA.BR.1.2.4-05310-8x16.0\kernel\arch\arm\boot\dts\qcom\msm8916-mdss.dtsi
中配置的vdd
mdss_dsi0:qcom,mdss_dsi@1a98000 {compatible= "qcom,mdss-dsi-ctrl";label= "MDSS DSI CTRL->0";cell-index= <0>;reg= <0x1a98000 0x25c>,<0x1a98500 0x2b0>,<0x193e000 0x30>;reg-names= "dsi_ctrl", "dsi_phy", "mmss_misc_phys";qcom,mdss-fb-map= <&mdss_fb0>;qcom,mdss-mdp= <&mdss_mdp>;gdsc-supply= <&gdsc_mdss>;vdda-supply= <&pm8916_l2>;vdd-supply = <&pm8916_l17>;vddio-supply= <&pm8916_l6>;
Mdss_mdp.c (drivers\video\msm\mdss)中解析vdd(注意devm_regulator_get函数会将vdd补全为vdd-supply):
mdata->fs = devm_regulator_get(&mdata->pdev->dev, "vdd");
在Mdss_mdp.c中提供了一个对mdata->fs LDO的控制方法:
static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
在休眠函数里,定义了关闭LDO17的方法:
static inline intmdss_mdp_suspend_sub(struct mdss_data_type *mdata)
{mdata->suspend_fs_ena= mdata->fs_ena;mdss_mdp_footswitch_ctrl(mdata, false);pr_debug("suspenddone fs=%d\n", mdata->suspend_fs_ena);return0;
}
所以,LDO17没有正常关闭很有可能是另外一个驱动中申请使用后,suspend函数没有关闭造成的!下面分析一下3-005d-vdd。
地址为0x5d的是在
\kernel\arch\arm\boot\dts\qcom\msm8916-qrd-skui-slm755-public.dts
中定义的
i2c@78b9000{ /* BLSP1 QUP5 */goodix@5d {compatible = "goodix,gt9xx";reg = <0x5d>;interrupt-parent = <&msm_gpio>;interrupts = <13 0x2008>;reset-gpios = <&msm_gpio 12 0x00>;interrupt-gpios = <&msm_gpio 13 0x00>;vdd-supply = <&pm8916_l17>;vcc-i2c-supply = <&pm8916_l6>;……};
在驱动中:kernel/drivers/input/touchscreen/gt9xx/gt928.c
static int goodix_ts_suspend(struct device*dev)函数里面并没有出现关闭LDO的操作,所以我们在里面加入一行代码:
regulator_disable(ts->vdd);
当然,也需要在resume中打开ldo17
在函数static int goodix_ts_resume(struct device *dev)加入:
ret= regulator_enable(ts->vdd);if(ret) {printk(KERN_ERR"eliot regulator_enable err...\n");}
重新编译,打包下载实验。LDO17在lcm休眠的时候关闭了!!!
除了上述在使用ldo17驱动的suspend函数中关闭ldo的做法外,还有休眠的时候统一关闭LDO17的方法,qcom回复如下:
Dear customer
Try :
rpm_proc/core/systemdrivers/pmic/config/msm8916/pm_config_target.c
#if 1
sleep_register_type sleep_enter_info[] =
{
{1,0x5046,0x00}, //disable LDO17
{0, 0xFFFF, 0x00}, //invalid setting, used to check the end of the array.
};
sleep_register_type sleep_exit_info[] =
{
{1,0x15046,0x80},
{0, 0xFFFF, 0x00},
};
#endif
因为是modem部分的代码,没有权限访问,所以就没有实验这种方法是否可行了。
总结:休眠关闭电源是驱动应该要做的,也是平台功耗问题应该尽量避免的。高通建议使用第一种方法,谁使用谁关闭的做法,如果一组LDO被多个驱动所使用,还是应该在驱动的suspend中加入regulator_disable操作。
高通8916 PMIC休眠关闭LDO 解决LCM极化问题相关推荐
- 高通SM8450使用PCAT烧录失败解决办法
报错: ERROR =====: Failed to load the software build on the device - Qualcomm HS-USB QDLoader 9008 (CO ...
- 切换基站+android+高通,你以为手机信号不好只是基站问题,高通骁龙modem也能解决你的信号难题...
如今手机内部结构越来越复杂,个中包含的芯片数量不比当年的台式电脑差多少.但是不少用户在遇见手机信号差.甚至手机没信号等问题时,第一时间还是想到把问题推给运营商. 你以为运营商辛苦架设的基站应该为信号不 ...
- 高通平台 pmic—gpio修改(2)
根据上一篇文章中的结论:如果在xbl阶段希望修改pmic相关的gpio,可以查看这个gpio是否已经有功能对其进行初始化.那么需要考虑一种情况:如果这个gpio从未被用过呢?因此本篇就是从根本上解决这 ...
- [高通MSM8953_64][Android10]默认关闭蓝牙以及开启蓝牙状态栏不显示图标
文章目录 开发平台基本信息 问题描述 解决方法 1.默认关闭蓝牙 2.开启蓝牙状态栏不显示图标 开发平台基本信息 芯片: MSM8953_64 版本: Android 10 kernel: msm-4 ...
- android camera(3)--- 高通平台8916 camera移植
物联网即将到来的明天,是各个岗位都需要人才的明天,不是别的不重要,是硬件一样重要,系统开发一样重要,驱动开发一样重要,结构MD一样重要...... 注:此文档以在高通8916平台移植OV5648为例, ...
- 新闻微软谷歌曾私下表达反对博通收购高通 害怕苹果更强
CNBC电视台网站援引消息人士的说法称,微软和谷歌等公司都在私下里就博通收购高通的可能性表达了担忧. 消息人士表示,这些公司担心,苹果对这笔交易可能产生影响.此外,它们也担心博通更注重削减成本,而不是 ...
- 高通SDM450平台的LDO 输出与电压调节
开始之前,首先我们要知道什么是LDO?有什么作用?LDO调试需要调哪些? 什么是LDO,有什么作用? LDO为 低压线性稳压器,高通平台有多路LDO电压输出,以SDM450 为例 共有 LDO1~LD ...
- 美团百度联合布局无人驾驶外卖;高通裁员千人;英特尔关闭可穿戴业务 | CSDN极客头条...
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 「CSDN 极客头条」是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报 ...
- iPhone最让人头疼的问题有望解决了,2020年将使用高通基带
11月27日,据外媒消息,2020年新的iPhone将会换用高通基带,全面取消现用的英特尔基带.今年上半年,苹果公司已经和高通和解并达成了合作协议. 据悉,2020年的iPhone产品将全面搭载高通最 ...
最新文章
- 对话吴恩达:为什么说制造业会是首个聚焦AI转型的行业?
- 基于大数据的Uber数据实时监控(Part 2:Kafka和Spark Streaming)
- R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、指定行标识符变量、并自定义生成的长表的标识符列的名称
- 杭电多校(四)2019.7.31--暑假集训
- 关于 UDP Hole Punching 的资料
- 在中WebBrowser加载Excel后获取excel对象
- for each循环_Power Query — 循环初步
- php checkbox 保存,PHP中在数据库中保存Checkbox数据
- 【MySQL】MySQL常见的读写分离方法
- 1041. 考试座位号(15)-PAT乙级真题
- android导航使用教程,android BottomNavigationView的简单使用教程
- Proteus添加新的元件库
- “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
- 毕业设计写作基本步骤
- 计算机网络篇- 网络层
- html5 LivePlayer 实时播放rtmp
- STM32F103系列的单片机一共有11个定时器
- 日期转换 例如 二零零六年十二月二十一日 转换成 2006年12月21日
- Mac电脑下Chorm浏览器preflight(预检)的调整
- 本月,我最推荐的重疾保险性价比排行榜
热门文章
- SPOJ 78 Marbles 组合数学
- 基于k8s的纵向扩容介绍(VPA)
- Stripes视图框架与Struts2之间的比较
- Android6.0 PackageManagerService卸载应用
- Android 推出隐私沙盒
- 猿创征文|基于物联网的门禁与考勤系统_阿里云_2022
- GitHub图标SVG版本
- oracle很常用的语句
- Your task is to find for a given phone number any of its divisions into groups of two or three digit
- 20145326蔡馨熠 实验三 敏捷开发与XP实践