So far I have found three places where battery parameters get defined:
In the devicetree (pine64.dts here from the current longsleep kernel):
In the AXP driver in the linux kernel: /drivers/power/axp_power/axp-cfg.h
There is also in the AXP driver: /drivers/power/axp_power/axp-board.c
Those two structures are also what one gets from sysfs from userspace, so my money is on those entries to be the actual values used by the battery charger code in the driver, but I have to do more reading to verify that.
/sys/class/power_supply/battery/uevent:
I have a question for the real kernel hackers:
The devicetree has two entries, one for
and one for
I only find
referenced when I search through the sources, no reference for the entry with
Does that mean that entry does not get read anywhere and so the battery definiton from the dts does not get used at all atm?
In the devicetree (pine64.dts here from the current longsleep kernel):
Code:
pmu0@0 {
compatible = "allwinner,pmu0";
device_type = "pmu0";
pmu_batdeten = <0x00000001>;
pmu_init_chgend_rate = <0x00000014>;
pmu_init_chg_enabled = <0x00000001>;
pmu_init_adc_freq = <0x00000320>;
pmu_init_adcts_freq = <0x00000320>;
pmu_init_chg_pretime = <0x00000046>;
pmu_init_chg_csttime = <0x000002d0>;
pmu_batt_cap_correct = <0x00000001>;
pmu_chg_end_on_en = <0x00000000>;
pmu_pwroff_vol = <0x00000ce4>;
pmu_pwron_vol = <0x00000a28>;
pmu_powkey_off_delay_time = <0x00000000>;
pmu_pwrok_time = <0x00000040>;
pmu_reset_shutdown_en = <0x00000001>;
pmu_restvol_adjust_time = <0x0000003c>;
pmu_ocv_cou_adjust_time = <0x0000003c>;
pmu_vbusen_func = <0x00000001>;
pmu_reset = <0x00000000>;
pmu_IRQ_wakeup = <0x00000001>;
pmu_hot_shutdowm = <0x00000001>;
pmu_inshort = <0x00000000>;
pmu_bat_shutdown_ltf = <0x00000c80>;
pmu_bat_shutdown_htf = <0x000000ed>;
status = "okay";
pmu_id = <0x00000006>;
pmu_twi_addr = <0x00000034>;
pmu_twi_id = <0x00000001>;
pmu_irq_id = <0x00000040>;
pmu_chg_ic_temp = <0x00000000>;
pmu_battery_rdc = <0x00000058>;
pmu_battery_cap = <0x000012c0>;
pmu_runtime_chgcur = <0x000001c2>;
pmu_suspend_chgcur = <0x000005dc>;
pmu_shutdown_chgcur = <0x000005dc>;
pmu_init_chgvol = <0x00001068>;
pmu_ac_vol = <0x00000fa0>;
pmu_ac_cur = <0x00000dac>;
pmu_usbpc_vol = <0x00001130>;
pmu_usbpc_cur = <0x000001f4>;
pmu_battery_warning_level1 = <0x0000000f>;
pmu_battery_warning_level2 = <0x00000000>;
pmu_chgled_func = <0x00000000>;
pmu_chgled_type = <0x00000000>;
pmu_bat_para1 = <0x00000000>;
pmu_bat_para2 = <0x00000000>;
pmu_bat_para3 = <0x00000000>;
pmu_bat_para4 = <0x00000000>;
pmu_bat_para5 = <0x00000000>;
pmu_bat_para6 = <0x00000000>;
pmu_bat_para7 = <0x00000001>;
pmu_bat_para8 = <0x00000001>;
pmu_bat_para9 = <0x00000002>;
pmu_bat_para10 = <0x00000003>;
pmu_bat_para11 = <0x00000004>;
pmu_bat_para12 = <0x0000000a>;
pmu_bat_para13 = <0x00000011>;
pmu_bat_para14 = <0x0000001a>;
pmu_bat_para15 = <0x00000029>;
pmu_bat_para16 = <0x0000002e>;
pmu_bat_para17 = <0x00000033>;
pmu_bat_para18 = <0x00000038>;
pmu_bat_para19 = <0x0000003b>;
pmu_bat_para20 = <0x00000041>;
pmu_bat_para21 = <0x00000045>;
pmu_bat_para22 = <0x0000004b>;
pmu_bat_para23 = <0x0000004f>;
pmu_bat_para24 = <0x00000053>;
pmu_bat_para25 = <0x00000059>;
pmu_bat_para26 = <0x0000005f>;
pmu_bat_para27 = <0x00000062>;
pmu_bat_para28 = <0x00000064>;
pmu_bat_para29 = <0x00000064>;
pmu_bat_para30 = <0x00000064>;
pmu_bat_para31 = <0x00000064>;
pmu_bat_para32 = <0x00000064>;
pmu_bat_temp_enable = <0x00000001>;
pmu_bat_charge_ltf = <0x000008d5>;
pmu_bat_charge_htf = <0x00000184>;
pmu_bat_temp_para1 = <0x00001d2a>;
pmu_bat_temp_para2 = <0x00001180>;
pmu_bat_temp_para3 = <0x00000dbe>;
pmu_bat_temp_para4 = <0x00000ae2>;
pmu_bat_temp_para5 = <0x000008af>;
pmu_bat_temp_para6 = <0x000006fc>;
pmu_bat_temp_para7 = <0x000005a8>;
pmu_bat_temp_para8 = <0x000003c9>;
pmu_bat_temp_para9 = <0x00000298>;
pmu_bat_temp_para10 = <0x000001d2>;
pmu_bat_temp_para11 = <0x00000189>;
pmu_bat_temp_para12 = <0x0000014d>;
pmu_bat_temp_para13 = <0x0000011b>;
pmu_bat_temp_para14 = <0x000000f2>;
pmu_bat_temp_para15 = <0x000000b3>;
pmu_bat_temp_para16 = <0x00000086>;
pmu_powkey_off_time = <0x00001770>;
pmu_powkey_off_func = <0x00000000>;
pmu_powkey_off_en = <0x00000001>;
pmu_powkey_long_time = <0x000005dc>;
pmu_powkey_on_time = <0x000003e8>;
power_start = <0x00000000>;
};
regu@0 {
compatible = "allwinner,pmu0_regu";
regulator_count = <0x00000017>;
status = "okay";
device_type = "pmu0_regu";
regulator1 = "axp81x_dcdc1 none vcc-nand vcc-emmc vcc-sdc vcc-usb-30 vcc-io vcc-pd";
regulator2 = "axp81x_dcdc2 none vdd-cpua";
regulator3 = "axp81x_dcdc3 none";
regulator4 = "axp81x_dcdc4 none";
regulator5 = "axp81x_dcdc5 none vcc-dram";
regulator6 = "axp81x_dcdc6 none vdd-sys";
regulator7 = "axp81x_dcdc7 none";
regulator8 = "axp81x_rtc none";
regulator9 = "axp81x_aldo1 none vdd-csi-led iovdd-csi vcc-pe";
regulator10 = "axp81x_aldo2 none vcc-pl";
regulator11 = "axp81x_aldo3 none vcc-avcc vcc-pll";
regulator12 = "axp81x_dldo1 none vcc-hdmi-33";
regulator13 = "axp81x_dldo2 none vcc-mipi";
regulator14 = "axp81x_dldo3 none avdd-csi";
regulator15 = "axp81x_dldo4 none vcc-deviceio";
regulator16 = "axp81x_eldo1 none vcc-cpvdd vcc-wifi-io vcc-pc vcc-pg";
regulator17 = "axp81x_eldo2 none vcc-lcd-0";
regulator18 = "axp81x_eldo3 none dvdd-csi-18";
regulator19 = "axp81x_fldo1 none vcc-hsic-12";
regulator20 = "axp81x_fldo2 none vdd-cpus";
regulator21 = "axp81x_gpio0ldo none vcc-ctp";
regulator22 = "axp81x_gpio1ldo none";
regulator23 = "axp81x_dc1sw none vcc-lvds vcc-dsi-33";
};
In the AXP driver in the linux kernel: /drivers/power/axp_power/axp-cfg.h
Code:
...
#define INTCHGCUR 300000 //set initial charging current limite
#define SUSCHGCUR 1000000 //set suspend charging current limite
#define RESCHGCUR INTCHGCUR //set resume charging current limite
#define CLSCHGCUR SUSCHGCUR //set shutdown charging current limite
#define INTCHGVOL 4200000 //set initial charing target voltage
#define INTCHGENDRATE 10 //set initial charing end current rate
#define INTCHGENABLED 1 //set initial charing enabled
#define INTADCFREQ 25 //set initial adc frequency
#define INTADCFREQC 100 //set initial coulomb adc coufrequency
#define INTCHGPRETIME 50 //set initial pre-charging time
#define INTCHGCSTTIME 480 //set initial pre-charging time
#define BATMAXVOL 4200000 //set battery max design volatge
#define BATMINVOL 3500000 //set battery min design volatge
...
There is also in the AXP driver: /drivers/power/axp_power/axp-board.c
Code:
...
static struct power_supply_info battery_data ={
.name ="PTI PL336078",
.technology = POWER_SUPPLY_TECHNOLOGY_LiFe,
.voltage_max_design = 4200000,
.voltage_min_design = 3500000,
.use_for_apm = 1,
};
static struct axp_supply_init_data axp_sply_init_data = {
.battery_info = &battery_data,
.chgcur = 1500000,
.chgvol = 4200000,
.chgend = 10,
.chgen = 1,
.sample_time = 800,
.chgpretime = 50,
.chgcsttime = 720,
};
...
Those two structures are also what one gets from sysfs from userspace, so my money is on those entries to be the actual values used by the battery charger code in the driver, but I have to do more reading to verify that.
/sys/class/power_supply/battery/uevent:
Code:
ubuntu@pine64:/sys/class/power_supply/battery$ cat uevent
POWER_SUPPLY_NAME=battery
POWER_SUPPLY_MODEL_NAME=battery
POWER_SUPPLY_STATUS=Full
POWER_SUPPLY_PRESENT=0
POWER_SUPPLY_ONLINE=0
POWER_SUPPLY_HEALTH=Good
POWER_SUPPLY_TECHNOLOGY=LiFe
POWER_SUPPLY_VOLTAGE_MAX_DESIGN=4200000
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=3300
POWER_SUPPLY_VOLTAGE_NOW=0
POWER_SUPPLY_CURRENT_NOW=0
POWER_SUPPLY_ENERGY_FULL_DESIGN=4800
POWER_SUPPLY_CAPACITY=100
POWER_SUPPLY_TEMP=300
I have a question for the real kernel hackers:
The devicetree has two entries, one for
Code:
...
pmu0@0 {
compatible = "allwinner,pmu0";
...
and one for
Code:
...
regu@0 {
compatible = "allwinner,pmu0_regu";
...
I only find
Code:
drivers/power/axp_power/axp-mem-device.c: { .compatible = "allwinner,pmu0_regu", },
referenced when I search through the sources, no reference for the entry with
Code:
compatible = "allwinner,pmu0";
Does that mean that entry does not get read anywhere and so the battery definiton from the dts does not get used at all atm?
Come have a chat in the Pine IRC channel >>