summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainboard/lenovo/x60/acpi/lid.asl21
-rw-r--r--src/mainboard/lenovo/x60/acpi/sleepbutton.asl24
-rw-r--r--src/mainboard/lenovo/x60/acpi/systemstatus.asl66
-rw-r--r--src/mainboard/lenovo/x60/dsdt.asl3
4 files changed, 111 insertions, 3 deletions
diff --git a/src/mainboard/lenovo/x60/acpi/lid.asl b/src/mainboard/lenovo/x60/acpi/lid.asl
index 2c92ee67e0..2dfa8d116d 100644
--- a/src/mainboard/lenovo/x60/acpi/lid.asl
+++ b/src/mainboard/lenovo/x60/acpi/lid.asl
@@ -21,9 +21,12 @@
Field(ERAM, ByteAcc, NoLock, Preserve)
{
+ Offset (0x32),
+ , 2,
+ WKLD, 1,
Offset (0x46),
- , 2,
- LIDS , 1
+ , 2,
+ LIDS, 1
}
Device(LID)
@@ -34,4 +37,18 @@ Device(LID)
{
return (LIDS)
}
+
+ Method(_PRW, 0, NotSerialized)
+ {
+ Return (Package() { 0x18, 0x03 })
+ }
+
+ Method(_PSW, 1, NotSerialized)
+ {
+ if (Arg0) {
+ Store(1, WKLD)
+ } else {
+ Store(0, WKLD)
+ }
+ }
}
diff --git a/src/mainboard/lenovo/x60/acpi/sleepbutton.asl b/src/mainboard/lenovo/x60/acpi/sleepbutton.asl
index c339158b31..09e88aa74e 100644
--- a/src/mainboard/lenovo/x60/acpi/sleepbutton.asl
+++ b/src/mainboard/lenovo/x60/acpi/sleepbutton.asl
@@ -19,7 +19,31 @@
* MA 02110-1301 USA
*/
+Field(ERAM, ByteAcc, NoLock, Preserve)
+{
+ Offset (0x32),
+ , 4,
+ WKFN, 1,
+ Offset(0x83),
+ FNKY, 8
+}
+
Device(SLPB)
{
Name (_HID, EisaId ("PNP0C0E"))
+ Method(_PRW, 0, NotSerialized)
+ {
+ Return (Package() { 0x18, 0x03 })
+ }
+
+ Method(_PSW, 1, NotSerialized)
+ {
+ if (Arg0) {
+ Store(6, FNKY) /* Fn key acts as wake button */
+ Store(1, WKFN)
+ } else {
+ Store(0, FNKY) /* Fn key normal operation */
+ Store(0, WKFN)
+ }
+ }
}
diff --git a/src/mainboard/lenovo/x60/acpi/systemstatus.asl b/src/mainboard/lenovo/x60/acpi/systemstatus.asl
new file mode 100644
index 0000000000..fb3fa2659a
--- /dev/null
+++ b/src/mainboard/lenovo/x60/acpi/systemstatus.asl
@@ -0,0 +1,66 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (c) 2011 Sven Schnelle <svens@stackframe.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+
+Scope (\_SI)
+{
+ Method(_SST, 1, NotSerialized)
+ {
+ If (LEqual (Arg0, 0)) {
+ /* Indicator off */
+
+ /* power LED off */
+ \_SB.PCI0.LPC.EC.LED(0x00)
+ /* suspend LED off */
+ \_SB.PCI0.LPC.EC.LED(0x07)
+ }
+
+ If (LEqual (Arg0, 1)) {
+ /* working state */
+
+ /* power LED on */
+ \_SB.PCI0.LPC.EC.LED(0x80)
+ /* suspend LED off */
+ \_SB.PCI0.LPC.EC.LED(0x07)
+ }
+
+ If (LEqual (Arg0, 2)) {
+ /* waking state */
+
+ /* power LED om */
+ \_SB.PCI0.LPC.EC.LED(0x80)
+ /* suspend LED blinking */
+ \_SB.PCI0.LPC.EC.LED(0xc7)
+ }
+
+ If (LEqual (Arg0, 3)) {
+ /* sleep state */
+
+ /* power LED off */
+ \_SB.PCI0.LPC.EC.LED(0x00)
+ /* suspend LED on */
+ \_SB.PCI0.LPC.EC.LED(0x87)
+ }
+
+
+
+ }
+}
diff --git a/src/mainboard/lenovo/x60/dsdt.asl b/src/mainboard/lenovo/x60/dsdt.asl
index e3a62a3a19..3117e2915d 100644
--- a/src/mainboard/lenovo/x60/dsdt.asl
+++ b/src/mainboard/lenovo/x60/dsdt.asl
@@ -42,7 +42,8 @@ DefinitionBlock(
// Thermal Zone
#include "acpi/thermal.asl"
-
+ // System status indicators
+ #include "acpi/systemstatus.asl
Scope (\_SB) {
Device (PCI0)
{