Ahojte. Na thinkpade T420 by som chcel mať možnosť vypnúť a zapnúť ultrabay mechaniku bez reštartu a chodenia do biosu.
Vypnutie je jednoduché, stačí zápis do súboru /sys/bus/platform/devices/dock.1/undock
. Reverznú operáciu (dock) som nenašiel, takže po vypnutí je mechanika mŕtva kým ju nevytiahnem z notebooku a znovu nezapojím.
Zápis do spomenutého súboru spustí ACPI metódu _SB.PCI0.SAT1.PRT1._EJ0
s parametrom 1
. Skúšal som ručne spustiť metódu s parametrom 0 (echo "\_SB.PCI0.SAT1.PRT1._EJ0 0" > /proc/acpi/call
), ale nič sa nestalo.
Príslušné dekompilované Intel ACPI Source Language (ASL) tabuľky prikladám v súbore.
Je možné mechaniku naštartovať softvérovo?
Toto si neskusal? https://wiki.archlinux.org/index.php/ThinkPad_docks#Using_dockd
V tom linku sa riesi monitor. Skus si to nabuduce precitat pred pastnutim.
Dockd počúva na acpi event, ktorý v mojom prípade príde len keď odpojím a pripojím mechaniku. Ja potrebujem donútiť bios, aby znovu preskenoval zariadenia bez fyzického odpojenia.
O to sa stara kernel (prebera kontrolu nad hardverom a BIOSOM).
Linux kernel prebera plne nahradza BIOS pri spustani.
Linux nenahrádza BIOS/UEFI. Ten beží stále nad operačným systémom a dá sa s nim komunikovať cez ACPI rozhranie. Kernel pri undock requeste zavolá metódu _EJ0 príslušného podsystému v ACPI. V tom momente preberá riadenie BIOS/UEFI a tu sa dostávame k dekompilovanému kódu, ktorý som priložil. Ak zavolám metódu eject (_EJ0) s parametrom 0 čakal by som, že urobí reverznú operáciu ejectu, ale to nerobí. Podľa kódu mám pocit, že by sa to malo dať poslaním špeciálneho kódu pre embedded controller a následným obnovením napájania pre SATA ak to EC neurobí automaticky.
Doplňujúce informácie:
Metóda
\_SB.PCI0.SAT1.PRT1._EJ0
podľa ssdt3.dsl volá\_SB.PCI0.LPC.EC.BEJ0
Tá je definovaná takto, ale neviem, ktorá časť je zodpovedná za vypnutie radiča a ani ako ho znovu zapnúť.
Evidentne však v podmienke else, kde by sa mal znovu inicializovať robí omnoho menej.
Otočil by som sa na tohoto človeka, s tým ti mi bežní smrteľníci ťažko pomôžeme.