Состояние крышки ноутбука

Автор Boris.So, 17 августа 2019, 15:30:40

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Boris.So

Доброго времени всем!

В настройках kde в разделе "управление питанием" выставил так, чтобы ноут засыпал когда работает от батареи и закрывается крышка. Но он не засыпает)
Что смотрел:
cat /proc/acpi/button/lid/LID0/state - показывает правильно, open/closed
# cat /proc/bus/input/devices
...
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1a/PNP0C0D:00/input/input3
U: Uniq=
H: Handlers=event2
B: PROP=0
B: EV=21
B: SW=1
...
# evtest /dev/input/event2
- пусто
# acpi_listen - события крышки тут нету
# journalctl -u systemd-logind -f
    - здесь тоже ничего, когда открываю / закрываю крышку
    dmesg - тишина

С виду всё точь-в-точь как  тут: https://bugzilla.redhat.com/show_bug.cgi?id=512958
И там пишут что это какой-то баг в acpi. Но непонятно почему? Если /proc/acpi/button/lid/LID0/state показывает правильно, значит ядро распознало переключатель и acpid получает правильную инфу о его состоянии, но почему-то не генерит событие? Можно ли "перенастроить" acpid так, чтобы событие в /dev/input/event2 падало в зависимости от /proc/acpi/button/lid/LID0/state? Или же вообще отказаться от acpid?

Запутался в общем в этих устройствах, прошу помощи)

Ещё пробовал прочитать состояние крышки из /sys/devices/platform/... ,но тоже не разобрался куда там смотреть. Насколько понял - переключатель крышки представлен устройством /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1a/PNP0C0D:00/input/input3 Но какой файл в нём отвечает за само состояние переключателя, open / closed?

$ ls -la /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1a/PNP0C0D:00/input/input3
итого 0
drwxr-xr-x 6 root root    0 авг 14 09:53 ./
drwxr-xr-x 3 root root    0 авг 14 21:22 ../
drwxr-xr-x 2 root root    0 авг 14 09:52 capabilities/
lrwxrwxrwx 1 root root    0 авг 14 09:52 device -> ../../../PNP0C0D:00/
drwxr-xr-x 3 root root    0 авг 14 09:52 event2/
drwxr-xr-x 2 root root    0 авг 14 09:52 id/
-r--r--r-- 1 root root 4096 авг 14 09:52 modalias
-r--r--r-- 1 root root 4096 авг 14 09:52 name
-r--r--r-- 1 root root 4096 авг 14 09:52 phys
drwxr-xr-x 2 root root    0 авг 14 09:52 power/
-r--r--r-- 1 root root 4096 авг 14 09:52 properties
lrwxrwxrwx 1 root root    0 авг 14 09:52 subsystem -> ../../../../../../../../class/input/
-rw-r--r-- 1 root root 4096 авг 14 09:52 uevent
-r--r--r-- 1 root root 4096 авг 14 09:52 uniq


sidbar

Для начала было бы хорошо декомпилировать DSDT и разобраться с чем там накосячили.
cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
iasl -d dsdt.dat
Devuan GNU/Linux

Boris.So


$ iasl -d dsdt.dat

Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20181213
Copyright (c) 2000 - 2018 Intel Corporation

Input file dsdt.dat, Length 0x4092C (264492) bytes
ACPI: DSDT 0x0000000000000000 04092C (v02 HPQOEM SLIC-MPC 00000000 ACPI 00040000)
Pass 1 parse of [DSDT]
ACPI Error: ^^^WMID.WEI1: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^^WMID.WED1: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^GFX0.CLID: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^WMID.BRTE: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
Pass 2 parse of [DSDT]
ACPI Error: ^^^WMID.WEI1: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^^WMID.WED1: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^GFX0.CLID: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Error: ^^WMID.BRTE: Path has too many parent prefixes (^) (20181213/nsaccess-464)
ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20181213/psobject-264)
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000010025D070100 => 5D070100 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000110025D070100 => 5D070100 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000210025D070100 => 5D070100 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000310025D070100 => 5D070100 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000010025D070000 => 5D070000 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000110025D070000 => 5D070000 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000210025D070000 => 5D070000 (20181213/dsobject-492)                                                                                         
ACPI Warning: Truncated 64-bit constant found in 32-bit table: 000310025D070000 => 5D070000 (20181213/dsobject-492)                                                                                         
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed
Disassembly completed
ASL Output:    dsdt.dsl - 1838729 bytes

Boris.So

dsdt.dsl получился почти в 60к строк. Что именно там стоит искать?

Цитата: Boris.So от 17 августа 2019, 15:30:40dmesg - тишина
Тут я обманул, почему-то проглядел момент. В dmesg при закрытии крышки падают такие строчки:

[авг17 21:37] atkbd serio0: Unknown key pressed (translated set 2, code 0xd8 on isa0060/serio0).
[  +0,000006] atkbd serio0: Use 'setkeycodes e058 <keycode>' to make it known.
[  +0,010236] atkbd serio0: Unknown key released (translated set 2, code 0xd8 on isa0060/serio0).
[  +0,000006] atkbd serio0: Use 'setkeycodes e058 <keycode>' to make it known.

Это значит что сигнал от крышки попадает в ядро как нажатие кнопки на клавиатуре? И поскольку scancode неизвестный - оно игнорируется?

sidbar

Devuan GNU/Linux

Boris.So

Нашёлся вот такой кусочек:

        If (((Arg0 == 0x03) || (Arg0 == 0x04)))
        {
            If ((\_SB.PCI0.LPCB.EC0.LIDF != \_SB.PCI0.LPCB.LID0.PLID))
            {
                If (IGDS)
                {
                    If ((\_SB.PCI0.LPCB.EC0.LIDF == One))
                    {
                        \_SB.PCI0.GFX0.CLID = 0x80000000
                    }

                    If ((\_SB.PCI0.LPCB.EC0.LIDF == Zero))
                    {
                        \_SB.PCI0.GFX0.CLID = 0x80000003
                    }
                }

                Notify (\_SB.PCI0.LPCB.LID0, 0x80) // Status Change
            }
        }

Разобрал тут разве что Notify... С чем здесь могли накосячить?)

Ещё вот какой момент. Делаю systemctl stop acpid, затем смотрю логи logind: journalctl -u logind -f, и нажимаю кнопку Power. В логе вижу Power key pressed.
Как оно работает без acpi?