0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Tina Linux PMU開(kāi)發(fā)指南

嵌入式Linux那些事 ? 來(lái)源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 11:05 ? 次閱讀

Tina Linux PMU開(kāi)發(fā)指南

1 前言

1.1 文檔簡(jiǎn)介

介紹使用Tina PMU 驅(qū)動(dòng)的使用方法。

1.2 目標(biāo)讀者

適用于使用全志AXP 平臺(tái)PMU 的開(kāi)發(fā)人員。

1.3 適用范圍

?

表1-1: 適用SOC 平臺(tái)及AXP 對(duì)應(yīng)表

?

產(chǎn)品名稱 內(nèi)核版本 AXP 型號(hào)
R818 Linux-4.9 AXP717

2 模塊介紹

2.1 模塊功能介紹

PMU,負(fù)責(zé)系統(tǒng)各個(gè)模塊供電、按鍵開(kāi)關(guān)機(jī)、電池充放電管理。

2.2 相關(guān)術(shù)語(yǔ)介紹

?

表2-1: 術(shù)語(yǔ)簡(jiǎn)介

?

術(shù)語(yǔ) 說(shuō)明
PMU 電源管理單元,主要包括regulator、power supply、gpio、power key 這四個(gè)子功能部分。
AXP 全志PMU 平臺(tái)的系列名稱,如AXP803、AXP717 等。
LDO 是low dropout regulator,意為低壓差線性穩(wěn)壓器。線性穩(wěn)壓器使用 在其線性區(qū)域內(nèi)運(yùn)行的晶體管或FET,從應(yīng)用的輸入電壓中減去超額的 電壓,產(chǎn)生經(jīng)過(guò)調(diào)節(jié)的輸出電壓。
DC-DC 是直流變直流,即不同直流電源值之間的轉(zhuǎn)換,只要符合這個(gè)定義都可 以叫DC-DC 轉(zhuǎn)換器,也包括LDO。但是一般的說(shuō)法是把直流變直流由 開(kāi)關(guān)方式實(shí)現(xiàn)的器件叫DCDC。
regulator Linux 內(nèi)核對(duì)LDO、DC-DC 的管理核心。
USB-Power- Supply USB 接口對(duì)系統(tǒng)的供電。
ACIN-Power- Supply 適配器ACIN 對(duì)系統(tǒng)的供電。
BAT-Power- Supply 電池BAT 對(duì)系統(tǒng)的供電。
Power-Supply Linux 內(nèi)核對(duì)USB、ACIN、BAT 供電的管理核心。
MFD Multi Function Device,Linux 內(nèi)核對(duì)多功能設(shè)備PMU 的管理核心
regmap Linux 內(nèi)核用于管理片外模塊寄存器的方法。

2.3 模塊配置介紹

2.3.1 Device Tree 配置說(shuō)明

在Tina 系統(tǒng)中,有兩種dts 文件。一是用于保存芯片所有平臺(tái)的模塊配置${CHIP}.dtsi,二是保存每一個(gè)板級(jí)平臺(tái)的設(shè)備信息的board.dts。兩者的區(qū)別主要是:前

者主要保存芯片相關(guān)的配置,不管芯片外圍換什么硬件,芯片配置還是保持不變的。而后者是用于保存不同版型之間差異化的配置。 PMU 模塊的dts 配置是在board.dts 中,dtsi 中無(wú)用戶可用配置。

2.3.1.1 board.dts 配置說(shuō)明

board.dts 路徑為:${ROOT_DIR}/device/config/chips/${PLATFORM}/configs/${TARGET}/board.dts 說(shuō)明 ${ROOT_DIR}:是tina SDK 根目錄 ${PLATFORM}:是芯片型號(hào),如r818 ${TARGET}:是版級(jí)型號(hào),如evb1

技巧 board.dts 所在在版級(jí)配置目錄,tina SDK 環(huán)境中,在source build/envsetup.sh 后,可通過(guò)“cconfigs” 命令直接跳轉(zhuǎn)過(guò)去配置目錄。 board.dts 就在版本配置目錄的上一級(jí),再通過(guò)“cd ..” 即可到達(dá)board.dts 所在的目錄。

PMU 一共包含了regulator,power supply,power key,PMU 在內(nèi)核中的設(shè)備是多個(gè)設(shè)備同時(shí)存在,并存在層次對(duì)應(yīng)關(guān)系。

PMU主設(shè)備(MFD)

|

+------> regulator device

|

+------> power key device

|

+------> power supply device

|

+------> wdt device

說(shuō)明

AXP717 在內(nèi)核中使用的是名為axp2202 的軟件框架,因此在dts 文件中。型號(hào)采用軟件框架的名字,而不配置為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_chg_ic_temp = <1>;

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>;

};

};

};

說(shuō)明 PMU 為I2C 設(shè)備,PMU 設(shè)備配置需要寫(xiě)在i2c 節(jié)點(diǎn)內(nèi)。

? PMU 屬性配置

reg

i2c寄存器地址

interrupts

中斷配置,參考內(nèi)核中斷配置文檔

interrupt-parent

上級(jí)中斷控制器結(jié)點(diǎn)

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。

對(duì)于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

打開(kāi)boost給usb口供電的電壓值,單位為mV

pmu_bc12_en

是否打開(kāi)BC1.2協(xié)議功能

pmu_cc_logic_en

是否打開(kāi)cc協(xié)議功能

pmu_boost_en

是否在初始化時(shí)打開(kāi)boost功能

pmu_usb_typec_used

usb接口為type-c

wakeup_usb_in

usb插入喚醒使能

wakeup_usb_out

usb拔出喚醒使能

說(shuō)明

在使用type-c 時(shí),還需將usb 驅(qū)動(dòng)中的“usb_detect_type” 節(jié)點(diǎn)同步配置成2,才能使用typec 識(shí)別usb 設(shè)備的功能。

對(duì)于gpio-power-supply:是控制ac in 的配置,在AXP717 上默認(rèn)不使用。

對(duì)于battery-power-supply 屬性配置如下:

param

電池參數(shù),與axp2202_parameter對(duì)應(yīng)

pmu_chg_ic_temp

1: TS current source always on

0: TS current source off

pmu_battery_rdc

電池內(nèi)阻,單位為mΩ

pmu_battery_cap

電池容量,單位為mAh

pmu_runtime_chgcur

運(yùn)行時(shí)constant充電電流限制,單位為mA

pmu_suspend_chgcur

休眠時(shí)constant充電電流限制,單位為mA

pmu_shutdown_chgcur

關(guān)機(jī)時(shí)constant充電電流限制,單位為mA

pmu_terminal_chgcur

截止電流,停止充電的標(biāo)志位之一,單位為mA

pmu_init_chgvol

電池滿充電壓,單位為mV

pmu_battery_warning_level1

5-20 5% - 20% warning level1

電池低電量警告,當(dāng)芯片檢測(cè)電池電量從高到低跌到了設(shè)置的level1的值,capacity < warning_level1,就會(huì)觸

發(fā)warning_level1中斷,從而再進(jìn)行對(duì)應(yīng)操作。

如果capacity ≥ warning_level1則會(huì)清掉該中斷。

如AXP717,當(dāng)觸發(fā)warning1中斷時(shí),默認(rèn)是不發(fā)生操作,需要修改對(duì)應(yīng)代碼進(jìn)行定制化操作。

pmu_battery_warning_level2

0-15 0% - 15% warning level2

意義同level1,當(dāng)電池電量從從高到低跌落,capacity < warning_level2,就會(huì)觸發(fā)warning_level2中斷。

當(dāng)電池電量warning_level2 ≤ capacity < warning_level1 則會(huì)清掉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ù)使用的電池不同,通過(guò)儀器測(cè)量出來(lái)**

pmu_bat_temp_enable

設(shè)置電池溫度檢測(cè)、ntc是否使能

pmu_bat_charge_ltf

觸發(fā)電池低溫停充的TS pin電壓閾值,單位:mV

默認(rèn):1105mV

范圍:0-8160mV

pmu_bat_charge_htf

觸發(fā)電池高溫停充的TS pin電壓閾值,單位:mV

默認(rèn):121mV

范圍:0-510mV

pmu_bat_shutdown_ltf

非充電模式下,觸發(fā)電池低溫中斷的TS pin電壓閾值,單位:mV

默認(rèn):1381mV

pmu_bat_shutdown_htf

默認(rèn):89mV

范圍:0-510mV

pmu_bat_temp_para1

電池包-25度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para2

電池包-15度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para3

電池包-10度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para4

電池包-5度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para5

電池包0度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para6

電池包5度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para7

電池包10度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para8

電池包20度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para9

電池包30度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para10

電池包40度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para11

電池包45度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para12

電池包50度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para13

電池包55度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para14

電池包60度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para15

電池包70度對(duì)應(yīng)的TS pin電壓,單位:mV

pmu_bat_temp_para16

電池包80度對(duì)應(yīng)的TS pin電壓,單位:mV

**不同電池包的溫敏電阻特性不一樣,根據(jù)電池包的TS溫敏電阻手冊(cè),找到pmu_bat_temp_para[1-16]對(duì)應(yīng)溫度點(diǎn)

的電阻阻值,將阻值除以20得到的電壓數(shù)值(單位:mV),將電壓數(shù)值填進(jìn)pmu_bat_temp_para[1-16]的節(jié)點(diǎn)中即

可**

wakeup_bat_out

電池拔出喚醒使能

wakeup_bat_charging

電池充電喚醒使能

wakeup_bat_charge_over

電池充電結(jié)束喚醒使能

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 設(shè)備為按鍵設(shè)備,具體的說(shuō)為電源按鍵設(shè)備。power key 屬性配置:

pmu_powkey_off_time

控制按下多長(zhǎng)時(shí)間響應(yīng)poweroff事件

可選的值為:

4000 4s

6000 6s

8000 8s

10000 10s

pmu_powkey_off_func

控制power_off事件功能,如果不配置,默認(rèn)為power-off

0:power_off

1:復(fù)位系統(tǒng)

pmu_powkey_off_en

控制按鍵關(guān)機(jī)使能

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

控制按鈕按下多長(zhǎng)時(shí)間開(kāi)機(jī)

128 0.128s

512 0.512s

1000 1s

2000 2s

wakeup_rising

控制是否彈起按鈕喚醒系統(tǒng)

wakeup_falling

控制是否按下按鈕喚醒系統(tǒng)

? regulator 屬性配置

regulator 為系統(tǒng)regulator_dev 設(shè)備,每個(gè)regulator_dev 代表一路電源,設(shè)備通過(guò)對(duì)regulator_dev 的引用建立regulator,用來(lái)實(shí)現(xiàn)對(duì)電源的電壓設(shè)置等功能。

regulator 屬性配置,參考內(nèi)核原生regulator 使用文檔:Documentation/devicetree/bindings/regulator/regulator.txt。

regulator 配置如下:

reg_aldo1: aldo1{

regulator-name = "axp2101-dcdc1";

為電源設(shè)備的名稱

regulator-min-microvolt = <1500000>;

電源的最小值,單位:uV

regulator-max-microvolt = <3400000>;

電源的最大值,單位:uV

regulator-ramp-delay = <2500>;

電源的調(diào)壓延時(shí),單位:us

regulator-enable-ramp-delay = <1000>;

電源從關(guān)閉到開(kāi)啟的使能延時(shí),單位:us

regulator-boot-on;

電源從啟動(dòng)時(shí)開(kāi)啟,在內(nèi)核啟動(dòng)時(shí),就按照dts配置加載了該路regulator。同時(shí),進(jìn)入系統(tǒng)后通過(guò)軟件讀取也能

獲知該路regulator被加載了。

regulator-always-on;

電源保持常開(kāi),不會(huì)由于調(diào)用regulator等API接口而關(guān)閉。

};

2.3.1.2 sys_config.fex 配置

在sysconfig 中定義了PMU 的regulator 輸出信息及板型PMU 類型,在boot0 和uboot 會(huì)通過(guò)解析這部分屬性來(lái)執(zhí)行調(diào)壓等操作。

;----------------------------------------------------------------------------------

;[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 (只有多核啟動(dòng)下有效)

;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

下面將按照不同模塊來(lái)解析sys_config 中各個(gè)模塊的配置含義。

? target 屬性配置:

在此配置下,與PMU 相關(guān)的主要是power_mode。power mode 這個(gè)節(jié)點(diǎn)就是為了告訴平臺(tái)當(dāng)前使用的是哪個(gè)PMU 的哪種方案(有時(shí)在同一SOC 平臺(tái)同一PMU

也可能出現(xiàn)電源樹(shù)配置不一樣的情況),在boot0 階段就會(huì)解析出該屬性并調(diào)用調(diào)壓接口進(jìn)行調(diào)壓。

power mode 屬性決定了當(dāng)前SOC板型使用哪個(gè)PMU,需boot0代碼支持解析,目前僅R818/MR813方案支持解析該節(jié)點(diǎn)。后續(xù)別的平臺(tái)需支持時(shí)應(yīng)根據(jù)boot0代碼更新sysconfig中的版型選擇說(shuō)明。 0:axp81X, 1: dummy 2: axp806 3: axp2202 4: axp858

說(shuō)明 AXP717 與其他PMU 使用同一套代碼框架,使用AXP717 則選上3: axp2202即可。

? power_sply 屬性配置

xxxx_vol uboot階段xxxx這路電是否開(kāi)關(guān)及輸出電壓配置,其中xxxx為供電輸出名。屬性由前綴(100/000)和后綴組成。未配 置的電在uboot階段不會(huì)進(jìn)行開(kāi)關(guān)電和調(diào)壓操作。 前綴: 100,這路電在uboot階段打開(kāi) 前綴: 110,這路電在uboot階段打開(kāi),但是燒寫(xiě)時(shí)會(huì)關(guān)閉 前綴: 000,這路電在uboot階段關(guān)閉 后綴: 3300,這路電輸出電壓設(shè)置為3300 mV dcdcx_mode uboot階段強(qiáng)制將dcdcx設(shè)置為fpwm開(kāi)關(guān)模式,提高這路抗負(fù)載擾動(dòng)能力。該屬性不配置默認(rèn)為0。目前僅AXP806/ AXP305/AXP81X/AXP803/AXP2202/AXP717支持該功能。 0: pfm-pwm模式自由切換 1: 強(qiáng)制pwm模式 battery_exist 強(qiáng)制電池存在狀態(tài),uboot階段根據(jù)該屬性決定是否做電池狀態(tài)的相關(guān)判斷。如果該屬性不進(jìn)行配置,默認(rèn)為1。適用于 部分無(wú)電持方案或factory_mode的無(wú)電池場(chǎng)景的調(diào)試 0: 強(qiáng)制認(rèn)為無(wú)電池存在,uboot階段不做電池相關(guān)狀態(tài)判斷 1: 認(rèn)為電池存在,uboot階段正常進(jìn)行電池狀態(tài)的相關(guān)判斷 charge_mode 配置充電頁(yè)面,根據(jù)該屬性決定是否進(jìn)入關(guān)機(jī)充電頁(yè)面。 如果該屬性不進(jìn)行配置,默認(rèn)為1。 適用于不需要充電頁(yè)面,或者適配器喚醒直接開(kāi)機(jī)的需求。 0: 不進(jìn)入充電頁(yè)面,適配器喚醒直接進(jìn)入開(kāi)機(jī)流程 1: 適配器喚醒進(jìn)入充電流程

? power_delay 屬性配置

xxxx_vol_delay uboot階段xxxx這路電調(diào)壓后的延時(shí)時(shí)間,單位us。用于部分調(diào)壓后需等電壓穩(wěn)定才能操作的模塊。 如:twi,在上電時(shí)twi的電壓不是3.3V,在uboot階段需要將其升至3.3V,在電壓抬升階段是不能允許twi進(jìn)行通信,不然就會(huì)產(chǎn)生錯(cuò)誤。因此需要在調(diào)整電壓的時(shí)候停止twi的功能。 該屬性需與**power_sply**中的xxx_vol屬性一塊使用,當(dāng)輸出需要開(kāi)關(guān)或調(diào)壓時(shí)才需要進(jìn)行延時(shí)。

? gpio_bias 屬性配置

xx_bias GPIOx口的耐壓值設(shè)置,單位:mV。用于調(diào)整GPIOx口的耐壓值,使其與GPIOx模塊掛載的電壓匹配,避免IO口損壞,提升信號(hào)質(zhì)量。 xx_supply GPIOx模塊掛載的輸出電壓名,名字格式需與**power_sply**中的xxx_vol一致。該屬性如果配上,在GPIOx掛載的輸出改編后,會(huì)將對(duì)應(yīng)的GPIOx bias耐壓值修改過(guò)來(lái)。

2.3.2 kernel menuconfig 配置說(shuō)明

在Tina SDK 根目錄運(yùn)行make kernel_menuconfig,進(jìn)行內(nèi)核配置修改,進(jìn)入配置界面按以下步驟進(jìn)行修改。

AXP717 與AXP2101 公用同一份控制器、按鍵以及regularotr 的代碼,因此在kernel_menuconfig 里選的是AXP2101 的選項(xiàng)。

? PMU 控制器

-> Device Drivers -> Multifunction device drivers <*> X-Powers AXP2101 PMICs with I2C

Tina_Linux_PMU_Development_Guide-image-20221229171742892

?

圖2-1: pmu-control-config

?

? regulator

-> Device Drivers -> Voltage and Current Regulator Support <*> X-POWERS AXP2101 PMIC Regulators

Tina_Linux_PMU_Development_Guide-image-20221229171817733

?

圖2-2: regularot-config

?

? charger

-> Device Drivers -> Power supply class support <*> AXP2202 power supply driver

Tina_Linux_PMU_Development_Guide-image-20221229171855027

?

圖2-3: charger-config

?

? power key

-> Device Drivers -> Input device support -> Miscellaneous devices <*> X-Powers AXP2101 power button driver

Tina_Linux_PMU_Development_Guide-image-20221229171925367

?

圖2-4: power-key-config

?

? virtual regulator

-> Device Drivers -> Voltage and Current Regulator Support <*> Virtual regulator consumer support

Tina_Linux_PMU_Development_Guide-image-20221229172053147

?

圖2-5: virtuaal-config

?

? acin

-> Device Drivers -> Power supply class support < > AXP2202 power virtual acin

Tina_Linux_PMU_Development_Guide-image-20221229172125375

?

圖2-6: acin-config

?

2.4 源碼結(jié)構(gòu)介紹

? 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 的多功能設(shè)備驅(qū)動(dòng)采用i2c 總線跟主控進(jìn)行交互,使用regmap 方式注冊(cè)訪問(wèn)接口。將AXP按照功能抽象出數(shù)個(gè)子設(shè)備模塊,共同使用父設(shè)備axp mfd 的資源

(bus、irq)?;镜能浖Y(jié)構(gòu)圖如下圖所示。

Tina_Linux_PMU_Development_Guide-image-20221229172218801

?

圖2-7: AXP 框架圖

?

將axp 按照功能劃分為幾個(gè)子設(shè)備,分別是regulator、charger、powe key、gpio。每個(gè)子設(shè)備作為一個(gè)cell,使用父設(shè)備的資源(bus,irq),與不同的內(nèi)核子

系統(tǒng)交互,實(shí)現(xiàn)完整的電源管理功能。

Tina_Linux_PMU_Development_Guide-image-20221229172322260

?

圖2-8: AXP 軟件框架圖

?

不同款的AXP 型號(hào)功能框架也會(huì)是不一致的,詳情各個(gè)型號(hào)的功能列表如下表所示。

產(chǎn)品名稱 regulator charger power key gpio
AXP717 無(wú)

3 模塊使用范例

3.1 外部sysfs 節(jié)點(diǎn)

AXP 注冊(cè)了許多外部sysfs 節(jié)點(diǎn)可供調(diào)試使用。

3.1.1 Regulator

有關(guān)于regulator 調(diào)試節(jié)點(diǎn),主要調(diào)整各路電壓輸出的。

在路徑/sys/class/regulator/ 下,有關(guān)于單路regulator 屬性的節(jié)點(diǎn)可以讀取數(shù)值。

文件路徑 功能 屬性 設(shè)置值
regulator.X/name 各路輸出名字 r 對(duì)應(yīng)的輸出的名字
regulator.X/max_microvolts 各路輸出最大電壓 r 對(duì)應(yīng)的最大電壓值,單位 uV
regulator.X/min_microvolts 各路輸出最小電壓 r 對(duì)應(yīng)的最小電壓值,單位 uV
regulator.X/state 各路輸出狀態(tài) r 對(duì)應(yīng)的輸出狀態(tài), enabled/disabled: 開(kāi) 啟關(guān)閉
regulator.X/num_users 各路輸出對(duì)應(yīng)的設(shè)備個(gè)數(shù) r 012……

因?yàn)椴煌珹XP 型號(hào)regulator 對(duì)應(yīng)的節(jié)點(diǎn)不一樣,因此下面將分開(kāi)不同AXP 進(jìn)行介紹。

? AXP717

電源名稱對(duì)應(yīng)表如下:

節(jié)點(diǎn)名字 原理圖名稱
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é)點(diǎn)。

文件路徑 功能 屬性 設(shè)置值
reg-virtconsumer. X/max_microvolts 設(shè)置輸出最大電壓 rw 對(duì)應(yīng)的最大電壓值,單 位uV
reg-virtconsumer. X/min_microvolts 設(shè)置輸出最小電壓 rw 對(duì)應(yīng)的最小電壓值,單 位uV
of_node/name 各路輸出名字 r 無(wú)

因?yàn)椴煌珹XP 型號(hào)Virtual-consumer 對(duì)應(yīng)的節(jié)點(diǎn)不一樣,因此下面將分開(kāi)不同AXP 進(jìn)行介紹。

? AXP717

virt-consumer 對(duì)應(yīng)的電路的對(duì)應(yīng)表如下:

節(jié)點(diǎn)名字 原理圖名稱
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 相關(guān)的調(diào)試節(jié)點(diǎn),可以讀出電池以及供電當(dāng)前狀態(tài)和設(shè)置屬性。

下表是電池相關(guān)的調(diào)試節(jié)點(diǎn),路徑為:/sys/class/power_supply/axp2202-battery/

文件路徑 功能 屬性 設(shè)置值
capacity 電池剩余電量 r 百分比,012……100
capacity_alert_min 低電量警告閾值 r 百分比
capacity_level 當(dāng)前充電等級(jí) r “UNKNOWN” 未知, “Critical” 接近沒(méi)電,“LOW” 低 電量,“NORMAL” 正常電量, “HIGH” 高電量,“FULL” 滿電
charge_counter 當(dāng)前電池容量 r 單位mAh
charge_full 充滿電的電池容量 r 單位mAh
constant_charge_current 恒定充電電流 r 單位mA
energy_full_design 充滿電的電池容量 r 單位mAh
health 電池狀況 r “Unknown” 未知, “Good” 好, “Overheat” 過(guò)溫, “Dead” 壞掉, “Over voltage” 過(guò) 壓,“Unspecified failure” 錯(cuò)誤, “Cold” 冷
present 電池存在 r 01:存在不存在
serial_number pmu 型號(hào) r string
status 電池當(dāng)前狀態(tài) r “Unknown” 未知, “Charging” 正在充電, “Discharging” 放電, “Not charging” 未在充電, “Full” 滿
temp 電池溫度 r 單位°C
temp_alert_min 電池高溫預(yù)警閾值 r 單位°C
time_to_empty_now 放電剩余時(shí)間 r 單位min
time_to_full_now 充電剩余時(shí)間 r 單位min
type 設(shè)備類別 r “battery” 電池,“Mains” 火 牛,“USB”USB
voltage_now 當(dāng)前電壓 r 單位uA

下表則是供電相關(guān)的節(jié)點(diǎn),路徑為:/sys/class/power_supply/axp2202-usb

文件路徑 功能 屬性 設(shè)置值
input_current_limit 輸入電流限流值 r 單位mA
online USB 是否在使用 r 01:未使用正在使用
present USB 是否接上 r 01:插上沒(méi)插上
serial_number pmu 型號(hào)r string
type 設(shè)備類別 r “battery” 電 池,“Mains” 火 牛,“USB”USB
voltage_min_design DC 供電最小設(shè)計(jì)電壓 r 單位uV
voltage_now DC 供電時(shí)的電壓大小 r 單位uV

說(shuō)明

AXP717 沒(méi)有使用acin,因此接入usb 或者適配器都是使用usb-power-supply 的驅(qū)動(dòng),節(jié)點(diǎn)也是公用的。

3.2 Regulator 使用方法

3.2.1 內(nèi)核代碼調(diào)用regulator 示例

以DCDC1 為例,需要設(shè)置DCDC1 最大輸出電壓值為3.4V,需要設(shè)置目標(biāo)電壓值為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 調(diào)用有兩種方法: 第一種就是直接獲取dts 中regulator 的句柄,比如說(shuō)axp2202_dcdc1。調(diào)用regulator_get 時(shí)第一個(gè)參數(shù)不需要配置設(shè)備,直接寫(xiě)NULL。 第二種是在dts 的設(shè)備里配置regulator 的節(jié)點(diǎn),比如說(shuō)dts 某個(gè)設(shè)備里配置regulator0 = "axp2202_dcdc1";,該設(shè)備調(diào)用時(shí)寫(xiě)法為:regulator_get(dev, "regulator0");。

3.2.2 Regulator shell 命令使用示例

AXP regulator 可以通過(guò)shell 命令控制和設(shè)置其開(kāi)關(guān)以及輸出電壓,各路文件節(jié)點(diǎn)建立在在/sys/devices/platform 目錄下

? AXP717

AXP717 可控的節(jié)點(diǎn)可參考上面virtual 章節(jié)Virtual-consumer

以設(shè)置DCDC1 輸出最大電壓為3.3V,設(shè)置目標(biāo)電壓為3.0V 為例做說(shuō)明。

cd /sys/devices/platform/soc/7081400.s_twi/i2c-6/6-0034/reg-virt-consumer.1 cat of_node/name //確認(rèn)是否為DCDC1 //設(shè)置輸出電壓為3.0V echo 3300000 > max_microvolts echo 3000000 > min_microvolts //關(guān)閉輸出 echo 3300000 > max_microvolts echo 3000000 > min_microvolts echo 0 > min_microvolts

3.2.3 usb_count 查看

根據(jù)上面Regulator 章節(jié)Regulator 找到對(duì)應(yīng)的regulator 節(jié)點(diǎn),這里以dcdc1 為例,其節(jié)點(diǎn)名稱為regulator.3,則在/sys/class/regulator 目錄下就有個(gè)

regulator.3 目錄,regulator.3目錄有個(gè)num_users 節(jié)點(diǎn),cat 此節(jié)點(diǎn)就可以獲得當(dāng)前use_count 值。

cat /sys/class/regulator/regulator.3/num_users

num_uesrs 代表當(dāng)前有多少設(shè)備使用了regulator 節(jié)點(diǎn)用來(lái)控制輸出電壓。

4 FAQ

4.1 調(diào)試方法

在設(shè)備進(jìn)行開(kāi)發(fā)過(guò)程中,難免需要對(duì)各路電源進(jìn)行調(diào)試,控制電源各路電壓等操作,內(nèi)核中提供了對(duì)電源調(diào)試的方式。

4.1.1 調(diào)試工具

4.1.1.1 power key 調(diào)試方式

在用戶空間調(diào)用getevent 命令,通過(guò)標(biāo)準(zhǔn)input 系統(tǒng)上報(bào)的input 事件,可以確認(rèn)power key是否能正常工作,是否能正常上報(bào)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 調(diào)試節(jié)點(diǎn)

4.1.2.1 /sys/kernel/debug/regulator/regulator_summary 節(jié)點(diǎn)

shell 命令查詢r(jià)egulator 狀態(tài)。

kernel 提供調(diào)試結(jié)點(diǎn)供電源進(jìn)行調(diào)試進(jìn)行,我們可以通過(guò)kernel 的調(diào)試結(jié)點(diǎn)獲取各路電源的各個(gè)詳細(xì)狀態(tài)。以AXP2101 的設(shè)備舉例,首先需要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é)點(diǎn)

shell 命令讀寫(xiě)寄存器。

寄存器調(diào)試是指直接對(duì)PMIC 的寄存器進(jìn)行讀寫(xiě)操作,此操作應(yīng)該對(duì)寄存器有了解的情況下進(jìn)行操作,不正確的操作方式將會(huì)導(dǎo)致芯片燒毀。在終端中,對(duì)拋出的

調(diào)試結(jié)點(diǎn)進(jìn)行讀寫(xiě)操作,即可對(duì)寄存器進(jìn)行讀寫(xiě)操作。無(wú)論是讀還是寫(xiě)寄存器,都應(yīng)該首先掛載debugfs 文件系統(tǒng)。

由于PMIC 是通過(guò)regmap 進(jìn)行讀寫(xiě)操作,應(yīng)該可以使用regmap 的調(diào)試結(jié)點(diǎn)進(jìn)行對(duì)PMIC 的讀寫(xiě)訪問(wèn)操作。regmap 的調(diào)試結(jié)點(diǎn)在debugfs 文件系統(tǒng)下面,通過(guò)對(duì)

regmap 調(diào)試結(jié)點(diǎn)的操作可以對(duì)PMIC 的寄存器進(jìn)行讀寫(xiě)訪問(wèn)操作。

? 寫(xiě)操作

寄存器調(diào)試掛載在debugfs文件系統(tǒng)。 mount -t debugfs none /sys/kernel/debug echo ${reg} ${value} > /sys/kernel/debug/regmap/${dev-name}/registers 實(shí)例: echo 0xff 0x01 > /sys/kernel/debug/regmap/4-0034/registers 寫(xiě)0xff寄存器值為0x01

? 讀操作

寄存器調(diào)試掛載在debugfs文件系統(tǒng)。 mount -t debugfs none /sys/kernel/debug cat /sys/kernel/debug/regmap/${dev-name}/registers 實(shí)例: cat /sys/kernel/debug/regmap/4-0034/registers 讀取pmic所有寄存器

4.1.2.3 axp_reg 節(jié)點(diǎn)

另外,還支持axp 驅(qū)動(dòng)自定義節(jié)點(diǎn)axp_reg 讀寫(xiě)寄存器。但是這種用法是不推薦的,因?yàn)橛袠?biāo)準(zhǔn)regmap 方式來(lái)讀寫(xiě)寄存器,根本沒(méi)必要用私有非標(biāo)的方式。示例

如下。

往axp寄存器0x0f寫(xiě)入值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é)點(diǎn)

axp 驅(qū)動(dòng)自定義節(jié)點(diǎn)debug_mask 打開(kāi)和關(guān)閉調(diào)試信息。相關(guān)調(diào)試信息參考具體的PMIC 驅(qū)動(dòng)。示例如下。

系統(tǒng)打印等級(jí)設(shè)置為8: echo 8 > /proc/sys/kernel/printk 打開(kāi)所有axp調(diào)試信息: echo 0xf > /sys/class/axp/debug_mask 關(guān)閉所有axp調(diào)試信息: echo 0x0 > /sys/class/axp/debug_mask

調(diào)試信息一般如下。

[ 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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4021

    瀏覽量

    217012
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207889
  • 開(kāi)發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    7509
  • PMU
    PMU
    +關(guān)注

    關(guān)注

    1

    文章

    101

    瀏覽量

    21496
  • Tina
    +關(guān)注

    關(guān)注

    2

    文章

    45

    瀏覽量

    16894
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Tina_Linux系統(tǒng)裁剪開(kāi)發(fā)指南

    Tina_Linux系統(tǒng)裁剪開(kāi)發(fā)指南1 概述2 Tina系統(tǒng)裁剪簡(jiǎn)介2.1 boot0裁剪2.2 uboot裁剪2.3 內(nèi)核裁剪2.3.1 刪除不使用的功能2.3.2 刪除不使用的驅(qū)動(dòng)2.3.3
    的頭像 發(fā)表于 03-06 09:52 ?1384次閱讀

    EAC0945 linux開(kāi)發(fā)指南

    EAC0945 linux開(kāi)發(fā)指南
    發(fā)表于 09-28 12:40

    EAC0945 linux開(kāi)發(fā)指南

    `EAC0945 linux開(kāi)發(fā)指南`
    發(fā)表于 10-31 12:18

    Rockchip Linux SDK uboot logo開(kāi)發(fā)指南

    arm嵌入式vs-rk3399 板卡uboot logo 開(kāi)發(fā)指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關(guān)功能、配置以及開(kāi)發(fā)過(guò)程中的注意事項(xiàng)。適用于 rockhip
    發(fā)表于 10-09 08:12

    Tiny6410 Linux開(kāi)發(fā)指南詳解

    Tiny6410 Linux 開(kāi)發(fā)指南
    發(fā)表于 07-08 17:12 ?209次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)指南</b>詳解

    A64開(kāi)發(fā)板LCD開(kāi)發(fā)指南

    A64開(kāi)發(fā)板LCD開(kāi)發(fā)指南,驅(qū)動(dòng)開(kāi)發(fā)指南
    發(fā)表于 06-21 17:02 ?0次下載

    彩光燈開(kāi)發(fā)指南

    彩光燈開(kāi)發(fā)指南
    發(fā)表于 12-29 20:15 ?0次下載

    Linux的平臺(tái)下Mini210S裸機(jī)程序開(kāi)發(fā)指南

    Linux的平臺(tái)下Mini210S裸機(jī)程序開(kāi)發(fā)指南
    發(fā)表于 10-29 10:52 ?59次下載
    <b class='flag-5'>Linux</b>的平臺(tái)下Mini210S裸機(jī)程序<b class='flag-5'>開(kāi)發(fā)指南</b>

    Rockchip Linux SDK的開(kāi)發(fā)指南的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Rockchip Linux SDK的開(kāi)發(fā)指南的詳細(xì)資料說(shuō)明。
    發(fā)表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開(kāi)發(fā)指南</b>的詳細(xì)資料說(shuō)明

    迅為RK3399開(kāi)發(fā)板嵌入式linux開(kāi)發(fā)指南

    迅為RK3399開(kāi)發(fā)板嵌入式linux開(kāi)發(fā)指南迅為RK3399開(kāi)發(fā)板發(fā)布《北京迅為嵌入式linux開(kāi)發(fā)指
    發(fā)表于 11-01 16:58 ?75次下載
    迅為RK3399<b class='flag-5'>開(kāi)發(fā)</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開(kāi)發(fā)指南</b>

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1517次閱讀
    <b class='flag-5'>Tina_Linux</b>_系統(tǒng)軟件<b class='flag-5'>開(kāi)發(fā)指南</b>

    Tina Linux配置開(kāi)發(fā)指南

    Tina Linux配置開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置<b class='flag-5'>開(kāi)發(fā)指南</b>

    Linux NOR開(kāi)發(fā)指南

    Linux NOR開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?813次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開(kāi)發(fā)指南</b>

    Tina Linux圖形系統(tǒng)開(kāi)發(fā)指南

    本文檔將介紹 Allwinner Tina Linux 中已經(jīng)移植好的窗口系統(tǒng),以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整體結(jié)構(gòu) 。
    的頭像 發(fā)表于 03-06 11:00 ?2844次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>圖形系統(tǒng)<b class='flag-5'>開(kāi)發(fā)指南</b>

    Tina Linux音頻開(kāi)發(fā)指南

    介紹Tina平臺(tái)音頻模塊的使用方法。
    的頭像 發(fā)表于 03-06 11:02 ?5790次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>音頻<b class='flag-5'>開(kāi)發(fā)指南</b>