Здравствуйте!
Я пытаюсь организовать пробуждение системы из состояния S3 от USB клавиатуры.
После загрузки ОС команда «cat /proc/acpi/wakeup» выдает:
Device S-state Status Sysfs node
PCI0 S5 disabled no-bus:pci0000:00
HDEF S4 disabled pci:0000:00:1b.0
RP01 S5 disabled pci:0000:00:1c.0
RP02 S5 disabled pci:0000:00:1c.1
RP03 S5 disabled pci:0000:00:1c.2
RP04 S5 disabled pci:0000:00:1c.3
RP05 S5 disabled pci:0000:00:1c.4
RP06 S5 disabled pci:0000:00:1c.5
USB1 S3 disabled pci:0000:00:1d.0
USB2 S3 disabled pci:0000:00:1d.1
USB3 S3 disabled pci:0000:00:1d.2
USB4 S3 disabled pci:0000:00:1d.3
EHC1 S3 disabled pci:0000:00:1d.7
MODM S4 disabled
COMA S3 disabled pnp:00:08
COMB S3 disabled pnp:00:09
Насколько я понимаю, представленные устройства в таблице это устройства из таблицы DSDT, для которых существует метод _PRW.
Однако почему-то wakeup для них по умолчанию выключен.
Включить wakeup для клавиатуры (в данном случае для меня это USB1) можно с помощью команд:
echo PCI0 > /proc/acpi/wakeup
echo USB1 > /proc/acpi/wakeup
Судя по всему эти команды говорят ОС о том, что при входе в S3, нужно модифицировать соответcтвующие биты в регистре ACPI GPE0_EN (о том какие именно биты, можно видеть из соответствующего метода _PRW устройства)
Однако этим дело не заканчивается. ОС при входе в S3 отводит питание от USB.
Чтобы это исправить находим из dmesg номер USB в системе
[ 2.724374] input: LITEON Technology USB Multimedia Keyboard as /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/input/input6
и выполняем команду «echo enabled > /sys/bus/usb/devices/2-2/power/wakeup»
После этого wakeup от клавиатуры работает нормально.
А теперь вопрос, как нужно отредактировать DSDT, чтобы эти команды вбивать не пришлось? (вариант с вбиванием рассмотренных выше команд в автозагрузку не рассматривается)