高通MSM8909平台L1系统修改LDO电压值
文档说明
本文档以SC806-CN-00(MSM8909平台)为例,说明如何修改LDO电压值。
修改方法
以修改LDO5,从1.8V改为1.9V为例。
首先查看PM8909的IC specification,确保想要修改的电压值在芯片支持的范围内,如下:
可以看出,L5支持的电压范围为1.75~3.337V,默认电源值为1.8V。
下面是软件修改方法,软件里面需要修改的地方如下:
1)修改BP源码部分RPM电源输出范围配置值。
文件路径:
rpm_proc/core/systemdrivers/pmic/config/msm8909/pm8909/pm_config_target.c
修改ldo_rail_a数组内容:
/* LpHpCurrentThreshold, SafetyHeadRoom, IsSawControlled, AccessAllowed, AlwaysOn, MinPwrMode, BypassDisallowed, DroopDetect, MinVoltage, MaxVoltage, MinSettlingTime, SettlingErrorEnabled, SettlingEnabled, Reserved */ pm_rpm_ldo_rail_info_type ldo_rail_a[] = { ... ... {5, 150, 0, PM_ACCESS_ALLOWED, PM_ALWAYS_ON, PM_NPA_SW_MODE_LDO__IPEAK, PM_NPA_BYPASS_DISALLOWED, PM_DROOP_DETECT_DIS, 1800, 1800, 0, PM_SETTLING_ERR_EN, PM_SETTLING_EN, 0}, // LDO5 LDO LV_P300 ... ... };
其中 1800,1800 表示该路LDO支持的最小电压和最大电压,这里表示LDO5稳定输出1.8V;PM_ALWAYS_ON表示该路LDO上电后一直处于打开状态(灭屏休眠也有输出),与之相对的,如果需要使用时才打开,这里设置成PM_NONE。
将上面的电源范围改为1900,1900即为输出1.9V了,修改后如下:
pm_rpm_ldo_rail_info_type ldo_rail_a[] = { ... ... {5, 150, 0, PM_ACCESS_ALLOWED, PM_ALWAYS_ON, PM_NPA_SW_MODE_LDO__IPEAK, PM_NPA_BYPASS_DISALLOWED, PM_DROOP_DETECT_DIS, 1900, 1900, 0, PM_SETTLING_ERR_EN, PM_SETTLING_EN, 0}, // LDO5 LDO LV_P300 ... ... };
2)修改AP源码部分DTS文件中的电源输出范围配置。
文件路径:
kernel/arch/arm/boot/dts/qcom/sc806-evk/msm8909-regulator.dtsi
【注】路径中的sc806-evk表示当前项目目录,具体配置哪个项目则进入哪个目录。
修改节点rpm-regulator-ldoa5的输出电压配置,如下:
rpm-regulator-ldoa5 { status = "okay"; pm8909_l5: regulator-l5 { status = "okay"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; qcom,init-voltage = <1800000>; }; };
将其中最小电压,最大电压和初始化电压改为1900000即可:
rpm-regulator-ldoa5 { status = "okay"; pm8909_l5: regulator-l5 { status = "okay"; regulator-min-microvolt = <1900000>; regulator-max-microvolt = <1900000>; qcom,init-voltage = <1900000>; }; };
3)修改使用LDO5电源的模块对该路电源的电压配置。
【注】前面两步仅用于限制该路电源的电压输出范围以及初始输出电压。具体使用时还需要根据模块所需的电压值对该路电压进行实际配置,如果原本想要配置的电压已经在上述配的范围之内,则前两步可省略,直接在模块配置部分进行电压值修改即可(由于上述LDO5上下限电压都是1.9V,所以相关模块配置该路电源也只能配1.9V)。
一般模块对于所用电源的配置都在dts文件中完成(少数也会直接在.c源码文件中配置,这类需要根据log信息去查找配置的地方)。可以在 kernel/arch/arm/boot/dts/qcom/sc806-evk/ 目录下搜索“pm8909_l5”关键字,如下:
然后到具体引用该路LDO电源的dtsi文件中查看是否对该路电源进行了电压配置,如 msm8909-mtp.dtsi 文件中对该路电源配置如下:
&sdhc_1 { ... ... vdd-io-supply = <&pm8909_l5>; qcom,vdd-io-always-on; qcom,vdd-io-lpm-sup; qcom,vdd-io-voltage-level = <1800000 1800000>; qcom,vdd-io-current-level = <200 60000>; ... ... status = "ok"; };
可以看出,这是sd卡驱动部分的配置,将其中电压改成1900000即可:
&sdhc_1 { ... ... vdd-io-supply = <&pm8909_l5>; qcom,vdd-io-always-on; qcom,vdd-io-lpm-sup; qcom,vdd-io-voltage-level = <1900000 1900000>; qcom,vdd-io-current-level = <200 60000>; ... ... status = "ok"; };
其他dts文件中的配置修改类同。
【注】如果引用该路LDO电源的电压值未改,则开机会停留在开机logo界面无法进入系统,uart log会提示如下信息:
[ 4.603222] sdhci-pltfm: SDHCI platform and OF driver helper
[ 4.613321] pm8909_l5: requested voltage range [1800000, 1800000] does not fit within constraints: [1900000, 1900000]
[ 4.622933] sdhci_msm_vreg_set_voltage: regulator_set_voltage(vdd-io)failed. min_uV=1800000,max_uV=1800000,ret=-22
可根据这条log的上下文信息知道哪个模块使用了该路LDO且配置的电压超出了限制范围,进而进行修改即可。
【注】上述LDO5仅用于测试性修改,实际修改LDO电压时务必谨慎!因为有些LDO可能负载了多路设备,设置的电压值过高可能会烧坏其他负载设备,切记!