Bug 150821

Summary: Intel Cherry Trail Battery Status Absent
Product: ACPI Reporter: Taha (littlesmartguy)
Component: BIOSAssignee: Lv Zheng (lv.zheng)
Status: CLOSED INVALID    
Severity: high CC: rui.zhang, yu.c.chen
Priority: P1    
Hardware: Intel   
OS: Linux   
Kernel Version: 4.7 Subsystem:
Regression: No Bisected commit-id:
Attachments: dmesg
acpidump
lshw
lspci
Intel Battery Management driver
Kernel config
dmesg when CONFIG_AXP288_FUEL_GAUGE is set to Y
latest dmesg
customized DSDT: add debug information in battery's _STA method
latest dmesg

Description Taha 2016-07-31 22:12:08 UTC
Created attachment 227051 [details]
dmesg

The CPU in particular is an Intel Atom x5-Z8300. There is nothing inside /sys/class/power_supply/.
Comment 1 Taha 2016-07-31 22:12:34 UTC
Created attachment 227061 [details]
acpidump
Comment 2 Taha 2016-07-31 22:12:52 UTC
Created attachment 227071 [details]
lshw
Comment 3 Taha 2016-07-31 22:13:14 UTC
Created attachment 227081 [details]
lspci
Comment 4 Taha 2016-07-31 22:16:00 UTC
Created attachment 227091 [details]
Intel Battery Management driver

Here is the Intel Battery Management driver extracted from Windows 10 64-bit.
Comment 5 Chen Yu 2016-08-08 15:10:14 UTC
Hi Taha, is CONFIG_AXP288_FUEL_GAUGE set in your kernel config?
Comment 6 Taha 2016-08-10 21:27:46 UTC
No, it is not. I've recompiled the kernel with CONFIG_AXP288_FUEL_GAUGE set to Y but still no dice.

I did find an AC power supply in /sys/class/power_supply:

[owner@Taha-Laptop power_supply]$ ls
ADP1
[owner@Taha-Laptop power_supply]$ cd ADP1
[owner@Taha-Laptop ADP1]$ tree
.
├── device -> ../../../ACPI0003:00
├── online
├── power
│   ├── async
│   ├── autosuspend_delay_ms
│   ├── control
│   ├── runtime_active_kids
│   ├── runtime_active_time
│   ├── runtime_enabled
│   ├── runtime_status
│   ├── runtime_suspended_time
│   ├── runtime_usage
│   ├── wakeup
│   ├── wakeup_abort_count
│   ├── wakeup_active
│   ├── wakeup_active_count
│   ├── wakeup_count
│   ├── wakeup_expire_count
│   ├── wakeup_last_time_ms
│   ├── wakeup_max_time_ms
│   ├── wakeup_prevent_sleep_time_ms
│   └── wakeup_total_time_ms
├── subsystem -> ../../../../../../class/power_supply
├── type
└── uevent

3 directories, 22 files

But XFCE says the status is "plugged in" even if I disconnect the power cable. I went back to my old 4.7 kernel before I set with CONFIG_AXP288_FUEL_GAUGE and it looks like ADP1 is in /sys/class/power_supply. Not sure how there was nothing in /sys/class/power_supply before.
Comment 7 Taha 2016-08-10 21:28:13 UTC
Created attachment 228231 [details]
Kernel config
Comment 8 Taha 2016-08-10 21:30:39 UTC
Created attachment 228241 [details]
dmesg when CONFIG_AXP288_FUEL_GAUGE is set to Y
Comment 9 Taha 2016-08-30 03:53:13 UTC
I found a hacky workaround here: http://techtablets.com/forum/topic/running-linux-on-the-ezbook-2/page/3/#post-48429
Comment 10 Zhang Rui 2016-09-02 04:04:48 UTC
please attach the output of "grep . /sys/bus/acpi/devices/PNP0C0A\:0*/*"
Comment 11 Taha 2016-09-02 05:06:58 UTC
[owner@Taha-Laptop axpd]$ sudo ./axpd.sh 
Battery capacity: 91
[owner@Taha-Laptop axpd]$ grep . /sys/bus/acpi/devices/PNP0C0A\:0*/*
/sys/bus/acpi/devices/PNP0C0A:00/hid:PNP0C0A
/sys/bus/acpi/devices/PNP0C0A:00/modalias:acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:00/path:\_SB_.PCI0.I2C1.BATC
grep: /sys/bus/acpi/devices/PNP0C0A:00/power: Is a directory
/sys/bus/acpi/devices/PNP0C0A:00/status:0
grep: /sys/bus/acpi/devices/PNP0C0A:00/subsystem: Is a directory
/sys/bus/acpi/devices/PNP0C0A:00/uevent:MODALIAS=acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:00/uid:1
/sys/bus/acpi/devices/PNP0C0A:01/hid:PNP0C0A
/sys/bus/acpi/devices/PNP0C0A:01/modalias:acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:01/path:\_SB_.PCI0.I2C7.BATC
grep: /sys/bus/acpi/devices/PNP0C0A:01/power: Is a directory
/sys/bus/acpi/devices/PNP0C0A:01/status:0
grep: /sys/bus/acpi/devices/PNP0C0A:01/subsystem: Is a directory
/sys/bus/acpi/devices/PNP0C0A:01/uevent:MODALIAS=acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:01/uid:1
[owner@Taha-Laptop axpd]$
Comment 12 Taha 2016-09-02 05:07:04 UTC
Also, just in case the link to the workaround goes down, here is an archive of it:

I found a workaround for the battery in this [bug report](https://bugzilla.kernel.org/show_bug.cgi?id=88471).

I can get the battery percentage on linux but it's a really hacky method. I started with linux v4.4 in Manjaro Linux. I downloaded kernel v4.8-rc4 from github (https://github.com/torvalds/linux/releases). I outputted the kernel config to file by doing `zcat /proc/config.gz > ~/Downloads/linux/.config` and then I ran `make olddefconfig` inside ~/Downloads/linux. Then I ran `make xconfig` and I set the following options: http://imgur.com/a/tEDbx. Also, I2C_DESIGNWARE_BAYTRAIL needs to be set to N (or else the battery stats will not work). I then compiled the kernel, rebooted and ran the following script: https://github.com/tgharib/axpd to get the battery percentage. The i2cget call seems to crash the laptop ~1/16 times, so do not call it too many times per laptop session.

Also, before running the script you need to have i2cget installed. On Manjaro, run `sudo pacman -S i2c-tools`.
Comment 13 Taha 2016-09-02 05:19:35 UTC
Created attachment 231851 [details]
latest dmesg

[owner@Taha-Laptop Desktop]$ cat dmesg.txt | grep -i axp
[    2.990064] axp20x-i2c i2c-INT33F4:00: AXP20x variant AXP288 found
[    3.004108] axp20x-i2c i2c-INT33F4:00: AXP20X driver loaded
[    3.284184] input: axp20x-pek as /devices/pci0000:00/808622C1:06/i2c-14/i2c-INT33F4:00/axp20x-pek/input/input7
Comment 14 Zhang Rui 2016-09-02 06:55:38 UTC
/sys/bus/acpi/devices/PNP0C0A:00/status:0
/sys/bus/acpi/devices/PNP0C0A:01/status:0

This means the battery devices don't exist and that's why we can not get the battery information.
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If ((BDID == One))
                {
                    Return (Zero)
                }

                If ((((BDID == 0x08) || (BDID == 0x0A)) || (BDID == 0x09)))
                {
                    Return (Zero)
                }

                If ((OSID != One))
                {
                    Return (Zero)
                }

                If ((AVBL == One))
                {
                    BUF2 = FG05 /* \_SB_.PCI0.I2C1.FG05 */
                    If ((BSTS != Zero))
                    {
                        Return (Zero)
                    }
                }

                Return (0x1F)
            }
let's check which piece of code makes the battery _STA returns 0
Comment 15 Zhang Rui 2016-09-02 06:57:53 UTC
Created attachment 231861 [details]
customized DSDT: add debug information in battery's _STA method

Please try customized DSDT using the dsdt.hex file attached, and then reboot the new kernel with kernel parameter acpi.aml_debug_output=1.

And then attach the dmesg output after running "grep . /sys/bus/acpi/devices/PNP0C0A:0*/*"
Comment 16 Taha 2016-09-02 16:50:50 UTC
[owner@Taha-Laptop Desktop]$ grep . /sys/bus/acpi/devices/PNP0C0A:0*/*
/sys/bus/acpi/devices/PNP0C0A:00/hid:PNP0C0A
/sys/bus/acpi/devices/PNP0C0A:00/modalias:acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:00/path:\_SB_.PCI0.I2C1.BATC
grep: /sys/bus/acpi/devices/PNP0C0A:00/power: Is a directory
/sys/bus/acpi/devices/PNP0C0A:00/status:0
grep: /sys/bus/acpi/devices/PNP0C0A:00/subsystem: Is a directory
/sys/bus/acpi/devices/PNP0C0A:00/uevent:MODALIAS=acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:00/uid:1
/sys/bus/acpi/devices/PNP0C0A:01/hid:PNP0C0A
/sys/bus/acpi/devices/PNP0C0A:01/modalias:acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:01/path:\_SB_.PCI0.I2C7.BATC
grep: /sys/bus/acpi/devices/PNP0C0A:01/power: Is a directory
/sys/bus/acpi/devices/PNP0C0A:01/status:0
grep: /sys/bus/acpi/devices/PNP0C0A:01/subsystem: Is a directory
/sys/bus/acpi/devices/PNP0C0A:01/uevent:MODALIAS=acpi:PNP0C0A:
/sys/bus/acpi/devices/PNP0C0A:01/uid:1
[owner@Taha-Laptop Desktop]$
Comment 17 Taha 2016-09-02 16:51:31 UTC
Created attachment 232001 [details]
latest dmesg
Comment 18 Taha 2016-09-02 17:04:42 UTC
It seems BDID is 1 which causes the method to return 0. No idea what the BDID variable means.
Comment 19 Zhang Rui 2016-09-05 00:39:58 UTC
If you check the code in ACPI tables, it seems that BDID is checked in many places.
IMO, this stands for something like BoardId, and it is used to run different BIOS code for different hardware.
Thus, this sounds like a firmware problem to me that ACPI battery is not designed to be used on this platform.
Anyway, I think we need to check what battery device/driver windows is using on this platform. Because windows is probably using some other vendor battery driver.
Comment 20 Zhang Rui 2016-12-22 01:53:50 UTC
ping...
Comment 21 Lv Zheng 2016-12-22 03:26:06 UTC
The BDID is variable from NV ROM:
  C:\Users\lvzheng\Desktop\150821\dsdt.dsl (150 hits)
	Line 350:         BDID,   8, 

There is no code setting it in the ACPI tables:
	Line 2075:                         If (LAnd (LNotEqual (BDID, One), LAnd (LNotEqual (BDID, 
	Line 2075:                         If (LAnd (LNotEqual (BDID, One), LAnd (LNotEqual (BDID, 
	Line 2076:                             0x0A), LNotEqual (BDID, 0x09))))
	Line 2311:                 If (LAnd (LNotEqual (BDID, One), LOr (LEqual (OSID, 0x02), 
	Line 2468:                             If (LEqual (BDID, 0x02))
	Line 2499:                         If (LEqual (BDID, 0x02))
	Line 2542:                             If (LEqual (BDID, 0x02))
	Line 2573:                         If (LEqual (BDID, 0x02))
	Line 3907:                     If (LEqual (BDID, 0x08))
	Line 3913:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 3913:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 3981:                         If (LEqual (BDID, 0x03))
	Line 3987:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 3987:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 3988:                                 BDID, 0x0A))))
	Line 3997:                         If (LEqual (BDID, 0x03))
	Line 4003:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4003:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4004:                                 BDID, 0x0A))))
	Line 4013:                         If (LEqual (BDID, 0x03))
	Line 4019:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4019:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4020:                                 BDID, 0x0A))))
	Line 4029:                         If (LEqual (BDID, 0x03))
	Line 4035:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4035:                             If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 4036:                                 BDID, 0x0A))))
	Line 4045:                         If (LEqual (BDID, 0x03))
	Line 4065:                 If (LAnd (LEqual (BDID, One), LNotEqual (OSID, One)))
	Line 4094:                 If (LAnd (LNotEqual (OSID, One), LOr (LEqual (BDID, 0x09), 
	Line 4095:                     LEqual (BDID, 0x0A))))
	Line 6809:                             If (LOr (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)), LEqual (
	Line 6809:                             If (LOr (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)), LEqual (
	Line 6810:                                 BDID, 0x08)))
	Line 6821:                             If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 6821:                             If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 7072:                     If (LOr (LEqual (BDID, One), LEqual (BDID, 0x0B)))
	Line 7072:                     If (LOr (LEqual (BDID, One), LEqual (BDID, 0x0B)))
	Line 7154:                     If (LAnd (LOr (LEqual (BDID, One), LEqual (BDID, 0x0B)), LEqual (
	Line 7154:                     If (LAnd (LOr (LEqual (BDID, One), LEqual (BDID, 0x0B)), LEqual (
	Line 8224:                 If (LOr (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)), LEqual (
	Line 8224:                 If (LOr (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)), LEqual (
	Line 8393:                         If (LOr (LEqual (BDID, 0x03), LEqual (BDID, 0x08)))
	Line 8393:                         If (LOr (LEqual (BDID, 0x03), LEqual (BDID, 0x08)))
	Line 8439:                     If (LEqual (BDID, One))
	Line 8489:                     If (LEqual (BDID, One))
	Line 8539:                     If (LOr (LEqual (BTHM, 0x02), LEqual (BDID, One)))
	Line 8544:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 8544:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 8621:                     If (LOr (LEqual (BTHM, 0x02), LEqual (BDID, One)))
	Line 8626:                     If (LOr (LEqual (BTHM, 0x03), LOr (LEqual (BDID, 0x09), LEqual (
	Line 8627:                         BDID, 0x0A))))
	Line 8773:                     If (LOr (LEqual (BDID, One), LEqual (GPSD, Zero)))
	Line 8783:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 8783:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 8860:                     If (LEqual (BDID, One))
	Line 8870:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 8870:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 9436:                     If (LEqual (BDID, One))
	Line 13106:                     If (LOr (LEqual (BDID, One), LEqual (OSID, One)))
	Line 13113:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 13113:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 13218:                     If (LEqual (BDID, One))
	Line 13225:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 13225:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 13584:                     If (LEqual (BDID, One))
	Line 13851:                     If (LEqual (BDID, One))
	Line 14205:                     If (LEqual (BDID, One))
	Line 14474:                     If (LOr (LEqual (BDID, One), LEqual (BDID, 0x0A)))
	Line 14474:                     If (LOr (LEqual (BDID, One), LEqual (BDID, 0x0A)))
	Line 14844:                     If (LEqual (BDID, One))
	Line 15315:                     If (LEqual (BDID, One))
	Line 15320:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 15320:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 16276:                         If (LEqual (BDID, One))
	Line 16556:                     If (LAnd (LEqual (BDID, One), LEqual (OSID, 0x04)))
	Line 17091:                 If (LAnd (LNotEqual (BDID, 0x09), LNotEqual (BDID, 0x0A)))
	Line 17091:                 If (LAnd (LNotEqual (BDID, 0x09), LNotEqual (BDID, 0x0A)))
	Line 17223:                     If (LEqual (BDID, One))
	Line 17235:                     If (LAnd (LNotEqual (OSID, One), LAnd (LNotEqual (BDID, 
	Line 17236:                         0x08), LNotEqual (BDID, 0x0A))))
	Line 17286:                 If (LEqual (BDID, One))
	Line 17352:                 If (LAnd (LNotEqual (OSID, One), LEqual (BDID, One)))
	Line 17725:                 If (LAnd (LNotEqual (BDID, 0x08), LNotEqual (BDID, 0x0A)))
	Line 17725:                 If (LAnd (LNotEqual (BDID, 0x08), LNotEqual (BDID, 0x0A)))
	Line 17800:                     If (LOr (LEqual (BTHM, 0x03), LOr (LEqual (BDID, 0x09), LEqual (
	Line 17801:                         BDID, 0x0A))))
	Line 17996:                 If (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)))
	Line 17996:                 If (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)))
	Line 21187:                     If (LEqual (BDID, One))
	Line 21200:                 If (LNotEqual (BDID, One))
	Line 21444:                 If (LAnd (LEqual (BDID, 0x02), LEqual (OSID, One)))
	Line 21450:                     If (LAnd (LNotEqual (BDID, One), LEqual (OSID, One)))
	Line 21460:                 If (LEqual (BDID, 0x08))
	Line 21474:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 21474:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 21694:                 If (LAnd (LEqual (BDID, 0x0A), LNotEqual (OSID, One)))
	Line 21753:                 If (LAnd (LEqual (BDID, 0x0A), LNotEqual (OSID, One)))
	Line 23784:                     If (LAnd (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)), LEqual (
	Line 23784:                     If (LAnd (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)), LEqual (
	Line 23791:                         If (LAnd (LEqual (BDID, 0x08), LEqual (OSID, One)))
	Line 23800:                     If (LEqual (BDID, 0x08))
	Line 23840:                     If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 23840:                     If (LOr (LEqual (BDID, 0x08), LOr (LEqual (BDID, 0x09), LEqual (
	Line 23841:                         BDID, 0x0A))))
	Line 24722:                     If (LEqual (BDID, One))
	Line 24759:                     If (LNotEqual (BDID, One))
	Line 25760:                 If (LEqual (BDID, One))
	Line 25768:                         If (LOr (LEqual (BDID, 0x03), LEqual (BDID, 0x02)))
	Line 25768:                         If (LOr (LEqual (BDID, 0x03), LEqual (BDID, 0x02)))
	Line 26001:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 26001:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 26006:                 If (LEqual (BDID, One))
	Line 26429:                     If (LAnd (LEqual (BDID, One), LEqual (PMID, 0x02)))
	Line 26822:                     If (LAnd (LEqual (BDID, One), LEqual (PMID, One)))
	Line 27154:                 If (LAnd (LEqual (BDID, One), LEqual (PMID, One)))
	Line 27175:                 If (LAnd (LEqual (OSID, 0x04), LOr (LEqual (BDID, 0x09), LEqual (
	Line 27176:                     BDID, 0x0A))))
	Line 27221:                 If (LAnd (LEqual (OSID, 0x04), LOr (LEqual (BDID, 0x09), LEqual (
	Line 27222:                     BDID, 0x0A))))
	Line 27256:                 If (LAnd (LNotEqual (OSID, One), LNotEqual (BDID, One)))
	Line 27290:                 If (LAnd (LNotEqual (OSID, One), LNotEqual (BDID, One)))
	Line 27895:                         If (LEqual (BDID, 0x02))
	Line 27910:                             If (LEqual (BDID, 0x02))
	Line 27925:                                 If (LEqual (BDID, 0x02))
	Line 27940:                                     If (LEqual (BDID, 0x02))
	Line 27957:                                             If (LEqual (BDID, 0x02))
	Line 27974:                                         If (LEqual (BDID, 0x02))
	Line 28009:                         If (LEqual (BDID, 0x02))
	Line 28242:                 If (LEqual (BDID, One))
	Line 28247:                 If (LOr (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)), LEqual (
	Line 28247:                 If (LOr (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)), LEqual (
	Line 28248:                     BDID, 0x09)))
	Line 28520:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 28520:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 29495:                 If (LNotEqual (BDID, 0x08))
	Line 29792:                 If (LEqual (BDID, 0x08))
	Line 29811:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 29811:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 29830:                 If (LEqual (BDID, One))
	Line 29916:                 If (LEqual (BDID, One))
	Line 29984:                 If (LEqual (BDID, One))
	Line 30052:                 If (LEqual (BDID, One))
	Line 30120:                 If (LNotEqual (BDID, One))
	Line 30211:                 If (LEqual (BDID, One))
	Line 30221:                 If (LAnd (LAnd (LNotEqual (BDID, 0x09), LNotEqual (BDID, 
	Line 30221:                 If (LAnd (LAnd (LNotEqual (BDID, 0x09), LNotEqual (BDID, 
	Line 30222:                     0x0A)), LNotEqual (BDID, One)))
	Line 30298:             If (LAnd (LNotEqual (BDID, One), LNotEqual (OSID, One)))
  C:\Users\lvzheng\Desktop\150821\ssdt1.dsl (3 hits)
	Line 53:     External (BDID)
	Line 433:                 If (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)))
	Line 433:                 If (LOr (LEqual (BDID, 0x08), LEqual (BDID, 0x0A)))
  C:\Users\lvzheng\Desktop\150821\ssdt2.dsl (50 hits)
	Line 188:     External (BDID)
	Line 422:                 If (LEqual (BDID, 0x08))
	Line 437:                         If (LEqual (BDID, One))
	Line 446:                         If (LEqual (BDID, One))
	Line 642:                 If (LEqual (BDID, One))
	Line 774:                 If (LOr (LEqual (DSOC, Zero), LEqual (BDID, One)))
	Line 842:                 If (LEqual (BDID, One))
	Line 861:                     If (LEqual (BDID, 0x08))
	Line 880:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 880:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 920:                 If (LEqual (BDID, One))
	Line 933:                     If (LEqual (BDID, 0x08))
	Line 946:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 946:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 974:                 If (LEqual (BDID, One))
	Line 983:                     If (LEqual (BDID, 0x08))
	Line 996:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 996:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1024:                 If (LEqual (BDID, One))
	Line 1037:                     If (LEqual (BDID, 0x08))
	Line 1050:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1050:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1078:                 If (LEqual (BDID, One))
	Line 1087:                     If (LEqual (BDID, 0x08))
	Line 1100:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1100:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1128:                 If (LEqual (BDID, One))
	Line 1137:                     If (LEqual (BDID, 0x08))
	Line 1146:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1146:                         If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1228:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1228:                     If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 1518:                     If (LEqual (BDID, 0x08))
	Line 1574:                 If (LOr (LEqual (THM1, Zero), LEqual (BDID, One)))
	Line 1787:                 If (LOr (LEqual (THM2, Zero), LEqual (BDID, One)))
	Line 2005:                     If (LEqual (BDID, 0x08))
	Line 2295:                 If (LOr (LEqual (THM4, Zero), LEqual (BDID, One)))
	Line 2300:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 2300:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 2599:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 2599:                 If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 3078:                 If (LEqual (BDID, 0x08))
	Line 3106:                     If (LEqual (BDID, One))
	Line 3111:                             ADBG ("SPPC BDID 1 TI", If (LLess (Arg0, Local2))
	Line 3124:                             ADBG ("SPPC BDID 1 XPWR", If (LLess (Arg0, Local2))
	Line 3136:                         If (LEqual (BDID, 0x08))
	Line 3153:                             If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 3153:                             If (LOr (LEqual (BDID, 0x09), LEqual (BDID, 0x0A)))
	Line 3170:                                 ADBG ("SPPC BDID ", Store (Local1, \_SB.PCI0.I2C1.BATC.BCCC), If (LLess (Arg0, Local2))
	Line 3200:                 If (LOr (LEqual (WWEN, Zero), LEqual (BDID, One)))

I agreed with Rui, and this looks like a firmware bug to me.
So let me close it.
Feel free to re-open if you can find something new suspicious.

Thanks and best regards
Lv