diff options
author | Sven Schnelle <svens@stackframe.org> | 2011-06-12 14:35:11 +0200 |
---|---|---|
committer | Sven Schnelle <svens@stackframe.org> | 2011-06-15 08:51:18 +0200 |
commit | 4297a9a101f342ed9699848c8d55f26f78b3816c (patch) | |
tree | 4886f6f35e25238a418699d7f5bf4ee5786ccb54 /src/mainboard | |
parent | d29e5bb9335a7d185480a8a780b619d3a3151f11 (diff) |
X60: trigger save cmos on volume/brightness change
Change-Id: I020e06bc311c4e4327c9d3cf2c379dc8fe070a7a
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-on: http://review.coreboot.org/25
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/mainboard')
-rw-r--r-- | src/mainboard/lenovo/x60/acpi/ec.asl | 23 | ||||
-rw-r--r-- | src/mainboard/lenovo/x60/acpi/video.asl | 4 | ||||
-rw-r--r-- | src/mainboard/lenovo/x60/cmos.layout | 1 | ||||
-rw-r--r-- | src/mainboard/lenovo/x60/mainboard_smi.c | 25 | ||||
-rw-r--r-- | src/mainboard/lenovo/x60/smi.h | 1 |
5 files changed, 53 insertions, 1 deletions
diff --git a/src/mainboard/lenovo/x60/acpi/ec.asl b/src/mainboard/lenovo/x60/acpi/ec.asl index c3569e8c41..5c04339725 100644 --- a/src/mainboard/lenovo/x60/acpi/ec.asl +++ b/src/mainboard/lenovo/x60/acpi/ec.asl @@ -1 +1,24 @@ #include <ec/lenovo/h8/acpi/ec.asl> + +Scope(\_SB.PCI0.LPCB.EC) +{ + /* Volume down */ + Method(_Q1C, 0, NotSerialized) + { + Trap(SMI_SAVE_CMOS) + } + + /* Volume up */ + Method(_Q1D, 0, NotSerialized) + { + Trap(SMI_SAVE_CMOS) + } + + /* Mute key pressed */ + Method(_Q1E, 0, NotSerialized) + { + Trap(SMI_SAVE_CMOS) + } + + +} diff --git a/src/mainboard/lenovo/x60/acpi/video.asl b/src/mainboard/lenovo/x60/acpi/video.asl index c2f9dfb459..b38d82b6a5 100644 --- a/src/mainboard/lenovo/x60/acpi/video.asl +++ b/src/mainboard/lenovo/x60/acpi/video.asl @@ -19,6 +19,8 @@ * MA 02110-1301 USA */ +#include "smi.h" + Device (DSPC) { Name (_ADR, 0x00020001) @@ -36,6 +38,7 @@ Device (DSPC) { Subtract(Local0, 16, Local0) Store(Local0, BRTC) + Trap(SMI_SAVE_CMOS) } } @@ -46,6 +49,7 @@ Device (DSPC) { Add (Local0, 16, Local0) Store(Local0, BRTC) + Trap(SMI_SAVE_CMOS) } } } diff --git a/src/mainboard/lenovo/x60/cmos.layout b/src/mainboard/lenovo/x60/cmos.layout index 1875e599e6..a1575137c7 100644 --- a/src/mainboard/lenovo/x60/cmos.layout +++ b/src/mainboard/lenovo/x60/cmos.layout @@ -108,6 +108,7 @@ entries 1052 4 r 0 C1DRT1 1064 8 h 0 volume +1072 8 h 0 tft_brightness # ----------------------------------------------------------------- enumerations diff --git a/src/mainboard/lenovo/x60/mainboard_smi.c b/src/mainboard/lenovo/x60/mainboard_smi.c index d13055ee70..769432f618 100644 --- a/src/mainboard/lenovo/x60/mainboard_smi.c +++ b/src/mainboard/lenovo/x60/mainboard_smi.c @@ -25,6 +25,8 @@ #include <cpu/x86/smm.h> #include "southbridge/intel/i82801gx/nvs.h" #include <ec/acpi/ec.h> +#include <pc80/mc146818rtc.h> +#include <ec/lenovo/h8/h8.h> #include "dock.h" #include "smi.h" @@ -38,7 +40,25 @@ static void mainboard_smm_init(void) printk(BIOS_DEBUG, "initializing SMI\n"); /* Enable 0x1600/0x1600 register pair */ ec_set_bit(0x00, 0x05); - ec_set_ports(0x1604, 0x1600); +} + +static void mainboard_smi_save_cmos(void) +{ + u8 val; + u8 tmp70, tmp72, tmpcf8; + + tmp70 = inb(0x70); + tmp72 = inb(0x72); + tmpcf8 = inl(0xcf8); + + val = pci_read_config8(PCI_DEV(0, 2, 1), 0xf4); + set_option("tft_brightness", &val); + val = ec_read(H8_VOLUME_CONTROL); + set_option("volume", &val); + + outb(tmp70, 0x70); + outb(tmp72, 0x72); + outb(tmpcf8, 0xcf8); } int mainboard_io_trap_handler(int smif) @@ -67,6 +87,9 @@ int mainboard_io_trap_handler(int smif) ec_write(0x0c, 0x08); break; + case SMI_SAVE_CMOS: + mainboard_smi_save_cmos(); + break; default: return 0; } diff --git a/src/mainboard/lenovo/x60/smi.h b/src/mainboard/lenovo/x60/smi.h index 6eb840256a..ad096b9cb9 100644 --- a/src/mainboard/lenovo/x60/smi.h +++ b/src/mainboard/lenovo/x60/smi.h @@ -3,5 +3,6 @@ #define SMI_DOCK_CONNECT 0x01 #define SMI_DOCK_DISCONNECT 0x02 +#define SMI_SAVE_CMOS 0x03 #endif |