EC: Add Lenovo H8
authorSven Schnelle <svens@stackframe.org>
Mon, 11 Apr 2011 19:43:32 +0000 (19:43 +0000)
committerSven Schnelle <svens@stackframe.org>
Mon, 11 Apr 2011 19:43:32 +0000 (19:43 +0000)
Move the EC support code from the X60 mainboard to a generic
driver, as this EC is used in many thinkpads. Also move the
ACPI code to this directory for this reason.

This patch also adds a chip config, so that the initial setting
for basic register can be specified in devicetree.cb

Signed-off-by: Sven Schnelle <svens@stackframe.org>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6485 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

29 files changed:
src/ec/lenovo/Kconfig
src/ec/lenovo/Makefile.inc
src/ec/lenovo/h8/Kconfig [new file with mode: 0644]
src/ec/lenovo/h8/Makefile.inc [new file with mode: 0644]
src/ec/lenovo/h8/acpi/ac.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/battery.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/beep.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/ec.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/lid.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/sleepbutton.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/systemstatus.asl [new file with mode: 0644]
src/ec/lenovo/h8/acpi/thermal.asl [new file with mode: 0644]
src/ec/lenovo/h8/chip.h [new file with mode: 0644]
src/ec/lenovo/h8/h8.c [new file with mode: 0644]
src/ec/lenovo/h8/h8.h [new file with mode: 0644]
src/mainboard/lenovo/x60/Kconfig
src/mainboard/lenovo/x60/acpi/ac.asl [deleted file]
src/mainboard/lenovo/x60/acpi/battery.asl [deleted file]
src/mainboard/lenovo/x60/acpi/beep.asl [deleted file]
src/mainboard/lenovo/x60/acpi/dock.asl
src/mainboard/lenovo/x60/acpi/ec.asl
src/mainboard/lenovo/x60/acpi/gpe.asl
src/mainboard/lenovo/x60/acpi/lid.asl [deleted file]
src/mainboard/lenovo/x60/acpi/sleepbutton.asl [deleted file]
src/mainboard/lenovo/x60/acpi/systemstatus.asl [deleted file]
src/mainboard/lenovo/x60/acpi/thermal.asl [deleted file]
src/mainboard/lenovo/x60/devicetree.cb
src/mainboard/lenovo/x60/dsdt.asl
src/mainboard/lenovo/x60/mainboard.c

index b564b62b0bda6e4bc9839eb1bfa01da67db09a0f..73f11caa381143308d71471bde27e4dbc750ad65 100644 (file)
@@ -1 +1,2 @@
+source src/ec/lenovo/h8/Kconfig
 source src/ec/lenovo/pmh7/Kconfig
index f9a3feb4a185dc4d6a50e745318ade4f3b37316c..8865030ea1a68ab1162c14348b1dc11c34acdc62 100644 (file)
@@ -1 +1,2 @@
+subdirs-$(CONFIG_EC_LENOVO_H8) += h8
 subdirs-$(CONFIG_EC_LENOVO_PMH7) += pmh7
diff --git a/src/ec/lenovo/h8/Kconfig b/src/ec/lenovo/h8/Kconfig
new file mode 100644 (file)
index 0000000..07bdb11
--- /dev/null
@@ -0,0 +1,3 @@
+config EC_LENOVO_H8
+       select EC_ACPI
+       bool
diff --git a/src/ec/lenovo/h8/Makefile.inc b/src/ec/lenovo/h8/Makefile.inc
new file mode 100644 (file)
index 0000000..86bc663
--- /dev/null
@@ -0,0 +1 @@
+driver-y += h8.c
diff --git a/src/ec/lenovo/h8/acpi/ac.asl b/src/ec/lenovo/h8/acpi/ac.asl
new file mode 100644 (file)
index 0000000..cbc84b2
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * 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
+ */
+
+Field(ERAM, ByteAcc, NoLock, Preserve)
+{
+               Offset (0x46),
+                               , 4,
+                           HPAC, 1
+}
+
+Device(AC)
+{
+       Name(_HID, "ACPI0003")
+       Name(_UID, 0x00)
+       Name(_PCL, Package() { \_SB } )
+
+       Method(_PSR, 0, NotSerialized)
+       {
+               return (HPAC)
+       }
+
+       Method(_STA, 0, NotSerialized)
+       {
+               Return (0x0f)
+       }
+}
diff --git a/src/ec/lenovo/h8/acpi/battery.asl b/src/ec/lenovo/h8/acpi/battery.asl
new file mode 100644 (file)
index 0000000..7168581
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * 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
+ */
+
+Field(ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset (0x38),
+                       B0ST, 4,        /* Battery 0 state */
+                           , 1,
+                       B0CH, 1,        /* Battery 0 charging */
+                       B0DI, 1,        /* Battery 0 discharging */
+                       B0PR, 1,        /* Battery 0 present */
+       Offset (0x39),
+                       B1ST, 4,        /* Battery 1 state */
+                           , 1,
+                       B1CH, 1,        /* Battery 1 charging, */
+                       B1DI, 1,        /* Battery 1 discharging,*/
+                       B1PR, 1         /* Battery 1 present */
+}
+
+/* EC Registers */
+/* PAGE == 0x00 */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                       BARC, 16,               /* Battery remaining capacity */
+                       BAFC, 16,               /* Battery full charge capacity */
+       Offset(0xa8),
+                       BAPR, 16,               /* Battery present rate */
+                       BAVO, 16,               /* Battery Voltage */
+}
+
+/* PAGE == 0x01 */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                           , 15,
+                       BAMA,  1,
+}
+
+/* PAGE == 0x02 */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                       BADC, 16,               /* Design Capacity */
+                       BADV, 16,               /* Design voltage */
+                           , 16,
+                           , 16,
+                           , 16,
+                       BASN, 16,
+}
+
+/* PAGE == 0x04: Battery type */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                       BATY, 32
+}
+
+
+/* PAGE == 0x05: Battery OEM information */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                       BAOE, 128
+}
+
+/* PAGE == 0x06: Battery name */
+Field (ERAM, ByteAcc, NoLock, Preserve)
+{
+       Offset(0xa0),
+                       BANA, 128
+}
+
+/* Arg0: Battery
+ * Arg1: Battery Status Package
+ * Arg2: charging
+ * Arg3: discharging
+ */
+Method(BSTA, 4, NotSerialized)
+{
+       Acquire(ECLK, 0xffff)
+       Store(0, Local0)
+       Or(1, Arg0, PAGE)
+       Store(BAMA, Local1)
+       Store(Arg0, PAGE) /* Battery dynamic information */
+
+       Store(BAPR, Local2)
+
+       if (Arg2) // charging
+       {
+               Or(2, Local0, Local0)
+
+               If (LGreaterEqual (Local2, 0x8000)) {
+                       Store(0, Local2)
+               }
+       }
+
+       if (Arg3) // discharging
+       {
+               Or(1, Local0, Local0)
+               Subtract(0x10000, Local2, Local2)
+       }
+
+       Store(Local0, Index(Arg1, 0x00))
+
+       if (Local1) {
+               Multiply (BARC, 10, Index(Arg1, 2))
+               Multiply (Local2, BAVO, Local2)
+               Divide (Local2, 1000, Local3, Index(Arg1, 1))
+       } else {
+               Store(BARC, Index(Arg1, 2))
+               Store(Local2, Index(Arg1, 1))
+       }
+       Store(BAVO, Index(Arg1, 3))
+       Release(ECLK)
+       Return (Arg1)
+}
+
+Method(BINF, 2, NotSerialized)
+{
+       Acquire(ECLK, 0xffff)
+       Or(1, Arg1, PAGE) /* Battery 0 static information */
+       Xor(BAMA, 1, Index(Arg0, 0))
+       Store(BAMA, Local0)
+       Store(Arg1, PAGE)
+       Store(BAFC, Local2)
+       Or(2, Arg1, PAGE)
+       Store(BADC, Local1)
+
+       if (Local0)
+       {
+               Multiply (Local1, 10, Local1)
+               Multiply (Local2, 10, Local2)
+       }
+
+       Store(Local1, Index(Arg0, 1))   // Design Capacity
+       Store(Local2, Index(Arg0, 2))   // Last full charge capacity
+       Store(BADV, Index(Arg0, 4))     // Design Voltage
+       Divide (Local2, 20, Local0, Index(Arg0, 5)) // Warning capacity
+
+       Store (BASN, Local0)
+       Name (SERN, Buffer (0x06) { "     " })
+       Store (4, Local1)
+       While (Local0)
+       {
+               Divide (Local0, 0x0A, Local2, Local0)
+               Add (Local2, 48, Index (SERN, Local1))
+               Decrement (Local1)
+       }
+       Store (SERN, Index (Arg0, 10)) // Serial Number
+
+       Or(4, Arg1, PAGE)
+       Name (TYPE, Buffer() { 0, 0, 0, 0, 0 })
+       Store(BATY, TYPE)
+       Store(TYPE, Index (Arg0, 11)) // Battery type
+       Or(5, Arg1, PAGE)
+       Store(BAOE, Index (Arg0, 12)) // OEM information
+       Or(6, Arg1, PAGE)
+       Store(BANA, Index (Arg0, 9))  // Model number
+       Release(ECLK)
+       Return (Arg0)
+}
+
+Device (BAT0)
+{
+       Name (_HID, EisaId ("PNP0C0A"))
+       Name (_UID, 0x00)
+       Name (_PCL, Package () { \_SB })
+
+       Name (BATS, Package ()
+       {
+               0x00,                   // 0: PowerUnit: Report in mWh
+               0xFFFFFFFF,             // 1: Design cap
+               0xFFFFFFFF,             // 2: Last full charge cap
+               0x01,                   // 3: Battery Technology
+               10800,                  // 4: Design Voltage (mV)
+               0x00,                   // 5: Warning design capacity
+               200,                    // 6: Low design capacity
+               1,                      // 7: granularity1
+               1,                      // 8: granularity2
+               "",                     // 9: Model number
+               "",                     // A: Serial number
+               "",                     // B: Battery Type
+               ""                      // C: OEM information
+       })
+
+       Method (_BIF, 0, NotSerialized)
+       {
+               Return (BINF(BATS, 0))
+       }
+
+       Name (BATI, Package ()
+       {
+               0,                      // Battery State
+                                       // Bit 0 - discharge
+                                       // Bit 1 - charge
+                                       // Bit 2 - critical state
+               0,                      // Battery present Rate
+               0,                      // Battery remaining capacity
+               0                       // Battery present voltage
+       })
+
+       Method (_BST, 0, NotSerialized)
+       {
+               if (B0PR) {
+                       Return (BSTA(0, BATI, B0CH, B0DI))
+               } else {
+                       Return (BATS)
+               }
+       }
+
+       Method (_STA, 0, NotSerialized)
+       {
+               if (B0PR) {
+                       Return (0x1f)
+               } else {
+                       Return (0x0f)
+               }
+       }
+}
+
+Device (BAT1)
+{
+       Name (_HID, EisaId ("PNP0C0A"))
+       Name (_UID, 0x00)
+       Name (_PCL, Package () { \_SB })
+
+       Name (BATS, Package ()
+       {
+               0x00,                   // 0: PowerUnit: Report in mWh
+               0xFFFFFFFF,             // 1: Design cap
+               0xFFFFFFFF,             // 2: Last full charge cap
+               0x01,                   // 3: Battery Technology
+               10800,                  // 4: Design Voltage (mV)
+               0x00,                   // 5: Warning design capacity
+               200,                    // 6: Low design capacity
+               1,                      // 7: granularity1
+               1,                      // 8: granularity2
+               "",                     // 9: Model number
+               "",                     // A: Serial number
+               "",                     // B: Battery Type
+               ""                      // C: OEM information
+       })
+
+       Method (_BIF, 0, NotSerialized)
+       {
+               Return (BINF(BATS, 0x10))
+       }
+
+       Name (BATI, Package ()
+       {
+               0,                      // Battery State
+                                       // Bit 0 - discharge
+                                       // Bit 1 - charge
+                                       // Bit 2 - critical state
+               0,                      // Battery present Rate
+               0,                      // Battery remaining capacity
+               0                       // Battery present voltage
+       })
+
+       Method (_BST, 0, NotSerialized)
+       {
+               if (B1PR) {
+                       Return (BSTA(0x10, BATI, B1CH, B1DI))
+               } else {
+                       Return (BATS)
+               }
+       }
+
+       Method (_STA, 0, NotSerialized)
+       {
+               if (B1PR) {
+                       Return (0x1f)
+               } else {
+                       Return (0x0f)
+               }
+       }
+}
diff --git a/src/ec/lenovo/h8/acpi/beep.asl b/src/ec/lenovo/h8/acpi/beep.asl
new file mode 100644 (file)
index 0000000..718f41b
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * 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
+ */
+
+Field(ERAM, ByteAcc, NoLock, Preserve)
+{
+               Offset (0x06),
+                       SNDS, 8         /* Write to this register to generate sound */
+
+}
+
+Method(BEEP, 1, NotSerialized)
+{
+       Store (Arg0, SNDS)
+}
diff --git a/src/ec/lenovo/h8/acpi/ec.asl b/src/ec/lenovo/h8/acpi/ec.asl
new file mode 100644 (file)
index 0000000..98abfc1
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * 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
+ */
+
+#include "smi.h"
+Device(EC)
+{
+       Name (_HID, EISAID("PNP0C09"))
+       Name (_UID, 0)
+
+       Name (_GPE, 28)
+       Mutex (ECLK, 0)
+
+       OperationRegion(ERAM, EmbeddedControl, 0x00, 0x100)
+       Field (ERAM, ByteAcc, NoLock, Preserve)
+       {
+               Offset (0x05),
+                               HSPA, 1,
+               Offset (0x0C),
+                               LEDS, 8,        /* LED state */
+               Offset (0x3a),
+                               AMUT, 1,        /* Audio Mute */
+               Offset (0x3B),
+                                   , 1,
+                               KBLT, 1,        /* Keyboard Light */
+               Offset (0x4e),
+                              WAKE, 16,
+               Offset (0x78),
+                               TMP0, 8,        /* Thermal Zone 0 temperature */
+                               TMP1, 8,        /* Thermal Zone 1 temperature */
+               Offset (0x81),
+                               PAGE, 8         /* Information Page Selector */
+        }
+
+       Method (_CRS, 0)
+       {
+               Name (ECMD, ResourceTemplate()
+               {
+                       IO (Decode16, 0x62, 0x62, 1, 1)
+                       IO (Decode16, 0x66, 0x66, 1, 1)
+               })
+               Return (ECMD)
+       }
+
+       Method (LED, 1, NotSerialized)
+       {
+               Store(Arg0, LEDS)
+       }
+
+       Method (_INI, 0, NotSerialized)
+       {
+       }
+
+       Method (MUTE, 1, NotSerialized)
+       {
+               Store(Arg0, AMUT)
+       }
+
+       /* Sleep Button pressed */
+       Method(_Q13, 0, NotSerialized)
+       {
+               Notify(\_SB.PCI0.LPCB.EC.SLPB, 0x80)
+       }
+
+       /* Brightness up GPE */
+       Method(_Q14, 0, NotSerialized)
+       {
+               \DSPC.BRTU ()
+       }
+
+       /* Brightness down GPE */
+       Method(_Q15, 0, NotSerialized)
+       {
+               \DSPC.BRTD()
+       }
+
+       /* AC status change: present */
+       Method(_Q26, 0, NotSerialized)
+       {
+               Notify (AC, 0x80)
+       }
+
+       /* AC status change: not present */
+       Method(_Q27, 0, NotSerialized)
+       {
+               Notify (AC, 0x80)
+       }
+
+       Method(_Q2A, 0, NotSerialized)
+       {
+               Notify(\_SB.PCI0.LPCB.EC.LID, 0x80)
+       }
+
+       Method(_Q2B, 0, NotSerialized)
+       {
+               Notify(\_SB.PCI0.LPCB.EC.LID, 0x80)
+       }
+
+
+#include "ac.asl"
+#include "battery.asl"
+#include "sleepbutton.asl"
+#include "lid.asl"
+#include "beep.asl"
+}
diff --git a/src/ec/lenovo/h8/acpi/lid.asl b/src/ec/lenovo/h8/acpi/lid.asl
new file mode 100644 (file)
index 0000000..2dfa8d1
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * 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
+ */
+
+Field(ERAM, ByteAcc, NoLock, Preserve)
+{
+                Offset (0x32),
+                           , 2,
+                       WKLD, 1,
+               Offset (0x46),
+                           , 2,
+                       LIDS, 1
+}
+
+Device(LID)
+{
+       Name(_HID, "PNP0C0D")
+
+       Method(_LId, 0, NotSerialized)
+       {
+               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/ec/lenovo/h8/acpi/sleepbutton.asl b/src/ec/lenovo/h8/acpi/sleepbutton.asl
new file mode 100644 (file)
index 0000000..09e88aa
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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
+ */
+
+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/ec/lenovo/h8/acpi/systemstatus.asl b/src/ec/lenovo/h8/acpi/systemstatus.asl
new file mode 100644 (file)
index 0000000..17e8ba7
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * 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.LPCB.EC.LED(0x00)
+                       /* suspend LED off */
+                       \_SB.PCI0.LPCB.EC.LED(0x07)
+               }
+
+               If (LEqual (Arg0, 1)) {
+                       /* working state */
+
+                       /* power LED on */
+                       \_SB.PCI0.LPCB.EC.LED(0x80)
+                       /* suspend LED off */
+                       \_SB.PCI0.LPCB.EC.LED(0x07)
+               }
+
+               If (LEqual (Arg0, 2)) {
+                       /* waking state */
+
+                       /* power LED om */
+                       \_SB.PCI0.LPCB.EC.LED(0x80)
+                       /* suspend LED blinking */
+                       \_SB.PCI0.LPCB.EC.LED(0xc7)
+               }
+
+               If (LEqual (Arg0, 3)) {
+                       /* sleep state */
+
+                       /* power LED off */
+                       \_SB.PCI0.LPCB.EC.LED(0x00)
+                       /* suspend LED on */
+                       \_SB.PCI0.LPCB.EC.LED(0x87)
+               }
+       }
+}
diff --git a/src/ec/lenovo/h8/acpi/thermal.asl b/src/ec/lenovo/h8/acpi/thermal.asl
new file mode 100644 (file)
index 0000000..35b6f14
--- /dev/null
@@ -0,0 +1,41 @@
+Scope(\_TZ)
+{
+       Method(C2K, 1, NotSerialized)
+       {
+               Multiply(Arg0, 10, Local0)
+               Add (Local0, 2732, Local0)
+               if (LLessEqual(Local0, 2732)) {
+                       Return (3000)
+               }
+
+               if (LGreater(Local0, 4012)) {
+                       Return (3000)
+               }
+               Return (Local0)
+       }
+
+       ThermalZone(THM0)
+       {
+               Method(_CRT, 0, NotSerialized) {
+                       Return (C2K(127))
+               }
+               Method(_TMP) {
+                       Return (C2K(\_SB.PCI0.LPCB.EC.TMP0))
+               }
+       }
+
+       ThermalZone(THM1)
+       {
+               Method(_CRT, 0, NotSerialized) {
+                       Return (C2K(99))
+               }
+
+               Method(_PSV, 0, NotSerialized) {
+                       Return (C2K(94))
+               }
+
+               Method(_TMP) {
+                       Return (C2K(\_SB.PCI0.LPCB.EC.TMP1))
+               }
+       }
+}
diff --git a/src/ec/lenovo/h8/chip.h b/src/ec/lenovo/h8/chip.h
new file mode 100644 (file)
index 0000000..d504654
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef EC_LENOVO_H8EC_CHIP_H
+#define EC_LENOVO_H8EC_CHIP_H
+
+extern struct chip_operations ec_lenovo_h8_ops;
+struct ec_lenovo_h8_config {
+
+       u8 config0;
+       u8 config1;
+       u8 config2;
+       u8 config3;
+
+       u8 beepmask0;
+       u8 beepmask1;
+
+       u8 event0_enable;
+       u8 event1_enable;
+       u8 event2_enable;
+       u8 event3_enable;
+       u8 event4_enable;
+       u8 event5_enable;
+       u8 event6_enable;
+       u8 event7_enable;
+       u8 event8_enable;
+       u8 event9_enable;
+       u8 eventa_enable;
+       u8 eventb_enable;
+       u8 eventc_enable;
+       u8 eventd_enable;
+       u8 evente_enable;
+       u8 eventf_enable;
+
+       u8 trackpoint_enable;
+       u8 wlan_enable;
+       u8 wwan_enable;
+};
+#endif
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c
new file mode 100644 (file)
index 0000000..bc0ddde
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * 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
+ */
+
+#include <arch/io.h>
+#include <console/console.h>
+#include <device/device.h>
+#include <ec/acpi/ec.h>
+#include <device/pnp.h>
+#include <stdlib.h>
+#include "h8.h"
+#include "chip.h"
+
+void h8_trackpoint_enable(int on)
+{
+       ec_write(H8_TRACKPOINT_CTRL,
+                on ? H8_TRACKPOINT_ON : H8_TRACKPOINT_OFF);
+
+}
+
+void h8_wlan_enable(int on)
+{
+       if (on)
+               ec_set_bit(0x3a, 5);
+       else
+               ec_clr_bit(0x3a, 5);
+}
+
+static void h8_log_ec_version(void)
+{
+       unsigned char ecfw[9], c;
+       u16 fwvh, fwvl;
+       int i;
+
+       for(i = 0; i < 8; i++) {
+               c = ec_read(0xf0 + i);
+               if (c < 0x20 || c > 0x7f)
+                       break;
+               ecfw[i] = c;
+       }
+       ecfw[i] = '\0';
+
+       fwvh = ec_read(0xe9);
+       fwvl = ec_read(0xe8);
+
+       printk(BIOS_INFO, "EC Firmware ID %s, Version %d.%d%d%c\n", ecfw,
+              fwvh >> 4, fwvh & 0x0f, fwvl >> 4, 0x41 + (fwvl & 0xf));
+}
+
+void h8_set_audio_mute(int on)
+{
+       if (on)
+               ec_clr_bit(0x3a, 0);
+       else
+               ec_set_bit(0x3a, 1);
+}
+
+void h8_enable_event(int event)
+{
+       if (event < 0 || event > 127)
+               return;
+
+       ec_set_bit(0x10 + (event >> 3), event & 7);
+}
+
+void h8_disable_event(int event)
+{
+       if (event < 0 || event > 127)
+               return;
+
+       ec_clr_bit(0x10 + (event >> 3), event & 7);
+
+}
+
+static void h8_enable(device_t dev)
+{
+       struct ec_lenovo_h8_config *conf = dev->chip_info;
+       h8_log_ec_version();
+
+       ec_write(H8_CONFIG0, conf->config0);
+       ec_write(H8_CONFIG1, conf->config1);
+       ec_write(H8_CONFIG2, conf->config2);
+       ec_write(H8_CONFIG3, conf->config3);
+
+       ec_write(H8_SOUND_ENABLE0, conf->beepmask0);
+       ec_write(H8_SOUND_ENABLE1, conf->beepmask1);
+       ec_write(H8_SOUND_REPEAT, 0x00);
+
+       ec_write(0x10, conf->event0_enable);
+       ec_write(0x11, conf->event1_enable);
+       ec_write(0x12, conf->event2_enable);
+       ec_write(0x13, conf->event3_enable);
+       ec_write(0x14, conf->event4_enable);
+       ec_write(0x15, conf->event5_enable);
+       ec_write(0x16, conf->event6_enable);
+       ec_write(0x17, conf->event7_enable);
+       ec_write(0x18, conf->event8_enable);
+       ec_write(0x19, conf->event9_enable);
+       ec_write(0x1a, conf->eventa_enable);
+       ec_write(0x1b, conf->eventb_enable);
+       ec_write(0x1c, conf->eventc_enable);
+       ec_write(0x1d, conf->eventd_enable);
+       ec_write(0x1e, conf->evente_enable);
+       ec_write(0x1f, conf->eventf_enable);
+
+       h8_wlan_enable(conf->wlan_enable);
+       h8_trackpoint_enable(conf->trackpoint_enable);
+
+}
+
+struct chip_operations ec_lenovo_h8_ops = {
+       CHIP_NAME("Lenovo H8 EC")
+       .enable_dev = h8_enable
+};
diff --git a/src/ec/lenovo/h8/h8.h b/src/ec/lenovo/h8/h8.h
new file mode 100644 (file)
index 0000000..cdb22ca
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * 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
+ */
+
+#ifndef EC_LENOVO_H8_H
+#define EC_LENOVO_H8_H
+
+void h8_trackpoint_enable(int on);
+void h8_wlan_enable(int on);
+void h8_set_audio_mute(int on);
+void h8_enable_event(int event);
+void h8_disable_event(int event);
+
+/* EC registers */
+#define H8_CONFIG0 0x00
+#define H8_CONFIG0_EVENTS_ENABLE       0x02
+#define H8_CONFIG0_HOTKEY_ENABLE       0x04
+#define H8_CONFIG0_SMM_H8_ENABLE       0x20
+#define H8_CONFIG0_TC_ENABLE           0x80
+
+#define H8_CONFIG1 0x01
+#define H8_CONFIG1_BKLT_LID            0x01
+#define H8_CONFIG1_UBAY_PWR            0x20
+
+#define H8_CONFIG2 0x02
+#define H8_CONFIG2_USB_DOCK                    0x01
+#define H8_CONFIG2_DOCK_SPEAKER_MUTE           0x02
+#define H8_CONFIG2_DOCK_SPEAKER_MUTE_POL       0x04
+
+#define H8_CONFIG3 0x03
+
+#define H8_SOUND_ENABLE0               0x04
+#define H8_SOUND_ENABLE1               0x05
+#define H8_SOUND_REG                   0x06
+#define H8_SOUND_REPEAT                        0x07
+
+#define H8_TRACKPOINT_CTRL             0x0B
+#define H8_TRACKPOINT_AUTO             0x01
+#define H8_TRACKPOINT_OFF              0x02
+#define H8_TRACKPOINT_ON               0x03
+
+#define H8_LED_CONTROL         0x0c
+#define H8_LED_CONTROL_OFF             0x00
+#define H8_LED_CONTROL_ON              0x80
+#define H8_LED_CONTROL_BLINK           0xc0
+
+#define H8_LED_CONTROL_POWER_LED       0x00
+#define H8_LED_CONTROL_BAT0_LED        0x01
+#define H8_LED_CONTROL_BAT1_LED        0x02
+#define H8_LED_CONTROL_UBAY_LED        0x04
+#define H8_LED_CONTROL_SUSPEND_LED     0x07
+#define H8_LED_CONTROL_DOCK_LED1       0x08
+#define H8_LED_CONTROL_DOCK_LED2       0x09
+
+/* Embedded controller events */
+#define H8_EVENT_FN_F1 0x10
+#define H8_EVENT_FN_F2 0x11
+#define H8_EVENT_FN_F3 0x12
+#define H8_EVENT_FN_F4 0x13
+#define H8_EVENT_FN_HOME       0x14
+#define H8_EVENT_FN_END        0x15
+#define H8_EVENT_FN_F7 0x16
+#define H8_EVENT_FN_F8 0x17
+#define H8_EVENT_FN_F9 0x18
+#define H8_EVENT_FN_THINKVANTAGE       0x19
+#define H8_EVENT_FN_F11        0x1a
+#define H8_EVENT_FN_F12        0x1b
+#define H8_EVENT_FN_1          0x1c
+#define H8_EVENT_FN_2          0x1d
+#define H8_EVENT_FN_PGUP       0x1f
+
+#define H8_EVENT_AC_ON 0x26
+#define H8_EVENT_AC_OFF        0x27
+
+#define H8_EVENT_PWRSW_PRESS   0x28
+#define H8_EVENT_PWRSW_RELEASE 0x29
+
+#define H8_EVENT_LIDSW_CLOSE   0x2a
+#define H8_EVENT_LIDSW_PUSH    0x2b
+
+#define H8_EVENT_UBAY_UNLOCK   0x2c
+#define H8_EVENT_UBAY_LOCK     0x2d
+
+#define H8_EVENT_KEYPRESS      0x33
+
+#define H8_EVENT_FN_PRESS      0x39
+
+#define H8_EVENT_BAT0          0x4a
+#define H8_EVENT_BAT0_STATE    0x4b
+
+#define H8_EVENT_BAT1          0x4c
+#define H8_EVENT_BAT1_STATE    0x4d
+
+#define H8_EVENT_FN_F5 0x64
+#define H8_EVENT_FN_F6 0x65
+#endif
index ebd2c1c7bbbcfac9538dd66091528cbd69d0800c..c4b2f63cfd747e852a58139b0449a05c27e39075 100644 (file)
@@ -11,7 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
        select SUPERIO_NSC_PC87382
        select SUPERIO_NSC_PC87392
        select EC_LENOVO_PMH7
-       select EC_ACPI
+       select EC_LENOVO_H8
        select BOARD_HAS_FADT
        select HAVE_OPTION_TABLE
        select HAVE_PIRQ_TABLE
diff --git a/src/mainboard/lenovo/x60/acpi/ac.asl b/src/mainboard/lenovo/x60/acpi/ac.asl
deleted file mode 100644 (file)
index cbc84b2..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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
- */
-
-Field(ERAM, ByteAcc, NoLock, Preserve)
-{
-               Offset (0x46),
-                               , 4,
-                           HPAC, 1
-}
-
-Device(AC)
-{
-       Name(_HID, "ACPI0003")
-       Name(_UID, 0x00)
-       Name(_PCL, Package() { \_SB } )
-
-       Method(_PSR, 0, NotSerialized)
-       {
-               return (HPAC)
-       }
-
-       Method(_STA, 0, NotSerialized)
-       {
-               Return (0x0f)
-       }
-}
diff --git a/src/mainboard/lenovo/x60/acpi/battery.asl b/src/mainboard/lenovo/x60/acpi/battery.asl
deleted file mode 100644 (file)
index 7168581..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * 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
- */
-
-Field(ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset (0x38),
-                       B0ST, 4,        /* Battery 0 state */
-                           , 1,
-                       B0CH, 1,        /* Battery 0 charging */
-                       B0DI, 1,        /* Battery 0 discharging */
-                       B0PR, 1,        /* Battery 0 present */
-       Offset (0x39),
-                       B1ST, 4,        /* Battery 1 state */
-                           , 1,
-                       B1CH, 1,        /* Battery 1 charging, */
-                       B1DI, 1,        /* Battery 1 discharging,*/
-                       B1PR, 1         /* Battery 1 present */
-}
-
-/* EC Registers */
-/* PAGE == 0x00 */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                       BARC, 16,               /* Battery remaining capacity */
-                       BAFC, 16,               /* Battery full charge capacity */
-       Offset(0xa8),
-                       BAPR, 16,               /* Battery present rate */
-                       BAVO, 16,               /* Battery Voltage */
-}
-
-/* PAGE == 0x01 */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                           , 15,
-                       BAMA,  1,
-}
-
-/* PAGE == 0x02 */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                       BADC, 16,               /* Design Capacity */
-                       BADV, 16,               /* Design voltage */
-                           , 16,
-                           , 16,
-                           , 16,
-                       BASN, 16,
-}
-
-/* PAGE == 0x04: Battery type */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                       BATY, 32
-}
-
-
-/* PAGE == 0x05: Battery OEM information */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                       BAOE, 128
-}
-
-/* PAGE == 0x06: Battery name */
-Field (ERAM, ByteAcc, NoLock, Preserve)
-{
-       Offset(0xa0),
-                       BANA, 128
-}
-
-/* Arg0: Battery
- * Arg1: Battery Status Package
- * Arg2: charging
- * Arg3: discharging
- */
-Method(BSTA, 4, NotSerialized)
-{
-       Acquire(ECLK, 0xffff)
-       Store(0, Local0)
-       Or(1, Arg0, PAGE)
-       Store(BAMA, Local1)
-       Store(Arg0, PAGE) /* Battery dynamic information */
-
-       Store(BAPR, Local2)
-
-       if (Arg2) // charging
-       {
-               Or(2, Local0, Local0)
-
-               If (LGreaterEqual (Local2, 0x8000)) {
-                       Store(0, Local2)
-               }
-       }
-
-       if (Arg3) // discharging
-       {
-               Or(1, Local0, Local0)
-               Subtract(0x10000, Local2, Local2)
-       }
-
-       Store(Local0, Index(Arg1, 0x00))
-
-       if (Local1) {
-               Multiply (BARC, 10, Index(Arg1, 2))
-               Multiply (Local2, BAVO, Local2)
-               Divide (Local2, 1000, Local3, Index(Arg1, 1))
-       } else {
-               Store(BARC, Index(Arg1, 2))
-               Store(Local2, Index(Arg1, 1))
-       }
-       Store(BAVO, Index(Arg1, 3))
-       Release(ECLK)
-       Return (Arg1)
-}
-
-Method(BINF, 2, NotSerialized)
-{
-       Acquire(ECLK, 0xffff)
-       Or(1, Arg1, PAGE) /* Battery 0 static information */
-       Xor(BAMA, 1, Index(Arg0, 0))
-       Store(BAMA, Local0)
-       Store(Arg1, PAGE)
-       Store(BAFC, Local2)
-       Or(2, Arg1, PAGE)
-       Store(BADC, Local1)
-
-       if (Local0)
-       {
-               Multiply (Local1, 10, Local1)
-               Multiply (Local2, 10, Local2)
-       }
-
-       Store(Local1, Index(Arg0, 1))   // Design Capacity
-       Store(Local2, Index(Arg0, 2))   // Last full charge capacity
-       Store(BADV, Index(Arg0, 4))     // Design Voltage
-       Divide (Local2, 20, Local0, Index(Arg0, 5)) // Warning capacity
-
-       Store (BASN, Local0)
-       Name (SERN, Buffer (0x06) { "     " })
-       Store (4, Local1)
-       While (Local0)
-       {
-               Divide (Local0, 0x0A, Local2, Local0)
-               Add (Local2, 48, Index (SERN, Local1))
-               Decrement (Local1)
-       }
-       Store (SERN, Index (Arg0, 10)) // Serial Number
-
-       Or(4, Arg1, PAGE)
-       Name (TYPE, Buffer() { 0, 0, 0, 0, 0 })
-       Store(BATY, TYPE)
-       Store(TYPE, Index (Arg0, 11)) // Battery type
-       Or(5, Arg1, PAGE)
-       Store(BAOE, Index (Arg0, 12)) // OEM information
-       Or(6, Arg1, PAGE)
-       Store(BANA, Index (Arg0, 9))  // Model number
-       Release(ECLK)
-       Return (Arg0)
-}
-
-Device (BAT0)
-{
-       Name (_HID, EisaId ("PNP0C0A"))
-       Name (_UID, 0x00)
-       Name (_PCL, Package () { \_SB })
-
-       Name (BATS, Package ()
-       {
-               0x00,                   // 0: PowerUnit: Report in mWh
-               0xFFFFFFFF,             // 1: Design cap
-               0xFFFFFFFF,             // 2: Last full charge cap
-               0x01,                   // 3: Battery Technology
-               10800,                  // 4: Design Voltage (mV)
-               0x00,                   // 5: Warning design capacity
-               200,                    // 6: Low design capacity
-               1,                      // 7: granularity1
-               1,                      // 8: granularity2
-               "",                     // 9: Model number
-               "",                     // A: Serial number
-               "",                     // B: Battery Type
-               ""                      // C: OEM information
-       })
-
-       Method (_BIF, 0, NotSerialized)
-       {
-               Return (BINF(BATS, 0))
-       }
-
-       Name (BATI, Package ()
-       {
-               0,                      // Battery State
-                                       // Bit 0 - discharge
-                                       // Bit 1 - charge
-                                       // Bit 2 - critical state
-               0,                      // Battery present Rate
-               0,                      // Battery remaining capacity
-               0                       // Battery present voltage
-       })
-
-       Method (_BST, 0, NotSerialized)
-       {
-               if (B0PR) {
-                       Return (BSTA(0, BATI, B0CH, B0DI))
-               } else {
-                       Return (BATS)
-               }
-       }
-
-       Method (_STA, 0, NotSerialized)
-       {
-               if (B0PR) {
-                       Return (0x1f)
-               } else {
-                       Return (0x0f)
-               }
-       }
-}
-
-Device (BAT1)
-{
-       Name (_HID, EisaId ("PNP0C0A"))
-       Name (_UID, 0x00)
-       Name (_PCL, Package () { \_SB })
-
-       Name (BATS, Package ()
-       {
-               0x00,                   // 0: PowerUnit: Report in mWh
-               0xFFFFFFFF,             // 1: Design cap
-               0xFFFFFFFF,             // 2: Last full charge cap
-               0x01,                   // 3: Battery Technology
-               10800,                  // 4: Design Voltage (mV)
-               0x00,                   // 5: Warning design capacity
-               200,                    // 6: Low design capacity
-               1,                      // 7: granularity1
-               1,                      // 8: granularity2
-               "",                     // 9: Model number
-               "",                     // A: Serial number
-               "",                     // B: Battery Type
-               ""                      // C: OEM information
-       })
-
-       Method (_BIF, 0, NotSerialized)
-       {
-               Return (BINF(BATS, 0x10))
-       }
-
-       Name (BATI, Package ()
-       {
-               0,                      // Battery State
-                                       // Bit 0 - discharge
-                                       // Bit 1 - charge
-                                       // Bit 2 - critical state
-               0,                      // Battery present Rate
-               0,                      // Battery remaining capacity
-               0                       // Battery present voltage
-       })
-
-       Method (_BST, 0, NotSerialized)
-       {
-               if (B1PR) {
-                       Return (BSTA(0x10, BATI, B1CH, B1DI))
-               } else {
-                       Return (BATS)
-               }
-       }
-
-       Method (_STA, 0, NotSerialized)
-       {
-               if (B1PR) {
-                       Return (0x1f)
-               } else {
-                       Return (0x0f)
-               }
-       }
-}
diff --git a/src/mainboard/lenovo/x60/acpi/beep.asl b/src/mainboard/lenovo/x60/acpi/beep.asl
deleted file mode 100644 (file)
index 718f41b..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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
- */
-
-Field(ERAM, ByteAcc, NoLock, Preserve)
-{
-               Offset (0x06),
-                       SNDS, 8         /* Write to this register to generate sound */
-
-}
-
-Method(BEEP, 1, NotSerialized)
-{
-       Store (Arg0, SNDS)
-}
index db61e059a8c22e1c9aeafcb84fd4b24fac3eb8d8..d393f44f32c9af843cba5ad6076ded397f58b24f 100644 (file)
 
 #include "smi.h"
 
-OperationRegion (DLPC, SystemIO, 0x164c, 1)
-Field(DLPC, ByteAcc, NoLock, Preserve)
+Scope (\_SB)
 {
-           ,   3,
-       DSTA,   1,
-}
-Device(DOCK)
-{
-       Name(_HID, "ACPI0003")
-       Name(_UID, 0x00)
-       Name(_PCL, Package() { \_SB } )
+       OperationRegion (DLPC, SystemIO, 0x164c, 1)
+       Field(DLPC, ByteAcc, NoLock, Preserve)
+       {
+                   ,   3,
+               DSTA,   1,
+       }
 
-       Method(_DCK, 1, NotSerialized)
+       Device(DOCK)
        {
-               if (Arg0) {
-                  Sleep(250)
-                  /* connect dock */
-                  TRAP(SMI_DOCK_CONNECT)
-               } else {
-                  /* disconnect dock */
-                  TRAP(SMI_DOCK_DISCONNECT)
+               Name(_HID, "ACPI0003")
+               Name(_UID, 0x00)
+               Name(_PCL, Package() { \_SB } )
+
+               Method(_DCK, 1, NotSerialized)
+               {
+                       if (Arg0) {
+                          Sleep(250)
+                          /* connect dock */
+                          TRAP(SMI_DOCK_CONNECT)
+                       } else {
+                          /* disconnect dock */
+                          TRAP(SMI_DOCK_DISCONNECT)
+                       }
+
+                       Xor(Arg0, DSTA, Local0)
+                       Return (Local0)
                }
 
-               Xor(Arg0, DSTA, Local0)
-               Return (Local0)
+               Method(_STA, 0, NotSerialized)
+               {
+               Return (DSTA)
+               }
        }
+}
 
-       Method(_STA, 0, NotSerialized)
+Scope(\_SB.PCI0.LPCB.EC)
+{
+       Method(_Q18, 0, NotSerialized)
        {
-               Return (DSTA)
+              Notify(\_SB.DOCK, 3)
        }
 }
index 85ea4914ba7bd810fb84b42afd3bbce0fc9aada6..c3569e8c41fa57fa93012f7c3eeba76559e8fb01 100644 (file)
@@ -1,128 +1 @@
-/*
- * 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
- */
-
-#include "smi.h"
-Device(EC)
-{
-       Name (_HID, EISAID("PNP0C09"))
-       Name (_UID, 0)
-
-       Name (_GPE, 28)
-       Mutex (ECLK, 0)
-
-       OperationRegion(ERAM, EmbeddedControl, 0x00, 0x100)
-       Field (ERAM, ByteAcc, NoLock, Preserve)
-       {
-               Offset (0x05),
-                               HSPA, 1,
-               Offset (0x0C),
-                               LEDS, 8,        /* LED state */
-               Offset (0x3a),
-                               AMUT, 1,        /* Audio Mute */
-               Offset (0x3B),
-                                   , 1,
-                               KBLT, 1,        /* Keyboard Light */
-               Offset (0x4e),
-                              WAKE, 16,
-               Offset (0x78),
-                               TMP0, 8,        /* Thermal Zone 0 temperature */
-                               TMP1, 8,        /* Thermal Zone 1 temperature */
-               Offset (0x81),
-                               PAGE, 8         /* Information Page Selector */
-        }
-
-       Method (_CRS, 0)
-       {
-               Name (ECMD, ResourceTemplate()
-               {
-                       IO (Decode16, 0x62, 0x62, 1, 1)
-                       IO (Decode16, 0x66, 0x66, 1, 1)
-               })
-               Return (ECMD)
-       }
-
-       Method (LED, 1, NotSerialized)
-       {
-               Store(Arg0, LEDS)
-       }
-
-       Method (_INI, 0, NotSerialized)
-       {
-       }
-
-       Method (MUTE, 1, NotSerialized)
-       {
-               Store(Arg0, AMUT)
-       }
-
-       /* Sleep Button pressed */
-       Method(_Q13, 0, NotSerialized)
-       {
-               Notify(\_SB.PCI0.LPCB.EC.SLPB, 0x80)
-       }
-
-       /* Brightness up GPE */
-       Method(_Q14, 0, NotSerialized)
-       {
-               \DSPC.BRTU ()
-       }
-
-       /* Brightness down GPE */
-       Method(_Q15, 0, NotSerialized)
-       {
-               \DSPC.BRTD()
-       }
-
-       Method(_Q18, 0, NotSerialized)
-       {
-               Notify(\_SB.PCI0.LPCB.EC.DOCK, 3)
-       }
-
-       /* AC status change: present */
-       Method(_Q26, 0, NotSerialized)
-       {
-               Notify (AC, 0x80)
-       }
-
-       /* AC status change: not present */
-       Method(_Q27, 0, NotSerialized)
-       {
-               Notify (AC, 0x80)
-       }
-
-       Method(_Q2A, 0, NotSerialized)
-       {
-               Notify(\_SB.PCI0.LPCB.EC.LID, 0x80)
-       }
-
-       Method(_Q2B, 0, NotSerialized)
-       {
-               Notify(\_SB.PCI0.LPCB.EC.LID, 0x80)
-       }
-
-
-#include "ac.asl"
-#include "battery.asl"
-#include "sleepbutton.asl"
-#include "lid.asl"
-#include "beep.asl"
-#include "dock.asl"
-}
+#include <ec/lenovo/h8/acpi/ec.asl>
index 64e8e31e66344ca43370a57e795293d78837ba29..3aa961530283d04ef36f000132d8641bce185f72 100644 (file)
@@ -12,10 +12,10 @@ Scope (\_GPE)
        {
                if (GP13) {
                       Or(GIV1, 0x20, GIV1)
-                      Notify(\_SB.PCI0.LPCB.EC.DOCK, 3)
+                      Notify(\_SB.DOCK, 3)
                } else {
                       And(GIV1, 0xdf, GIV1)
-                      Notify(\_SB.PCI0.LPCB.EC.DOCK, 0)
+                      Notify(\_SB.DOCK, 0)
                }
        }
 }
diff --git a/src/mainboard/lenovo/x60/acpi/lid.asl b/src/mainboard/lenovo/x60/acpi/lid.asl
deleted file mode 100644 (file)
index 2dfa8d1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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
- */
-
-Field(ERAM, ByteAcc, NoLock, Preserve)
-{
-                Offset (0x32),
-                           , 2,
-                       WKLD, 1,
-               Offset (0x46),
-                           , 2,
-                       LIDS, 1
-}
-
-Device(LID)
-{
-       Name(_HID, "PNP0C0D")
-
-       Method(_LId, 0, NotSerialized)
-       {
-               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
deleted file mode 100644 (file)
index 09e88aa..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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
- */
-
-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
deleted file mode 100644 (file)
index 161be08..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.LPCB.EC.LED(0x00)
-                       /* suspend LED off */
-                       \_SB.PCI0.LPCB.EC.LED(0x07)
-               }
-
-               If (LEqual (Arg0, 1)) {
-                       /* working state */
-
-                       /* power LED on */
-                       \_SB.PCI0.LPCB.EC.LED(0x80)
-                       /* suspend LED off */
-                       \_SB.PCI0.LPCB.EC.LED(0x07)
-               }
-
-               If (LEqual (Arg0, 2)) {
-                       /* waking state */
-
-                       /* power LED om */
-                       \_SB.PCI0.LPCB.EC.LED(0x80)
-                       /* suspend LED blinking */
-                       \_SB.PCI0.LPCB.EC.LED(0xc7)
-               }
-
-               If (LEqual (Arg0, 3)) {
-                       /* sleep state */
-
-                       /* power LED off */
-                       \_SB.PCI0.LPCB.EC.LED(0x00)
-                       /* suspend LED on */
-                       \_SB.PCI0.LPCB.EC.LED(0x87)
-               }
-               
-               
-               
-       }
-}
diff --git a/src/mainboard/lenovo/x60/acpi/thermal.asl b/src/mainboard/lenovo/x60/acpi/thermal.asl
deleted file mode 100644 (file)
index 35b6f14..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-Scope(\_TZ)
-{
-       Method(C2K, 1, NotSerialized)
-       {
-               Multiply(Arg0, 10, Local0)
-               Add (Local0, 2732, Local0)
-               if (LLessEqual(Local0, 2732)) {
-                       Return (3000)
-               }
-
-               if (LGreater(Local0, 4012)) {
-                       Return (3000)
-               }
-               Return (Local0)
-       }
-
-       ThermalZone(THM0)
-       {
-               Method(_CRT, 0, NotSerialized) {
-                       Return (C2K(127))
-               }
-               Method(_TMP) {
-                       Return (C2K(\_SB.PCI0.LPCB.EC.TMP0))
-               }
-       }
-
-       ThermalZone(THM1)
-       {
-               Method(_CRT, 0, NotSerialized) {
-                       Return (C2K(99))
-               }
-
-               Method(_PSV, 0, NotSerialized) {
-                       Return (C2K(94))
-               }
-
-               Method(_TMP) {
-                       Return (C2K(\_SB.PCI0.LPCB.EC.TMP1))
-               }
-       }
-}
index 2817255e822a5b9d2d8a5b1f96fe293c31aad11e..f47fdaeab6583668e866e9a402fc40927d21272a 100644 (file)
@@ -86,13 +86,29 @@ chip northbridge/intel/i945
                                        device pnp ff.1 on # dummy
                                        end
                                end
-                               chip ec/acpi
+                               chip ec/lenovo/h8
                                        device pnp ff.2 on # dummy
                                                io 0x60 = 0x62
                                                io 0x62 = 0x66
                                                io 0x64 = 0x1600
                                                io 0x66 = 0x1604
                                        end
+
+                                       register "config0" = "0xa6"
+                                       register "config1" = "0x05"
+                                       register "config2" = "0xa0"
+                                       register "config3" = "0x05"
+
+                                       register "beepmask0" = "0xfe"
+                                       register "beepmask1" = "0x96"
+
+                                       register "event2_enable" = "0xff"
+                                       register "event3_enable" = "0xff"
+                                       register "event4_enable" = "0xf4"
+                                       register "event5_enable" = "0x3c"
+
+                                       register "wlan_enable" = "0x01"
+                                       register "trackpoint_enable" = "0x03"
                                end
                                chip superio/nsc/pc87382
                                        device pnp 164e.2 on # IR
index 3467a8b8bf0452a9b445330997a280e7b5f43235..905c94ac67794058492c4486b57068caa2240544 100644 (file)
@@ -40,10 +40,6 @@ DefinitionBlock(
        // mainboard specific devices
        #include "acpi/mainboard.asl"
 
-       // Thermal Zone
-       #include "acpi/thermal.asl"
-       // System status indicators
-       #include "acpi/systemstatus.asl"
        Scope (\_SB) {
                Device (PCI0)
                {
@@ -54,4 +50,7 @@ DefinitionBlock(
 
        /* Chipset specific sleep states */
        #include "../../../southbridge/intel/i82801gx/acpi/sleepstates.asl"
+
+       // Dock support code
+       #include "acpi/dock.asl"
 }
index c2aaaa93cf910dc6fdfea434f73136116095a4e7..15ed80861468f5044db9c2b64db474618023f391 100644 (file)
 #include <arch/io.h>
 #include <ec/lenovo/pmh7/pmh7.h>
 #include <ec/acpi/ec.h>
+#include <ec/lenovo/h8/h8.h>
 #include <northbridge/intel/i945/i945.h>
 
 static void backlight_enable(void)
 {
-       pmh7_register_set_bit(0x50, 5);
-}
-
-static void trackpoint_enable(void)
-{
-       ec_write(0x0b, 0x03);
-}
-
-static void wlan_enable(void)
-{
-       ec_write(0x3a, 0x20);
-}
-
-static void log_ec_version(void)
-{
-       unsigned char ecfw[9], c;
-       u16 fwvh, fwvl;
-       int i;
-
-       for(i = 0; i < 8; i++) {
-               c = ec_read(0xf0 + i);
-               if (c < 0x20 || c > 0x7f)
-                       break;
-               ecfw[i] = c;
-       }
-       ecfw[i] = '\0';
-
-       fwvh = ec_read(0xe9);
-       fwvl = ec_read(0xe8);
-
-       printk(BIOS_INFO, "EC Firmware ID %s, Version %d.%d%d%c\n", ecfw,
-              fwvh >> 4, fwvh & 0x0f, fwvl >> 4, 0x41 + (fwvl & 0xf));
+       pmh7_register_set_bit(0x50, 5);
 }
 
 static void mainboard_enable(device_t dev)
 {
        device_t dev0;
 
-       log_ec_version();
-
        backlight_enable();
-       trackpoint_enable();
-
-       /* FIXME: this should be ACPI's task
-        * but for now, enable it here */
-       wlan_enable();
-
-       /* enable ACPI events */
-       ec_write(0x00, 0xa6);
-       ec_write(0x01, 0x05);
-
-       ec_write(0x02, 0xa0);
-       ec_write(0x03, 0x05);
-
-       /* set mask of enabled beeps */
-       ec_write(0x04, 0xfe);
-       ec_write(0x05, 0x96);
-
-       /* Unknown, but required for hotkeys
-          Maybe a mask for enabled keys? */
-
-       ec_write(0x12, 0xff);
-       ec_write(0x13, 0xff);
-       ec_write(0x14, 0xf4);
-       ec_write(0x15, 0x3c);
 
        /* enable Audio */
-       ec_clr_bit(0x3a, 0);
+       h8_set_audio_mute(0);
 
        /* If we're resuming from suspend, blink suspend LED */
        dev0 = dev_find_slot(0, PCI_DEVFN(0,0));