lost battery information
I have lost battery in 2.6.24-rc1. Without CONFIG_ACPI_PROCFS I have no /proc/acpi/battery and cannot test netlink interface because right now there is no consumer of this.
With CONFIG_ACPI_PROCFS I get
{pts/1}% LC_ALL=C ll /proc/acpi/battery/BAT1
total 0
-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm
-r--r--r-- 1 root root 0 Oct 26 20:18 info
-r--r--r-- 1 root root 0 Oct 26 20:18 state
{pts/1}% LC_ALL=C cat /proc/acpi/battery/BAT1/*
cat: /proc/acpi/battery/BAT1/alarm: Bad address
cat: /proc/acpi/battery/BAT1/info: Bad address
cat: /proc/acpi/battery/BAT1/state: Bad address
{pts/1}% LC_ALL=C ll /proc/acpi/battery/BAT2
total 0
-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm
-r--r--r-- 1 root root 0 Oct 26 20:18 info
-r--r--r-- 1 root root 0 Oct 26 20:18 state
{pts/1}% LC_ALL=C cat /proc/acpi/battery/BAT2/*
present: no present: no present: no
BAT2 is correct - it is not present. BAT1 is lying. There is nothing in dmesg. battery is loaded (obviously)
ACPI related stuff from dmesg:
{pts/1}% dmesg |grep ACPI
[ 0.000000] BIOS-e820: 00000000000eee00 - 00000000000ef000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000001ef60000 - 000000001ef70000 (ACPI data) [ 0.000000] ACPI: RSDP 000F0090, 0014 (r0 TOSHIB) [ 0.000000] ACPI: RSDT 1EF60000, 0028 (r1 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: FACP 1EF60054, 0084 (r2 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: DSDT 1EF600D8, 68DA (r1 TOSHIB 4000 20020417 MSFT 100000A) [ 0.000000] ACPI: FACS 000EEE00, 0040 [ 0.000000] ACPI: PM-Timer IO Port: 0xee08 [ 896.112009] ACPI: Core revision 20070126 [ 896.112775] ACPI: Looking for DSDT in initramfs... error, file /DSDT.aml not found. [ 896.123590] tbxface-0598 [00] tb_load_namespace : ACPI Tables successfully acquired [ 896.123631] ACPI: setting ELCR to 0200 (from 0a00) [ 896.124208] evxfevnt-0091 [00] enable : Transition to ACPI mode successful [ 896.131744] ACPI: bus type pci registered [ 896.149165] ACPI: EC: Look up EC in DSDT [ 896.163343] ACPI: Interpreter enabled [ 896.163362] ACPI: (supports S0 S3 S4 S5) [ 896.163510] ACPI: Using PIC for interrupt routing [ 896.195892] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 896.197650] PCI quirk: region ee00-ee3f claimed by ali7101 ACPI [ 896.200015] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 896.200588] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] [ 896.227797] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11) [ 896.228562] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 *11) [ 896.229271] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 10 *11) [ 896.230101] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 10 *11) [ 896.230818] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 *11) [ 896.231527] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 10 *11) [ 896.232912] ACPI: Power Resource [PFAN] (off) [ 896.233622] pnp: PnP ACPI init [ 896.233766] ACPI: bus type pnp registered [ 896.257679] pnp: PnP ACPI: found 12 devices [ 896.257737] ACPI: ACPI bus type pnp unregistered [ 896.258820] PCI: Using ACPI for IRQ routing [ 896.325763] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11 [ 896.325805] ACPI: PCI Interrupt 0000:00:10.0[A] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 896.327116] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 11 [ 896.327143] ACPI: PCI Interrupt 0000:00:11.0[A] -> Link [LNKA] -> GSI 11 (level, low) -> IRQ 11 [ 896.328392] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11 [ 896.328416] ACPI: PCI Interrupt 0000:00:11.1[B] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11 [ 896.978962] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11 [ 896.980097] ACPI: PCI Interrupt 0000:00:0a.0[A] -> Link [LNKD] -> GSI 11 (level, low) -> IRQ 11 [ 902.378588] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 902.406719] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 919.051426] ACPI: PCI Interrupt Link [LNKG] enabled at IRQ 11 [ 919.051451] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11 [ 920.132284] ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 11 [ 920.132307] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI 11 (level, low) -> IRQ 11 [ 927.120073] ACPI: AC Adapter [ADP1] (on-line) [ 927.195942] ACPI: Battery Slot [BAT1] (battery present) [ 927.200475] ACPI: Battery Slot [BAT2] (battery absent) [ 927.277564] ACPI: Power Button (FF) [PWRF] [ 927.290786] ACPI: Lid Switch [LID] [ 927.324850] ACPI: Transitioning device [FAN] to D3 [ 927.324867] ACPI: Transitioning device [FAN] to D3 [ 927.324891] ACPI: Fan [FAN] (off) [ 927.535960] ACPI: CPU0 (power states: C1[C1] C2[C2]) [ 927.638487] ACPI: Thermal Zone [THRM] (55 C) [ 927.770100] toshiba_acpi: Toshiba Laptop ACPI Extras version 0.18 [ 927.920519] ACPI: Video Device [VGA] (multi-head: yes rom: yes post: no) [ 1055.552624] ACPI: PCI interrupt for device 0000:00:0a.0 disabled [ 1055.554812] ACPI: PCI interrupt for device 0000:00:06.0 disabled [ 1055.555479] ACPI: PCI interrupt for device 0000:00:02.0 disabled [ 0.901020] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11 [ 0.901271] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 0.901278] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 0.904594] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI 11
(level, low) -> IRQ 11
As for the case without ACPI_PROCFS ... well, I do not have it in /proc - which is expected - but neither I do have it in /sys. And Kconfig help reads
The deprecated files (and their replacements) include:
/proc/acpi/sleep (/sys/power/state)
/proc/acpi/info (/sys/modules/acpi/parameters/acpica_version) /proc/acpi/dsdt (/sys/firmware/acpi/tables/DSDT) /proc/acpi/fadt (/sys/firmware/acpi/tables/FACP) /proc/acpi/debug_layer (/sys/module/acpi/parameters/debug_layer) /proc/acpi/debug_level (/sys/module/acpi/parameters/debug_level)
neither does it mention /proc/acpi/battery not do I actually have any battery information in /sys.
Personally I do not like it (if it is intentional). Leaving only netlink interface means user has no way to query for actual state. We need something running all the time and hope, it never loses any event and thus reflects actual state. But it also means we are not allowed to restart it (whatever it is) as it will have no way to query for actual state on restart ...
-andrey
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.
This is a known issue. Please see:
http://lkml.org/lkml/2007/10/22/110
Cheers,
Frans Pop
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.
for /sysfs interface you need to enable power_supply driver.
or you could apply this patch and power_supply will be selected by battery itself.
Quoted 8 lines
With
CONFIG_ACPI_PROCFSI get{pts/1}% LC_ALL=C ll
/proc/acpi/battery/BAT1
total 0(quoted diff) +0
-3-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm -r--r--r-- 1 root root 0 Oct 26 20:18 info -r--r--r-- 1 root root 0 Oct 26 20:18 state
Quoted 4 lines
{pts/1}% LC_ALL=C cat
/proc/acpi/battery/BAT1/*
cat:/proc/acpi/battery/BAT1/alarm: Bad address
cat:/proc/acpi/battery/BAT1/info: Bad address
cat:/proc/acpi/battery/BAT1/state: Bad address
Could you make sure it's a clean build with all drivers updated/kernel included?
Quoted 114 lines
{pts/1}% LC_ALL=C ll
/proc/acpi/battery/BAT2
total 0(quoted diff) +0
-3-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm -r--r--r-- 1 root root 0 Oct 26 20:18 info -r--r--r-- 1 root root 0 Oct 26 20:18 state{pts/1}% LC_ALL=C cat
/proc/acpi/battery/BAT2/*present: no present: no present: noBAT2 is correct - it is not present. BAT1 is lying. There is nothing in dmesg. battery is loaded (obviously)
ACPI related stuff from dmesg:
{pts/1}% dmesg |grep ACPI
[ 0.000000] BIOS-e820: 00000000000eee00 - 00000000000ef000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000001ef60000 - 000000001ef70000 (ACPI data) [ 0.000000] ACPI: RSDP 000F0090, 0014 (r0 TOSHIB) [ 0.000000] ACPI: RSDT 1EF60000, 0028 (r1 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: FACP 1EF60054, 0084 (r2 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: DSDT 1EF600D8, 68DA (r1 TOSHIB 4000 20020417 MSFT 100000A) [ 0.000000] ACPI: FACS 000EEE00, 0040 [ 0.000000] ACPI: PM-Timer IO Port: 0xee08 [ 896.112009] ACPI: Core revision 20070126 [ 896.112775] ACPI: Looking for DSDT in initramfs... error, file /DSDT.aml not found. [ 896.123590] tbxface-0598 [00] tb_load_namespace : ACPI Tables successfully acquired [ 896.123631] ACPI: setting ELCR to 0200 (from 0a00) [ 896.124208] evxfevnt-0091 [00] enable : Transition to ACPI mode successful [ 896.131744] ACPI: bus type pci registered [ 896.149165] ACPI: EC: Look up EC in DSDT [ 896.163343] ACPI: Interpreter enabled [ 896.163362] ACPI: (supports S0 S3 S4 S5) [ 896.163510] ACPI: Using PIC for interrupt routing [ 896.195892] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 896.197650] PCI quirk: region ee00-ee3f claimed by ali7101 ACPI [ 896.200015] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 896.200588] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] [ 896.227797] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11) [ 896.228562] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 *11) [ 896.229271] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 10 *11) [ 896.230101] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 10 *11) [ 896.230818] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 *11) [ 896.231527] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 10 *11) [ 896.232912] ACPI: Power Resource [PFAN] (off) [ 896.233622] pnp: PnP ACPI init [ 896.233766] ACPI: bus type pnp registered [ 896.257679] pnp: PnP ACPI: found 12 devices [ 896.257737] ACPI: ACPI bus type pnp unregistered [ 896.258820] PCI: Using ACPI for IRQ routing [ 896.325763] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11 [ 896.325805] ACPI: PCI Interrupt 0000:00:10.0[A] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 896.327116] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 11 [ 896.327143] ACPI: PCI Interrupt 0000:00:11.0[A] -> Link [LNKA] -> GSI 11 (level, low) -> IRQ 11 [ 896.328392] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11 [ 896.328416] ACPI: PCI Interrupt 0000:00:11.1[B] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11 [ 896.978962] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11 [ 896.980097] ACPI: PCI Interrupt 0000:00:0a.0[A] -> Link [LNKD] -> GSI 11 (level, low) -> IRQ 11 [ 902.378588] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 902.406719] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 919.051426] ACPI: PCI Interrupt Link [LNKG] enabled at IRQ 11 [ 919.051451] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11 [ 920.132284] ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 11 [ 920.132307] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI 11 (level, low) -> IRQ 11 [ 927.120073] ACPI: AC Adapter [ADP1] (on-line) [ 927.195942] ACPI: Battery Slot [BAT1] (battery present) [ 927.200475] ACPI: Battery Slot [BAT2] (battery absent) [ 927.277564] ACPI: Power Button (FF) [PWRF] [ 927.290786] ACPI: Lid Switch [LID] [ 927.324850] ACPI: Transitioning device [FAN] to D3 [ 927.324867] ACPI: Transitioning device [FAN] to D3 [ 927.324891] ACPI: Fan [FAN] (off) [ 927.535960] ACPI: CPU0 (power states: C1[C1] C2[C2]) [ 927.638487] ACPI: Thermal Zone [THRM] (55 C) [ 927.770100] toshiba_acpi: Toshiba Laptop ACPI Extras version 0.18 [ 927.920519] ACPI: Video Device [VGA] (multi-head: yes rom: yes post: no) [ 1055.552624] ACPI: PCI interrupt for device 0000:00:0a.0 disabled [ 1055.554812] ACPI: PCI interrupt for device 0000:00:06.0 disabled [ 1055.555479] ACPI: PCI interrupt for device 0000:00:02.0 disabled [ 0.901020] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11 [ 0.901271] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 0.901278] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 0.904594] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI 11(level, low) -> IRQ 11
As for the case without
ACPI_PROCFS... well, I do not have it in /proc - which is expected - but neither I do have it in /sys. AndKconfighelp readsThe deprecated files (and their replacements) include:
/proc/acpi/sleep(/sys/power/state)
/proc/acpi/info(/sys/modules/acpi/parameters/acpica_version)/proc/acpi/dsdt(/sys/firmware/acpi/tables/DSDT)/proc/acpi/fadt(/sys/firmware/acpi/tables/FACP)/proc/acpi/debug_layer(/sys/module/acpi/parameters/debug_layer)/proc/acpi/debug_level(/sys/module/acpi/parameters/debug_level)neither does it mention
/proc/acpi/batterynot do I actually have any battery information in /sys.
Quoted 7 lines
Personally I do not like it (if it is intentional). Leaving only netlink interface means user has no way to query for actual state. We need something running all the time and hope, it never loses any event and thus reflects actual state. But it also means we are not allowed to restart it (whatever it is) as it will have no way to query for actual state on restart ...
-andrey
ACPI: use select POWER_SUPPLY for AC, BATTERY and SBS
From: Alexey Starikovskiy <[email protected]>
POWER_SUPPLY is needed for AC, battery, and SBS sysfs support. Use 'select' instead of 'depends on', as it is will not be selected by anything else, leading to confusion.
---
drivers/acpi/Kconfig | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
drivers/acpi/Kconfig +5 -3
@@ -88,7 +88,8 @@ config ACPI_PROC_EVENT config ACPI_AC tristate "AC Adapter" - depends on X86 && POWER_SUPPLY + depends on X86 + select POWER_SUPPLY default y help This driver adds support for the AC Adapter object, which indicates
@@ -97,7 +98,8 @@ config ACPI_AC config ACPI_BATTERY tristate "Battery" - depends on X86 && POWER_SUPPLY + depends on X86 + select POWER_SUPPLY default y help This driver adds support for battery information through
@@ -352,7 +354,7 @@ config ACPI_HOTPLUG_MEMORY config ACPI_SBS tristate "Smart Battery System" depends on X86 - depends on POWER_SUPPLY + select POWER_SUPPLY help This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops.
Quoted 9 lines · Alexey Starikovskiy
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.for /sysfs interface you need to enable
power_supplydriver. or you could apply this patch andpower_supplywill be selected by battery itself.
I already have power_supply module, battery depends on it and it is autloaded. But I fail to see where I can get battery info in /sys
Here is what I get in 2.6.23 from /proc/acpi/battery:
sh-3.2# ls -l /proc/acpi/battery/BAT1
total 0
-rw-r--r-- 1 root root 0 Oct 26 21:00 alarm
-r--r--r-- 1 root root 0 Oct 26 21:00 info
-r--r--r-- 1 root root 0 Oct 26 21:00 state
sh-3.2# cat /proc/acpi/battery/BAT1/alarm
alarm: 756 mWh
sh-3.2# cat /proc/acpi/battery/BAT1/info
present: yes design capacity: 38880 mWh last full capacity: 37530 mWh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 756 mWh design capacity low: 0 mWh capacity granularity 1: 10 mWh capacity granularity 2: 10 mWh model number: XM2038P04 serial number: 2000009244 battery type: Li-ION OEM info: sh-3.2# cat /proc/acpi/battery/BAT1/state present: yes capacity state: ok charging state: charged present rate: 0 mW remaining capacity: 37530 mWh present voltage: 11340 mV
and here is what I can find in 2.6.24-rc1 in /sys/class/power_supply:
sh-3.2# ls -l /sys/class/power_supply/BAT1/
total 0
-rw-r--r-- 1 root root 4096 2007-10-26 20:55 alarm
lrwxrwxrwx 1 root root 0 2007-10-26 20:55
device -> ../../../../../../devices/LNXSYSTM:00/device:00/PNP0C0A:00
drwxr-xr-x 2 root root 0 2007-10-26 20:55 power
lrwxrwxrwx 1 root root 0 2007-10-26 20:55
subsystem -> ../../../../../../class/power_supply -r--r--r-- 1 root root 4096 2007-10-26 20:55 type -rw-r--r-- 1 root root 4096 2007-10-26 20:55 uevent sh-3.2# ls -l /sys/class/power_supply/BAT1/device/
total 0
lrwxrwxrwx 1 root root 0 2007-10-26 20:54
driver -> ../../../../bus/acpi/drivers/battery
-r--r--r-- 1 root root 4096 2007-10-26 20:56 hid -r--r--r-- 1 root root 4096 2007-10-26 20:54 modalias -r--r--r-- 1 root root 4096 2007-10-26 20:56 path
drwxr-xr-x 2 root root 0 2007-10-26 20:56 power drwxr-xr-x 3 root root 0 2007-10-26 20:54 power_supply lrwxrwxrwx 1 root root 0 2007-10-26 20:54 subsystem -> ../../../../bus/acpi
-rw-r--r-- 1 root root 4096 2007-10-26 20:54 uevent sh-3.2# cat /sys/class/power_supply/BAT1/alarm 0
sh-3.2# cat /sys/class/power_supply/BAT1/device/hid PNP0C0A
sh-3.2# cat /sys/class/power_supply/BAT1/device/path \_SB_.BAT1
so the only useful information I get is that it is Battery (type attribute) and PNP/ACPI IDs.
Quoted 12 lines
Quoted 11 lines
With
CONFIG_ACPI_PROCFSI get{pts/1}% LC_ALL=C ll
/proc/acpi/battery/BAT1
total 0(quoted diff) +0
-3-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm -r--r--r-- 1 root root 0 Oct 26 20:18 info -r--r--r-- 1 root root 0 Oct 26 20:18 state{pts/1}% LC_ALL=C cat
/proc/acpi/battery/BAT1/*
cat:/proc/acpi/battery/BAT1/alarm: Bad address
cat:/proc/acpi/battery/BAT1/info: Bad address
cat:/proc/acpi/battery/BAT1/state: Bad address
And even if it worked with /sys you still have regression in /proc/acpi
Quoted 3 lines
Could you make sure it's a clean build with all drivers updated/kernel included?
It is clean build of -rc1. As long as can trust git pull (I build every version in clean O directory).
Quoted 124 lines
Quoted 124 lines
{pts/1}% LC_ALL=C ll
/proc/acpi/battery/BAT2
total 0(quoted diff) +0
-3-rw-r--r-- 1 root root 0 Oct 26 20:18 alarm -r--r--r-- 1 root root 0 Oct 26 20:18 info -r--r--r-- 1 root root 0 Oct 26 20:18 state{pts/1}% LC_ALL=C cat
/proc/acpi/battery/BAT2/*present: no present: no present: noBAT2 is correct - it is not present. BAT1 is lying. There is nothing in dmesg. battery is loaded (obviously)
ACPI related stuff from dmesg:
{pts/1}% dmesg |grep ACPI
[ 0.000000] BIOS-e820: 00000000000eee00 - 00000000000ef000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000001ef60000 - 000000001ef70000 (ACPI data) [ 0.000000] ACPI: RSDP 000F0090, 0014 (r0 TOSHIB) [ 0.000000] ACPI: RSDT 1EF60000, 0028 (r1 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: FACP 1EF60054, 0084 (r2 TOSHIB 750 970814 TASM 4010000) [ 0.000000] ACPI: DSDT 1EF600D8, 68DA (r1 TOSHIB 4000 20020417 MSFT 100000A) [ 0.000000] ACPI: FACS 000EEE00, 0040 [ 0.000000] ACPI: PM-Timer IO Port: 0xee08 [ 896.112009] ACPI: Core revision 20070126 [ 896.112775] ACPI: Looking for DSDT in initramfs... error, file /DSDT.aml not found. [ 896.123590] tbxface-0598 [00] tb_load_namespace : ACPI Tables successfully acquired [ 896.123631] ACPI: setting ELCR to 0200 (from 0a00) [ 896.124208] evxfevnt-0091 [00] enable : Transition to ACPI mode successful [ 896.131744] ACPI: bus type pci registered [ 896.149165] ACPI: EC: Look up EC in DSDT [ 896.163343] ACPI: Interpreter enabled [ 896.163362] ACPI: (supports S0 S3 S4 S5) [ 896.163510] ACPI: Using PIC for interrupt routing [ 896.195892] ACPI: PCI Root Bridge [PCI0] (0000:00) [ 896.197650] PCI quirk: region ee00-ee3f claimed by ali7101 ACPI [ 896.200015] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 896.200588] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCI1._PRT] [ 896.227797] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 10 *11) [ 896.228562] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 7 10 *11) [ 896.229271] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 10 *11) [ 896.230101] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 10 *11) [ 896.230818] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 *11) [ 896.231527] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 10 *11) [ 896.232912] ACPI: Power Resource [PFAN] (off) [ 896.233622] pnp: PnP ACPI init [ 896.233766] ACPI: bus type pnp registered [ 896.257679] pnp: PnP ACPI: found 12 devices [ 896.257737] ACPI: ACPI bus type pnp unregistered [ 896.258820] PCI: Using ACPI for IRQ routing [ 896.325763] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11 [ 896.325805] ACPI: PCI Interrupt 0000:00:10.0[A] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11 [ 896.327116] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 11 [ 896.327143] ACPI: PCI Interrupt 0000:00:11.0[A] -> Link [LNKA] -> GSI 11 (level, low) -> IRQ 11 [ 896.328392] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11 [ 896.328416] ACPI: PCI Interrupt 0000:00:11.1[B] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11 [ 896.978962] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11 [ 896.980097] ACPI: PCI Interrupt 0000:00:0a.0[A] -> Link [LNKD] -> GSI 11 (level, low) -> IRQ 11 [ 902.378588] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 902.406719] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 919.051426] ACPI: PCI Interrupt Link [LNKG] enabled at IRQ 11 [ 919.051451] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11 [ 920.132284] ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 11 [ 920.132307] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI 11 (level, low) -> IRQ 11 [ 927.120073] ACPI: AC Adapter [ADP1] (on-line) [ 927.195942] ACPI: Battery Slot [BAT1] (battery present) [ 927.200475] ACPI: Battery Slot [BAT2] (battery absent) [ 927.277564] ACPI: Power Button (FF) [PWRF] [ 927.290786] ACPI: Lid Switch [LID] [ 927.324850] ACPI: Transitioning device [FAN] to D3 [ 927.324867] ACPI: Transitioning device [FAN] to D3 [ 927.324891] ACPI: Fan [FAN] (off) [ 927.535960] ACPI: CPU0 (power states: C1[C1] C2[C2]) [ 927.638487] ACPI: Thermal Zone [THRM] (55 C) [ 927.770100] toshiba_acpi: Toshiba Laptop ACPI Extras version 0.18 [ 927.920519] ACPI: Video Device [VGA] (multi-head: yes rom: yes post:no) [ 1055.552624] ACPI: PCI interrupt for device 0000:00:0a.0 disabled [ 1055.554812] ACPI: PCI interrupt for device 0000:00:06.0 disabled [ 1055.555479] ACPI: PCI interrupt for device 0000:00:02.0 disabled [ 0.901020] ACPI: PCI Interrupt 0000:00:02.0[A] -> Link [LNKG] -> GSI 11 (level, low) -> IRQ 11
[ 0.901271] ACPI: Unable to derive IRQ for device 0000:00:04.0 [ 0.901278] ACPI: PCI Interrupt 0000:00:04.0[A]: no GSI [ 0.904594] ACPI: PCI Interrupt 0000:00:06.0[A] -> Link [LNKH] -> GSI11 (level, low) -> IRQ 11
As for the case without
ACPI_PROCFS... well, I do not have it in /proc - which is expected - but neither I do have it in /sys. AndKconfighelp readsThe deprecated files (and their replacements) include:
/proc/acpi/sleep(/sys/power/state)/proc/acpi/info(/sys/modules/acpi/parameters/acpica_version)/proc/acpi/dsdt(/sys/firmware/acpi/tables/DSDT)/proc/acpi/fadt(/sys/firmware/acpi/tables/FACP)/proc/acpi/debug_layer
(/sys/module/acpi/parameters/debug_layer)/proc/acpi/debug_level(/sys/module/acpi/parameters/debug_level)neither does it mention
/proc/acpi/batterynot do I actually have any battery information in /sys.Personally I do not like it (if it is intentional). Leaving only netlink interface means user has no way to query for actual state. We need something running all the time and hope, it never loses any event and thus reflects actual state. But it also means we are not allowed to restart it (whatever it is) as it will have no way to query for actual state on restart ...
-andrey
Quoted 2 lines · Andrey Borzenkov
I already have
power_supplymodule, battery depends on it and it is autloaded. But I fail to see where I can get battery info in /sys
Ah, yes. I see what you mean now and I can confirm the same regression wrt missing battery data in /proc for my laptop.
$ cat /proc/acpi/battery/BAT1/* cat: /proc/acpi/battery/BAT1/alarm: Bad address cat: /proc/acpi/battery/BAT1/info: Bad address cat: /proc/acpi/battery/BAT1/state: Bad address
Sorry for the earlier misunderstanding.
Quoted 5 lines · Andrey Borzenkov
Quoted 4 lines · Alexey Starikovskiy
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.
Quoted 7 lines
Quoted 4 lines
for /sysfs interface you need to enable
power_supplydriver. or you could apply this patch andpower_supplywill be selected by battery itself.I already have
power_supplymodule, battery depends on it and it is autloaded. But I fail to see where I can get battery info in /sys
Intent was to put into /sysfs same information:
aystarik@samsung:~/client_conf$ ls /sys/class/power_supply/BAT1/ alarm charge_full charge_full_design charge_now current_now device manufacturer model_name present status subsystem technology type uevent voltage_min_design voltage_now
aystarik@samsung:~/client_conf$ cat /sys/class/power_supply/BAT1/* 0 4172000 4300000 4172000 0 cat: /sys/class/power_supply/BAT1/device: Is a directory Pacifi Bat1 1 Full cat: /sys/class/power_supply/BAT1/subsystem: Is a directory Li-ion Battery PHYSDEVPATH=/devices/LNXSYSTM:00/device:00/PNP0C0A:00 PHYSDEVBUS=acpi PHYSDEVDRIVER=battery POWER_SUPPLY_NAME=BAT1 POWER_SUPPLY_TYPE=Battery POWER_SUPPLY_STATUS=Full POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_VOLTAGE_MIN_DESIGN=14800000 POWER_SUPPLY_VOLTAGE_NOW=16522000 POWER_SUPPLY_CURRENT_NOW=0 POWER_SUPPLY_CHARGE_FULL_DESIGN=4300000 POWER_SUPPLY_CHARGE_FULL=4172000 POWER_SUPPLY_CHARGE_NOW=4172000 POWER_SUPPLY_MODEL_NAME=Bat1 POWER_SUPPLY_MANUFACTURER=Pacifi 14800000 16522000
aystarik@samsung:~/client_conf$ cat /proc/acpi/battery/BAT1/* alarm: unsupported present: yes design capacity: 4300 mAh last full capacity: 4172 mAh battery technology: rechargeable design voltage: 14800 mV design capacity warning: 208 mAh design capacity low: 41 mAh capacity granularity 1: 41 mAh capacity granularity 2: 41 mAh model number: Bat1 serial number: 001 battery type: LION OEM info: Pacifi present: yes capacity state: ok charging state: charged present rate: 0 mA remaining capacity: 4172 mAh present voltage: 16518 mV
Quoted 11 lines · Alexey Starikovskiy
Quoted 10 lines · Andrey Borzenkov
Quoted 8 lines · Alexey Starikovskiy
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.for /sysfs interface you need to enable
power_supplydriver. or you could apply this patch andpower_supplywill be selected by battery itself.
Quoted 9 lines
Quoted 2 lines
I already have
power_supplymodule, battery depends on it and it is autloaded. But I fail to see where I can get battery info in /sysIntent was to put into /sysfs same information:
aystarik@samsung:~/client_conf$ ls /sys/class/power_supply/BAT1/ alarm charge_full charge_full_design charge_now current_now device manufacturer model_name present status subsystem technology type uevent voltage_min_design voltage_now
is it in -rc1 or can you point me to the patch (I'd rather avoid having to pull from different git trees). Thank you.
And what about ACPI_PROCFS case? It still needs attention I believe.
Quoted 54 lines
aystarik@samsung:~/client_conf$ cat /sys/class/power_supply/BAT1/* 0 4172000 4300000 4172000 0 cat: /sys/class/power_supply/BAT1/device: Is a directory Pacifi Bat1 1 Full cat: /sys/class/power_supply/BAT1/subsystem: Is a directory Li-ion Battery PHYSDEVPATH=/devices/LNXSYSTM:00/device:00/PNP0C0A:00 PHYSDEVBUS=acpi PHYSDEVDRIVER=battery POWER_SUPPLY_NAME=BAT1 POWER_SUPPLY_TYPE=Battery POWER_SUPPLY_STATUS=Full POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_VOLTAGE_MIN_DESIGN=14800000 POWER_SUPPLY_VOLTAGE_NOW=16522000 POWER_SUPPLY_CURRENT_NOW=0 POWER_SUPPLY_CHARGE_FULL_DESIGN=4300000 POWER_SUPPLY_CHARGE_FULL=4172000 POWER_SUPPLY_CHARGE_NOW=4172000 POWER_SUPPLY_MODEL_NAME=Bat1 POWER_SUPPLY_MANUFACTURER=Pacifi 14800000 16522000aystarik@samsung:~/client_conf$ cat /proc/acpi/battery/BAT1/* alarm: unsupported present: yes design capacity: 4300 mAh last full capacity: 4172 mAh battery technology: rechargeable design voltage: 14800 mV design capacity warning: 208 mAh design capacity low: 41 mAh capacity granularity 1: 41 mAh capacity granularity 2: 41 mAh model number: Bat1 serial number: 001 battery type: LION OEM info: Pacifi present: yes capacity state: ok charging state: charged present rate: 0 mA remaining capacity: 4172 mAh present voltage: 16518 mV
Quoted 19 lines · Andrey Borzenkov
Quoted 9 lines · Alexey Starikovskiy
Quoted 8 lines · Andrey Borzenkov
Quoted 7 lines · Alexey Starikovskiy
Quoted 3 lines · Andrey Borzenkov
I have lost battery in 2.6.24-rc1. Without
CONFIG_ACPI_PROCFSI have no/proc/acpi/batteryand cannot test netlink interface because right now there is no consumer of this.for /sysfs interface you need to enable
power_supplydriver. or you could apply this patch andpower_supplywill be selected by battery itself.Quoted 8 lines
Quoted 2 lines
I already have
power_supplymodule, battery depends on it and it is autloaded. But I fail to see where I can get battery info in /sysIntent was to put into /sysfs same information:
aystarik@samsung:~/client_conf$ ls /sys/class/power_supply/BAT1/ alarm charge_full charge_full_design charge_now current_now device manufacturer model_name present status subsystem technology type uevent voltage_min_design voltage_now
Quoted 2 lines
is it in -rc1 or can you point me to the patch (I'd rather avoid having to pull from different git trees). Thank you.
No, it should be rc1.
Quoted 2 lines
And what about
ACPI_PROCFScase? It still needs attention I believe.
As you can see, there is info in /proc too:
Quoted 13 lines
Quoted 13 lines
aystarik@samsung:~/client_conf$ cat /proc/acpi/battery/BAT1/* alarm: unsupported present: yes design capacity: 4300 mAh last full capacity: 4172 mAh battery technology: rechargeable design voltage: 14800 mV design capacity warning: 208 mAh design capacity low: 41 mAh capacity granularity 1: 41 mAh capacity granularity 2: 41 mAh model number: Bat1 serial number: 001
Quoted 8 lines
Quoted 8 lines
battery type: LION OEM info: Pacifi present: yes capacity state: ok charging state: charged present rate: 0 mA remaining capacity: 4172 mAh present voltage: 16518 mV
Your cat's "Bad address" means -EFAULT, according to "man errno". Please apply this patch to see what exactly failed...
drivers/acpi/battery.c +12 -4
@@ -262,21 +262,29 @@ static int extract_package(struct acpi_battery *battery, {int i, *x;union acpi_object *element; -if (package->type !=ACPI_TYPE_PACKAGE ) +if (package->type !=ACPI_TYPE_PACKAGE ) { +printk (KERN_ERR PREFIX "package->type = %x\n", package->type);return -EFAULT ; + }for (i =0 ; i < num; ++i) { -if (package->package.count <= i) +if (package->package.count <= i) { +printk (KERN_ERR PREFIX "package.count = %d, i = %d\n", package->package.count, i);return -EFAULT ; + } element = &package->package.elements[i];if (offsets[i].mode) {if (element->type !=ACPI_TYPE_STRING && - element->type !=ACPI_TYPE_BUFFER ) + element->type !=ACPI_TYPE_BUFFER ) { +printk (KERN_ERR PREFIX "element[%d]->type = %x, expected string\n", i, element->type);return -EFAULT ; + }strncpy ((u8 *)battery + offsets[i].offset, element->string.pointer,32 ); }else { -if (element->type !=ACPI_TYPE_INTEGER ) +if (element->type !=ACPI_TYPE_INTEGER ) { +printk (KERN_ERR PREFIX "element[%d]->type = %x, expected integer\n", i, element->type);return -EFAULT ; + } x = (int *)((u8 *)battery + offsets[i].offset); *x = element->integer.value; }
Quoted 7 lines · Alexey Starikovskiy
Quoted 2 lines · Andrey Borzenkov
is it in -rc1 or can you point me to the patch (I'd rather avoid having to pull from different git trees). Thank you.
No, it should be rc1.
Quoted 2 lines
And what about
ACPI_PROCFScase? It still needs attention I believe.As you can see, there is info in /proc too:
I'm missing the info in /sys too, so it looks like the error in proc and the missing info in /sys are related.
Alexey: do you have POWER_SUPPLY and/or AC/BATTERY compiled in or modular? I wonder if that could make the difference.
Quoted 5 lines · Frans Pop
Quoted 4 lines · Alexey Starikovskiy
Quoted 2 lines · Andrey Borzenkov
is it in -rc1 or can you point me to the patch (I'd rather avoid having to pull from different git trees). Thank you.
No, it should be rc1.
Quoted 9 lines
Quoted 2 lines
Quoted 1 line
And what about
ACPI_PROCFScase? It still needs attention I believe.As you can see, there is info in /proc too:
I'm missing the info in /sys too, so it looks like the error in proc and the missing info in /sys are related.
Alexey: do you have
POWER_SUPPLYand/or AC/BATTERY compiled in or modular? I wonder if that could make the difference.
Currently everything is module.
Quoted 3 lines · Alexey Starikovskiy
Your cat's "Bad address" means
-EFAULT, according to "man errno". Please apply this patch to see what exactly failed...
[ 1191.471572] ACPI: element[12]->type = 1, expected string [ 1196.640065] ACPI: element[12]->type = 1, expected string [ 1199.479773] ACPI: element[12]->type = 1, expected string [ 1199.745435] ACPI: element[12]->type = 1, expected string
it is "OEM type". For reference here is _BIF from my DSDT:
Method (_BIF, 0, NotSerialized)
{
Name (BUFF, Package (0x0D) {})
Store (0x00, Index (BUFF, 0x00))
Store (\_SB.MEM.BDV2, Local2)
Multiply (\_SB.MEM.BDC2, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x01))
Multiply (\_SB.MEM.BLF2, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x02))
Store (\_SB.MEM.BTC2, Index (BUFF, 0x03))
Store (\_SB.MEM.BDV2, Index (BUFF, 0x04))
Multiply (\_SB.MEM.BCW2, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x05))
Multiply (\_SB.MEM.BCL2, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x06))
Multiply (\_SB.MEM.BG12, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x07))
Multiply (\_SB.MEM.BG22, Local2, Local0)
Divide (Local0, 0x03E8, Local1, Local0)
Store (Local0, Index (BUFF, 0x08))
Store (\_SB.MEM.BMN2, Index (BUFF, 0x09))
Store (\_SB.MEM.BSN2, Index (BUFF, 0x0A))
Store (\_SB.MEM.BTP2, Index (BUFF, 0x0B))
Store (\_SB.MEM.BOI2, Index (BUFF, 0x0C))
Return (BUFF)
}This is behaviour change. Previous battery.c used generic acpi_extract_package which allowed (allows) for object of type integer when string is requested:
case ACPI_TYPE_INTEGER:
switch (format_string[i]) {
case 'N':
size_required += sizeof(acpi_integer);
tail_offset += sizeof(acpi_integer);
break;
case 'S':
size_required +=
sizeof(char *) + sizeof(acpi_integer) +
sizeof(char);
tail_offset += sizeof(char *);
break;while current battery.c:extract_package fails:
if (offsets[i].mode) {
if (element->type != ACPI_TYPE_STRING &&
element->type != ACPI_TYPE_BUFFER) {
printk (KERN_ERR PREFIX "element[%d]->type = %x, expected string\n", i,
element->type);
return -EFAULT;
}well, while it could be BIOS fault this happily worked before ... This is obviously also the reason why I do not have anything in /sys
Fans, could you check whether you have the same issue using test patch?
Andrey,
Please try the attached patch. I choose to do snprintf() instead of direct copy, as your previous message showed empty OEM type.
Thanks,
Alex.
Quoted 71 lines · Andrey Borzenkov
Quoted 2 lines · Alexey Starikovskiy
Your cat's "Bad address" means
-EFAULT, according to "man errno". Please apply this patch to see what exactly failed...[ 1191.471572] ACPI: element[12]->type = 1, expected string [ 1196.640065] ACPI: element[12]->type = 1, expected string [ 1199.479773] ACPI: element[12]->type = 1, expected string [ 1199.745435] ACPI: element[12]->type = 1, expected stringit is "OEM type". For reference here is
_BIFfrom my DSDT:Method (_BIF, 0, NotSerialized) { Name (BUFF, Package (0x0D) {}) Store (0x00, Index (BUFF, 0x00)) Store (\_SB.MEM.BDV2, Local2) Multiply (\_SB.MEM.BDC2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x01)) Multiply (\_SB.MEM.BLF2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x02)) Store (\_SB.MEM.BTC2, Index (BUFF, 0x03)) Store (\_SB.MEM.BDV2, Index (BUFF, 0x04)) Multiply (\_SB.MEM.BCW2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x05)) Multiply (\_SB.MEM.BCL2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x06)) Multiply (\_SB.MEM.BG12, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x07)) Multiply (\_SB.MEM.BG22, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x08)) Store (\_SB.MEM.BMN2, Index (BUFF, 0x09)) Store (\_SB.MEM.BSN2, Index (BUFF, 0x0A)) Store (\_SB.MEM.BTP2, Index (BUFF, 0x0B)) Store (\_SB.MEM.BOI2, Index (BUFF, 0x0C)) Return (BUFF) }This is behaviour change. Previous
battery.cused genericacpi_extract_packagewhich allowed (allows) for object of type integer when string is requested:case ACPI_TYPE_INTEGER: switch (format_string[i]) { case 'N': size_required += sizeof(acpi_integer); tail_offset += sizeof(acpi_integer); break; case 'S': size_required += sizeof(char *) + sizeof(acpi_integer) + sizeof(char); tail_offset += sizeof(char *); break;while current battery.c:extract_package fails:
if (offsets[i].mode) { if (element->type != ACPI_TYPE_STRING && element->type != ACPI_TYPE_BUFFER) { printk (KERN_ERR PREFIX "element[%d]->type = %x, expected string\n", i, element->type); return -EFAULT; }
Quoted 4 lines
well, while it could be BIOS fault this happily worked before ... This is obviously also the reason why I do not have anything in /sys
Fans, could you check whether you have the same issue using test patch?
ACPI: Battery: Allow extract string from integer
From: Alexey Starikovskiy <[email protected]>
Some machines return integer instead of expected string.
---
drivers/acpi/battery.c | 24 ++++++++++++++---------- 1 files changed, 14 insertions(+), 10 deletions(-)
drivers/acpi/battery.c +14 -10
@@ -260,7 +260,7 @@ static int extract_package(struct acpi_battery *battery,union acpi_object *package, struct acpi_offsets *offsets, int num) { - int i, *x; + int i;union acpi_object *element;if (package->type !=ACPI_TYPE_PACKAGE )return -EFAULT ;
@@ -269,16 +269,20 @@ static int extract_package(struct acpi_battery *battery,return -EFAULT ; element = &package->package.elements[i];if (offsets[i].mode) { -if (element->type !=ACPI_TYPE_STRING && - element->type !=ACPI_TYPE_BUFFER ) -return -EFAULT ; -strncpy ((u8 *)battery + offsets[i].offset, - element->string.pointer,32 ); +u8 *ptr = (u8 *)battery + offsets[i].offset; +if (element->type ==ACPI_TYPE_STRING || + element->type ==ACPI_TYPE_BUFFER ) +strncpy (ptr, element->string.pointer,32 ); +else if (element->type ==ACPI_TYPE_INTEGER ) { +snprintf (ptr,32 ,"%lld" , + element->integer.value); + }else return -EFAULT ; }else { -if (element->type !=ACPI_TYPE_INTEGER ) -return -EFAULT ; - x = (int *)((u8 *)battery + offsets[i].offset); - *x = element->integer.value; +if (element->type ==ACPI_TYPE_INTEGER ) { +int *x = (int *)((u8 *)battery + + offsets[i].offset); + *x = element->integer.value; + }else return -EFAULT ; } }return 0 ;
Quoted 4 lines · Alexey Starikovskiy
Andrey,
Please try the attached patch. I choose to dosnprintf()instead of direct copy, as your previous message showed empty OEM type.
Not quite. Now I get
OEM info: 0
while before I got empty string. If I read acpi_extract_package correctly, it actually interpreted integer as string without any conversion. Which in this case obviously gave us empty string (integer being 0). I'd prefer to remain compatible.
also
{pts/1}% cat /sys/class/power_supply/BAT1/manufacturer 0
which is rather weird manufacturer name :)
Quoted 78 lines
Thanks,
Alex.Quoted 74 lines · Andrey Borzenkov
Quoted 2 lines · Alexey Starikovskiy
Your cat's "Bad address" means
-EFAULT, according to "man errno". Please apply this patch to see what exactly failed...[ 1191.471572] ACPI: element[12]->type = 1, expected string [ 1196.640065] ACPI: element[12]->type = 1, expected string [ 1199.479773] ACPI: element[12]->type = 1, expected string [ 1199.745435] ACPI: element[12]->type = 1, expected stringit is "OEM type". For reference here is
_BIFfrom my DSDT:Method (_BIF, 0, NotSerialized) { Name (BUFF, Package (0x0D) {}) Store (0x00, Index (BUFF, 0x00)) Store (\_SB.MEM.BDV2, Local2) Multiply (\_SB.MEM.BDC2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x01)) Multiply (\_SB.MEM.BLF2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x02)) Store (\_SB.MEM.BTC2, Index (BUFF, 0x03)) Store (\_SB.MEM.BDV2, Index (BUFF, 0x04)) Multiply (\_SB.MEM.BCW2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x05)) Multiply (\_SB.MEM.BCL2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x06)) Multiply (\_SB.MEM.BG12, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x07)) Multiply (\_SB.MEM.BG22, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x08)) Store (\_SB.MEM.BMN2, Index (BUFF, 0x09)) Store (\_SB.MEM.BSN2, Index (BUFF, 0x0A)) Store (\_SB.MEM.BTP2, Index (BUFF, 0x0B)) Store (\_SB.MEM.BOI2, Index (BUFF, 0x0C)) Return (BUFF) }This is behaviour change. Previous
battery.cused genericacpi_extract_packagewhich allowed (allows) for object of type integer when string is requested:case ACPI_TYPE_INTEGER: switch (format_string[i]) { case 'N': size_required += sizeof(acpi_integer); tail_offset += sizeof(acpi_integer); break; case 'S': size_required += sizeof(char *) + sizeof(acpi_integer) + sizeof(char); tail_offset += sizeof(char *); break;while current battery.c:extract_package fails:
if (offsets[i].mode) { if (element->type != ACPI_TYPE_STRING && element->type != ACPI_TYPE_BUFFER) { printk (KERN_ERR PREFIX "element[%d]->type = %x, expected string\n", i, element->type); return -EFAULT; }well, while it could be BIOS fault this happily worked before ... This is obviously also the reason why I do not have anything in /sys
Fans, could you check whether you have the same issue using test patch?
Quoted 9 lines · Andrey Borzenkov
Quoted 4 lines · Alexey Starikovskiy
Andrey,
Please try the attached patch. I choose to dosnprintf()instead of direct copy, as your previous message showed empty OEM type.Not quite. Now I get
OEM info: 0
Ok, I was hoping to see some number starting with 0, which would be printed as empty string...
Quoted 5 lines
while before I got empty string. If I read
acpi_extract_packagecorrectly, it actually interpreted integer as string without any conversion. Which in this case obviously gave us empty string (integer being 0). I'd prefer to remain compatible.
As you wish... :) Please check the attached patch.
Quoted 87 lines
also
{pts/1}% cat
/sys/class/power_supply/BAT1/manufacturer0which is rather weird manufacturer name :)
Quoted 77 lines
Thanks,
Alex.Quoted 73 lines · Andrey Borzenkov
Quoted 2 lines · Alexey Starikovskiy
Your cat's "Bad address" means
-EFAULT, according to "man errno". Please apply this patch to see what exactly failed...[ 1191.471572] ACPI: element[12]->type = 1, expected string [ 1196.640065] ACPI: element[12]->type = 1, expected string [ 1199.479773] ACPI: element[12]->type = 1, expected string [ 1199.745435] ACPI: element[12]->type = 1, expected stringit is "OEM type". For reference here is
_BIFfrom my DSDT:Method (_BIF, 0, NotSerialized) { Name (BUFF, Package (0x0D) {}) Store (0x00, Index (BUFF, 0x00)) Store (\_SB.MEM.BDV2, Local2) Multiply (\_SB.MEM.BDC2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x01)) Multiply (\_SB.MEM.BLF2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x02)) Store (\_SB.MEM.BTC2, Index (BUFF, 0x03)) Store (\_SB.MEM.BDV2, Index (BUFF, 0x04)) Multiply (\_SB.MEM.BCW2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x05)) Multiply (\_SB.MEM.BCL2, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x06)) Multiply (\_SB.MEM.BG12, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x07)) Multiply (\_SB.MEM.BG22, Local2, Local0) Divide (Local0, 0x03E8, Local1, Local0) Store (Local0, Index (BUFF, 0x08)) Store (\_SB.MEM.BMN2, Index (BUFF, 0x09)) Store (\_SB.MEM.BSN2, Index (BUFF, 0x0A)) Store (\_SB.MEM.BTP2, Index (BUFF, 0x0B)) Store (\_SB.MEM.BOI2, Index (BUFF, 0x0C)) Return (BUFF) }This is behaviour change. Previous
battery.cused genericacpi_extract_packagewhich allowed (allows) for object of type integer when string is requested:case ACPI_TYPE_INTEGER: switch (format_string[i]) { case 'N': size_required += sizeof(acpi_integer); tail_offset += sizeof(acpi_integer); break; case 'S': size_required += sizeof(char *) + sizeof(acpi_integer) + sizeof(char); tail_offset += sizeof(char *); break;while current battery.c:extract_package fails:
if (offsets[i].mode) { if (element->type != ACPI_TYPE_STRING && element->type != ACPI_TYPE_BUFFER) { printk (KERN_ERR PREFIX "element[%d]->type = %x, expected string\n", i, element->type); return -EFAULT; }well, while it could be BIOS fault this happily worked before ... This is obviously also the reason why I do not have anything in /sys
Fans, could you check whether you have the same issue using test patch?
ACPI: Battery: Allow extract string from integer
From: Alexey Starikovskiy <[email protected]>
Some machines return integer instead of expected string.
---
drivers/acpi/battery.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-)
drivers/acpi/battery.c +15 -10
@@ -260,7 +260,7 @@ static int extract_package(struct acpi_battery *battery,union acpi_object *package, struct acpi_offsets *offsets, int num) { - int i, *x; + int i;union acpi_object *element;if (package->type !=ACPI_TYPE_PACKAGE )return -EFAULT ;
@@ -269,16 +269,21 @@ static int extract_package(struct acpi_battery *battery,return -EFAULT ; element = &package->package.elements[i];if (offsets[i].mode) { -if (element->type !=ACPI_TYPE_STRING && - element->type !=ACPI_TYPE_BUFFER ) -return -EFAULT ; -strncpy ((u8 *)battery + offsets[i].offset, - element->string.pointer,32 ); +u8 *ptr = (u8 *)battery + offsets[i].offset; +if (element->type ==ACPI_TYPE_STRING || + element->type ==ACPI_TYPE_BUFFER ) +strncpy (ptr, element->string.pointer,32 ); +else if (element->type ==ACPI_TYPE_INTEGER ) { +strncpy (ptr, (u8 *)&element->integer.value, +sizeof (acpi_integer)); + ptr[sizeof (acpi_integer)] =0 ; + }else return -EFAULT ; }else { -if (element->type !=ACPI_TYPE_INTEGER ) -return -EFAULT ; - x = (int *)((u8 *)battery + offsets[i].offset); - *x = element->integer.value; +if (element->type ==ACPI_TYPE_INTEGER ) { +int *x = (int *)((u8 *)battery + + offsets[i].offset); + *x = element->integer.value; + }else return -EFAULT ; } }return 0 ;
Frans Pop
Tested-byHmm. Things seem to have progressed since I was last online :-)
With Alexey's original patch I also get a number of times:
ACPI: element[12]->type = 1, expected string
Quoted 1 line · Alexey Starikovskiy
As you wish... :) Please check the attached patch.
With 'battery_allow_extract_string_from_integer.patch' all info in /proc is back and I now also see the new files in /sys/class/power_supply.
The "OEM info" field (line 13 in BAT1/info) is empty, just as it was empty in 2.6.23 too.
Cheers,
Frans Pop
Andrey Borzenkov
Tested-byQuoted 2 lines · Alexey Starikovskiy
As you wish... :) Please check the attached patch.
Not sure why you need to reimplement acpi_extract_package, but ...
Quoted 5 lines · Andrey Borzenkov
Quoted 2 lines · Alexey Starikovskiy
As you wish... :) Please check the attached patch.
Not sure why you need to reimplement
acpi_extract_package, but ...
Take a look on memory allocations around it... :)
Quoted 2 lines
Tested-by Andrey Borzenkov <[email protected]>
Re: ACPI: use select POWER_SUPPLY for AC, BATTERY and SBS (was: [2.624-rc1 regression] lost battery information)
In reply to Alexey StarikovskiyQuoted 39 lines · Alexey Starikovskiy
ACPI: use select
POWER_SUPPLYfor AC, BATTERY and SBSFrom: Alexey Starikovskiy <[email protected]>
POWER_SUPPLYis needed for AC, battery, and SBS sysfs support. Use 'select' instead of 'depends on', as it is will not be selected by anything else, leading to confusion.Signed-off-by Alexey Starikovskiy <[email protected]>---
drivers/acpi/Kconfig | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)drivers/acpi/Kconfig +2
-1@@ -88,7 +88,8 @@ config ACPI_PROC_EVENT config ACPI_AC tristate "AC Adapter" - depends on X86 && POWER_SUPPLY + depends on X86 + select POWER_SUPPLY default y help This driver adds support for the AC Adapter object, whichindicates @@ -97,7 +98,8 @@ config
ACPI_ACconfig
ACPI_BATTERY
tristate "Battery"drivers/acpi/Kconfig +2
-1- depends on X86 && POWER_SUPPLY + depends on X86 + select POWER_SUPPLY default y help This driver adds support for battery information through
drivers/acpi/Kconfig config ACPI_HOTPLUG_MEMORY · line 360
Quoted 8 lines
drivers/acpi/Kconfig +1
-1@@ -352,7 +354,7 @@ config ACPI_HOTPLUG_MEMORY config ACPI_SBS tristate "Smart Battery System" depends on X86 - depends on POWER_SUPPLY + select POWER_SUPPLY help This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops.
I'd love if this got merged, as I also lost my battery information by not-enabling POWER_SUPPLY (which looks like something unrelated to ACPI). (I know "select" is evil, but this use-case is appropriate, IMO)
Matej