Patchwork [1/2] EC: Add Lenovo H8EC

login
register
about
Submitter Sven Schnelle
Date 2011-04-10 15:45:48
Message ID <1302450349-22654-1-git-send-email-svens@stackframe.org>
Download mbox | patch
Permalink /patch/2863/
State Superseded
Headers show

Comments

Sven Schnelle - 2011-04-10 15:45:48
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>
---
 src/ec/lenovo/Kconfig                          |    1 +
 src/ec/lenovo/Makefile.inc                     |    1 +
 src/ec/lenovo/h8ec/Kconfig                     |    3 +
 src/ec/lenovo/h8ec/Makefile.inc                |    1 +
 src/ec/lenovo/h8ec/acpi/ac.asl                 |   44 ++++
 src/ec/lenovo/h8ec/acpi/battery.asl            |  296 ++++++++++++++++++++++++
 src/ec/lenovo/h8ec/acpi/beep.asl               |   32 +++
 src/ec/lenovo/h8ec/acpi/ec.asl                 |  122 ++++++++++
 src/ec/lenovo/h8ec/acpi/lid.asl                |   54 +++++
 src/ec/lenovo/h8ec/acpi/sleepbutton.asl        |   49 ++++
 src/ec/lenovo/h8ec/acpi/systemstatus.asl       |   63 +++++
 src/ec/lenovo/h8ec/acpi/thermal.asl            |   41 ++++
 src/ec/lenovo/h8ec/chip.h                      |   36 +++
 src/ec/lenovo/h8ec/h8ec.c                      |  129 ++++++++++
 src/ec/lenovo/h8ec/h8ec.h                      |  111 +++++++++
 src/ec/lenovo/pmh7/pmh7.c                      |    9 +
 src/ec/lenovo/pmh7/pmh7.h                      |    1 +
 src/mainboard/lenovo/x60/Kconfig               |    2 +-
 src/mainboard/lenovo/x60/acpi/ac.asl           |   44 ----
 src/mainboard/lenovo/x60/acpi/battery.asl      |  296 ------------------------
 src/mainboard/lenovo/x60/acpi/beep.asl         |   32 ---
 src/mainboard/lenovo/x60/acpi/dock.asl         |   56 +++--
 src/mainboard/lenovo/x60/acpi/ec.asl           |  129 +----------
 src/mainboard/lenovo/x60/acpi/gpe.asl          |    4 +-
 src/mainboard/lenovo/x60/acpi/lid.asl          |   54 -----
 src/mainboard/lenovo/x60/acpi/sleepbutton.asl  |   49 ----
 src/mainboard/lenovo/x60/acpi/systemstatus.asl |   66 ------
 src/mainboard/lenovo/x60/acpi/thermal.asl      |   41 ----
 src/mainboard/lenovo/x60/devicetree.cb         |   18 ++-
 src/mainboard/lenovo/x60/dsdt.asl              |    7 +-
 src/mainboard/lenovo/x60/mainboard.c           |   67 +-----
 31 files changed, 1054 insertions(+), 804 deletions(-)
 create mode 100644 src/ec/lenovo/h8ec/Kconfig
 create mode 100644 src/ec/lenovo/h8ec/Makefile.inc
 create mode 100644 src/ec/lenovo/h8ec/acpi/ac.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/battery.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/beep.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/ec.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/lid.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/sleepbutton.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/systemstatus.asl
 create mode 100644 src/ec/lenovo/h8ec/acpi/thermal.asl
 create mode 100644 src/ec/lenovo/h8ec/chip.h
 create mode 100644 src/ec/lenovo/h8ec/h8ec.c
 create mode 100644 src/ec/lenovo/h8ec/h8ec.h
 delete mode 100644 src/mainboard/lenovo/x60/acpi/ac.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/battery.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/beep.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/lid.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/sleepbutton.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/systemstatus.asl
 delete mode 100644 src/mainboard/lenovo/x60/acpi/thermal.asl

Patch

diff --git a/src/ec/lenovo/Kconfig b/src/ec/lenovo/Kconfig
index b564b62..bf9cef5 100644
--- a/src/ec/lenovo/Kconfig
+++ b/src/ec/lenovo/Kconfig
@@ -1 +1,2 @@ 
 source src/ec/lenovo/pmh7/Kconfig
+source src/ec/lenovo/h8ec/Kconfig
diff --git a/src/ec/lenovo/Makefile.inc b/src/ec/lenovo/Makefile.inc
index f9a3feb..fa87b73 100644
--- a/src/ec/lenovo/Makefile.inc
+++ b/src/ec/lenovo/Makefile.inc
@@ -1 +1,2 @@ 
 subdirs-$(CONFIG_EC_LENOVO_PMH7) += pmh7
+subdirs-$(CONFIG_EC_LENOVO_H8EC) += h8ec
diff --git a/src/ec/lenovo/h8ec/Kconfig b/src/ec/lenovo/h8ec/Kconfig
new file mode 100644
index 0000000..17b933c
--- /dev/null
+++ b/src/ec/lenovo/h8ec/Kconfig
@@ -0,0 +1,3 @@ 
+config EC_LENOVO_H8EC
+	select EC_ACPI
+	bool
diff --git a/src/ec/lenovo/h8ec/Makefile.inc b/src/ec/lenovo/h8ec/Makefile.inc
new file mode 100644
index 0000000..0dcc9db
--- /dev/null
+++ b/src/ec/lenovo/h8ec/Makefile.inc
@@ -0,0 +1 @@ 
+driver-y += h8ec.c
diff --git a/src/ec/lenovo/h8ec/acpi/ac.asl b/src/ec/lenovo/h8ec/acpi/ac.asl
new file mode 100644
index 0000000..cbc84b2
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/ac.asl
@@ -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/h8ec/acpi/battery.asl b/src/ec/lenovo/h8ec/acpi/battery.asl
new file mode 100644
index 0000000..7168581
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/battery.asl
@@ -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/h8ec/acpi/beep.asl b/src/ec/lenovo/h8ec/acpi/beep.asl
new file mode 100644
index 0000000..718f41b
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/beep.asl
@@ -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/h8ec/acpi/ec.asl b/src/ec/lenovo/h8ec/acpi/ec.asl
new file mode 100644
index 0000000..f09e557
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/ec.asl
@@ -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/h8ec/acpi/lid.asl b/src/ec/lenovo/h8ec/acpi/lid.asl
new file mode 100644
index 0000000..2dfa8d1
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/lid.asl
@@ -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/h8ec/acpi/sleepbutton.asl b/src/ec/lenovo/h8ec/acpi/sleepbutton.asl
new file mode 100644
index 0000000..09e88aa
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/sleepbutton.asl
@@ -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/h8ec/acpi/systemstatus.asl b/src/ec/lenovo/h8ec/acpi/systemstatus.asl
new file mode 100644
index 0000000..17e8ba7
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/systemstatus.asl
@@ -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/h8ec/acpi/thermal.asl b/src/ec/lenovo/h8ec/acpi/thermal.asl
new file mode 100644
index 0000000..35b6f14
--- /dev/null
+++ b/src/ec/lenovo/h8ec/acpi/thermal.asl
@@ -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/h8ec/chip.h b/src/ec/lenovo/h8ec/chip.h
new file mode 100644
index 0000000..1926874
--- /dev/null
+++ b/src/ec/lenovo/h8ec/chip.h
@@ -0,0 +1,36 @@ 
+#ifndef EC_LENOVO_H8EC_CHIP_H
+#define EC_LENOVO_H8EC_CHIP_H
+
+extern struct chip_operations ec_lenovo_h8ec_ops;
+struct ec_lenovo_h8ec_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/h8ec/h8ec.c b/src/ec/lenovo/h8ec/h8ec.c
new file mode 100644
index 0000000..df7edcf
--- /dev/null
+++ b/src/ec/lenovo/h8ec/h8ec.c
@@ -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 "h8ec.h"
+#include "chip.h"
+
+void h8ec_trackpoint_enable(int on)
+{
+	ec_write(H8EC_TRACKPOINT_CTRL,
+		 on ? H8EC_TRACKPOINT_ON : H8EC_TRACKPOINT_OFF);
+
+}
+
+void h8ec_wlan_enable(int on)
+{
+	if (on)
+		ec_set_bit(0x3a, 5);
+	else
+		ec_clr_bit(0x3a, 5);
+}
+
+static void h8ec_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 h8ec_set_audio_mute(int on)
+{
+	if (on)
+		ec_clr_bit(0x3a, 0);
+	else
+		ec_set_bit(0x3a, 1);
+}
+
+void h8ec_enable_event(int event)
+{
+	if (event < 0 || event > 127)
+		return;
+
+	ec_set_bit(0x10 + (event >> 3), event & 7);
+}
+
+void h8ec_disable_event(int event)
+{
+	if (event < 0 || event > 127)
+		return;
+
+	ec_clr_bit(0x10 + (event >> 3), event & 7);
+
+}
+
+static void h8ec_enable(device_t dev)
+{
+	struct ec_lenovo_h8ec_config *conf = dev->chip_info;
+	h8ec_log_ec_version();
+
+	ec_write(H8EC_CONFIG0, conf->config0);
+	ec_write(H8EC_CONFIG1, conf->config1);
+	ec_write(H8EC_CONFIG2, conf->config2);
+	ec_write(H8EC_CONFIG3, conf->config3);
+
+	ec_write(H8EC_SOUND_ENABLE0, conf->beepmask0);
+	ec_write(H8EC_SOUND_ENABLE1, conf->beepmask1);
+	ec_write(H8EC_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);
+
+	h8ec_wlan_enable(conf->wlan_enable);
+	h8ec_trackpoint_enable(conf->trackpoint_enable);
+
+}
+
+struct chip_operations ec_lenovo_h8ec_ops = {
+	CHIP_NAME("Lenovo H8 EC")
+	.enable_dev = h8ec_enable
+};
diff --git a/src/ec/lenovo/h8ec/h8ec.h b/src/ec/lenovo/h8ec/h8ec.h
new file mode 100644
index 0000000..3d30e8c
--- /dev/null
+++ b/src/ec/lenovo/h8ec/h8ec.h
@@ -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_H8EC_H
+#define EC_LENOVO_H8EC_H
+
+void h8ec_trackpoint_enable(int on);
+void h8ec_wlan_enable(int on);
+void h8ec_set_audio_mute(int on);
+void h8ec_enable_event(int event);
+void h8ec_disable_event(int event);
+
+/* EC registers */
+#define H8EC_CONFIG0 0x00
+#define H8EC_CONFIG0_EVENTS_ENABLE	0x02
+#define H8EC_CONFIG0_HOTKEY_ENABLE	0x04
+#define H8EC_CONFIG0_SMM_H8EC_ENABLE	0x20
+#define H8EC_CONFIG0_TC_ENABLE		0x80
+
+#define H8EC_CONFIG1 0x01
+#define H8EC_CONFIG1_BKLT_LID		0x01
+#define H8EC_CONFIG1_UBAY_PWR		0x20
+
+#define H8EC_CONFIG2 0x02
+#define H8EC_CONFIG2_USB_DOCK			0x01
+#define H8EC_CONFIG2_DOCK_SPEAKER_MUTE		0x02
+#define H8EC_CONFIG2_DOCK_SPEAKER_MUTE_POL	0x04
+
+#define H8EC_CONFIG3 0x03
+
+#define H8EC_SOUND_ENABLE0		0x04
+#define H8EC_SOUND_ENABLE1		0x05
+#define H8EC_SOUND_REG			0x06
+#define H8EC_SOUND_REPEAT			0x07
+
+#define H8EC_TRACKPOINT_CTRL		0x0B
+#define H8EC_TRACKPOINT_AUTO		0x01
+#define H8EC_TRACKPOINT_OFF		0x02
+#define H8EC_TRACKPOINT_ON		0x03
+
+#define H8EC_LED_CONTROL		0x0c
+#define H8EC_LED_CONTROL_OFF		0x00
+#define H8EC_LED_CONTROL_ON		0x80
+#define H8EC_LED_CONTROL_BLINK		0xc0
+
+#define H8EC_LED_CONTROL_POWER_LED	0x00
+#define H8EC_LED_CONTROL_BAT0_LED	0x01
+#define H8EC_LED_CONTROL_BAT1_LED	0x02
+#define H8EC_LED_CONTROL_UBAY_LED	0x04
+#define H8EC_LED_CONTROL_SUSPEND_LED	0x07
+#define H8EC_LED_CONTROL_DOCK_LED1	0x08
+#define H8EC_LED_CONTROL_DOCK_LED2	0x09
+
+/* Embedded controller events */
+#define H8EC_EVENT_FN_F1	0x10
+#define H8EC_EVENT_FN_F2	0x11
+#define H8EC_EVENT_FN_F3	0x12
+#define H8EC_EVENT_FN_F4	0x13
+#define H8EC_EVENT_FN_HOME	0x14
+#define H8EC_EVENT_FN_END	0x15
+#define H8EC_EVENT_FN_F7	0x16
+#define H8EC_EVENT_FN_F8	0x17
+#define H8EC_EVENT_FN_F9	0x18
+#define H8EC_EVENT_FN_THINKVANTAGE	0x19
+#define H8EC_EVENT_FN_F11	0x1a
+#define H8EC_EVENT_FN_F12	0x1b
+#define H8EC_EVENT_FN_1		0x1c
+#define H8EC_EVENT_FN_2		0x1d
+#define H8EC_EVENT_FN_PGUP	0x1f
+
+#define H8EC_EVENT_AC_ON	0x26
+#define H8EC_EVENT_AC_OFF	0x27
+
+#define H8EC_EVENT_PWRSW_PRESS	0x28
+#define H8EC_EVENT_PWRSW_RELEASE 0x29
+
+#define H8EC_EVENT_LIDSW_CLOSE	0x2a
+#define H8EC_EVENT_LIDSW_PUSH	0x2b
+
+#define H8EC_EVENT_UBAY_UNLOCK	0x2c
+#define H8EC_EVENT_UBAY_LOCK	0x2d
+
+#define H8EC_EVENT_KEYPRESS	0x33
+
+#define H8EC_EVENT_FN_PRESS	0x39
+
+#define H8EC_EVENT_BAT0		0x4a
+#define H8EC_EVENT_BAT0_STATE	0x4b
+
+#define H8EC_EVENT_BAT1		0x4c
+#define H8EC_EVENT_BAT1_STATE	0x4d
+
+#define H8EC_EVENT_FN_F5 0x64
+#define H8EC_EVENT_FN_F6 0x65
+#endif
diff --git a/src/ec/lenovo/pmh7/pmh7.c b/src/ec/lenovo/pmh7/pmh7.c
index a46e179..47573a9 100644
--- a/src/ec/lenovo/pmh7/pmh7.c
+++ b/src/ec/lenovo/pmh7/pmh7.c
@@ -56,6 +56,15 @@  void pmh7_register_write(int reg, int val)
 	outb(val, EC_LENOVO_PMH7_DATA);
 }
 
+void pmh7_backlight_enable(int on)
+{
+	if (on)
+		pmh7_register_set_bit(0x50, 5);
+	else
+		pmh7_register_clear_bit(0x50, 5);
+
+}
+
 static void enable_dev(device_t dev)
 {
 	struct resource *resource;
diff --git a/src/ec/lenovo/pmh7/pmh7.h b/src/ec/lenovo/pmh7/pmh7.h
index a4a61cc..8f4f5ab 100644
--- a/src/ec/lenovo/pmh7/pmh7.h
+++ b/src/ec/lenovo/pmh7/pmh7.h
@@ -31,4 +31,5 @@  void pmh7_register_clear_bit(int reg, int bit);
 char pmh7_register_read(int reg);
 void pmh7_register_write(int reg, int val);
 
+void pmh7_backlight_enable(int on);
 #endif
diff --git a/src/mainboard/lenovo/x60/Kconfig b/src/mainboard/lenovo/x60/Kconfig
index ebd2c1c..9befde2 100644
--- a/src/mainboard/lenovo/x60/Kconfig
+++ b/src/mainboard/lenovo/x60/Kconfig
@@ -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_H8EC
 	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
index cbc84b2..0000000
--- a/src/mainboard/lenovo/x60/acpi/ac.asl
+++ /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
index 7168581..0000000
--- a/src/mainboard/lenovo/x60/acpi/battery.asl
+++ /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
index 718f41b..0000000
--- a/src/mainboard/lenovo/x60/acpi/beep.asl
+++ /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)
-}
diff --git a/src/mainboard/lenovo/x60/acpi/dock.asl b/src/mainboard/lenovo/x60/acpi/dock.asl
index db61e05..d393f44 100644
--- a/src/mainboard/lenovo/x60/acpi/dock.asl
+++ b/src/mainboard/lenovo/x60/acpi/dock.asl
@@ -21,35 +21,47 @@ 
 
 #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)
 	}
 }
diff --git a/src/mainboard/lenovo/x60/acpi/ec.asl b/src/mainboard/lenovo/x60/acpi/ec.asl
index 85ea491..878dd03 100644
--- a/src/mainboard/lenovo/x60/acpi/ec.asl
+++ b/src/mainboard/lenovo/x60/acpi/ec.asl
@@ -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/h8ec/acpi/ec.asl>
diff --git a/src/mainboard/lenovo/x60/acpi/gpe.asl b/src/mainboard/lenovo/x60/acpi/gpe.asl
index 64e8e31..3aa9615 100644
--- a/src/mainboard/lenovo/x60/acpi/gpe.asl
+++ b/src/mainboard/lenovo/x60/acpi/gpe.asl
@@ -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
index 2dfa8d1..0000000
--- a/src/mainboard/lenovo/x60/acpi/lid.asl
+++ /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
index 09e88aa..0000000
--- a/src/mainboard/lenovo/x60/acpi/sleepbutton.asl
+++ /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
index 161be08..0000000
--- a/src/mainboard/lenovo/x60/acpi/systemstatus.asl
+++ /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
index 35b6f14..0000000
--- a/src/mainboard/lenovo/x60/acpi/thermal.asl
+++ /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))
-		}
-	}
-}
diff --git a/src/mainboard/lenovo/x60/devicetree.cb b/src/mainboard/lenovo/x60/devicetree.cb
index 2817255..cdd1eae 100644
--- a/src/mainboard/lenovo/x60/devicetree.cb
+++ b/src/mainboard/lenovo/x60/devicetree.cb
@@ -86,13 +86,29 @@  chip northbridge/intel/i945
 					device pnp ff.1 on # dummy
 					end
 				end
-				chip ec/acpi
+				chip ec/lenovo/h8ec
 					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
diff --git a/src/mainboard/lenovo/x60/dsdt.asl b/src/mainboard/lenovo/x60/dsdt.asl
index 3467a8b..905c94a 100644
--- a/src/mainboard/lenovo/x60/dsdt.asl
+++ b/src/mainboard/lenovo/x60/dsdt.asl
@@ -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"
 }
diff --git a/src/mainboard/lenovo/x60/mainboard.c b/src/mainboard/lenovo/x60/mainboard.c
index c2aaaa9..616fdc5 100644
--- a/src/mainboard/lenovo/x60/mainboard.c
+++ b/src/mainboard/lenovo/x60/mainboard.c
@@ -32,78 +32,17 @@ 
 #include <arch/io.h>
 #include <ec/lenovo/pmh7/pmh7.h>
 #include <ec/acpi/ec.h>
+#include <ec/lenovo/h8ec/h8ec.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));
-}
-
 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);
+	pmh7_backlight_enable(1);
 
 	/* enable Audio */
-	ec_clr_bit(0x3a, 0);
+	h8ec_set_audio_mute(0);
 
 	/* If we're resuming from suspend, blink suspend LED */
 	dev0 = dev_find_slot(0, PCI_DEVFN(0,0));