文檔說明
本文檔以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可能負載了多路設備,設置的電壓值過高可能會燒壞其他負載設備,切記!