Tina Linux PMU開發(fā)指南
1 前言
1.1 文檔簡介
介紹使用Tina PMU 驅動的使用方法。
1.2 目標讀者
適用于使用全志AXP 平臺PMU 的開發(fā)人員。
1.3 適用范圍
?
表1-1: 適用SOC 平臺及AXP 對應表
?
產(chǎn)品名稱 | 內核版本 | AXP 型號 |
---|---|---|
R818 | Linux-4.9 | AXP717 |
2 模塊介紹
2.1 模塊功能介紹
PMU,負責系統(tǒng)各個模塊供電、按鍵開關機、電池充放電管理。
2.2 相關術語介紹
?
表2-1: 術語簡介
?
術語 | 說明 |
---|---|
PMU | 電源管理單元,主要包括regulator、power supply、gpio、power key 這四個子功能部分。 |
AXP | 全志PMU 平臺的系列名稱,如AXP803、AXP717 等。 |
LDO | 是low dropout regulator,意為低壓差線性穩(wěn)壓器。線性穩(wěn)壓器使用 在其線性區(qū)域內運行的晶體管或FET,從應用的輸入電壓中減去超額的 電壓,產(chǎn)生經(jīng)過調節(jié)的輸出電壓。 |
DC-DC | 是直流變直流,即不同直流電源值之間的轉換,只要符合這個定義都可 以叫DC-DC 轉換器,也包括LDO。但是一般的說法是把直流變直流由 開關方式實現(xiàn)的器件叫DCDC。 |
regulator | Linux 內核對LDO、DC-DC 的管理核心。 |
USB-Power- Supply | USB 接口對系統(tǒng)的供電。 |
ACIN-Power- Supply | 適配器ACIN 對系統(tǒng)的供電。 |
BAT-Power- Supply | 電池BAT 對系統(tǒng)的供電。 |
Power-Supply | Linux 內核對USB、ACIN、BAT 供電的管理核心。 |
MFD | Multi Function Device,Linux 內核對多功能設備PMU 的管理核心 |
regmap | Linux 內核用于管理片外模塊寄存器的方法。 |
2.3 模塊配置介紹
2.3.1 Device Tree 配置說明
在Tina 系統(tǒng)中,有兩種dts 文件。一是用于保存芯片所有平臺的模塊配置${CHIP}.dtsi,二是保存每一個板級平臺的設備信息的board.dts。兩者的區(qū)別主要是:前
者主要保存芯片相關的配置,不管芯片外圍換什么硬件,芯片配置還是保持不變的。而后者是用于保存不同版型之間差異化的配置。 PMU 模塊的dts 配置是在board.dts 中,dtsi 中無用戶可用配置。
2.3.1.1 board.dts 配置說明
board.dts 路徑為:${ROOT_DIR}/device/config/chips/${PLATFORM}/configs/${TARGET}/board.dts 說明 ${ROOT_DIR}:是tina SDK 根目錄 ${PLATFORM}:是芯片型號,如r818 ${TARGET}:是版級型號,如evb1
技巧 board.dts 所在在版級配置目錄,tina SDK 環(huán)境中,在source build/envsetup.sh 后,可通過“cconfigs” 命令直接跳轉過去配置目錄。 board.dts 就在版本配置目錄的上一級,再通過“cd ..” 即可到達board.dts 所在的目錄。
PMU 一共包含了regulator,power supply,power key,PMU 在內核中的設備是多個設備同時存在,并存在層次對應關系。
PMU主設備(MFD)
|
+------> regulator device
|
+------> power key device
|
+------> power supply device
|
+------> wdt device
說明
AXP717 在內核中使用的是名為axp2202 的軟件框架,因此在dts 文件中。型號采用軟件框架的名字,而不配置為axp717。同理,在sysconfig.fex 和kernel
menuconfig 中也一樣。
pmu0: pmu@34 {
compatible = "x-powers,axp2202";
reg = <0x34>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
interrupt-parent = <&nmi_intc>;
x-powers,drive-vbus-en;
pmu_reset = <0>;
pmu_irq_wakeup = <1>;
pmu_hot_shutdown = <1>;
wakeup-source;
//interrupt-controller;
//#interrupt-cells = <1>;
usb_power_supply: usb_power_supply {
compatible = "x-powers,axp2202-usb-power-supply";
pmu_usbpc_vol = <4600>;
pmu_usbpc_cur = <500>;
pmu_usbad_vol = <4000>;
pmu_usbad_cur = <2500>;
pmu_boost_vol = <5126>;
pmu_bc12_en;
pmu_cc_logic_en = <1>;
/* pmu_boost_en; */
pmu_usb_typec_used = <1>;
wakeup_usb_in;
wakeup_usb_out;
status = "okay";
};
/* cvin */
gpio_power_supply: gpio_power_supply {
compatible = "x-powers,gpio-supply";
status = "disabled";
wakeup_gpio;
};
bat_power_supply: bat-power-supply {
compatible = "x-powers,axp2202-bat-power-supply";
param = <&axp2202_parameter>;
status = "okay";
pmu_battery_rdc= <147>;
pmu_battery_cap = <1771>;
pmu_runtime_chgcur = <1000>;
pmu_suspend_chgcur = <1500>;
pmu_shutdown_chgcur = <1500>;
pmu_terminal_chgcur = <128>;
pmu_init_chgvol = <4200>;
pmu_battery_warning_level1 = <15>;
pmu_battery_warning_level2 = <0>;
pmu_chgled_func = <0>;
pmu_chgled_type = <0>;
pmu_bat_para1 = <0>;
pmu_bat_para2 = <0>;
pmu_bat_para3 = <0>;
pmu_bat_para4 = <0>;
pmu_bat_para5 = <0>;
pmu_bat_para6 = <0>;
pmu_bat_para7 = <2>;
pmu_bat_para8 = <3>;
pmu_bat_para9 = <4>;
pmu_bat_para10 = <6>;
pmu_bat_para11 = <9>;
pmu_bat_para12 = <14>;
pmu_bat_para13 = <26>;
pmu_bat_para14 = <38>;
pmu_bat_para15 = <49>;
pmu_bat_para16 = <52>;
pmu_bat_para17 = <56>;
pmu_bat_para18 = <60>;
pmu_bat_para19 = <64>;
pmu_bat_para20 = <70>;
pmu_bat_para21 = <77>;
pmu_bat_para22 = <83>;
pmu_bat_para23 = <87>;
pmu_bat_para24 = <90>;
pmu_bat_para25 = <95>;
pmu_bat_para26 = <99>;
pmu_bat_para27 = <99>;
pmu_bat_para28 = <100>;
pmu_bat_para29 = <100>;
pmu_bat_para30 = <100>;
pmu_bat_para31 = <100>;
pmu_bat_para32 = <100>;
pmu_bat_temp_enable = <0>;
pmu_bat_charge_ltf = <1105>;
pmu_bat_charge_htf = <121>;
pmu_bat_shutdown_ltf = <1381>;
pmu_bat_shutdown_htf = <89>;
pmu_bat_temp_para1 = <2814>;
pmu_bat_temp_para2 = <2202>;
pmu_bat_temp_para3 = <1737>;
pmu_bat_temp_para4 = <1381>;
pmu_bat_temp_para5 = <1105>;
pmu_bat_temp_para6 = <890>;
pmu_bat_temp_para7 = <722>;
pmu_bat_temp_para8 = <484>;
pmu_bat_temp_para9 = <332>;
pmu_bat_temp_para10 = <233>;
pmu_bat_temp_para11 = <196>;
pmu_bat_temp_para12 = <166>;
pmu_bat_temp_para13 = <141>;
pmu_bat_temp_para14 = <121>;
pmu_bat_temp_para15 = <89>;
pmu_bat_temp_para16 = <66>;
wakeup_bat_out;
/* wakeup_bat_in; */
/* wakeup_bat_charging; */
/* wakeup_bat_charge_over; */
/* wakeup_low_warning1; */
/* wakeup_low_warning2; */
/* wakeup_bat_untemp_work; */
/* wakeup_bat_ovtemp_work; */
/* wakeup_bat_untemp_chg; */
/* wakeup_bat_ovtemp_chg; */
};
powerkey0: powerkey@0 {
compatible = "x-powers,axp2101-pek";
pmu_powkey_off_time = <6000>;
pmu_powkey_off_func = <0>;
pmu_powkey_off_en = <1>;
pmu_powkey_long_time = <1500>;
pmu_powkey_on_time = <512>;
wakeup_rising;
wakeup_falling;
status = "okay";
};
regulator0: regulators@0 {
reg_dcdc1: dcdc1 {
regulator-name = "axp2202-dcdc1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1540000>;
regulator-ramp-delay = <2500>;
regulator-enable-ramp-delay = <1000>;
regulator-boot-on;
regulator-always-on;
};
reg_dcdc2: dcdc2 {
regulator-name = "axp2202-dcdc2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-ramp-delay = <2500>;
regulator-enable-ramp-delay = <1000>;
regulator-boot-on;
regulator-always-on;
};
reg_dcdc3: dcdc3 {
regulator-name = "axp2202-dcdc3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1840000>;
regulator-ramp-delay = <2500>;
regulator-enable-ramp-delay = <1000>;
regulator-always-on;
};
reg_dcdc4: dcdc4 {
regulator-name = "axp2202-dcdc4";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <3700000>;
regulator-ramp-delay = <2500>;
regulator-enable-ramp-delay = <1000>;
};
reg_rtcldo: rtcldo {
/* RTC_LDO is a fixed, always-on regulator */
regulator-name = "axp2202-rtcldo";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-boot-on;
regulator-always-on;
};
reg_aldo1: aldo1 {
regulator-name = "axp2202-aldo1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_aldo2: aldo2 {
regulator-name = "axp2202-aldo2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_aldo3: aldo3 {
regulator-name = "axp2202-aldo3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
regulator-always-on;
regulator-boot-on;
};
reg_aldo4: aldo4 {
regulator-name = "axp2202-aldo4";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
regulator-always-on;
regulator-boot-on;
};
reg_bldo1: bldo1 {
regulator-name = "axp2202-bldo1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_bldo2: bldo2 {
regulator-name = "axp2202-bldo2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
regulator-boot-on;
regulator-always-on;
};
reg_bldo3: bldo3 {
regulator-name = "axp2202-bldo3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_bldo4: bldo4 {
regulator-name = "axp2202-bldo4";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_cldo1: cldo1 {
regulator-name = "axp2202-cldo1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_cldo2: cldo2 {
regulator-name = "axp2202-cldo2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_cldo3: cldo3 {
regulator-name = "axp2202-cldo3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-ramp-delay = <2500>;
regulator-enable-ramp-delay = <1000>;
regulator-boot-on;
};
reg_cldo4: cldo4 {
regulator-name = "axp2202-cldo4";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3500000>;
regulator-enable-ramp-delay = <1000>;
};
reg_cpusldo: cpusldo {
/* cpus */
regulator-name = "axp2202-cpusldo";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1400000>;
regulator-boot-on;
regulator-always-on;
};
reg_drivevbus: drivevbus {
regulator-name = "axp2202-drivevbus";
regulator-enable-ramp-delay = <1000>;
};
};
virtual-dcdc1 {
compatible = "xpower-vregulator,dcdc1";
dcdc1-supply = ;
};
virtual-dcdc2 {
compatible = "xpower-vregulator,dcdc2";
dcdc2-supply = ;
};
virtual-dcdc3 {
compatible = "xpower-vregulator,dcdc3";
dcdc3-supply = ;
};
virtual-dcdc4 {
compatible = "xpower-vregulator,dcdc4";
dcdc4-supply = ;
};
virtual-rtcldo {
compatible = "xpower-vregulator,rtcldo";
rtcldo-supply = ;
};
virtual-aldo1 {
compatible = "xpower-vregulator,aldo1";
aldo1-supply = ;
};
virtual-aldo2 {
compatible = "xpower-vregulator,aldo2";
aldo2-supply = ;
};
virtual-aldo3 {
compatible = "xpower-vregulator,aldo3";
aldo3-supply = ;
};
virtual-aldo4 {
compatible = "xpower-vregulator,aldo4";
aldo4-supply = ;
};
virtual-bldo1 {
compatible = "xpower-vregulator,bldo1";
bldo1-supply = ;
};
virtual-bldo2 {
compatible = "xpower-vregulator,bldo2";
bldo2-supply = ;
};
virtual-bldo3 {
compatible = "xpower-vregulator,bldo3";
bldo3-supply = ;
};
virtual-bldo4 {
compatible = "xpower-vregulator,bldo4";
bldo4-supply = ;
};
virtual-cldo1 {
compatible = "xpower-vregulator,cldo1";
cldo1-supply = ;
};
virtual-cldo2 {
compatible = "xpower-vregulator,cldo2";
cldo2-supply = ;
};
virtual-cldo3 {
compatible = "xpower-vregulator,cldo3";
cldo3-supply = ;
};
virtual-cldo4 {
compatible = "xpower-vregulator,cldo4";
cldo4-supply = ;
};
virtual-cpusldo {
compatible = "xpower-vregulator,cpusldo";
cpusldo-supply = ;
};
virtual-drivevbus {
compatible = "xpower-vregulator,drivevbus";
drivevbus-supply = ;
};
axp_gpio0: axp_gpio@0 {
gpio-controller;
#size-cells = <0>;
#gpio-cells = <6>;
status = "okay";
};
};
/{
axp2202_parameter:axp2202-parameter {
select = "battery-model";
battery-model {
parameter = /bits/ 8 <0x01 0xf5 0x40 0x00 0x1b 0x1e 0x28 0x0f
0x0c 0x1e 0x32 0x02 0x14 0x05 0x0a 0x04
0x74 0xfb 0xc8 0x0d 0x43 0x10 0x36 0xfb
0x46 0x01 0xea 0x0d 0x2a 0x06 0x36 0x05
0xf4 0x0a 0xb5 0x0f 0x42 0x0e 0xe6 0x09
0x9a 0x0e 0x42 0x0e 0x3b 0x04 0x2d 0x04
0x23 0x09 0x18 0x0e 0x09 0x0e 0x04 0x08
0xf7 0x0d 0xda 0x0d 0xd0 0x03 0xbb 0x03
0x9d 0x08 0x7f 0x0d 0x6a 0x0d 0x55 0x07
0xc2 0x57 0x2b 0x27 0x1e 0x0d 0x14 0x08
0xc5 0x98 0x7e 0x66 0x4e 0x44 0x38 0x1a
0x12 0x0a 0xf6 0x00 0x00 0xf6 0x00 0xf6
0x00 0xfb 0x00 0x00 0xfb 0x00 0x00 0xfb
0x00 0x00 0xf6 0x00 0x00 0xf6 0x00 0xf6
0x00 0xfb 0x00 0x00 0xfb 0x00 0x00 0xfb
0x00 0x00 0xf6 0x00 0x00 0xf6 0x00 0xf6>;
};
};
};
說明 PMU 為I2C 設備,PMU 設備配置需要寫在i2c 節(jié)點內。
? PMU 屬性配置
reg
i2c寄存器地址
interrupts
中斷配置,參考內核中斷配置文檔
interrupt-parent
上級中斷控制器結點
wakeup-source
是否作為喚醒源
0:disable
1:enable
x-powers,drive-vbus-en
set N_VBUSEN pin as an output pin to control an external regulator to drive VBus
pmu_reset
when power key press longer than 16s, PMU reset or not.
0: not reset
1: reset
pmu_irq_wakeup
press irq wakeup or not when sleep or power down.
0: not wakeup
1: wakeup
pmu_hot_shutdown
when PMU over temperature protect or not.
0: disable
1: enable
? power_supply 配置
power supply 屬性配置,包括usb-power-supply 、gpio-power-supply 和battery-powersupply。
對于usb-power-supply 屬性配置如下:
pmu_usbpc_vol
usb pc輸入電壓限制值,單位為mV
pmu_usbpc_cur
usb pc輸入電流限制值,單位為mA
pmu_usbad_vol
usb adaptor輸入電壓限制值(vimdpm),單位為mV
pmu_usbad_cur
usb adaptor輸入電流限制值,單位為mA
pmu_boost_vol
打開boost給usb口供電的電壓值,單位為mV
pmu_bc12_en
是否打開BC1.2協(xié)議功能
pmu_cc_logic_en
是否打開cc協(xié)議功能
pmu_boost_en
是否在初始化時打開boost功能
pmu_usb_typec_used
usb接口為type-c
wakeup_usb_in
usb插入喚醒使能
wakeup_usb_out
usb拔出喚醒使能
說明
在使用type-c 時,還需將usb 驅動中的“usb_detect_type” 節(jié)點同步配置成2,才能使用typec 識別usb 設備的功能。
對于gpio-power-supply:是控制ac in 的配置,在AXP717 上默認不使用。
對于battery-power-supply 屬性配置如下:
param
電池參數(shù),與axp2202_parameter對應
pmu_chg_ic_temp
1: TS current source always on
0: TS current source off
pmu_battery_rdc
電池內阻,單位為mΩ
pmu_battery_cap
電池容量,單位為mAh
pmu_runtime_chgcur
運行時constant充電電流限制,單位為mA
pmu_suspend_chgcur
休眠時constant充電電流限制,單位為mA
pmu_shutdown_chgcur
關機時constant充電電流限制,單位為mA
pmu_terminal_chgcur
截止電流,停止充電的標志位之一,單位為mA
pmu_init_chgvol
電池滿充電壓,單位為mV
pmu_battery_warning_level1
5-20 5% - 20% warning level1
電池低電量警告,當芯片檢測電池電量從高到低跌到了設置的level1的值,capacity < warning_level1,就會觸
發(fā)warning_level1中斷,從而再進行對應操作。
如果capacity ≥ warning_level1則會清掉該中斷。
如AXP717,當觸發(fā)warning1中斷時,默認是不發(fā)生操作,需要修改對應代碼進行定制化操作。
pmu_battery_warning_level2
0-15 0% - 15% warning level2
意義同level1,當電池電量從從高到低跌落,capacity < warning_level2,就會觸發(fā)warning_level2中斷。
當電池電量warning_level2 ≤ capacity < warning_level1 則會清掉level2中斷。
pmu_chgled_func ;
CHGKED pin control
0: controlled by pmu
1: controlled by Charger
pmu_chgled_type
CHGLED Type select when pmu_chgled_func is 0
0: display with type A function
1: display with type B function
3: output controlled by the register of chgled_out_ctrl
pmu_bat_para1
pmu_bat_para2
...
pmu_bat_para32
電池曲線參數(shù)
**電池參數(shù)根據(jù)使用的電池不同,通過儀器測量出來**
pmu_bat_temp_enable
設置電池溫度檢測、ntc是否使能
pmu_bat_charge_ltf
觸發(fā)電池低溫停充的TS pin電壓閾值,單位:mV
默認:1105mV
范圍:0-8160mV
pmu_bat_charge_htf
觸發(fā)電池高溫停充的TS pin電壓閾值,單位:mV
默認:121mV
范圍:0-510mV
pmu_bat_shutdown_ltf
非充電模式下,觸發(fā)電池低溫中斷的TS pin電壓閾值,單位:mV
默認:1381mV
pmu_bat_shutdown_htf
默認:89mV
范圍:0-510mV
pmu_bat_temp_para1
電池包-25度對應的TS pin電壓,單位:mV
pmu_bat_temp_para2
電池包-15度對應的TS pin電壓,單位:mV
pmu_bat_temp_para3
電池包-10度對應的TS pin電壓,單位:mV
pmu_bat_temp_para4
電池包-5度對應的TS pin電壓,單位:mV
pmu_bat_temp_para5
電池包0度對應的TS pin電壓,單位:mV
pmu_bat_temp_para6
電池包5度對應的TS pin電壓,單位:mV
pmu_bat_temp_para7
電池包10度對應的TS pin電壓,單位:mV
pmu_bat_temp_para8
電池包20度對應的TS pin電壓,單位:mV
pmu_bat_temp_para9
電池包30度對應的TS pin電壓,單位:mV
pmu_bat_temp_para10
電池包40度對應的TS pin電壓,單位:mV
pmu_bat_temp_para11
電池包45度對應的TS pin電壓,單位:mV
pmu_bat_temp_para12
電池包50度對應的TS pin電壓,單位:mV
pmu_bat_temp_para13
電池包55度對應的TS pin電壓,單位:mV
pmu_bat_temp_para14
電池包60度對應的TS pin電壓,單位:mV
pmu_bat_temp_para15
電池包70度對應的TS pin電壓,單位:mV
pmu_bat_temp_para16
電池包80度對應的TS pin電壓,單位:mV
**不同電池包的溫敏電阻特性不一樣,根據(jù)電池包的TS溫敏電阻手冊,找到pmu_bat_temp_para[1-16]對應溫度點
的電阻阻值,將阻值除以20得到的電壓數(shù)值(單位:mV),將電壓數(shù)值填進pmu_bat_temp_para[1-16]的節(jié)點中即
可**
wakeup_bat_out
電池拔出喚醒使能
wakeup_bat_charging
電池充電喚醒使能
wakeup_bat_charge_over
電池充電結束喚醒使能
wakeup_low_warning1
電池低電量告警喚醒使能
wakeup_low_warning2
電池低電量告警2喚醒使能
wakeup_bat_untemp_chg
電池低溫充電喚醒使能
wakeup_bat_ovtemp_chg
電池超溫充電喚醒使能
wakeup_bat_untemp_work
電池低溫工作喚醒使能
wakeup_bat_ovtemp_work
電池高溫工作喚醒使能
? power key 屬性配置
power key 設備為按鍵設備,具體的說為電源按鍵設備。power key 屬性配置:
pmu_powkey_off_time
控制按下多長時間響應poweroff事件
可選的值為:
4000 4s
6000 6s
8000 8s
10000 10s
pmu_powkey_off_func
控制power_off事件功能,如果不配置,默認為power-off
0:power_off
1:復位系統(tǒng)
pmu_powkey_off_en
控制按鍵關機使能
1:PWRON > OFFLEVEL AS poweroff source enable
0:PWRON > OFFLEVEL as poweroff source disable
pmu_powkey_long_time
控制ponlevel 寄存器0x27[5:4]
1000 1s
1500 1.5s
2000 2s
2500 2.5s
pmu_powkey_on_time
控制按鈕按下多長時間開機
128 0.128s
512 0.512s
1000 1s
2000 2s
wakeup_rising
控制是否彈起按鈕喚醒系統(tǒng)
wakeup_falling
控制是否按下按鈕喚醒系統(tǒng)
? regulator 屬性配置
regulator 為系統(tǒng)regulator_dev 設備,每個regulator_dev 代表一路電源,設備通過對regulator_dev 的引用建立regulator,用來實現(xiàn)對電源的電壓設置等功能。
regulator 屬性配置,參考內核原生regulator 使用文檔:Documentation/devicetree/bindings/regulator/regulator.txt。
regulator 配置如下:
reg_aldo1: aldo1{
regulator-name = "axp2101-dcdc1";
為電源設備的名稱
regulator-min-microvolt = <1500000>;
電源的最小值,單位:uV
regulator-max-microvolt = <3400000>;
電源的最大值,單位:uV
regulator-ramp-delay = <2500>;
電源的調壓延時,單位:us
regulator-enable-ramp-delay = <1000>;
電源從關閉到開啟的使能延時,單位:us
regulator-boot-on;
電源從啟動時開啟,在內核啟動時,就按照dts配置加載了該路regulator。同時,進入系統(tǒng)后通過軟件讀取也能
獲知該路regulator被加載了。
regulator-always-on;
電源保持常開,不會由于調用regulator等API接口而關閉。
};
2.3.1.2 sys_config.fex 配置
在sysconfig 中定義了PMU 的regulator 輸出信息及板型PMU 類型,在boot0 和uboot 會通過解析這部分屬性來執(zhí)行調壓等操作。
;----------------------------------------------------------------------------------
;[target] system bootup configuration
;boot_clock = CPU boot frequency, Unit: MHz
;storage_type = boot medium, 0-nand, 1-card0, 2-card2, -1(defualt)auto scan
;advert_enable = 0-close advert logo 1-open advert logo (只有多核啟動下有效)
;power_mode = axp_type, 0:axp81X, 1:dummy, 2:axp806, 3:axp2202, 4:axp858
;----------------------------------------------------------------------------------
[target]
boot_clock = 1008
storage_type = -1
advert_enable = 0
burn_key = 1
dragonboard_test= 0
power_mode = 3
;----------------------------------------------------------------------------------
; system configuration
; ?
;dcdc1_vol ---set dcdc1 voltage,mV
,500-1200,10mV/step
;
1220-3400,20mV/step
;dcdc2_vol ---set dcdc2 voltage,mV
,500-1200,10mV/step
;
1220-1540,20mV/step
;aldo1_vol ---set aldo1 voltage,mV
,500-3500,100mV/step
;dldo1_vol ---set dldo1 voltage,mV
,500-3500,100mV/step
;----------------------------------------------------------------------------------
[power_sply]
dcdc3_vol = 1001200
aldo3_vol = 1003300
aldo4_vol = 1001800
bldo2_vol = 1002500
cldo1_vol = 1001800
cldo3_vol = 1003300
cpusldo_vol = 100900
dcdc1_mode = 1
dcdc2_mode = 1
;----------------------------------------------------------------------------------
; gpio_bias
; set gpio group withstand voltage
; pc_bias = 1800 is emmc
; pc_bias = 3300 is nand
;----------------------------------------------------------------------------------
[gpio_bias]
device_type = "gpio_bias"
pl_bias = 3300
pl_supply = "aldo3_vol"
pc_bias = 1800
pc_supply = "cldo1_vol"
;pc_bias = 3300
;pc_supply = "cldo3_vol"
[power_delay]
device_type = "power_delay"
aldo3_vol_delay = 20000
下面將按照不同模塊來解析sys_config 中各個模塊的配置含義。
? target 屬性配置:
在此配置下,與PMU 相關的主要是power_mode。power mode 這個節(jié)點就是為了告訴平臺當前使用的是哪個PMU 的哪種方案(有時在同一SOC 平臺同一PMU
也可能出現(xiàn)電源樹配置不一樣的情況),在boot0 階段就會解析出該屬性并調用調壓接口進行調壓。
power mode 屬性決定了當前SOC板型使用哪個PMU,需boot0代碼支持解析,目前僅R818/MR813方案支持解析該節(jié)點。后續(xù)別的平臺需支持時應根據(jù)boot0代碼更新sysconfig中的版型選擇說明。 0:axp81X, 1: dummy 2: axp806 3: axp2202 4: axp858
說明 AXP717 與其他PMU 使用同一套代碼框架,使用AXP717 則選上3: axp2202即可。
? power_sply 屬性配置
xxxx_vol uboot階段xxxx這路電是否開關及輸出電壓配置,其中xxxx為供電輸出名。屬性由前綴(100/000)和后綴組成。未配 置的電在uboot階段不會進行開關電和調壓操作。 前綴: 100,這路電在uboot階段打開 前綴: 110,這路電在uboot階段打開,但是燒寫時會關閉 前綴: 000,這路電在uboot階段關閉 后綴: 3300,這路電輸出電壓設置為3300 mV dcdcx_mode uboot階段強制將dcdcx設置為fpwm開關模式,提高這路抗負載擾動能力。該屬性不配置默認為0。目前僅AXP806/ AXP305/AXP81X/AXP803/AXP2202/AXP717支持該功能。 0: pfm-pwm模式自由切換 1: 強制pwm模式 battery_exist 強制電池存在狀態(tài),uboot階段根據(jù)該屬性決定是否做電池狀態(tài)的相關判斷。如果該屬性不進行配置,默認為1。適用于 部分無電持方案或factory_mode的無電池場景的調試 0: 強制認為無電池存在,uboot階段不做電池相關狀態(tài)判斷 1: 認為電池存在,uboot階段正常進行電池狀態(tài)的相關判斷 charge_mode 配置充電頁面,根據(jù)該屬性決定是否進入關機充電頁面。 如果該屬性不進行配置,默認為1。 適用于不需要充電頁面,或者適配器喚醒直接開機的需求。 0: 不進入充電頁面,適配器喚醒直接進入開機流程 1: 適配器喚醒進入充電流程
? power_delay 屬性配置
xxxx_vol_delay uboot階段xxxx這路電調壓后的延時時間,單位us。用于部分調壓后需等電壓穩(wěn)定才能操作的模塊。 如:twi,在上電時twi的電壓不是3.3V,在uboot階段需要將其升至3.3V,在電壓抬升階段是不能允許twi進行通信,不然就會產(chǎn)生錯誤。因此需要在調整電壓的時候停止twi的功能。 該屬性需與**power_sply**中的xxx_vol屬性一塊使用,當輸出需要開關或調壓時才需要進行延時。
? gpio_bias 屬性配置
xx_bias GPIOx口的耐壓值設置,單位:mV。用于調整GPIOx口的耐壓值,使其與GPIOx模塊掛載的電壓匹配,避免IO口損壞,提升信號質量。 xx_supply GPIOx模塊掛載的輸出電壓名,名字格式需與**power_sply**中的xxx_vol一致。該屬性如果配上,在GPIOx掛載的輸出改編后,會將對應的GPIOx bias耐壓值修改過來。
2.3.2 kernel menuconfig 配置說明
在Tina SDK 根目錄運行make kernel_menuconfig,進行內核配置修改,進入配置界面按以下步驟進行修改。
AXP717 與AXP2101 公用同一份控制器、按鍵以及regularotr 的代碼,因此在kernel_menuconfig 里選的是AXP2101 的選項。
? PMU 控制器
-> Device Drivers -> Multifunction device drivers <*> X-Powers AXP2101 PMICs with I2C
?
圖2-1: pmu-control-config
?
? regulator
-> Device Drivers -> Voltage and Current Regulator Support <*> X-POWERS AXP2101 PMIC Regulators
?
圖2-2: regularot-config
?
? charger
-> Device Drivers -> Power supply class support <*> AXP2202 power supply driver
?
圖2-3: charger-config
?
? power key
-> Device Drivers -> Input device support -> Miscellaneous devices <*> X-Powers AXP2101 power button driver
?
圖2-4: power-key-config
?
? virtual regulator
-> Device Drivers -> Voltage and Current Regulator Support <*> Virtual regulator consumer support
?
圖2-5: virtuaal-config
?
? acin
-> Device Drivers -> Power supply class support < > AXP2202 power virtual acin
?
圖2-6: acin-config
?
2.4 源碼結構介紹
? AXP717
${ROOT_DIR}/lichee/{KERNEL_VERSION}/ drivers/mfd/axp2101.c drivers/mfd/axp2101-i2c.c drivers/regulator/axp2101-regulator.c drivers/input/misc/axp2101-pek.c drivers/power/supply/axp2202_battery.c drivers/power/supply/axp2202_charger.c drivers/power/supply/axp2202_gpio_power.c drivers/power/supply/axp2202_usb_power.c
2.5 模塊框架介紹
AXP 的多功能設備驅動采用i2c 總線跟主控進行交互,使用regmap 方式注冊訪問接口。將AXP按照功能抽象出數(shù)個子設備模塊,共同使用父設備axp mfd 的資源
(bus、irq)?;镜能浖Y構圖如下圖所示。
?
圖2-7: AXP 框架圖
?
將axp 按照功能劃分為幾個子設備,分別是regulator、charger、powe key、gpio。每個子設備作為一個cell,使用父設備的資源(bus,irq),與不同的內核子
系統(tǒng)交互,實現(xiàn)完整的電源管理功能。
?
圖2-8: AXP 軟件框架圖
?
不同款的AXP 型號功能框架也會是不一致的,詳情各個型號的功能列表如下表所示。
產(chǎn)品名稱 | regulator | charger | power key | gpio |
---|---|---|---|---|
AXP717 | 有 | 有 | 有 | 無 |
3 模塊使用范例
3.1 外部sysfs 節(jié)點
AXP 注冊了許多外部sysfs 節(jié)點可供調試使用。
3.1.1 Regulator
有關于regulator 調試節(jié)點,主要調整各路電壓輸出的。
在路徑/sys/class/regulator/ 下,有關于單路regulator 屬性的節(jié)點可以讀取數(shù)值。
文件路徑 | 功能 | 屬性 | 設置值 |
---|---|---|---|
regulator.X/name | 各路輸出名字 | r | 對應的輸出的名字 |
regulator.X/max_microvolts | 各路輸出最大電壓 | r | 對應的最大電壓值,單位 uV |
regulator.X/min_microvolts | 各路輸出最小電壓 | r | 對應的最小電壓值,單位 uV |
regulator.X/state | 各路輸出狀態(tài) | r | 對應的輸出狀態(tài), enabled/disabled: 開 啟關閉 |
regulator.X/num_users | 各路輸出對應的設備個數(shù) | r | 012…… |
因為不同AXP 型號regulator 對應的節(jié)點不一樣,因此下面將分開不同AXP 進行介紹。
? AXP717
電源名稱對應表如下:
節(jié)點名字 | 原理圖名稱 |
---|---|
regulator.0 | dummy |
regulator.1 | usb0-vbus |
regulator.2 | usb1-vbus |
regulator.3 | dcdc1 |
regulator.4 | dcdc2 |
regulator.5 | dcdc3 |
regulator.6 | dcdc4 |
regulator.7 | aldo1 |
regulator.8 | aldo2 |
regulator.9 | aldo3 |
regulator.10 | aldo4 |
regulator.11 | bldo1 |
regulator.12 | bldo2 |
regulator.13 | bldo3 |
regulator.14 | bldo4 |
regulator.15 | cldo1 |
regulator.16 | cldo2 |
regulator.17 | cldo3 |
regulator.18 | cldo4 |
regulator.19 | rtcldo |
regulator.20 | cpusldo |
regulator.21 | drivevbus |
3.1.2 Virtual-consumer
在路徑/sys/devices/platform/soc/7081400.s_twi/i2c-6/6-0034/ 下則有修改regulator 輸出電壓的節(jié)點。
文件路徑 | 功能 | 屬性 | 設置值 |
---|---|---|---|
reg-virtconsumer. X/max_microvolts | 設置輸出最大電壓 | rw | 對應的最大電壓值,單 位uV |
reg-virtconsumer. X/min_microvolts | 設置輸出最小電壓 | rw | 對應的最小電壓值,單 位uV |
of_node/name | 各路輸出名字 | r | 無 |
因為不同AXP 型號Virtual-consumer 對應的節(jié)點不一樣,因此下面將分開不同AXP 進行介紹。
? AXP717
virt-consumer 對應的電路的對應表如下:
節(jié)點名字 | 原理圖名稱 |
---|---|
reg-virt-consumer.1 | dcdc1 |
reg-virt-consumer.2 | dcdc2 |
reg-virt-consumer.3 | dcdc3 |
reg-virt-consumer.4 | dcdc4 |
reg-virt-consumer.5 | aldo1 |
reg-virt-consumer.6 | aldo2 |
reg-virt-consumer.7 | aldo3 |
reg-virt-consumer.8 | aldo4 |
reg-virt-consumer.9 | bldo1 |
reg-virt-consumer.10 | bldo2 |
reg-virt-consumer.11 | bldo3 |
reg-virt-consumer.12 | bldo4 |
reg-virt-consumer.13 | cldo1 |
reg-virt-consumer.14 | cldo2 |
reg-virt-consumer.15 | cldo3 |
reg-virt-consumer.16 | cldo4 |
reg-virt-consumer.17 | rtcldo |
reg-virt-consumer.18 | cpusldo |
3.1.3 Power_supply
在路徑/sys/class/power_supply/ 下有power_supply 相關的調試節(jié)點,可以讀出電池以及供電當前狀態(tài)和設置屬性。
下表是電池相關的調試節(jié)點,路徑為:/sys/class/power_supply/axp2202-battery/
文件路徑 | 功能 | 屬性 | 設置值 |
---|---|---|---|
capacity | 電池剩余電量 | r | 百分比,012……100 |
capacity_alert_min | 低電量警告閾值 | r | 百分比 |
capacity_level | 當前充電等級 | r | “UNKNOWN” 未知, “Critical” 接近沒電,“LOW” 低 電量,“NORMAL” 正常電量, “HIGH” 高電量,“FULL” 滿電 |
charge_counter | 當前電池容量 | r | 單位mAh |
charge_full | 充滿電的電池容量 | r | 單位mAh |
constant_charge_current | 恒定充電電流 | r | 單位mA |
energy_full_design | 充滿電的電池容量 | r | 單位mAh |
health | 電池狀況 | r | “Unknown” 未知, “Good” 好, “Overheat” 過溫, “Dead” 壞掉, “Over voltage” 過 壓,“Unspecified failure” 錯誤, “Cold” 冷 |
present | 電池存在 | r | 01:存在不存在 |
serial_number | pmu 型號 | r | string |
status | 電池當前狀態(tài) | r | “Unknown” 未知, “Charging” 正在充電, “Discharging” 放電, “Not charging” 未在充電, “Full” 滿 |
temp | 電池溫度 | r | 單位°C |
temp_alert_min | 電池高溫預警閾值 | r | 單位°C |
time_to_empty_now | 放電剩余時間 | r | 單位min |
time_to_full_now | 充電剩余時間 | r | 單位min |
type | 設備類別 | r | “battery” 電池,“Mains” 火 牛,“USB”USB |
voltage_now | 當前電壓 | r | 單位uA |
下表則是供電相關的節(jié)點,路徑為:/sys/class/power_supply/axp2202-usb
文件路徑 | 功能 | 屬性 | 設置值 |
---|---|---|---|
input_current_limit | 輸入電流限流值 | r | 單位mA |
online USB | 是否在使用 | r | 01:未使用正在使用 |
present USB | 是否接上 | r | 01:插上沒插上 |
serial_number | pmu | 型號r | string |
type | 設備類別 | r | “battery” 電 池,“Mains” 火 牛,“USB”USB |
voltage_min_design | DC 供電最小設計電壓 | r | 單位uV |
voltage_now | DC 供電時的電壓大小 | r | 單位uV |
說明
AXP717 沒有使用acin,因此接入usb 或者適配器都是使用usb-power-supply 的驅動,節(jié)點也是公用的。
3.2 Regulator 使用方法
3.2.1 內核代碼調用regulator 示例
以DCDC1 為例,需要設置DCDC1 最大輸出電壓值為3.4V,需要設置目標電壓值為3V。
#include struct regulator *regu= NULL; int ret = 0; regu= regulator_get(NULL, "axp2202_dcdc1"); if (IS_ERR(regu)) { pr_err("%s: some error happen, fail to get regulator n", __func__); goto exit; } //set output voltage to 3V ret = regulator_set_voltage(regu, 3000000, 3400000); if (0 != ret) { pr_err("%s: some error happen, fail to set regulator voltage!n", __func__); goto exit; } //enalbe regulator ret = regulator_enable(regu); if (0 != ret) { pr_err("%s: some error happen, fail to enable regulator!n", __func__); goto exit; } //disalbe regulator ret = regulator_disable(regu); if (0 != ret) { pr_err("%s: some error happen, fail to disable regulator!n", __func__); goto exit; } //put regulater, when module exit regulator_put(regu);
技巧 regulator_get 調用有兩種方法: 第一種就是直接獲取dts 中regulator 的句柄,比如說axp2202_dcdc1。調用regulator_get 時第一個參數(shù)不需要配置設備,直接寫NULL。 第二種是在dts 的設備里配置regulator 的節(jié)點,比如說dts 某個設備里配置regulator0 = "axp2202_dcdc1";,該設備調用時寫法為:regulator_get(dev, "regulator0");。
3.2.2 Regulator shell 命令使用示例
AXP regulator 可以通過shell 命令控制和設置其開關以及輸出電壓,各路文件節(jié)點建立在在/sys/devices/platform 目錄下
? AXP717
AXP717 可控的節(jié)點可參考上面virtual 章節(jié)Virtual-consumer
以設置DCDC1 輸出最大電壓為3.3V,設置目標電壓為3.0V 為例做說明。
cd /sys/devices/platform/soc/7081400.s_twi/i2c-6/6-0034/reg-virt-consumer.1 cat of_node/name //確認是否為DCDC1 //設置輸出電壓為3.0V echo 3300000 > max_microvolts echo 3000000 > min_microvolts //關閉輸出 echo 3300000 > max_microvolts echo 3000000 > min_microvolts echo 0 > min_microvolts
3.2.3 usb_count 查看
根據(jù)上面Regulator 章節(jié)Regulator 找到對應的regulator 節(jié)點,這里以dcdc1 為例,其節(jié)點名稱為regulator.3,則在/sys/class/regulator 目錄下就有個
regulator.3 目錄,regulator.3目錄有個num_users 節(jié)點,cat 此節(jié)點就可以獲得當前use_count 值。
cat /sys/class/regulator/regulator.3/num_users
num_uesrs 代表當前有多少設備使用了regulator 節(jié)點用來控制輸出電壓。
4 FAQ
4.1 調試方法
在設備進行開發(fā)過程中,難免需要對各路電源進行調試,控制電源各路電壓等操作,內核中提供了對電源調試的方式。
4.1.1 調試工具
4.1.1.1 power key 調試方式
在用戶空間調用getevent 命令,通過標準input 系統(tǒng)上報的input 事件,可以確認power key是否能正常工作,是否能正常上報input 事件。
add device 2: /dev/input/event1 name: "axp2202-pek" poll 4, returned 1 /dev/input/event1: 0001 0074 00000001 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000 poll 4, returned 1 /dev/input/event1: 0001 0074 00000000 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000 poll 4, returned 1 /dev/input/event1: 0001 0074 00000001 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000 poll 4, returned 1 /dev/input/event1: 0001 0074 00000000 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000
按下按鈕為1,彈起為0。0074 為power 事件。
4.1.2 調試節(jié)點
4.1.2.1 /sys/kernel/debug/regulator/regulator_summary 節(jié)點
shell 命令查詢regulator 狀態(tài)。
kernel 提供調試結點供電源進行調試進行,我們可以通過kernel 的調試結點獲取各路電源的各個詳細狀態(tài)。以AXP2101 的設備舉例,首先需要mount debugfs 文
件系統(tǒng)。
mount -t debugfs none /sys/kernel/debug cat /sys/kernel/debug/regulator/regulator_summary regulator use open bypass voltage current min max ------------------------------------------------------------------------------- regulator-dummy 0 8 0 0mV 0mA 0mV 0mV dmic 0mV 0mV uart2 0mV 0mV uart1 0mV 0mV twi3 0mV 0mV twi2 0mV 0mV twi1 0mV 0mV twi0 0mV 0mV twi6 0mV 0mV usb0-vbus 0 0 0 5000mV 0mA 5000mV 5000mV usb1-vbus 1 2 0 5000mV 0mA 5000mV 5000mV 5200000.ohci1-controller 0mV 0mV 5200000.ehci1-controller 0mV 0mV axp2202-dcdc1 0 2 0 900mV 0mA 500mV 1540mV cpu0 900mV 900mV reg-virt-consumer.1 0mV 0mV axp2202-dcdc2 0 1 0 950mV 0mA 500mV 3400mV reg-virt-consumer.2 0mV 0mV axp2202-dcdc3 0 1 0 1200mV 0mA 500mV 1840mV reg-virt-consumer.3 0mV 0mV axp2202-dcdc4 0 1 0 1000mV 0mA 1000mV 3700mV reg-virt-consumer.4 0mV 0mV axp2202-aldo1 0 3 0 2800mV 0mA 500mV 3500mV sensor1 2800mV 3300mV sensor0 2800mV 3300mV reg-virt-consumer.5 0mV 0mV axp2202-aldo2 1 4 0 1800mV 0mA 500mV 3500mV sensor1 1800mV 3300mV sensor0 1800mV 3300mV sensor0 1800mV 3300mV reg-virt-consumer.6 0mV 0mV axp2202-aldo3 0 1 0 3300mV 0mA 500mV 3500mV reg-virt-consumer.7 0mV 0mV axp2202-aldo4 0 2 0 1800mV 0mA 500mV 3500mV codec 1800mV 1800mV reg-virt-consumer.8 0mV 0mV axp2202-bldo1 2 3 0 3300mV 0mA 500mV 3500mV soc@03000000:wlan@0 3300mV 3300mV soc@03000000:wlan@0 3300mV 3300mV reg-virt-consumer.9 0mV 0mV axp2202-bldo2 0 1 0 2500mV 0mA 500mV 3500mV reg-virt-consumer.10 0mV 0mV axp2202-bldo3 1 1 0 2800mV 0mA 500mV 3500mV reg-virt-consumer.11 0mV 0mV axp2202-bldo4 0 3 0 1500mV 0mA 500mV 3500mV sensor1 1500mV 1800mV sensor0 1200mV 1800mV reg-virt-consumer.12 0mV 0mV axp2202-cldo1 3 3 0 1800mV 0mA 500mV 3500mV codec 1800mV 1800mV 1-0036 1800mV 1800mV axp2202-cldo2 0 1 0 3300mV 0mA 500mV 3500mV reg-virt-consumer.14 0mV 0mV axp2202-cldo3 3 4 0 3300mV 0mA 500mV 3500mV 1-0036 3300mV 3300mV sdc2 0mV 0mV uart0 0mV 0mV reg-virt-consumer.15 0mV 0mV axp2202-cldo4 0 1 0 3300mV 0mA 500mV 3500mV reg-virt-consumer.16 0mV 0mV axp2202-rtcldo 0 1 0 1800mV 0mA 1800mV 1800mV reg-virt-consumer.17 0mV 0mV axp2202-cpusldo 0 1 0 900mV 0mA 500mV 1400mV reg-virt-consumer.18 0mV 0mV axp2202-drivevbus 0 0 0 0mV 0mA 0mV 0mV
4.1.2.2 regmap registers 節(jié)點
shell 命令讀寫寄存器。
寄存器調試是指直接對PMIC 的寄存器進行讀寫操作,此操作應該對寄存器有了解的情況下進行操作,不正確的操作方式將會導致芯片燒毀。在終端中,對拋出的
調試結點進行讀寫操作,即可對寄存器進行讀寫操作。無論是讀還是寫寄存器,都應該首先掛載debugfs 文件系統(tǒng)。
由于PMIC 是通過regmap 進行讀寫操作,應該可以使用regmap 的調試結點進行對PMIC 的讀寫訪問操作。regmap 的調試結點在debugfs 文件系統(tǒng)下面,通過對
regmap 調試結點的操作可以對PMIC 的寄存器進行讀寫訪問操作。
? 寫操作
寄存器調試掛載在debugfs文件系統(tǒng)。 mount -t debugfs none /sys/kernel/debug echo ${reg} ${value} > /sys/kernel/debug/regmap/${dev-name}/registers 實例: echo 0xff 0x01 > /sys/kernel/debug/regmap/4-0034/registers 寫0xff寄存器值為0x01
? 讀操作
寄存器調試掛載在debugfs文件系統(tǒng)。 mount -t debugfs none /sys/kernel/debug cat /sys/kernel/debug/regmap/${dev-name}/registers 實例: cat /sys/kernel/debug/regmap/4-0034/registers 讀取pmic所有寄存器
4.1.2.3 axp_reg 節(jié)點
另外,還支持axp 驅動自定義節(jié)點axp_reg 讀寫寄存器。但是這種用法是不推薦的,因為有標準regmap 方式來讀寫寄存器,根本沒必要用私有非標的方式。示例
如下。
往axp寄存器0x0f寫入值0x55: echo 0x0f55 > /sys/class/axp/axp_reg 讀出axp寄存器0x0f的值: echo 0x0f > /sys/class/axp/axp_reg cat /sys/class/axp/axp_reg
4.1.2.4 debug_mask 節(jié)點
axp 驅動自定義節(jié)點debug_mask 打開和關閉調試信息。相關調試信息參考具體的PMIC 驅動。示例如下。
系統(tǒng)打印等級設置為8: echo 8 > /proc/sys/kernel/printk 打開所有axp調試信息: echo 0xf > /sys/class/axp/debug_mask 關閉所有axp調試信息: echo 0x0 > /sys/class/axp/debug_mask
調試信息一般如下。
[ 712.458412] ic_temp = 45 [ 712.461311] vbat = 3977 [ 712.464082] ibat = -779 [ 712.466280] healthd: battery l=96 v=3977 t=30.0 h=2 st=3 c=-779 fc=5066880 chg= [ 712.475174] charge_ibat = 0 [ 712.478448] dis_ibat = 779 [ 712.481545] ocv = 4073 [ 712.484239] rest_vol = 96 [ 712.487182] rdc = 123 [ 712.489862] batt_max_cap = 5066 [ 712.493472] coulumb_counter = 4857 [ 712.497583] AXP803_COULOMB_CTL = 0xe0 [ 712.501803] ocv_percentage = 86 [ 712.505436] col_percentage = 96 [ 712.509061] bat_current_direction = 0 [ 712.513386] ext_valid = 0
-
soc
+關注
關注
38文章
4161瀏覽量
218162 -
Linux
+關注
關注
87文章
11292瀏覽量
209323 -
開發(fā)指南
+關注
關注
0文章
34瀏覽量
7538 -
PMU
+關注
關注
1文章
108瀏覽量
21592 -
Tina
+關注
關注
2文章
45瀏覽量
16976
發(fā)布評論請先 登錄
相關推薦
評論