aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Schnelle <svens@stackframe.org>2011-04-11 19:43:32 +0000
committerSven Schnelle <svens@stackframe.org>2011-04-11 19:43:32 +0000
commitffcd1439f36ec27388139b9d5a379dd4294417b8 (patch)
treeb3694c7283ed4635497f4b7e6525684a5ffe7256
parent18b02360b9dba6ca61538923e27b5ba68a2b3299 (diff)
downloadcoreboot-ffcd1439f36ec27388139b9d5a379dd4294417b8.tar.gz
coreboot-ffcd1439f36ec27388139b9d5a379dd4294417b8.tar.xz
coreboot-ffcd1439f36ec27388139b9d5a379dd4294417b8.zip
EC: Add Lenovo H8
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
-rw-r--r--src/ec/lenovo/Kconfig1
-rw-r--r--src/ec/lenovo/Makefile.inc1
-rw-r--r--src/ec/lenovo/h8/Kconfig3
-rw-r--r--src/ec/lenovo/h8/Makefile.inc1
-rw-r--r--src/ec/lenovo/h8/acpi/ac.asl (renamed from src/mainboard/lenovo/x60/acpi/ac.asl)0
-rw-r--r--src/ec/lenovo/h8/acpi/battery.asl (renamed from src/mainboard/lenovo/x60/acpi/battery.asl)0
-rw-r--r--src/ec/lenovo/h8/acpi/beep.asl (renamed from src/mainboard/lenovo/x60/acpi/beep.asl)0
-rw-r--r--src/ec/lenovo/h8/acpi/ec.asl122
-rw-r--r--src/ec/lenovo/h8/acpi/lid.asl (renamed from src/mainboard/lenovo/x60/acpi/lid.asl)0
-rw-r--r--src/ec/lenovo/h8/acpi/sleepbutton.asl (renamed from src/mainboard/lenovo/x60/acpi/sleepbutton.asl)0
-rw-r--r--src/ec/lenovo/h8/acpi/systemstatus.asl (renamed from src/mainboard/lenovo/x60/acpi/systemstatus.asl)3
-rw-r--r--src/ec/lenovo/h8/acpi/thermal.asl (renamed from src/mainboard/lenovo/x60/acpi/thermal.asl)0
-rw-r--r--src/ec/lenovo/h8/chip.h36
-rw-r--r--src/ec/lenovo/h8/h8.c129
-rw-r--r--src/ec/lenovo/h8/h8.h111
-rw-r--r--src/mainboard/lenovo/x60/Kconfig2
-rw-r--r--src/mainboard/lenovo/x60/acpi/dock.asl56
-rw-r--r--src/mainboard/lenovo/x60/acpi/ec.asl129
-rw-r--r--src/mainboard/lenovo/x60/acpi/gpe.asl4
-rw-r--r--src/mainboard/lenovo/x60/devicetree.cb18
-rw-r--r--src/mainboard/lenovo/x60/dsdt.asl7
-rw-r--r--src/mainboard/lenovo/x60/mainboard.c62
22 files changed, 465 insertions, 220 deletions
diff --git a/src/ec/lenovo/Kconfig b/src/ec/lenovo/Kconfig
index b564b62b0..73f11caa3 100644
--- a/src/ec/lenovo/Kconfig
+++ b/src/ec/lenovo/Kconfig
@@ -1 +1,2 @@
+source src/ec/lenovo/h8/Kconfig
source src/ec/lenovo/pmh7/Kconfig
diff --git a/src/ec/lenovo/Makefile.inc b/src/ec/lenovo/Makefile.inc
index f9a3feb4a..8865030ea 100644
--- a/src/ec/lenovo/Makefile.inc
+++ b/src/ec/lenovo/Makefile.inc
@@ -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
index 000000000..07bdb11a0
--- /dev/null
+++ b/src/ec/lenovo/h8/Kconfig
@@ -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
index 000000000..86bc6632a
--- /dev/null
+++ b/src/ec/lenovo/h8/Makefile.inc
@@ -0,0 +1 @@
+driver-y += h8.c
diff --git a/src/mainboard/lenovo/x60/acpi/ac.asl b/src/ec/lenovo/h8/acpi/ac.asl
index cbc84b236..cbc84b236 100644
--- a/src/mainboard/lenovo/x60/acpi/ac.asl
+++ b/src/ec/lenovo/h8/acpi/ac.asl
diff --git a/src/mainboard/lenovo/x60/acpi/battery.asl b/src/ec/lenovo/h8/acpi/battery.asl
index 716858160..716858160 100644
--- a/src/mainboard/lenovo/x60/acpi/battery.asl
+++ b/src/ec/lenovo/h8/acpi/battery.asl
diff --git a/src/mainboard/lenovo/x60/acpi/beep.asl b/src/ec/lenovo/h8/acpi/beep.asl
index 718f41bd3..718f41bd3 100644
--- a/src/mainboard/lenovo/x60/acpi/beep.asl
+++ b/src/ec/lenovo/h8/acpi/beep.asl
diff --git a/src/ec/lenovo/h8/acpi/ec.asl b/src/ec/lenovo/h8/acpi/ec.asl
new file mode 100644
index 000000000..98abfc110
--- /dev/null
+++ b/src/ec/lenovo/h8/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/mainboard/lenovo/x60/acpi/lid.asl b/src/ec/lenovo/h8/acpi/lid.asl
index 2dfa8d116..2dfa8d116 100644
--- a/src/mainboard/lenovo/x60/acpi/lid.asl
+++ b/src/ec/lenovo/h8/acpi/lid.asl
diff --git a/src/mainboard/lenovo/x60/acpi/sleepbutton.asl b/src/ec/lenovo/h8/acpi/sleepbutton.asl
index 09e88aa74..09e88aa74 100644
--- a/src/mainboard/lenovo/x60/acpi/sleepbutton.asl
+++ b/src/ec/lenovo/h8/acpi/sleepbutton.asl
diff --git a/src/mainboard/lenovo/x60/acpi/systemstatus.asl b/src/ec/lenovo/h8/acpi/systemstatus.asl
index 161be083a..17e8ba799 100644
--- a/src/mainboard/lenovo/x60/acpi/systemstatus.asl
+++ b/src/ec/lenovo/h8/acpi/systemstatus.asl
@@ -59,8 +59,5 @@ Scope (\_SI)
/* suspend LED on */
\_SB.PCI0.LPCB.EC.LED(0x87)
}
-
-
-
}
}
diff --git a/src/mainboard/lenovo/x60/acpi/thermal.asl b/src/ec/lenovo/h8/acpi/thermal.asl
index 35b6f145b..35b6f145b 100644
--- a/src/mainboard/lenovo/x60/acpi/thermal.asl
+++ b/src/ec/lenovo/h8/acpi/thermal.asl
diff --git a/src/ec/lenovo/h8/chip.h b/src/ec/lenovo/h8/chip.h
new file mode 100644
index 000000000..d50465415
--- /dev/null
+++ b/src/ec/lenovo/h8/chip.h
@@ -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
index 000000000..bc0ddde84
--- /dev/null
+++ b/src/ec/lenovo/h8/h8.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 "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
index 000000000..cdb22cace
--- /dev/null
+++ b/src/ec/lenovo/h8/h8.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_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
diff --git a/src/mainboard/lenovo/x60/Kconfig b/src/mainboard/lenovo/x60/Kconfig
index ebd2c1c7b..c4b2f63cf 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_H8
select BOARD_HAS_FADT
select HAVE_OPTION_TABLE
select HAVE_PIRQ_TABLE
diff --git a/src/mainboard/lenovo/x60/acpi/dock.asl b/src/mainboard/lenovo/x60/acpi/dock.asl
index db61e059a..d393f44f3 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 85ea4914b..c3569e8c4 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/h8/acpi/ec.asl>
diff --git a/src/mainboard/lenovo/x60/acpi/gpe.asl b/src/mainboard/lenovo/x60/acpi/gpe.asl
index 64e8e31e6..3aa961530 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/devicetree.cb b/src/mainboard/lenovo/x60/devicetree.cb
index 2817255e8..f47fdaeab 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/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
diff --git a/src/mainboard/lenovo/x60/dsdt.asl b/src/mainboard/lenovo/x60/dsdt.asl
index 3467a8b8b..905c94ac6 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 c2aaaa93c..15ed80861 100644
--- a/src/mainboard/lenovo/x60/mainboard.c
+++ b/src/mainboard/lenovo/x60/mainboard.c
@@ -32,78 +32,22 @@
#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));