ec/starlabs: Add standardised ITE EC support
Add EC support that supports different Q Events and EC memory. Created from the ITE IT5570E and IT8987E datasheets, all using data port 0x4e. Tested with Ubuntu 20.04.3 and Windows 10 on: * StarBook Mk V (TGL + IT5570E): * ITE Firmware 1.00 * Merlin Firmware 1.00 * LabTop Mk IV (CML + IT8987E): * ITE Firmware 1.04 * LabTop Mk III (KBL + IT8987E): * ITE Firmware 3.12 Signed-off-by: Sean Rhodes <sean@starlabs.systems> Change-Id: I8023c26de23c874c84106fda96e64dcfa0c5ba32 Reviewed-on: https://review.coreboot.org/c/coreboot/+/58343 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Andy Pont <andy.pont@sdcsystems.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
6973a3e7c4
commit
296994bec8
|
@ -0,0 +1,57 @@
|
|||
## SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
config EC_STARLABS_ITE
|
||||
bool
|
||||
select EC_ACPI
|
||||
help
|
||||
Interface to ITE embedded controller principally in Star Labs notebooks.
|
||||
Works with closed-source ITE firmware versions:
|
||||
TGL - 1.00 or later
|
||||
CML - 1.04 or later
|
||||
KBL - 3.12 or later
|
||||
And open-source Merlin firmware version 1.00 or later
|
||||
|
||||
config EC_STARLABS_NEED_ITE_BIN
|
||||
bool
|
||||
depends on EC_STARLABS_ITE
|
||||
help
|
||||
Select if the mainboard requires EC firmware in the main flash chip.
|
||||
|
||||
config EC_STARLABS_ADD_ITE_BIN
|
||||
bool "Add Star Labs EC binary file"
|
||||
default n
|
||||
depends on EC_STARLABS_NEED_ITE_BIN
|
||||
help
|
||||
Select to add an EC firmware binary into the coreboot image. EC firmware
|
||||
is necessary, flashing a coreboot image without EC firmware will render
|
||||
your laptop unusable.
|
||||
|
||||
config EC_STARLABS_ITE_BIN_PATH
|
||||
string "Star Labs EC binary file path"
|
||||
depends on EC_STARLABS_ADD_ITE_BIN
|
||||
|
||||
config EC_STARLABS_KBL_LEVELS
|
||||
bool
|
||||
default n
|
||||
depends on EC_STARLABS_ITE
|
||||
help
|
||||
Select if the mainboard supports multiple levels of brightness for the keyboard.
|
||||
|
||||
config EC_STARLABS_FAN
|
||||
bool
|
||||
default n
|
||||
depends on EC_STARLABS_ITE
|
||||
help
|
||||
Select if the mainboard has a fan.
|
||||
|
||||
config EC_STARLABS_MERLIN
|
||||
bool "Use open-source Merlin EC Firmware"
|
||||
default n
|
||||
depends on EC_STARLABS_ITE
|
||||
help
|
||||
Use open source embedded controller firmware. Both firmwares have the
|
||||
same features but differ in licensing and compilers.
|
||||
|
||||
config EC_VARIANT_DIR
|
||||
string
|
||||
default "merlin" if EC_STARLABS_MERLIN
|
|
@ -0,0 +1,28 @@
|
|||
## SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
ifeq ($(CONFIG_EC_STARLABS_ITE),y)
|
||||
|
||||
PHONY+=add_ite_fw
|
||||
INTERMEDIATE+=add_ite_fw
|
||||
|
||||
EC_VARIANT_DIR := $(call strip_quotes, $(CONFIG_EC_VARIANT_DIR))
|
||||
CPPFLAGS_common += -I$(src)/ec/starlabs/merlin/variants/$(EC_VARIANT_DIR)
|
||||
|
||||
all-y += ec.c
|
||||
|
||||
ifeq ($(CONFIG_EC_STARLABS_NEED_ITE_BIN),y)
|
||||
ifeq ($(CONFIG_EC_STARLABS_ADD_ITE_BIN),y)
|
||||
add_ite_fw: $(obj)/coreboot.pre
|
||||
$(CBFSTOOL) $(obj)/coreboot.pre write -r EC -f $(CONFIG_EC_STARLABS_ITE_BIN_PATH) -u
|
||||
else
|
||||
files_added:: warn_no_ite_fw
|
||||
|
||||
PHONY+=warn_no_ite_fw
|
||||
warn_no_ite_fw:
|
||||
printf "\n\t** WARNING **\n"
|
||||
printf "coreboot has been built without the ITE EC Firmware.\n"
|
||||
printf "Do not flash this image. Your laptop's power button\n"
|
||||
printf "may not respond when you press it.\n\n"
|
||||
endif
|
||||
endif
|
||||
endif
|
|
@ -0,0 +1,21 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Device (ADP1)
|
||||
{
|
||||
Name (_HID, "ACPI0003")
|
||||
Method (_STA)
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
Method (_PSR, 0)
|
||||
{
|
||||
PWRS = ECPS & 0x01
|
||||
Return(PWRS)
|
||||
}
|
||||
Method (_PCL, 0)
|
||||
{
|
||||
Return (
|
||||
Package() { _SB }
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Device (BAT0)
|
||||
{
|
||||
Name (_HID, EisaId("PNP0C0A"))
|
||||
Name (_UID, 0)
|
||||
Method (_STA, 0, NotSerialized)
|
||||
{
|
||||
// Battery Status
|
||||
// 0x80 BIT1 0x01 = Present
|
||||
// 0x80 BIT1 0x00 = Not Present
|
||||
If(ECPS & 0x02)
|
||||
{
|
||||
Return(0x1F)
|
||||
}
|
||||
Return(0x0F)
|
||||
}
|
||||
Name (BPKG, Package(13)
|
||||
{
|
||||
1, // 0: Power Unit
|
||||
0xFFFFFFFF, // 1: Design Capacity
|
||||
0xFFFFFFFF, // 2: Last Full Charge Capacity
|
||||
1, // 3: Battery Technology(Rechargeable)
|
||||
0xFFFFFFFF, // 4: Design Voltage 10.8V
|
||||
0, // 5: Design capacity of warning
|
||||
0, // 6: Design capacity of low
|
||||
100, // 7: Battery capacity granularity 1
|
||||
0, // 8: Battery capacity granularity 2
|
||||
"597077-3S", // 9: Model Number
|
||||
"3ICP6/70/77", // 10: Serial Number
|
||||
"Real", // 11: Battery Type
|
||||
"DGFGE" // 12: OEM Information
|
||||
})
|
||||
Method (_BIF, 0, Serialized)
|
||||
{
|
||||
BPKG[1] = B1DC
|
||||
BPKG[2] = B1FC
|
||||
BPKG[4] = B1DV
|
||||
If(B1FC)
|
||||
{
|
||||
BPKG[5] = B1FC / 10
|
||||
BPKG[6] = B1FC / 100
|
||||
BPKG[7] = B1DC / 100
|
||||
}
|
||||
Return(BPKG)
|
||||
}
|
||||
Name (PKG1, Package (4)
|
||||
{
|
||||
0xFFFFFFFF, // Battery State
|
||||
0xFFFFFFFF, // Battery Present Rate
|
||||
0xFFFFFFFF, // Battery Remaining Capacity
|
||||
0xFFFFFFFF, // Battery Present Voltage
|
||||
})
|
||||
Method (_BST, 0, NotSerialized)
|
||||
{
|
||||
PKG1[0] = (B1ST & 0x07)
|
||||
PKG1[1] = B1PR
|
||||
PKG1[2] = B1RC
|
||||
PKG1[3] = B1PV
|
||||
Return(PKG1)
|
||||
}
|
||||
Method (_PCL, 0, NotSerialized)
|
||||
{
|
||||
Return (
|
||||
Package() { _SB }
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (CMOS, SystemIO, 0x70, 0x2)
|
||||
Field (CMOS, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
IND1, 8,
|
||||
DAT1, 8,
|
||||
}
|
||||
|
||||
IndexField (IND1, DAT1, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
Offset (0x4b),
|
||||
KLTC, 8, // Keyboard Backlight Timeout
|
||||
FCLS, 8, // Ctrl Fn Reverse (make keyboard Apple-like)
|
||||
MXCH, 8, // Max Charge Level
|
||||
FNMD, 8, // Fan Mode
|
||||
}
|
||||
|
||||
OperationRegion (CMS2, SystemIO, 0x72, 0x2)
|
||||
Field (CMS2, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
IND2, 8,
|
||||
DAT2, 8,
|
||||
}
|
||||
|
||||
IndexField (IND2, DAT2, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
Offset (0x80),
|
||||
FLKS, 8, // Function Lock State
|
||||
TPLS, 8, // Trackpad State
|
||||
KLBC, 8, // Keyboard Backlight Brightness
|
||||
KLSC, 8, // Keyboard Backlight State
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include "ubtc.asl"
|
||||
|
||||
Scope (\_SB.PCI0.LPCB)
|
||||
{
|
||||
#include "cmos.asl"
|
||||
|
||||
Device (EC)
|
||||
{
|
||||
Name (_HID, EisaId ("PNP0C09"))
|
||||
Name (_UID, 0x01)
|
||||
Name (_GPE, EC_GPE_SCI)
|
||||
Name (ECAV, 0x00)
|
||||
Name (ECTK, 0x01)
|
||||
Name (B2ST, 0x00)
|
||||
Name (CFAN, 0x00)
|
||||
Name (CMDR, 0x00)
|
||||
Name (DOCK, 0x00)
|
||||
Name (PLMX, 0x00)
|
||||
Name (PECH, 0x00)
|
||||
Name (PECL, 0x00)
|
||||
Name (PENV, 0x00)
|
||||
Name (PINV, 0x00)
|
||||
Name (PPSH, 0x00)
|
||||
Name (PPSL, 0x00)
|
||||
Name (PSTP, 0x00)
|
||||
Name (RPWR, 0x00)
|
||||
Name (VPWR, 0x00)
|
||||
Name (WTMS, 0x00)
|
||||
Name (AWT2, 0x00)
|
||||
Name (AWT1, 0x00)
|
||||
Name (AWT0, 0x00)
|
||||
Name (DLED, 0x00)
|
||||
Name (SPT2, 0x00)
|
||||
Name (PB10, 0x00)
|
||||
Name (IWCW, 0x00)
|
||||
Name (IWCR, 0x00)
|
||||
Name (PVOL, 0x00)
|
||||
Mutex (ECMT, 0x00)
|
||||
|
||||
Name(BFFR, ResourceTemplate()
|
||||
{
|
||||
IO(Decode16, 0x0062, 0x0062, 0x00, 0x01)
|
||||
IO(Decode16, 0x0066, 0x0066, 0x00, 0x01)
|
||||
})
|
||||
|
||||
Method (_CRS, 0, Serialized)
|
||||
{
|
||||
|
||||
Return(BFFR)
|
||||
}
|
||||
|
||||
Method (_STA, 0, NotSerialized)
|
||||
{
|
||||
\LIDS = 0x03
|
||||
Return (0x0F)
|
||||
}
|
||||
|
||||
OperationRegion (SIPR, SystemIO, 0xB2, 0x1)
|
||||
Field (SIPR, ByteAcc, Lock, Preserve) {
|
||||
SMB2, 8
|
||||
}
|
||||
|
||||
#include "emem.asl"
|
||||
|
||||
// ECRD (Embedded Controller Read Method)
|
||||
//
|
||||
// Handle all commands sent to EC by BIOS
|
||||
//
|
||||
// Arguments:
|
||||
// Arg0 = Object to Read
|
||||
//
|
||||
// Return Value:
|
||||
// Read Value
|
||||
//
|
||||
Method (ECRD, 1, Serialized, 0, IntObj, FieldUnitObj)
|
||||
{
|
||||
//
|
||||
// Check for ECDT support, set ECAV to One if ECDT is supported by OS
|
||||
// Only check once at beginning since ECAV might be clear later in certain conditions
|
||||
//
|
||||
If (ECTK) {
|
||||
If (_REV >= 0x02) {
|
||||
ECAV = 0x01
|
||||
}
|
||||
ECTK = 0x00 // Clear flag for checking once only
|
||||
}
|
||||
|
||||
Local0 = Acquire (ECMT, 1000) // Save Acquired Result
|
||||
If (Local0 == 0x00) // Check for Mutex Acquisition
|
||||
{
|
||||
If (ECAV) {
|
||||
Local1 = DerefOf (Arg0) // Execute Read from EC
|
||||
Release (ECMT)
|
||||
Return (Local1)
|
||||
} Else {
|
||||
Release (ECMT)
|
||||
}
|
||||
}
|
||||
Return(0) // Return in case Arg0 doesn't exist
|
||||
}
|
||||
|
||||
// ECWR (Embedded Controller Write Method)
|
||||
//
|
||||
// Handle all commands sent to EC by BIOS
|
||||
//
|
||||
// Arguments:
|
||||
// Arg0 = Value to Write
|
||||
// Arg1 = Object to Write to
|
||||
//
|
||||
// Return Value:
|
||||
// None
|
||||
//
|
||||
Method (ECWR, 2, Serialized,,,{IntObj, FieldUnitObj})
|
||||
{
|
||||
Local0 = Acquire (ECMT, 1000) // Save Acquired Result
|
||||
If (Local0 == 0x00) // Check for Mutex Acquisition
|
||||
{
|
||||
If (ECAV) {
|
||||
Arg1 = Arg0 // Execute Write to EC
|
||||
Local1 = 0x00
|
||||
While (1) {
|
||||
If (Arg0 == DerefOf (Arg1)) {
|
||||
Break
|
||||
}
|
||||
Sleep (1)
|
||||
Arg1 = Arg0
|
||||
Add (Local1, 1, Local1)
|
||||
If (Local1 == 0x03) {
|
||||
Break
|
||||
}
|
||||
}
|
||||
}
|
||||
Release (ECMT)
|
||||
}
|
||||
}
|
||||
|
||||
#include "ac.asl"
|
||||
#include "battery.asl"
|
||||
#include "events.asl"
|
||||
#include "lid.asl"
|
||||
#include "typec.asl"
|
||||
|
||||
Method (_REG, 2, NotSerialized)
|
||||
{
|
||||
If ((Arg0 == 0x03) && (Arg1 == 0x01))
|
||||
{
|
||||
// Load EC Driver
|
||||
ECAV = 0x01
|
||||
|
||||
// Initialise the Lid State
|
||||
\LIDS = LSTE
|
||||
|
||||
// Initialise the OS State
|
||||
OSFG = 0x01
|
||||
|
||||
// Initialise the Power State
|
||||
PWRS = (ECRD (RefOf(ECPS)) & 0x01)
|
||||
|
||||
// Inform the platform code
|
||||
PNOT()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,371 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Device (HIDD) // HID Device
|
||||
{
|
||||
Name (_HID, "INTC1051") // Intel Ultrabook HID Platform Event Driver.
|
||||
Name (HBSY, 0) // HID Busy
|
||||
Name (HIDX, 0) // HID Index
|
||||
Name (HMDE, 0) // HID Mode
|
||||
Name (HRDY, 0) // HID Ready
|
||||
Name (BTLD, 0) // Button Driver Loaded
|
||||
Name (BTS1, 0) // Button Status
|
||||
Method (_STA, 0, Serialized) // Status Method
|
||||
{
|
||||
// Usually, ACPI will check if the OS is 0x07DD (2013 - Windows 8.1ish)
|
||||
// before showing the HID event filter. Seeing as we use Linux we show
|
||||
// it regardless.
|
||||
Return (0x0F)
|
||||
}
|
||||
//
|
||||
// HID Driver Descriptor Method - Called by HID Driver during initialization
|
||||
// to obtain HID Descriptor information.
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// Package containing a complete HID Descriptor information.
|
||||
//
|
||||
Name(DPKG, Package(4)
|
||||
{
|
||||
0x11111111,
|
||||
0x22222222,
|
||||
0x33333333,
|
||||
0x44444444,
|
||||
})
|
||||
Method (HDDM, 0, Serialized)
|
||||
{
|
||||
Return(DPKG)
|
||||
}
|
||||
//
|
||||
// HID Driver Event Method - Called by HID Driver to get the specific
|
||||
// platform event.
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// Mode 0 = Index of HID Input Report, per pre-defined Table.
|
||||
// Mode 1 = Package containing a complete HID Input Report.
|
||||
//
|
||||
Method (HDEM, 0, Serialized)
|
||||
{
|
||||
HBSY = 0x00 // Clear HID Busy.
|
||||
// Simple Mode is hardcoded for now. Return Simple Mode HID Index Value.
|
||||
If (HMDE == 0x00)
|
||||
{
|
||||
Return(HIDX)
|
||||
}
|
||||
Return(HMDE)
|
||||
}
|
||||
//
|
||||
// HID Driver Mode Method - Called by HID Driver during initialization to get
|
||||
// the platform mode of operation.
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// 0 = Simple Mode.
|
||||
// 1 = Advanced Mode.
|
||||
//
|
||||
Method (HDMM, 0, Serialized)
|
||||
{
|
||||
Return(HMDE) // Return Mode of operation.
|
||||
}
|
||||
//
|
||||
// HID Driver Status Method - called by HID Driver to report platform readiness status.
|
||||
//
|
||||
// Input: Driver Status.
|
||||
// 0 = Driver Unloaded.
|
||||
// 1 = Driver Loaded and Ready.
|
||||
//
|
||||
// Output: None
|
||||
//
|
||||
Method (HDSM, 1, Serialized)
|
||||
{
|
||||
HRDY = Arg0 // Store HID Ready Status.
|
||||
// Eventually code will communicate to platform the Driver status (enabled/disabled).
|
||||
}
|
||||
//
|
||||
// HID Platform Event Method - called by Platform to communicate HID Event to Driver.
|
||||
//
|
||||
// Input:
|
||||
// Mode 0 = Index of HID Event.
|
||||
// Mode 1 = Package containing a complete HID Report.
|
||||
//
|
||||
Method (HPEM, 1, Serialized) // HID Platform Event Method.
|
||||
{
|
||||
HBSY = 0x01 // Set HID Busy.
|
||||
// Simple Mode is hardcoded for now. Simply store HID Index value.
|
||||
If (HMDE == 0x00)
|
||||
{
|
||||
HIDX = Arg0
|
||||
} Else {
|
||||
HIDX = Arg0
|
||||
}
|
||||
Notify (\_SB.HIDD, 0xC0) // Notify Driver to get HID Event.
|
||||
Local0 = 0x00 // Initialize Local0 as a timeout counter.
|
||||
While((Local0 < 250) && HBSY) // Wait <= 1 second for Driver to ACK success.
|
||||
{
|
||||
Sleep (4) // Delay 4 ms.
|
||||
Local0++ // Increment Timeout.
|
||||
}
|
||||
If (HBSY == 0x01) // Failure?
|
||||
{
|
||||
HBSY = 0x00 // Yes. Clear HID Busy Flag.
|
||||
HIDX = 0x00 // Set HID Simple Mode Index = 0 = Undefined.
|
||||
Return (0x01) // Return Failure.
|
||||
} Else {
|
||||
Return (0x00) // Return Success.
|
||||
}
|
||||
}
|
||||
//
|
||||
// HID Button Load Method - called by Platform to say HID driver is capable of receiving
|
||||
// 5-button array notifications.
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// None
|
||||
//
|
||||
Method (BTNL, 0, Serialized) // HID Button Enable/Disable Method
|
||||
{
|
||||
BTS1 = 0x00
|
||||
}
|
||||
//
|
||||
// HID Button Enable/Disable Method - called by Platform to disable/enable notification based
|
||||
// on button press
|
||||
//
|
||||
// Input:
|
||||
// Arg0 = Bit mask of buttons to Enable or Disable:
|
||||
// 1 == Button should be Enabled
|
||||
// 0 == Button should be Disabled
|
||||
// Bits[0]: Power Button N/A to disable
|
||||
// Bits[1]: Windows Button
|
||||
// Bits[2]: Volume Up Button
|
||||
// Bits[3]: Volume Down Button
|
||||
// Bits[4]: Rotation Lock Button
|
||||
// Bits[5:31]: Reserved
|
||||
//
|
||||
// Output:
|
||||
// None
|
||||
//
|
||||
Method (BTNE, 1, Serialized) // HID Button Enable/Disable Method
|
||||
{
|
||||
Return (BTS1)
|
||||
}
|
||||
//
|
||||
// HID Button Status - called by Platform to get what buttons are enabled and disabled
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// Bit mask of buttons' current status:
|
||||
// 1 == Button is Enabled
|
||||
// 0 == Button is Disabled
|
||||
// Bits[0]: Power Button N/A to disable
|
||||
// Bits[1]: Windows Button
|
||||
// Bits[2]: Volume Up Button
|
||||
// Bits[3]: Volume Down Button
|
||||
// Bits[4]: Rotation Lock Button
|
||||
// Bits[5:31]: Reserved
|
||||
//
|
||||
Method (BTNS, 0, Serialized)
|
||||
{
|
||||
Return (BTS1)
|
||||
}
|
||||
//
|
||||
// HID Button Capabilities Method - called by Platform to determine what buttons are supported
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// Output:
|
||||
// Bit mask of buttons supported:
|
||||
// 1 == Button is Supported
|
||||
// 0 == Button is not Supported
|
||||
// Bits[0]: Power Button (Must be 1)
|
||||
// Bits[1]: Windows Button
|
||||
// Bits[2]: Volume Up Button
|
||||
// Bits[3]: Volume Down Button
|
||||
// Bits[4]: Rotation Lock Button
|
||||
// Bits[5:31]: Reserved
|
||||
//
|
||||
Method (BTNC, 0, Serialized) // HID Button Capabilities Method
|
||||
{
|
||||
Return(0x1F)
|
||||
}
|
||||
|
||||
//
|
||||
// HEBC: HID Event Base Capabilities [31:0]- To specify the base button capabilities supported
|
||||
// on platform by returning a ULONG value with the following bit level definition
|
||||
//
|
||||
// Input:
|
||||
// None
|
||||
//
|
||||
// 0 = Button not supported
|
||||
// 1 = Button supported
|
||||
// Output:
|
||||
// Bits [0] - Windows Button (Windows 8.1 supported), Rotation Lock (Windows 8.1 supported):
|
||||
// Num Lock, Home, End, Page Up, Page Down
|
||||
// Bits [1] - Wireless Radio Control
|
||||
// Bits [2] - System Power Down (Windows 8.1 supported)
|
||||
// Bits [3] - System Hibernate
|
||||
// Bits [4] - System Sleep/ System Wake
|
||||
// Bits [5] - Scan Next Track
|
||||
// Bits [6] - Scan Previous Track
|
||||
// Bits [7] - Stop
|
||||
// Bits [8] - Play/Pause
|
||||
// Bits [9] - Mute
|
||||
// Bits [10] - Volume Increment (Windows 8.1 supported)
|
||||
// Bits [11] - Volume Decrement (Windows 8.1 supported)
|
||||
// Bits [12] - Display Brightness Increment
|
||||
// Bits [13] - Display Brightness Decrement
|
||||
// Bits [14] - Lock Tablet
|
||||
// Bits [15] - Release Tablet
|
||||
// Bits [16] - Toggle Bezel
|
||||
// Bits [17] - 5 button array (Windows 10 supported):
|
||||
// (Power, Windows Home, Volume Up, Volume Down, Rotation Lock)
|
||||
// Bits [18] - Button 1
|
||||
// Bits [19] - Button 2
|
||||
// Bits [20] - Button 3
|
||||
// Bits [21] - Button 4
|
||||
// Bits [22] - Button 5
|
||||
// Bits [23-31] - reserved
|
||||
//
|
||||
// Modify below table if the target platform has different capabilities. Each bit
|
||||
// corresponding the above table definition.
|
||||
//
|
||||
Name (HEB2, 0) // Extended 32bit capability definition for future enhancements.
|
||||
Method (HEBC, 0, Serialized) {
|
||||
// It's possible to return (\HEB1)
|
||||
Return (0x00)
|
||||
}
|
||||
Method (H2BC, 0, Serialized) {
|
||||
// It's possible to return (\HEB1)
|
||||
Return (0x00)
|
||||
}
|
||||
//
|
||||
// HEEC- Hid Event Extended Capabilities [32:63]
|
||||
//
|
||||
Method (HEEC, 0, Serialized) {
|
||||
// It's possible to return (\HEB2)
|
||||
Return(0x00)
|
||||
}
|
||||
//
|
||||
// HIDD _DSM
|
||||
// _DSM : Device Specific Method for the Windows Compatible Button Array.
|
||||
//
|
||||
// Arg0: UUID Unique function identifier
|
||||
// Arg1: Integer Revision Level
|
||||
// Arg2: Integer Function Index
|
||||
// Arg3: Package Parameters
|
||||
//
|
||||
Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})
|
||||
{
|
||||
// Compare passed in UUID to supported UUID.
|
||||
If (Arg0 == ToUUID ("EEEC56B3-4442-408F-A792-4EDD4D758054"))
|
||||
{
|
||||
If (0x01 == ToInteger(Arg1)) // Revision 1.
|
||||
{
|
||||
Switch (ToInteger(Arg2)) // Switch to Function Index.
|
||||
{
|
||||
//
|
||||
// Function 0, Query of supported functions.
|
||||
//
|
||||
Case (0x00)
|
||||
{
|
||||
Return (Buffer() {0xFF, 0x03}) // Total 9 function indices are supported including this.
|
||||
}
|
||||
//
|
||||
// Function 1, BTNL. Button Load Method. No Input/Output.
|
||||
//
|
||||
Case (0x01)
|
||||
{
|
||||
BTNL()
|
||||
}
|
||||
//
|
||||
// Function 2, HDMM. HID Driver Mode Method.
|
||||
// Input:None
|
||||
// Output:HDMM output. See HDMM
|
||||
//
|
||||
Case (0x02)
|
||||
{
|
||||
Return (HDMM())
|
||||
}
|
||||
//
|
||||
// Function 3, HDSM. HID Driver Status Method.
|
||||
// Input: 0 - The driver is not available. 1 - The driver is available.
|
||||
// Output: None
|
||||
//
|
||||
Case (0x03)
|
||||
{
|
||||
HDSM (DeRefOf(Index(Arg3, 0x00)))
|
||||
}
|
||||
//
|
||||
// Function 4, HDEM. HID Driver Event Method.
|
||||
// Input: None.
|
||||
// Output: Package contains Supported Keys (Mode 0)
|
||||
//
|
||||
Case (0x04)
|
||||
{
|
||||
Return (HDEM())
|
||||
}
|
||||
//
|
||||
// Function 5 BTNS. Button Status Method.
|
||||
// Input: None.
|
||||
// Output: Int32 which contains a bit map of Buttons' enable/disable states
|
||||
//
|
||||
Case (0x05)
|
||||
{
|
||||
Return (BTNS())
|
||||
}
|
||||
//
|
||||
// Function 6 BTNE. Button Enable/Disable Method.
|
||||
// Input: Int32 Bit mask of buttons enable/disable control:
|
||||
// 1 = Button should be Enabled
|
||||
// 0 = Button should be Disabled
|
||||
// Output: None.
|
||||
//
|
||||
Case (0x06)
|
||||
{
|
||||
BTNE (DeRefOf(Index(Arg3, 0x00)))
|
||||
}
|
||||
//
|
||||
// Function 7 HEBC. Button implemented state.
|
||||
// Input: None
|
||||
// Output: Int32 Bit map which shows what buttons are implemented on this system.
|
||||
//
|
||||
Case (0x07)
|
||||
{
|
||||
Return (HEBC())
|
||||
}
|
||||
//
|
||||
// Function 8 VGBS. Virtual GPIO Button Status.
|
||||
// Input: None
|
||||
// Output: Intger Bit map which shows what Virtual GPIO Button status. Currently only
|
||||
// Dock/Slate modes are supported.
|
||||
//
|
||||
Case (0x08)
|
||||
{
|
||||
Return (0x00)
|
||||
}
|
||||
//
|
||||
// Function 9 H2BC. Button implemented state.
|
||||
// Input: None
|
||||
// Output: Int32 Bit map which shows what buttons are implemented on this system.
|
||||
//
|
||||
Case (0x09)
|
||||
{
|
||||
Return (H2BC())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// If the code falls through to this point, just return a buffer of 0.
|
||||
Return (Buffer() {0x00})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method(_Q80) // Volume up
|
||||
{
|
||||
Store ("-----> _Q80", Debug)
|
||||
Notify (\_SB.HIDD, 0xC4)
|
||||
Notify (\_SB.HIDD, 0xC5)
|
||||
Store ("<----- _Q80", Debug)
|
||||
}
|
||||
|
||||
Method(_Q81) // Volume down
|
||||
{
|
||||
Store ("-----> _Q81", Debug)
|
||||
Notify (\_SB.HIDD, 0xC6)
|
||||
Notify (\_SB.HIDD, 0xC7)
|
||||
Store ("<----- _Q81", Debug)
|
||||
}
|
||||
|
||||
Method(_Q99) // Wireless mode
|
||||
{
|
||||
Store ("-----> _Q99", Debug)
|
||||
^^^^HIDD.HPEM (8)
|
||||
Store ("<----- _Q99", Debug)
|
||||
}
|
||||
|
||||
Method(_Q06) // Brightness decrease
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method(_Q05) // Brightness increase
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method(_Q08) // FN lock QEvent
|
||||
{
|
||||
FNLC = FNST
|
||||
}
|
||||
|
||||
Method(_Q54) // Power Button Event
|
||||
{
|
||||
Store ("-----> _Q54", Debug)
|
||||
Store ("<----- _Q54", Debug)
|
||||
}
|
||||
|
||||
Method(_QD5) // 10 second power button press
|
||||
{
|
||||
Store ("-----> _QD5", Debug)
|
||||
\_SB.PWPR()
|
||||
Store ("<----- _QD5", Debug)
|
||||
}
|
||||
|
||||
Method(_QD6) // 10 second power button de-press
|
||||
{
|
||||
Store ("-----> _QD6", Debug)
|
||||
\_SB.PWRR()
|
||||
Store ("<----- _QD6", Debug)
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Device (LID0)
|
||||
{
|
||||
Name (_HID, EisaId ("PNP0C0D"))
|
||||
Method (_STA)
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
Method (_LID,0)
|
||||
{
|
||||
// 0x00 == Closed
|
||||
// 0x01 == Open
|
||||
Return (^^LSTE)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (RPTS, 1, NotSerialized)
|
||||
{
|
||||
\_SB.PCI0.LPCB.EC.OSFG = 0x00
|
||||
|
||||
If ((Arg0 == 0x04) || (Arg0 == 0x05))
|
||||
{
|
||||
/* Store current EC settings */
|
||||
\_SB.PCI0.LPCB.EC.TPLA = \_SB.PCI0.LPCB.TPLS
|
||||
\_SB.PCI0.LPCB.EC.FLKA = \_SB.PCI0.LPCB.FLKS
|
||||
\_SB.PCI0.LPCB.EC.KLBE = \_SB.PCI0.LPCB.KLBC
|
||||
}
|
||||
}
|
||||
|
||||
Method (RWAK, 1, Serialized)
|
||||
{
|
||||
\_SB.PCI0.LPCB.EC.OSFG = 0x01
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (UCSW, 0, Serialized)
|
||||
{
|
||||
Sleep (50)
|
||||
MGO0 = ^^^^UBTC.MGO0
|
||||
MGO1 = ^^^^UBTC.MGO1
|
||||
MGO2 = ^^^^UBTC.MGO2
|
||||
MGO3 = ^^^^UBTC.MGO3
|
||||
MGO4 = ^^^^UBTC.MGO4
|
||||
MGO5 = ^^^^UBTC.MGO5
|
||||
MGO6 = ^^^^UBTC.MGO6
|
||||
MGO7 = ^^^^UBTC.MGO7
|
||||
MGO8 = ^^^^UBTC.MGO7
|
||||
MGO9 = ^^^^UBTC.MGO9
|
||||
MGOA = ^^^^UBTC.MGOA
|
||||
MGOB = ^^^^UBTC.MGOB
|
||||
MGOC = ^^^^UBTC.MGOC
|
||||
MGOD = ^^^^UBTC.MGOD
|
||||
MGOE = ^^^^UBTC.MGOE
|
||||
MGOF = ^^^^UBTC.MGOF
|
||||
CTL0 = ^^^^UBTC.CTL0
|
||||
CTL1 = ^^^^UBTC.CTL1
|
||||
CTL2 = ^^^^UBTC.CTL2
|
||||
CTL3 = ^^^^UBTC.CTL3
|
||||
CTL4 = ^^^^UBTC.CTL4
|
||||
CTL5 = ^^^^UBTC.CTL5
|
||||
CTL6 = ^^^^UBTC.CTL6
|
||||
CTL7 = ^^^^UBTC.CTL7
|
||||
OPWE = 0xE0
|
||||
}
|
||||
|
||||
Method (UCSR, 0, Serialized)
|
||||
{
|
||||
Sleep (50)
|
||||
^^^^UBTC.MGI0 = MGI0
|
||||
^^^^UBTC.MGI1 = MGI1
|
||||
^^^^UBTC.MGI2 = MGI2
|
||||
^^^^UBTC.MGI3 = MGI3
|
||||
^^^^UBTC.MGI4 = MGI4
|
||||
^^^^UBTC.MGI5 = MGI5
|
||||
^^^^UBTC.MGI6 = MGI6
|
||||
^^^^UBTC.MGI7 = MGI7
|
||||
^^^^UBTC.MGI8 = MGI8
|
||||
^^^^UBTC.MGI9 = MGI9
|
||||
^^^^UBTC.MGIA = MGIA
|
||||
^^^^UBTC.MGIB = MGIB
|
||||
^^^^UBTC.MGIC = MGIC
|
||||
^^^^UBTC.MGID = MGID
|
||||
^^^^UBTC.MGIE = MGIE
|
||||
^^^^UBTC.MGIF = MGIF
|
||||
^^^^UBTC.CCI0 = CCI0
|
||||
^^^^UBTC.CCI1 = CCI1
|
||||
^^^^UBTC.CCI2 = CCI2
|
||||
^^^^UBTC.CCI3 = CCI3
|
||||
}
|
||||
|
||||
Method (UCEV, 0, Serialized)
|
||||
{
|
||||
Sleep (50)
|
||||
^^^^UBTC.MGI0 = MGI0
|
||||
^^^^UBTC.MGI1 = MGI1
|
||||
^^^^UBTC.MGI2 = MGI2
|
||||
^^^^UBTC.MGI3 = MGI3
|
||||
^^^^UBTC.MGI4 = MGI4
|
||||
^^^^UBTC.MGI5 = MGI5
|
||||
^^^^UBTC.MGI6 = MGI6
|
||||
^^^^UBTC.MGI7 = MGI7
|
||||
^^^^UBTC.MGI8 = MGI8
|
||||
^^^^UBTC.MGI9 = MGI9
|
||||
^^^^UBTC.MGIA = MGIA
|
||||
^^^^UBTC.MGIB = MGIB
|
||||
^^^^UBTC.MGIC = MGIC
|
||||
^^^^UBTC.MGID = MGID
|
||||
^^^^UBTC.MGIE = MGIE
|
||||
^^^^UBTC.MGIF = MGIF
|
||||
^^^^UBTC.CCI0 = CCI0
|
||||
^^^^UBTC.CCI1 = CCI1
|
||||
^^^^UBTC.CCI2 = CCI2
|
||||
^^^^UBTC.CCI3 = CCI3
|
||||
Notify (^^^^UBTC, 0x80)
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
External(\_SB.UBTC, DeviceObj)
|
||||
External(\_SB.UBTC.MGI0, IntObj)
|
||||
External(\_SB.UBTC.MGI1, IntObj)
|
||||
External(\_SB.UBTC.MGI2, IntObj)
|
||||
External(\_SB.UBTC.MGI3, IntObj)
|
||||
External(\_SB.UBTC.MGI4, IntObj)
|
||||
External(\_SB.UBTC.MGI5, IntObj)
|
||||
External(\_SB.UBTC.MGI6, IntObj)
|
||||
External(\_SB.UBTC.MGI7, IntObj)
|
||||
External(\_SB.UBTC.MGI8, IntObj)
|
||||
External(\_SB.UBTC.MGI9, IntObj)
|
||||
External(\_SB.UBTC.MGIA, IntObj)
|
||||
External(\_SB.UBTC.MGIB, IntObj)
|
||||
External(\_SB.UBTC.MGIC, IntObj)
|
||||
External(\_SB.UBTC.MGID, IntObj)
|
||||
External(\_SB.UBTC.MGIE, IntObj)
|
||||
External(\_SB.UBTC.MGIF, IntObj)
|
||||
|
||||
External(\_SB.UBTC.CTL0, IntObj)
|
||||
External(\_SB.UBTC.CTL1, IntObj)
|
||||
External(\_SB.UBTC.CTL2, IntObj)
|
||||
External(\_SB.UBTC.CTL3, IntObj)
|
||||
External(\_SB.UBTC.CTL4, IntObj)
|
||||
External(\_SB.UBTC.CTL5, IntObj)
|
||||
External(\_SB.UBTC.CTL6, IntObj)
|
||||
External(\_SB.UBTC.CTL7, IntObj)
|
||||
|
||||
External(\_SB.UBTC.MGO0, IntObj)
|
||||
External(\_SB.UBTC.MGO1, IntObj)
|
||||
External(\_SB.UBTC.MGO2, IntObj)
|
||||
External(\_SB.UBTC.MGO3, IntObj)
|
||||
External(\_SB.UBTC.MGO4, IntObj)
|
||||
External(\_SB.UBTC.MGO5, IntObj)
|
||||
External(\_SB.UBTC.MGO6, IntObj)
|
||||
External(\_SB.UBTC.MGO7, IntObj)
|
||||
External(\_SB.UBTC.MGO8, IntObj)
|
||||
External(\_SB.UBTC.MGO9, IntObj)
|
||||
External(\_SB.UBTC.MGOA, IntObj)
|
||||
External(\_SB.UBTC.MGOB, IntObj)
|
||||
External(\_SB.UBTC.MGOC, IntObj)
|
||||
External(\_SB.UBTC.MGOD, IntObj)
|
||||
External(\_SB.UBTC.MGOE, IntObj)
|
||||
External(\_SB.UBTC.MGOF, IntObj)
|
||||
|
||||
External(\_SB.UBTC.CCI0, IntObj)
|
||||
External(\_SB.UBTC.CCI1, IntObj)
|
||||
External(\_SB.UBTC.CCI2, IntObj)
|
||||
External(\_SB.UBTC.CCI3, IntObj)
|
|
@ -0,0 +1,301 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pnp.h>
|
||||
#include <ec/acpi/ec.h>
|
||||
#include <option.h>
|
||||
#include <pc80/keyboard.h>
|
||||
|
||||
#include "ec.h"
|
||||
#include "ecdefs.h"
|
||||
|
||||
uint16_t it_get_version(void)
|
||||
{
|
||||
return (ec_read(ECRAM_MAJOR_VERSION) << 8) | ec_read(ECRAM_MINOR_VERSION);
|
||||
}
|
||||
|
||||
static uint8_t get_ec_value_from_option(const char *name,
|
||||
unsigned int fallback,
|
||||
const uint8_t *lut,
|
||||
size_t lut_size)
|
||||
{
|
||||
unsigned int index = get_uint_option(name, fallback);
|
||||
if (index >= lut_size)
|
||||
index = fallback;
|
||||
return lut[index];
|
||||
}
|
||||
|
||||
static uint16_t ite_get_chip_id(unsigned int port)
|
||||
{
|
||||
return (pnp_read_index(port, ITE_CHIPID1) << 8) |
|
||||
pnp_read_index(port, ITE_CHIPID2);
|
||||
}
|
||||
|
||||
static void merlin_init(struct device *dev)
|
||||
{
|
||||
if (!dev->enabled)
|
||||
return;
|
||||
|
||||
/*
|
||||
* The address/data IO port pair for the ite EC are configurable
|
||||
* through the EC domain and are fixed by the EC's firmware blob. If
|
||||
* the value(s) passed through the "dev" structure don't match the
|
||||
* expected values then output severe warnings.
|
||||
*/
|
||||
if (dev->path.pnp.port != ITE_FIXED_ADDR) {
|
||||
printk(BIOS_ERR, "ITE: Incorrect ports defined in devicetree.cb.\n");
|
||||
printk(BIOS_ERR, "ITE: Serious operational issues will arise.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
const uint16_t chip_id = ite_get_chip_id(dev->path.pnp.port);
|
||||
|
||||
if (chip_id != ITE_CHIPID_VAL) {
|
||||
printk(BIOS_ERR, "ITE: Expected chip ID 0x%04x, but got 0x%04x instead.\n",
|
||||
ITE_CHIPID_VAL, chip_id);
|
||||
return;
|
||||
}
|
||||
|
||||
pc_keyboard_init(NO_AUX_DEVICE);
|
||||
|
||||
/*
|
||||
* Restore settings from CMOS into EC RAM:
|
||||
*
|
||||
* kbl_timeout
|
||||
* fn_ctrl_swap
|
||||
* max_charge
|
||||
* fan_mode
|
||||
* fn_lock_state
|
||||
* trackpad_state
|
||||
* kbl_brightness
|
||||
* kbl_state
|
||||
*/
|
||||
|
||||
/*
|
||||
* Keyboard Backlight Timeout
|
||||
*
|
||||
* Setting: kbl_timeout
|
||||
*
|
||||
* Values: 30 Seconds, 1 Minute, 3 Minutes, 5 Minutes, Never
|
||||
* Default: 30 Seconds
|
||||
*
|
||||
*/
|
||||
const uint8_t kbl_timeout[] = {
|
||||
SEC_30,
|
||||
MIN_1,
|
||||
MIN_3,
|
||||
MIN_5,
|
||||
NEVER
|
||||
};
|
||||
|
||||
ec_write(ECRAM_KBL_TIMEOUT,
|
||||
get_ec_value_from_option("kbl_timeout",
|
||||
0,
|
||||
kbl_timeout,
|
||||
ARRAY_SIZE(kbl_timeout)));
|
||||
|
||||
/*
|
||||
* Fn Ctrl Reverse
|
||||
*
|
||||
* Setting: fn_ctrl_swap
|
||||
*
|
||||
* Values: Enabled, Disabled
|
||||
* Default: Disabled
|
||||
*
|
||||
*/
|
||||
const uint8_t fn_ctrl_swap[] = {
|
||||
FN_CTRL,
|
||||
CTRL_FN
|
||||
};
|
||||
|
||||
ec_write(ECRAM_FN_CTRL_REVERSE,
|
||||
get_ec_value_from_option("fn_ctrl_swap",
|
||||
1,
|
||||
fn_ctrl_swap,
|
||||
ARRAY_SIZE(fn_ctrl_swap)));
|
||||
|
||||
/*
|
||||
* Maximum Charge Level
|
||||
*
|
||||
* Setting: max_charge
|
||||
*
|
||||
* Values: 60%, 80%, 100%
|
||||
* Default: 100%
|
||||
*
|
||||
*/
|
||||
const uint8_t max_charge[] = {
|
||||
CHARGE_100,
|
||||
CHARGE_80,
|
||||
CHARGE_60
|
||||
};
|
||||
|
||||
ec_write(ECRAM_MAX_CHARGE,
|
||||
get_ec_value_from_option("max_charge",
|
||||
0,
|
||||
max_charge,
|
||||
ARRAY_SIZE(max_charge)));
|
||||
|
||||
/*
|
||||
* Fan Mode
|
||||
*
|
||||
* Setting: fan_mode
|
||||
*
|
||||
* Values: Quiet, Normal, Aggressive
|
||||
* Default: Normal
|
||||
*
|
||||
*/
|
||||
const uint8_t fan_mode[] = {
|
||||
FAN_NORMAL,
|
||||
FAN_AGGRESSIVE,
|
||||
FAN_QUIET
|
||||
};
|
||||
|
||||
if (CONFIG(EC_STARLABS_FAN))
|
||||
ec_write(ECRAM_FAN_MODE,
|
||||
get_ec_value_from_option("fan_mode",
|
||||
0,
|
||||
fan_mode,
|
||||
ARRAY_SIZE(fan_mode)));
|
||||
|
||||
/*
|
||||
* Function Lock
|
||||
*
|
||||
* Setting: fn_lock_state
|
||||
*
|
||||
* Values: Locked, Unlocked
|
||||
* Default: Locked
|
||||
*
|
||||
*/
|
||||
const uint8_t fn_lock_state[] = {
|
||||
UNLOCKED,
|
||||
LOCKED
|
||||
};
|
||||
|
||||
ec_write(ECRAM_FN_LOCK_STATE,
|
||||
get_ec_value_from_option("fn_lock_state",
|
||||
1,
|
||||
fn_lock_state,
|
||||
ARRAY_SIZE(fn_lock_state)));
|
||||
|
||||
/*
|
||||
* Trackpad State
|
||||
*
|
||||
* Setting: trackpad_state
|
||||
*
|
||||
* Values: Enabled, Disabled
|
||||
* Default: Enabled
|
||||
*
|
||||
*/
|
||||
const uint8_t trackpad_state[] = {
|
||||
TRACKPAD_ENABLED,
|
||||
TRACKPAD_DISABLED
|
||||
};
|
||||
|
||||
ec_write(ECRAM_TRACKPAD_STATE,
|
||||
get_ec_value_from_option("trackpad_state",
|
||||
0,
|
||||
trackpad_state,
|
||||
ARRAY_SIZE(trackpad_state)));
|
||||
|
||||
/*
|
||||
* Keyboard Backlight Brightness
|
||||
*
|
||||
* Setting: kbl_brightness
|
||||
*
|
||||
* Values: Off, Low, High / Off, On
|
||||
* Default: Low
|
||||
*
|
||||
*/
|
||||
const uint8_t kbl_brightness[] = {
|
||||
KBL_ON,
|
||||
KBL_OFF,
|
||||
KBL_LOW,
|
||||
KBL_HIGH
|
||||
};
|
||||
|
||||
if (CONFIG(EC_STARLABS_KBL_LEVELS))
|
||||
ec_write(ECRAM_KBL_BRIGHTNESS,
|
||||
get_ec_value_from_option("kbl_brightness",
|
||||
2,
|
||||
kbl_brightness,
|
||||
ARRAY_SIZE(kbl_brightness)));
|
||||
else
|
||||
ec_write(ECRAM_KBL_BRIGHTNESS,
|
||||
get_ec_value_from_option("kbl_brightness",
|
||||
0,
|
||||
kbl_brightness,
|
||||
ARRAY_SIZE(kbl_brightness)));
|
||||
|
||||
/*
|
||||
* Keyboard Backlight State
|
||||
*
|
||||
* Setting: kbl_state
|
||||
*
|
||||
* Values: Off, On
|
||||
* Default: On
|
||||
*
|
||||
*/
|
||||
const uint8_t kbl_state[] = {
|
||||
KBL_DISABLED,
|
||||
KBL_ENABLED
|
||||
};
|
||||
|
||||
ec_write(ECRAM_KBL_STATE,
|
||||
get_ec_value_from_option("kbl_state",
|
||||
1,
|
||||
kbl_state,
|
||||
ARRAY_SIZE(kbl_state)));
|
||||
}
|
||||
|
||||
static struct device_operations ops = {
|
||||
.init = merlin_init,
|
||||
.read_resources = noop_read_resources,
|
||||
.set_resources = noop_set_resources,
|
||||
};
|
||||
|
||||
static struct pnp_info pnp_dev_info[] = {
|
||||
/* Serial Port 1 (UART1) */
|
||||
{ NULL, ITE_SP1, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
|
||||
/* Serial Port 2 (UART2) */
|
||||
{ NULL, ITE_SP2, PNP_IO0 | PNP_IRQ0, 0x0ff8, },
|
||||
/* System Wake-Up Control (SWUC) */
|
||||
{ NULL, ITE_SWUC, PNP_IO0 | PNP_IRQ0, 0xfff0, },
|
||||
/* KBC / Mouse Interface */
|
||||
{ NULL, ITE_SWUC, PNP_IRQ0, },
|
||||
/* KBC / Keyboard Interface */
|
||||
{ NULL, ITE_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07ff, 0x07ff, },
|
||||
/* Consumer IR (CIR) */
|
||||
{ NULL, ITE_IR, PNP_IO0 | PNP_IRQ0, 0xfff8, },
|
||||
/* Shared Memory / Flash Interface (SMFI) */
|
||||
{ NULL, ITE_SMFI, PNP_IO0 | PNP_IRQ0, 0xfff0, },
|
||||
/* RTC-like Timer (RCTC) */
|
||||
{ NULL, ITE_RTCT, PNP_IO0 | PNP_IO1 | PNP_IO2 | PNP_IO3 | PNP_IRQ0,
|
||||
0xfffe, 0xfffe, 0xfffe, 0xfffe, },
|
||||
/* Power Management I/F Channel 1 (PMC1) */
|
||||
{ NULL, ITE_PMC1, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07ff, 0x07ff, },
|
||||
/* Power Management I/F Channel 2 (PMC2) */
|
||||
{ NULL, ITE_PMC2, PNP_IO0 | PNP_IO1 | PNP_IO2 | PNP_IRQ0, 0x07fc,
|
||||
0x07fc, 0xfff0, },
|
||||
/* Serial Peripheral Interface (SSPI) */
|
||||
{ NULL, ITE_SSPI, PNP_IO0 | PNP_IRQ0, 0xfff8, },
|
||||
/* Platform Environment Control Interface (PECI) */
|
||||
{ NULL, ITE_PECI, PNP_IRQ0, 0xfff8, },
|
||||
/* Power Management I/F Channel 3 (PMC3) */
|
||||
{ NULL, ITE_PMC3, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07ff, 0x07ff, },
|
||||
/* Power Management I/F Channel 4 (PMC4) */
|
||||
{ NULL, ITE_PMC4, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07ff, 0x07ff, },
|
||||
/* Power Management I/F Channel 5 (PMC5) */
|
||||
{ NULL, ITE_PMC5, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07ff, 0x07ff, },
|
||||
};
|
||||
|
||||
static void enable_dev(struct device *dev)
|
||||
{
|
||||
pnp_enable_devices(dev, &ops, ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
|
||||
}
|
||||
|
||||
struct chip_operations ec_starlabs_merlin_ops = {
|
||||
CHIP_NAME("ITE EC")
|
||||
.enable_dev = enable_dev
|
||||
};
|
|
@ -0,0 +1,86 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller.
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_ITE_H
|
||||
#define _EC_STARLABS_ITE_H
|
||||
|
||||
/*
|
||||
* Define the expected value of the PNP base address that is fixed through
|
||||
* the BADRSEL register controlled within the EC domain by the EC Firmware.
|
||||
*/
|
||||
#define ITE_FIXED_ADDR 0x4e
|
||||
|
||||
/* Logical device number (LDN) assignments. */
|
||||
#define ITE_SP1 0x01 /* Serial Port 1 (UART) */
|
||||
#define ITE_SP2 0x02 /* Serial Port 2 (UART) */
|
||||
#define ITE_SWUC 0x04 /* System Wake-Up Control (SWUC) */
|
||||
#define ITE_KBCM 0x05 /* KBC / Mouse Interface */
|
||||
#define ITE_KBCK 0x06 /* KBC / Keyboard Interface */
|
||||
#define ITE_IR 0x0a /* Consumer IR (CIR) */
|
||||
#define ITE_SMFI 0x0f /* Shared Memory / Flash Interface (SMFI) */
|
||||
#define ITE_RTCT 0x10 /* RTC-like Timer (RCTC) */
|
||||
#define ITE_PMC1 0x11 /* Power Management I/F Channel 1 (PMC1) */
|
||||
#define ITE_PMC2 0x12 /* Power Management I/F Channel 2 (PMC2) */
|
||||
#define ITE_SSPI 0x13 /* Serial Peripheral Interface (SSPI) */
|
||||
#define ITE_PECI 0x14 /* Platform Environment Control Interface (PECI) */
|
||||
#define ITE_PMC3 0x17 /* Power Management I/F Channel 3 (PMC3) */
|
||||
#define ITE_PMC4 0x18 /* Power Management I/F Channel 4 (PMC4) */
|
||||
#define ITE_PMC5 0x19 /* Power Management I/F Channel 5 (PMC5) */
|
||||
|
||||
/* Host domain registers. */
|
||||
#define ITE_CHIPID1 0x20 /* Device ID register 1 */
|
||||
#define ITE_CHIPID2 0x21 /* Device ID register 2 */
|
||||
|
||||
/* EC RAM common offsets */
|
||||
#define ECRAM_MAJOR_VERSION 0x00
|
||||
#define ECRAM_MINOR_VERSION 0x01
|
||||
|
||||
/*
|
||||
* CMOS Settings
|
||||
*/
|
||||
|
||||
/* Keyboard Backlight Timeout */
|
||||
#define SEC_30 0x00
|
||||
#define MIN_1 0x01
|
||||
#define MIN_3 0x02
|
||||
#define MIN_5 0x03
|
||||
#define NEVER 0x04
|
||||
|
||||
/* Fn Ctrl Swap */
|
||||
#define FN_CTRL 0x00
|
||||
#define CTRL_FN 0x01
|
||||
|
||||
/* Max Charge Setting */
|
||||
#define CHARGE_100 0x00
|
||||
#define CHARGE_80 0xbb
|
||||
#define CHARGE_60 0xaa
|
||||
|
||||
/* Fan Mode Setting */
|
||||
#define FAN_NORMAL 0x00
|
||||
#define FAN_AGGRESSIVE 0xbb
|
||||
#define FAN_QUIET 0xaa
|
||||
|
||||
/* Fn Lock State */
|
||||
#define UNLOCKED 0x00
|
||||
#define LOCKED 0x01
|
||||
|
||||
/* Trackpad State */
|
||||
#define TRACKPAD_ENABLED 0x00
|
||||
#define TRACKPAD_DISABLED 0x22
|
||||
|
||||
/* Keyboard Brightness Levels */
|
||||
#define KBL_ON 0xdd
|
||||
#define KBL_OFF 0xcc
|
||||
#define KBL_LOW 0xbb
|
||||
#define KBL_HIGH 0xaa
|
||||
|
||||
/* Keyboard Backlight State */
|
||||
#define KBL_DISABLED 0x00
|
||||
#define KBL_ENABLED 0xaa
|
||||
|
||||
uint16_t it_get_version(void);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,26 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller.
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_APL_EC_DEFS_H
|
||||
#define _EC_STARLABS_APL_EC_DEFS_H
|
||||
|
||||
/* IT8987 chip ID byte values. */
|
||||
#define ITE_CHIPID_VAL 0x8987
|
||||
|
||||
/* EC RAM offsets. */
|
||||
#define ECRAM_TRACKPAD_STATE 0x14
|
||||
#define ECRAM_KBL_STATE 0x18
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x19
|
||||
#define ECRAM_KBL_TIMEOUT 0x1a
|
||||
#define ECRAM_FN_LOCK_STATE 0x2c
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x2d
|
||||
#define ECRAM_MAX_CHARGE 0x46
|
||||
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,173 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00),
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
FRMF, 8, // Force Mirror Flag
|
||||
TXEL, 8, // TXE Lock
|
||||
|
||||
Offset(0x10),
|
||||
CPWR, 8, // Control Power
|
||||
CDEV, 8, // Control Device
|
||||
OSFG, 8, // OS Flag
|
||||
CWFU, 8, // CW2015 Full
|
||||
TPLA, 8, // Trackpad State
|
||||
AFG3, 8, // After G3
|
||||
CLTP, 8, // Close Trackpad
|
||||
WKOL, 8, // Wake on Lid
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
|
||||
Offset(0x1a),
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
|
||||
Offset(0x22),
|
||||
ECT0, 8, // EC Build Time 0
|
||||
ECT1, 8, // EC Build Time 1
|
||||
ECT2, 8, // EC Build Time 2
|
||||
ECT3, 8, // EC Build Time 3
|
||||
ECT4, 8, // EC Build Time 4
|
||||
ECT5, 8, // EC Build Time 5
|
||||
ECT6, 8, // EC Build Time 6
|
||||
ECT7, 8, // EC Build Time 7
|
||||
ECT8, 8, // EC Build Time 8
|
||||
ECT9, 8, // EC Build Time 9
|
||||
|
||||
Offset(0x2c),
|
||||
FLKA, 8, // Function Lock State
|
||||
|
||||
Offset(0x30),
|
||||
STEF, 8, // Sensor T Error F
|
||||
ECD0, 8, // EC Build Date 0
|
||||
ECD1, 8, // EC Build Date 1
|
||||
ECD2, 8, // EC Build Date 2
|
||||
ECD3, 8, // EC Build Date 3
|
||||
ECD4, 8, // EC Build Date 4
|
||||
ECD5, 8, // EC Build Date 5
|
||||
ECD6, 8, // EC Build Date 6
|
||||
ECD7, 8, // EC Build Date 7
|
||||
ECD8, 8, // EC Build Date 8
|
||||
ECD9, 8, // EC Build Date 9
|
||||
|
||||
Offset(0x40),
|
||||
SHIP, 8, // Shipping Mode Flag
|
||||
LEDF, 8, // LED Control Flag
|
||||
LIDF, 8, // Lid Flag
|
||||
KBFL, 8, // Keyboard Flag
|
||||
CYCC, 8, // Cycle Count
|
||||
|
||||
Offset(0x46),
|
||||
BFCP, 8, // Battery Full Charge Percentage
|
||||
|
||||
Offset(0x62),
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
|
||||
Offset(0x70),
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
|
||||
Offset(0x7e),
|
||||
OCTF, 8, // OEM Control Flag
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80),
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
BT1A, 8, // Bt1 ASOC
|
||||
BT1T, 16, // Bt1 Temperature
|
||||
BT1C, 8, // Bt1 Control
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d),
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xbf),
|
||||
EJ8A, 8, // EJ898A Firmware Version
|
||||
|
||||
Offset(0xc0),
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xd0),
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xe0),
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xf0),
|
||||
P0SD, 8, // PD Port Status DD
|
||||
P0S4, 8, // PD Port Status 4
|
||||
P0S5, 8, // PD Port Status 5
|
||||
P0SE, 8, // PD Port Status E
|
||||
P0SA, 8, // PD Port Status 10
|
||||
P0SB, 8, // PD Port Status 11
|
||||
|
||||
Offset(0xfd),
|
||||
STCD, 8, // Shutdown Code
|
||||
EJ8R, 8, // EJ898A Need Reboot
|
||||
EJ8E, 8, // EJ898A Error
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D, 0, NotSerialized) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0A, 0, NotSerialized) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q07, 0, NotSerialized) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
//
|
||||
// TODO:
|
||||
// Below Q Events need to be added
|
||||
//
|
||||
// Method (_Q04, 0, NotSerialized) // Event: Trackpad Lock
|
||||
// {
|
||||
// TPLS = TPLA
|
||||
// }
|
||||
//
|
||||
// Method (_Q__, 0, NotSerialized) // Event: Keyboard Backlight Brightness
|
||||
// {
|
||||
// KLBC = KLBE
|
||||
// }
|
||||
//
|
||||
|
||||
Method (_Q99, 0, NotSerialized) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5, 0, NotSerialized) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Notify (HIDD, 0xCE)
|
||||
}
|
||||
|
||||
Method (_QD6, 0, NotSerialized) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Notify (HIDD, 0xCF)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: Volume Up
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: Volume Down
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: Power Button Press
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0, 0, NotSerialized) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1, 0, NotSerialized) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_CML_EC_DEFS_H
|
||||
#define _EC_STARLABS_CML_EC_DEFS_H
|
||||
|
||||
/* IT8987 chip ID byte values */
|
||||
#define ITE_CHIPID_VAL 0x8987
|
||||
|
||||
/* EC RAM offsets */
|
||||
#define ECRAM_KBL_TIMEOUT 0x07
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x08
|
||||
#define ECRAM_FAN_MODE 0x09
|
||||
#define ECRAM_MAX_CHARGE 0x10
|
||||
#define ECRAM_TRACKPAD_STATE 0x14
|
||||
#define ECRAM_KBL_STATE 0x18
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x19
|
||||
#define ECRAM_FN_LOCK_STATE 0x2c
|
||||
|
||||
#endif
|
|
@ -0,0 +1,171 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00),
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
FRMF, 8, // Force Mirror Flag
|
||||
TXEL, 8, // TXE Lock
|
||||
SSIT, 8, // Show Setup Items
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
FCLA, 8, // Fn Ctrl Reverse
|
||||
FANM, 8, // Fan Mode
|
||||
|
||||
Offset(0x0a),
|
||||
P0MV, 8, // PD Port 0 Major Version
|
||||
P0SV, 8, // PD Port 0 Minor Version
|
||||
P1MV, 8, // PD Port 1 Major Version
|
||||
P1SV, 8, // PD Port 1 Minor Version
|
||||
|
||||
Offset(0x10),
|
||||
BFCP, 8, // Battery Full Charge Percentage
|
||||
CDEV, 8, // Control Device
|
||||
OSFG, 8, // OS Flag
|
||||
|
||||
Offset(0x14),
|
||||
TPLA, 8, // Trackpad State
|
||||
AFG3, 8, // After G3
|
||||
CLTP, 8, // Close Trackpad
|
||||
WKOL, 8, // Wake on Lid
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
|
||||
Offset(0x1a),
|
||||
CWFU, 8, // CW2015 Full
|
||||
|
||||
Offset(0x1c),
|
||||
WIFI, 8, // WiFi Enable
|
||||
|
||||
Offset(0x22),
|
||||
ECT0, 8, // EC Build Time 0
|
||||
ECT1, 8, // EC Build Time 1
|
||||
ECT2, 8, // EC Build Time 2
|
||||
ECT3, 8, // EC Build Time 3
|
||||
ECT4, 8, // EC Build Time 4
|
||||
ECT5, 8, // EC Build Time 5
|
||||
ECT6, 8, // EC Build Time 6
|
||||
ECT7, 8, // EC Build Time 7
|
||||
ECT8, 8, // EC Build Time 8
|
||||
ECT9, 8, // EC Build Time 9
|
||||
FLKA, 8, // Function Lock State
|
||||
MICF, 8, // Mic Flag
|
||||
MUTF, 8, // Mute Flag
|
||||
BC12, 8, // BC12 Flag
|
||||
|
||||
Offset(0x30),
|
||||
STEF, 8, // Sensor T Error F
|
||||
ECD0, 8, // EC Build Date 0
|
||||
ECD1, 8, // EC Build Date 1
|
||||
ECD2, 8, // EC Build Date 2
|
||||
ECD3, 8, // EC Build Date 3
|
||||
ECD4, 8, // EC Build Date 4
|
||||
ECD5, 8, // EC Build Date 5
|
||||
ECD6, 8, // EC Build Date 6
|
||||
ECD7, 8, // EC Build Date 7
|
||||
ECD8, 8, // EC Build Date 8
|
||||
ECD9, 8, // EC Build Date 9
|
||||
|
||||
Offset(0x4c),
|
||||
PJN0, 8, // Project Name 0
|
||||
PJN1, 8, // Project Name 1
|
||||
PJN2, 8, // Project Name 2
|
||||
PJN3, 8, // Project Name 3
|
||||
|
||||
Offset(0x62),
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
|
||||
Offset(0x70),
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
|
||||
Offset(0x7f),
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80),
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
BT1A, 8, // Bt1 ASOC
|
||||
BT1T, 16, // Bt1 Temperature
|
||||
BT1C, 8, // Bt1 Control
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d),
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xa0),
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xb0),
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xc0),
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xe6),
|
||||
ECWD, 16, // EC Wakeup Delay
|
||||
ECWE, 8, // EC Wakeup Enable
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D, 0, NotSerialized) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_QA0, 0, NotSerialized) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q07, 0, NotSerialized) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
|
||||
Method (_Q04, 0, NotSerialized) // Event: Trackpad Lock
|
||||
{
|
||||
TPLS = TPLA
|
||||
}
|
||||
//
|
||||
// TODO:
|
||||
// Below Q Events need to be added
|
||||
//
|
||||
Method (_Q11) // Event: Keyboard Backlight Brightness
|
||||
{
|
||||
KLBC = KLBE
|
||||
}
|
||||
|
||||
Method (_Q99, 0, NotSerialized) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5, 0, NotSerialized) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Notify (HIDD, 0xCE)
|
||||
}
|
||||
|
||||
Method (_QD6, 0, NotSerialized) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Notify (HIDD, 0xCF)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q40, 0, NotSerialized) // Event: AC and DC Power
|
||||
{
|
||||
SMB2 = 0xC6
|
||||
}
|
||||
|
||||
Method (_Q41, 0, NotSerialized) // Event: Battery Charge between 0% and 20%
|
||||
{
|
||||
SMB2 = 0xC7
|
||||
}
|
||||
|
||||
Method (_Q42, 0, NotSerialized) // Event: Battery Charge between 20% and 60%
|
||||
{
|
||||
SMB2 = 0xC8
|
||||
}
|
||||
|
||||
Method (_Q43, 0, NotSerialized) // Event: Battery Charge between 60% and 100%
|
||||
{
|
||||
SMB2 = 0xC9
|
||||
}
|
||||
|
||||
Method (_Q44, 0, NotSerialized) // Event: AC Power Only
|
||||
{
|
||||
SMB2 = 0xCA
|
||||
}
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: Volume Up
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: Volume Down
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: Power Button Press
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0, 0, NotSerialized) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1, 0, NotSerialized) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
||||
|
||||
/*
|
||||
* The below events are unique to this platform.
|
||||
*/
|
||||
|
||||
|
||||
Method (_Q02, 0, NotSerialized) // Event: APP
|
||||
{
|
||||
Store ("EC: APP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q82, 0, NotSerialized) // Event: MIC
|
||||
{
|
||||
Store ("EC: MIC", Debug)
|
||||
}
|
||||
|
||||
Method (_Q83, 0, NotSerialized) // Event: MUTE
|
||||
{
|
||||
Store ("EC: MUTE", Debug)
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller.
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_GLK_EC_DEFS_H
|
||||
#define _EC_STARLABS_GLK_EC_DEFS_H
|
||||
|
||||
/* IT8987 chip ID byte values. */
|
||||
#define ITE_CHIPID_VAL 0x8987
|
||||
|
||||
/* EC RAM offsets. */
|
||||
#define ECRAM_TRACKPAD_STATE 0x14
|
||||
#define ECRAM_KBL_STATE 0x18
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x19
|
||||
#define ECRAM_KBL_TIMEOUT 0x1a
|
||||
#define ECRAM_FN_LOCK_STATE 0x2c
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x2d
|
||||
#define ECRAM_MAX_CHARGE 0x46
|
||||
#define ECRAM_FAN_MODE dead_code_t(uint8_t)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,173 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00),
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
FRMF, 8, // Force Mirror Flag
|
||||
TXEL, 8, // TXE Lock
|
||||
|
||||
Offset(0x10),
|
||||
CPWR, 8, // Control Power
|
||||
CDEV, 8, // Control Device
|
||||
OSFG, 8, // OS Flag
|
||||
CWFU, 8, // CW2015 Full
|
||||
TPLA, 8, // Trackpad State
|
||||
AFG3, 8, // After G3
|
||||
CLTP, 8, // Close Trackpad
|
||||
WKOL, 8, // Wake on Lid
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
|
||||
Offset(0x1a),
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
|
||||
Offset(0x22),
|
||||
ECT0, 8, // EC Build Time 0
|
||||
ECT1, 8, // EC Build Time 1
|
||||
ECT2, 8, // EC Build Time 2
|
||||
ECT3, 8, // EC Build Time 3
|
||||
ECT4, 8, // EC Build Time 4
|
||||
ECT5, 8, // EC Build Time 5
|
||||
ECT6, 8, // EC Build Time 6
|
||||
ECT7, 8, // EC Build Time 7
|
||||
ECT8, 8, // EC Build Time 8
|
||||
ECT9, 8, // EC Build Time 9
|
||||
|
||||
Offset(0x2c),
|
||||
FLKA, 8, // Function Lock State
|
||||
|
||||
Offset(0x30),
|
||||
STEF, 8, // Sensor T Error F
|
||||
ECD0, 8, // EC Build Date 0
|
||||
ECD1, 8, // EC Build Date 1
|
||||
ECD2, 8, // EC Build Date 2
|
||||
ECD3, 8, // EC Build Date 3
|
||||
ECD4, 8, // EC Build Date 4
|
||||
ECD5, 8, // EC Build Date 5
|
||||
ECD6, 8, // EC Build Date 6
|
||||
ECD7, 8, // EC Build Date 7
|
||||
ECD8, 8, // EC Build Date 8
|
||||
ECD9, 8, // EC Build Date 9
|
||||
|
||||
Offset(0x40),
|
||||
SHIP, 8, // Shipping Mode Flag
|
||||
LEDF, 8, // LED Control Flag
|
||||
LIDF, 8, // Lid Flag
|
||||
KBFL, 8, // Keyboard Flag
|
||||
CYCC, 8, // Cycle Count
|
||||
|
||||
Offset(0x46),
|
||||
BFCP, 8, // Battery Full Charge Percentage
|
||||
|
||||
Offset(0x62),
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
|
||||
Offset(0x70),
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
|
||||
Offset(0x7e),
|
||||
OCTF, 8, // OEM Control Flag
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80),
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
BT1A, 8, // Bt1 ASOC
|
||||
BT1T, 16, // Bt1 Temperature
|
||||
BT1C, 8, // Bt1 Control
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d),
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xbf),
|
||||
EJ8A, 8, // EJ898A Firmware Version
|
||||
|
||||
Offset(0xc0),
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xd0),
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xe0),
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xf0),
|
||||
P0SD, 8, // PD Port Status DD
|
||||
P0S4, 8, // PD Port Status 4
|
||||
P0S5, 8, // PD Port Status 5
|
||||
P0SE, 8, // PD Port Status E
|
||||
P0SA, 8, // PD Port Status 10
|
||||
P0SB, 8, // PD Port Status 11
|
||||
|
||||
Offset(0xfd),
|
||||
STCD, 8, // Shutdown Code
|
||||
EJ8R, 8, // EJ898A Need Reboot
|
||||
EJ8E, 8, // EJ898A Error
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D, 0, NotSerialized) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0A, 0, NotSerialized) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q07, 0, NotSerialized) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
//
|
||||
// TODO:
|
||||
// Below Q Events need to be added
|
||||
//
|
||||
// Method (_Q04, 0, NotSerialized) // Event: Trackpad Lock
|
||||
// {
|
||||
// TPLS = TPLA
|
||||
// }
|
||||
//
|
||||
// Method (_Q__, 0, NotSerialized) // Event: Keyboard Backlight Brightness
|
||||
// {
|
||||
// KLBC = KLBE
|
||||
// }
|
||||
//
|
||||
|
||||
Method (_Q99, 0, NotSerialized) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5, 0, NotSerialized) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Notify (HIDD, 0xCE)
|
||||
}
|
||||
|
||||
Method (_QD6, 0, NotSerialized) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Notify (HIDD, 0xCF)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: Volume Up
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: Volume Down
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: Power Button Press
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0, 0, NotSerialized) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1, 0, NotSerialized) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_KBL_EC_DEFS_H
|
||||
#define _EC_STARLABS_KBL_EC_DEFS_H
|
||||
|
||||
/* IT8987 chip ID byte values */
|
||||
#define ITE_CHIPID_VAL 0x8987
|
||||
|
||||
/* EC RAM offsets */
|
||||
#define ECRAM_TRACKPAD_STATE 0x14
|
||||
#define ECRAM_KBL_STATE 0x18
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x19
|
||||
#define ECRAM_KBL_TIMEOUT 0x1a
|
||||
#define ECRAM_FN_LOCK_STATE 0x2c
|
||||
#define ECRAM_FAN_MODE 0x42
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x43
|
||||
#define ECRAM_MAX_CHARGE 0xff /* TODO: Add */
|
||||
|
||||
#endif
|
|
@ -0,0 +1,160 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00),
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
FRMF, 8, // Force Mirror Flag
|
||||
|
||||
Offset(0x0c),
|
||||
ECBY, 8, // Build Year
|
||||
ECBM, 8, // Build Month
|
||||
ECBD, 8, // Build Day
|
||||
ECBI, 8, // Build Index
|
||||
|
||||
Offset(0x10),
|
||||
CPWR, 8, // Control Power
|
||||
CDEV, 8, // Control Device
|
||||
OSFG, 8, // OS Flag
|
||||
|
||||
Offset(0x14),
|
||||
TPLA, 8, // Trackpad State
|
||||
|
||||
Offset(0x18),
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
|
||||
Offset(0x20),
|
||||
TCHC, 8, // Thermal Charge CMD
|
||||
TCHF, 8, // Thermal Charge Flag
|
||||
|
||||
Offset(0x2c),
|
||||
FLKA, 8, // Function Lock State
|
||||
|
||||
Offset(0x30),
|
||||
STEF, 8, // Sensor T Error F
|
||||
|
||||
Offset(0x40),
|
||||
SHIP, 8, // Shipping Mode Flag
|
||||
|
||||
Offset(0x42),
|
||||
FANM, 8, // Fan Mode
|
||||
KBFL, 8, // Keyboard Flag
|
||||
|
||||
Offset(0x50),
|
||||
CHRA, 16, // Charge Rate
|
||||
CHIC, 16, // Charge Input Current
|
||||
CHVL, 16, // Charge Vlot
|
||||
CHOP, 16, // Charge Option
|
||||
|
||||
Offset(0x62),
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
|
||||
|
||||
Offset(0x70),
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
|
||||
Offset(0x7e),
|
||||
OCTF, 8, // OEM Control Flag
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80),
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
BT1A, 8, // Bt1 ASOC
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d),
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xbf),
|
||||
EJ8A, 8, // EJ898A Firmware Version
|
||||
|
||||
Offset(0xc0),
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xd0),
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xe0),
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xf0),
|
||||
P0SD, 8, // PD Port Status DD
|
||||
P0S4, 8, // PD Port Status 4
|
||||
P0S5, 8, // PD Port Status 5
|
||||
P0SE, 8, // PD Port Status E
|
||||
P0SA, 8, // PD Port Status 10
|
||||
P0SB, 8, // PD Port Status 11
|
||||
|
||||
Offset(0xfd),
|
||||
STCD, 8, // Shutdown Code
|
||||
EJ8R, 8, // EJ898A Need Reboot
|
||||
EJ8E, 8, // EJ898A Error
|
||||
}
|
|
@ -0,0 +1,275 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D, 0, NotSerialized) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0A, 0, NotSerialized) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q07, 0, NotSerialized) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
//
|
||||
// TODO:
|
||||
// Below Q Events need to be added
|
||||
//
|
||||
// Method (_Q04, 0, NotSerialized) // Event: Trackpad Lock
|
||||
// {
|
||||
// TPLS = TPLA
|
||||
// }
|
||||
//
|
||||
// Method (_Q__, 0, NotSerialized) // Event: Keyboard Backlight Brightness
|
||||
// {
|
||||
// KLBC = KLBE
|
||||
// KLSC = KLSE
|
||||
// }
|
||||
//
|
||||
|
||||
Method (_Q99, 0, NotSerialized) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5, 0, NotSerialized) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Notify (HIDD, 0xCE)
|
||||
}
|
||||
|
||||
Method (_QD6, 0, NotSerialized) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Notify (HIDD, 0xCF)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
//
|
||||
// TODO:
|
||||
// Below Q Events need to be added
|
||||
//
|
||||
// Method (_Q40, 0, NotSerialized) // Event: AC and DC Power
|
||||
// {
|
||||
// SMB2 = 0xC6
|
||||
// }
|
||||
//
|
||||
// Method (_Q41, 0, NotSerialized) // Event: Battery Charge between 0% and 20%
|
||||
// {
|
||||
// SMB2 = 0xC7
|
||||
// }
|
||||
//
|
||||
// Method (_Q42, 0, NotSerialized) // Event: Battery Charge between 20% and 60%
|
||||
// {
|
||||
// SMB2 = 0xC8
|
||||
// }
|
||||
//
|
||||
// Method (_Q43, 0, NotSerialized) // Event: Battery Charge between 60% and 100%
|
||||
// {
|
||||
// SMB2 = 0xC9
|
||||
// }
|
||||
//
|
||||
// Method (_Q44, 0, NotSerialized) // Event: AC Power Only
|
||||
// {
|
||||
// SMB2 = 0xCA
|
||||
// }
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: Volume Up
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: Volume Down
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: Power Button Press
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0, 0, NotSerialized) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1, 0, NotSerialized) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
||||
|
||||
/*
|
||||
* The below events are unique to this platform.
|
||||
*/
|
||||
|
||||
|
||||
Method (_Q85, 0, NotSerialized) // Event: HOME
|
||||
{
|
||||
Store ("EC: HOME", Debug)
|
||||
}
|
||||
|
||||
Method (_Q79, 0, NotSerialized) // Event: USB Type-C
|
||||
{
|
||||
Store ("EC: USB Type-C", Debug)
|
||||
UCEV()
|
||||
}
|
||||
|
||||
Method (_Q0E, 0, NotSerialized) // Event: SLEEP
|
||||
{
|
||||
Store ("EC: SLEEP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q13, 0, NotSerialized) // Event: BRIGHTNESS
|
||||
{
|
||||
Store ("EC: BRIGHTNESS", Debug)
|
||||
}
|
||||
|
||||
Method (_Q20, 0, NotSerialized) // Event: CPU_T
|
||||
{
|
||||
Store ("EC: CPU_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q21, 0, NotSerialized) // Event: SKIN_T
|
||||
{
|
||||
Store ("EC: SKIN_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q30, 0, NotSerialized) // Event: THROT_OFF
|
||||
{
|
||||
Store ("EC: THROT_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q31, 0, NotSerialized) // Event: THROT_LV1
|
||||
{
|
||||
Store ("EC: THROT_LV1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q32, 0, NotSerialized) // Event: THROT_LV2
|
||||
{
|
||||
Store ("EC: THROT_LV2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q33, 0, NotSerialized) // Event: THROT_LV3
|
||||
{
|
||||
Store ("EC: THROT_LV3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q34, 0, NotSerialized) // Event: THROT_LV4
|
||||
{
|
||||
Store ("EC: THROT_LV4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q35, 0, NotSerialized) // Event: THROT_LV5
|
||||
{
|
||||
Store ("EC: THROT_LV5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q36, 0, NotSerialized) // Event: THROT_LV6
|
||||
{
|
||||
Store ("EC: THROT_LV6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q37, 0, NotSerialized) // Event: THROT_LV7
|
||||
{
|
||||
Store ("EC: THROT_LV7", Debug)
|
||||
}
|
||||
|
||||
Method (_Q38, 0, NotSerialized) // Event: CPU_DN_SPEED
|
||||
{
|
||||
Store ("EC: CPU_DN_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3C, 0, NotSerialized) // Event: CPU_UP_SPEED
|
||||
{
|
||||
Store ("EC: CPU_UP_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3D, 0, NotSerialized) // Event: CPU_TURBO_OFF
|
||||
{
|
||||
Store ("EC: CPU_TURBO_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3E, 0, NotSerialized) // Event: CPU_TURBO_ON
|
||||
{
|
||||
Store ("EC: CPU_TURBO_ON", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3F, 0, NotSerialized) // Event: SHUTDOWN
|
||||
{
|
||||
Store ("EC: SHUTDOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q01, 0, NotSerialized) // Event: F1 Hot Key
|
||||
{
|
||||
Store ("EC: F1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q02, 0, NotSerialized) // Event: F2 Hot Key
|
||||
{
|
||||
Store ("EC: F2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q03, 0, NotSerialized) // Event: F3 Hot Key
|
||||
{
|
||||
Store ("EC: F3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q04, 0, NotSerialized) // Event: F4 Hot Key
|
||||
{
|
||||
Store ("EC: F4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q05, 0, NotSerialized) // Event: F5 Hot Key
|
||||
{
|
||||
Store ("EC: F5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q09, 0, NotSerialized) // Event: F9 Hot Key
|
||||
{
|
||||
Store ("EC: F9", Debug)
|
||||
}
|
||||
|
||||
Method (_Q10, 0, NotSerialized) // Event: F10 Hot Key
|
||||
{
|
||||
Store ("EC: F10", Debug)
|
||||
}
|
||||
|
||||
Method (_Q11, 0, NotSerialized) // Event: F11 Hot Key
|
||||
{
|
||||
Store ("EC: F11", Debug)
|
||||
}
|
||||
|
||||
Method (_Q12, 0, NotSerialized) // Event: F12 Hot Key
|
||||
{
|
||||
Store ("EC: F6", Debug)
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_MERLIN_EC_DEFS_H
|
||||
#define _EC_STARLABS_MERLIN_EC_DEFS_H
|
||||
|
||||
/* IT5570 chip ID byte values */
|
||||
#define ITE_CHIPID_VAL 0x5570
|
||||
|
||||
/* EC RAM offsets */
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x30
|
||||
#define ECRAM_FN_LOCK_STATE 0x31
|
||||
#define ECRAM_TRACKPAD_STATE 0x32
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x33
|
||||
#define ECRAM_KBL_STATE 0x34
|
||||
#define ECRAM_KBL_TIMEOUT 0x35
|
||||
#define ECRAM_FAN_MODE 0x50
|
||||
#define ECRAM_MAX_CHARGE 0x51
|
||||
|
||||
#endif
|
|
@ -0,0 +1,161 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00), // Versions:
|
||||
SKUI, 8, // SKU ID
|
||||
BDID, 8, // Board ID
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
OSFG, 8, // OS Flag
|
||||
|
||||
Offset(0x10), // Build Time:
|
||||
ECT0, 8, // EC Build Time 0
|
||||
ECT1, 8, // EC Build Time 1
|
||||
ECT2, 8, // EC Build Time 2
|
||||
ECT3, 8, // EC Build Time 3
|
||||
ECT4, 8, // EC Build Time 4
|
||||
ECT5, 8, // EC Build Time 5
|
||||
ECT6, 8, // EC Build Time 6
|
||||
ECT7, 8, // EC Build Time 7
|
||||
ECT8, 8, // EC Build Time 8
|
||||
ECT9, 8, // EC Build Time 9
|
||||
|
||||
Offset(0x20), // Build Date:
|
||||
ECD0, 8, // EC Build Date 0
|
||||
ECD1, 8, // EC Build Date 1
|
||||
ECD2, 8, // EC Build Date 2
|
||||
ECD3, 8, // EC Build Date 3
|
||||
ECD4, 8, // EC Build Date 4
|
||||
ECD5, 8, // EC Build Date 5
|
||||
ECD6, 8, // EC Build Date 6
|
||||
ECD7, 8, // EC Build Date 7
|
||||
ECD8, 8, // EC Build Date 8
|
||||
ECD9, 8, // EC Build Date 9
|
||||
|
||||
Offset(0x30), // Keyboard:
|
||||
FCLA, 8, // Fn Ctrl Reverse
|
||||
FLKA, 8, // Function Lock State
|
||||
TPLA, 8, // Trackpad State
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
|
||||
Offset(0x40), // Flags:
|
||||
SHIP, 8, // Shipping Mode Flag
|
||||
CSFG, 8, // Modern Standby Flag
|
||||
KBCD, 8, // Rotate Flag
|
||||
WIFI, 8, // WiFi Enable
|
||||
AUDI, 8, // Control Audio
|
||||
|
||||
Offset(0x50), // Devices:
|
||||
FANM, 8, // Fan Mode
|
||||
BFCP, 8, // Battery Full Charge Percentage
|
||||
|
||||
Offset(0x60), // Recovery:
|
||||
BSRC, 8, // BIOS Recover
|
||||
|
||||
Offset(0x70), // Temperatures:
|
||||
TSE1, 8, // Sensor 1 Temperature
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
TSE3, 8, // Sensor 3 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
SURF, 8, // Chassis Surface Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
|
||||
Offset(0x7f), // Lid:
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80), // Battery:
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
BATT, 16, // Battery Temperature
|
||||
BATC, 8, // Battery Temperature Ces
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d), // OPM:
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xb0), // MGO;
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xc0), // CCI:
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xd0), // MGI:
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xe6), // Delays:
|
||||
ECWD, 16, // EC Wakeup Delay
|
||||
ECWE, 8, // EC Wakeup Enable
|
||||
|
||||
Offset(0xf7), // Thunderbolt:
|
||||
TBTC, 8, // Thunderbolt Command
|
||||
TBTP, 8, // Thunderbolt Data Port
|
||||
TBTD, 8, // Thunderbolt Data
|
||||
TBTA, 8, // Thunderbolt Acknowledge
|
||||
TBTG, 16, // Thunderbolt DBG Data
|
||||
}
|
|
@ -0,0 +1,280 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0A) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q05) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q06) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q87) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
|
||||
Method (_Q88) // Event: Trackpad Lock
|
||||
{
|
||||
TPLS = TPLA
|
||||
}
|
||||
Method (_Q11) // Event: Keyboard Backlight Brightness
|
||||
{
|
||||
KLBC = KLBE
|
||||
KLSC = KLSE
|
||||
}
|
||||
|
||||
Method (_Q99) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Store ("EC: 10 Second Power Button Pressed", Debug)
|
||||
}
|
||||
|
||||
Method (_QD6) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Store ("EC: 10 Second Power Button Release", Debug)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q40) // Event: AC_DC
|
||||
{
|
||||
SMB2 = 0xC6
|
||||
}
|
||||
|
||||
Method (_Q41) // Event: DC_20_0
|
||||
{
|
||||
SMB2 = 0xC7
|
||||
}
|
||||
|
||||
Method (_Q42) // Event: DC_60_20
|
||||
{
|
||||
SMB2 = 0xC9
|
||||
}
|
||||
|
||||
Method (_Q43) // Event: DC_100_60
|
||||
{
|
||||
SMB2 = 0xC9
|
||||
}
|
||||
|
||||
Method (_Q44) // Event: AC_ONLY
|
||||
{
|
||||
SMB2 = 0xCA
|
||||
}
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: VOLUME_UP
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: VOLUME_DOWN
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: PWRBTN
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
||||
|
||||
/*
|
||||
* The below events are unique to this platform.
|
||||
*/
|
||||
|
||||
Method (_Q79, 0, NotSerialized) // Event: USB Type-C
|
||||
{
|
||||
Store ("EC: USB Type-C", Debug)
|
||||
UCEV()
|
||||
}
|
||||
|
||||
Method (_Q85, 0, NotSerialized) // Event: HOME
|
||||
{
|
||||
Store ("EC: HOME", Debug)
|
||||
}
|
||||
|
||||
Method (_Q01) // Event: F1 Hot Key
|
||||
{
|
||||
Store ("EC: F1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q02) // Event: F2 Hot Key
|
||||
{
|
||||
Store ("EC: F2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q03) // Event: F3 Hot Key
|
||||
{
|
||||
Store ("EC: F3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q04) // Event: F4 Hot Key
|
||||
{
|
||||
Store ("EC: F4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q08) // Event: F5 Hot Key
|
||||
{
|
||||
Store ("EC: F5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q09) // Event: F6 Hot Key
|
||||
{
|
||||
Store ("EC: F6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q07) // Event: F7 Hot Key
|
||||
{
|
||||
Store ("EC: F7", Debug)
|
||||
}
|
||||
|
||||
Method (_Q10) // Event: F10 Hot Key
|
||||
{
|
||||
Store ("EC: F10", Debug)
|
||||
}
|
||||
|
||||
Method (_Q12) // Event: F12 Hot Key
|
||||
{
|
||||
Store ("EC: F6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q0E, 0, NotSerialized) // Event: SLEEP
|
||||
{
|
||||
Store ("EC: SLEEP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q13, 0, NotSerialized) // Event: BRIGHTNESS
|
||||
{
|
||||
Store ("EC: BRIGHTNESS", Debug)
|
||||
}
|
||||
|
||||
Method (_Q20, 0, NotSerialized) // Event: CPU_T
|
||||
{
|
||||
Store ("EC: CPU_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q21, 0, NotSerialized) // Event: SKIN_T
|
||||
{
|
||||
Store ("EC: SKIN_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q30, 0, NotSerialized) // Event: THROT_OFF
|
||||
{
|
||||
Store ("EC: THROT_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q31, 0, NotSerialized) // Event: THROT_LV1
|
||||
{
|
||||
Store ("EC: THROT_LV1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q32, 0, NotSerialized) // Event: THROT_LV2
|
||||
{
|
||||
Store ("EC: THROT_LV2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q33, 0, NotSerialized) // Event: THROT_LV3
|
||||
{
|
||||
Store ("EC: THROT_LV3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q34, 0, NotSerialized) // Event: THROT_LV4
|
||||
{
|
||||
Store ("EC: THROT_LV4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q35, 0, NotSerialized) // Event: THROT_LV5
|
||||
{
|
||||
Store ("EC: THROT_LV5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q36, 0, NotSerialized) // Event: THROT_LV6
|
||||
{
|
||||
Store ("EC: THROT_LV6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q37, 0, NotSerialized) // Event: THROT_LV7
|
||||
{
|
||||
Store ("EC: THROT_LV7", Debug)
|
||||
}
|
||||
|
||||
Method (_Q38, 0, NotSerialized) // Event: CPU_DN_SPEED
|
||||
{
|
||||
Store ("EC: CPU_DN_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3C, 0, NotSerialized) // Event: CPU_UP_SPEED
|
||||
{
|
||||
Store ("EC: CPU_UP_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3D, 0, NotSerialized) // Event: CPU_TURBO_OFF
|
||||
{
|
||||
Store ("EC: CPU_TURBO_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3E, 0, NotSerialized) // Event: CPU_TURBO_ON
|
||||
{
|
||||
Store ("EC: CPU_TURBO_ON", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3F, 0, NotSerialized) // Event: SHUTDOWN
|
||||
{
|
||||
Store ("EC: SHUTDOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q45) // Event: SENSOR_T76
|
||||
{
|
||||
SMB2 = 0xCB
|
||||
}
|
||||
|
||||
Method (_Q48, 0, NotSerialized) // Event: Fan Turbo On
|
||||
{
|
||||
Store ("EC: Fan Turbo On", Debug)
|
||||
}
|
||||
|
||||
Method (_Q49, 0, NotSerialized) // Event: Fan Turbo Off
|
||||
{
|
||||
Store ("EC: Fan Turbo Off", Debug)
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
/*
|
||||
* EC communication interface for ITE Embedded Controller
|
||||
*/
|
||||
|
||||
#ifndef _EC_STARLABS_TGL_EC_DEFS_H
|
||||
#define _EC_STARLABS_TGL_EC_DEFS_H
|
||||
|
||||
/* IT5570 chip ID byte values */
|
||||
#define ITE_CHIPID_VAL 0x5570
|
||||
|
||||
/* EC RAM offsets */
|
||||
#define ECRAM_KBL_BRIGHTNESS 0x09
|
||||
#define ECRAM_KBL_TIMEOUT 0x10
|
||||
#define ECRAM_KBL_STATE 0x0a
|
||||
#define ECRAM_TRACKPAD_STATE 0x0c
|
||||
#define ECRAM_FN_LOCK_STATE 0x0f
|
||||
#define ECRAM_FN_CTRL_REVERSE 0x17
|
||||
#define ECRAM_MAX_CHARGE 0x1a
|
||||
#define ECRAM_FAN_MODE 0x1b
|
||||
|
||||
#endif
|
|
@ -0,0 +1,168 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
OperationRegion (ECF2, EmbeddedControl, 0x00, 0x100)
|
||||
Field (ECF2, ByteAcc, Lock, Preserve)
|
||||
{
|
||||
Offset(0x00),
|
||||
ECMV, 8, // Major Version Number
|
||||
ECSV, 8, // Minor Version Number
|
||||
KBVS, 8, // Keyboard Controller Version
|
||||
ECTV, 8, // Test Version Number
|
||||
OSFG, 8, // OS Flag
|
||||
FRMF, 8, // Force Mirror Flag
|
||||
|
||||
Offset(0x07),
|
||||
SKUI, 8, // SKU ID
|
||||
CSFG, 8, // Modern Standby Flag
|
||||
KLBE, 8, // Keyboard Backlight Brightness
|
||||
KLSE, 8, // Keyboard Backlight State
|
||||
BDID, 8, // Board ID
|
||||
TPLA, 8, // Trackpad State
|
||||
KBCD, 8, // Rotate Flag
|
||||
WIFI, 8, // WiFi Enable
|
||||
FLKA, 8, // Function Lock State
|
||||
KLTE, 8, // Keyboard Backlight Timeout
|
||||
|
||||
Offset(0x13),
|
||||
AUDI, 8, // Control Audio
|
||||
|
||||
Offset(0x15),
|
||||
SURF, 8, // Chassis Surface Temperature
|
||||
CHAR, 8, // Charger Temperature
|
||||
FCLA, 8, // Fn Ctrl Reverse
|
||||
|
||||
Offset(0x1a),
|
||||
BFCP, 8, // Battery Full Charge Percentage
|
||||
FANM, 8, // Fan Mode
|
||||
|
||||
Offset(0x1d),
|
||||
BSRC, 8, // BIOS Recover
|
||||
|
||||
Offset(0x40),
|
||||
SHIP, 8, // Shipping Mode Flag
|
||||
ECT0, 8, // EC Build Time 0
|
||||
ECT1, 8, // EC Build Time 1
|
||||
ECT2, 8, // EC Build Time 2
|
||||
ECT3, 8, // EC Build Time 3
|
||||
ECT4, 8, // EC Build Time 4
|
||||
ECT5, 8, // EC Build Time 5
|
||||
ECT6, 8, // EC Build Time 6
|
||||
ECT7, 8, // EC Build Time 7
|
||||
ECT8, 8, // EC Build Time 8
|
||||
ECT9, 8, // EC Build Time 9
|
||||
|
||||
Offset(0x4B),
|
||||
ECD0, 8, // EC Build Date 0
|
||||
ECD1, 8, // EC Build Date 1
|
||||
ECD2, 8, // EC Build Date 2
|
||||
ECD3, 8, // EC Build Date 3
|
||||
ECD4, 8, // EC Build Date 4
|
||||
ECD5, 8, // EC Build Date 5
|
||||
ECD6, 8, // EC Build Date 6
|
||||
ECD7, 8, // EC Build Date 7
|
||||
ECD8, 8, // EC Build Date 8
|
||||
ECD9, 8, // EC Build Date 9
|
||||
|
||||
Offset(0x62),
|
||||
TSE2, 8, // Sensor 2 Temperature
|
||||
SENF, 8, // Sensor F
|
||||
TSHT, 8, // Thermal Sensor High Trip Point
|
||||
TSLT, 8, // Thermal Sensor Low Trip Point
|
||||
THER, 8, // Thermal Source
|
||||
|
||||
Offset(0x68),
|
||||
BATT, 16, // Battery Temperature
|
||||
BATC, 8, // Battery Temperature Ces
|
||||
|
||||
Offset(0x70),
|
||||
CPUT, 8, // PECI CPU Temperature
|
||||
PMXT, 8, // PLMX Temperature
|
||||
TSE1, 8, // Sensor 1 Temperature
|
||||
TSE3, 8, // Sensor 3 Temperature
|
||||
|
||||
Offset(0x7f),
|
||||
LSTE, 1, // Lid Status
|
||||
, 7, // Reserved
|
||||
|
||||
Offset(0x80),
|
||||
ECPS, 8, // AC & Battery status
|
||||
B1MN, 8, // Battery Model Number Code
|
||||
B1SN, 16, // Battery Serial Number
|
||||
B1DC, 16, // Battery Design Capacity
|
||||
B1DV, 16, // Battery Design Voltage
|
||||
B1FC, 16, // Battery Last Full Charge Capacity
|
||||
B1TP, 16, // Battery Trip Point
|
||||
B1ST, 8, // Battery State
|
||||
B1PR, 16, // Battery Present Rate
|
||||
B1RC, 16, // Battery Remaining Capacity
|
||||
B1PV, 16, // Battery Present Voltage
|
||||
BPRP, 8, // Battery Remaining percentage
|
||||
|
||||
// Unicorn - doesn't actually exist
|
||||
Offset(0x9d),
|
||||
OPWE, 8, // OPM write to EC flag for UCSI
|
||||
// Unicorn - doesn't actually exist
|
||||
|
||||
Offset(0xb0),
|
||||
MGO0, 8, // UCSI DS MGO 0
|
||||
MGO1, 8, // UCSI DS MGO 1
|
||||
MGO2, 8, // UCSI DS MGO 2
|
||||
MGO3, 8, // UCSI DS MGO 3
|
||||
MGO4, 8, // UCSI DS MGO 4
|
||||
MGO5, 8, // UCSI DS MGO 5
|
||||
MGO6, 8, // UCSI DS MGO 6
|
||||
MGO7, 8, // UCSI DS MGO 7
|
||||
MGO8, 8, // UCSI DS MGO 8
|
||||
MGO9, 8, // UCSI DS MGO 9
|
||||
MGOA, 8, // UCSI DS MGO A
|
||||
MGOB, 8, // UCSI DS MGO B
|
||||
MGOC, 8, // UCSI DS MGO C
|
||||
MGOD, 8, // UCSI DS MGO D
|
||||
MGOE, 8, // UCSI DS MGO E
|
||||
MGOF, 8, // UCSI DS MGO F
|
||||
|
||||
Offset(0xc0),
|
||||
UCSV, 16, // UCSI DS Version
|
||||
UCSD, 16, // UCSI DS Reserved
|
||||
CCI0, 8, // UCSI DS CCI 0
|
||||
CCI1, 8, // UCSI DS CCI 1
|
||||
CCI2, 8, // UCSI DS CCI 2
|
||||
CCI3, 8, // UCSI DS CCI 3
|
||||
CTL0, 8, // UCSI DS Control 0
|
||||
CTL1, 8, // UCSI DS Control 0
|
||||
CTL2, 8, // UCSI DS Control 0
|
||||
CTL3, 8, // UCSI DS Control 0
|
||||
CTL4, 8, // UCSI DS Control 0
|
||||
CTL5, 8, // UCSI DS Control 0
|
||||
CTL6, 8, // UCSI DS Control 0
|
||||
CTL7, 8, // UCSI DS Control 0
|
||||
|
||||
Offset(0xd0),
|
||||
MGI0, 8, // UCSI DS MGI 0
|
||||
MGI1, 8, // UCSI DS MGI 1
|
||||
MGI2, 8, // UCSI DS MGI 2
|
||||
MGI3, 8, // UCSI DS MGI 3
|
||||
MGI4, 8, // UCSI DS MGI 4
|
||||
MGI5, 8, // UCSI DS MGI 5
|
||||
MGI6, 8, // UCSI DS MGI 6
|
||||
MGI7, 8, // UCSI DS MGI 7
|
||||
MGI8, 8, // UCSI DS MGI 8
|
||||
MGI9, 8, // UCSI DS MGI 9
|
||||
MGIA, 8, // UCSI DS MGI A
|
||||
MGIB, 8, // UCSI DS MGI B
|
||||
MGIC, 8, // UCSI DS MGI C
|
||||
MGID, 8, // UCSI DS MGI D
|
||||
MGIE, 8, // UCSI DS MGI E
|
||||
MGIF, 8, // UCSI DS MGI F
|
||||
|
||||
Offset(0xe6),
|
||||
ECWD, 16, // EC Wakeup Delay
|
||||
ECWE, 8, // EC Wakeup Enable
|
||||
|
||||
Offset(0xf7),
|
||||
TBTC, 8, // Thunderbolt Command
|
||||
TBTP, 8, // Thunderbolt Data Port
|
||||
TBTD, 8, // Thunderbolt Data
|
||||
TBTA, 8, // Thunderbolt Acknowledge
|
||||
TBTG, 16, // Thunderbolt DBG Data
|
||||
}
|
|
@ -0,0 +1,279 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
Method (_Q0D, 0, NotSerialized) // Event: Lid Opened
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized) // Event: Lid Closed
|
||||
{
|
||||
\LIDS = LSTE
|
||||
Notify (LID0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0A, 0, NotSerialized) // Event: AC Power Connected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (ADP1, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized) // Event: AC Power Disconnected
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q05, 0, NotSerialized) // Event: Backlight Brightness Down
|
||||
{
|
||||
^^^^HIDD.HPEM (20)
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized) // Event: Backlight Brightness Up
|
||||
{
|
||||
^^^^HIDD.HPEM (19)
|
||||
}
|
||||
|
||||
Method (_Q87, 0, NotSerialized) // Event: Function Lock
|
||||
{
|
||||
FLKS = FLKA
|
||||
}
|
||||
|
||||
Method (_Q88, 0, NotSerialized) // Event: Trackpad Lock
|
||||
{
|
||||
TPLS = TPLA
|
||||
}
|
||||
Method (_Q11) // Event: Keyboard Backlight Brightness
|
||||
{
|
||||
KLBC = KLBE
|
||||
}
|
||||
|
||||
Method (_Q99, 0, NotSerialized) // Event: Airplane Mode
|
||||
{
|
||||
^^^^HIDD.HPEM (8)
|
||||
}
|
||||
|
||||
Method (_QD5, 0, NotSerialized) // Event: 10 Second Power Button Pressed
|
||||
{
|
||||
Notify (HIDD, 0xCE)
|
||||
}
|
||||
|
||||
Method (_QD6, 0, NotSerialized) // Event: 10 Second Power Button Released
|
||||
{
|
||||
Notify (HIDD, 0xCF)
|
||||
}
|
||||
|
||||
Method (_Q22, 0, NotSerialized) // Event: CHARGER_T
|
||||
{
|
||||
Store ("EC: CHARGER_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q40, 0, NotSerialized) // Event: AC and DC Power
|
||||
{
|
||||
SMB2 = 0xC6
|
||||
}
|
||||
|
||||
Method (_Q41, 0, NotSerialized) // Event: Battery Charge between 0% and 20%
|
||||
{
|
||||
SMB2 = 0xC7
|
||||
}
|
||||
|
||||
Method (_Q42, 0, NotSerialized) // Event: Battery Charge between 20% and 60%
|
||||
{
|
||||
SMB2 = 0xC8
|
||||
}
|
||||
|
||||
Method (_Q43, 0, NotSerialized) // Event: Battery Charge between 60% and 100%
|
||||
{
|
||||
SMB2 = 0xC9
|
||||
}
|
||||
|
||||
Method (_Q44, 0, NotSerialized) // Event: AC Power Only
|
||||
{
|
||||
SMB2 = 0xCA
|
||||
}
|
||||
|
||||
Method (_Q80, 0, NotSerialized) // Event: Volume Up
|
||||
{
|
||||
Store ("EC: VOLUME_UP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q81, 0, NotSerialized) // Event: Volume Down
|
||||
{
|
||||
Store ("EC: VOLUME_DOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q54, 0, NotSerialized) // Event: Power Button Press
|
||||
{
|
||||
Store ("EC: PWRBTN", Debug)
|
||||
}
|
||||
|
||||
Method (_QF0, 0, NotSerialized) // Event: Temperature Report
|
||||
{
|
||||
Store ("EC: Temperature Report", Debug)
|
||||
}
|
||||
|
||||
Method (_QF1, 0, NotSerialized) // Event: Temperature Trigger
|
||||
{
|
||||
// Notify (SEN3, 0x90)
|
||||
}
|
||||
|
||||
/*
|
||||
* The below events are unique to this platform.
|
||||
*/
|
||||
|
||||
Method (_Q79, 0, NotSerialized) // Event: USB Type-C
|
||||
{
|
||||
Store ("EC: USB Type-C", Debug)
|
||||
UCEV()
|
||||
}
|
||||
|
||||
Method (_Q85, 0, NotSerialized) // Event: HOME
|
||||
{
|
||||
Store ("EC: HOME", Debug)
|
||||
}
|
||||
|
||||
Method (_Q01, 0, NotSerialized) // Event: F1 Hot Key
|
||||
{
|
||||
Store ("EC: F1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q02, 0, NotSerialized) // Event: F2 Hot Key
|
||||
{
|
||||
Store ("EC: F2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q03, 0, NotSerialized) // Event: F3 Hot Key
|
||||
{
|
||||
Store ("EC: F3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q04, 0, NotSerialized) // Event: F4 Hot Key
|
||||
{
|
||||
Store ("EC: F4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized) // Event: F5 Hot Key
|
||||
{
|
||||
Store ("EC: F5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q09, 0, NotSerialized) // Event: F6 Hot Key
|
||||
{
|
||||
Store ("EC: F6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q07, 0, NotSerialized) // Event: F7 Hot Key
|
||||
{
|
||||
Store ("EC: F7", Debug)
|
||||
}
|
||||
|
||||
Method (_Q10, 0, NotSerialized) // Event: F10 Hot Key
|
||||
{
|
||||
Store ("EC: F10", Debug)
|
||||
}
|
||||
|
||||
Method (_Q12, 0, NotSerialized) // Event: F12 Hot Key
|
||||
{
|
||||
Store ("EC: F6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q0E, 0, NotSerialized) // Event: SLEEP
|
||||
{
|
||||
Store ("EC: SLEEP", Debug)
|
||||
}
|
||||
|
||||
Method (_Q13, 0, NotSerialized) // Event: BRIGHTNESS
|
||||
{
|
||||
Store ("EC: BRIGHTNESS", Debug)
|
||||
}
|
||||
|
||||
Method (_Q20, 0, NotSerialized) // Event: CPU_T
|
||||
{
|
||||
Store ("EC: CPU_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q21, 0, NotSerialized) // Event: SKIN_T
|
||||
{
|
||||
Store ("EC: SKIN_T", Debug)
|
||||
}
|
||||
|
||||
Method (_Q30, 0, NotSerialized) // Event: THROT_OFF
|
||||
{
|
||||
Store ("EC: THROT_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q31, 0, NotSerialized) // Event: THROT_LV1
|
||||
{
|
||||
Store ("EC: THROT_LV1", Debug)
|
||||
}
|
||||
|
||||
Method (_Q32, 0, NotSerialized) // Event: THROT_LV2
|
||||
{
|
||||
Store ("EC: THROT_LV2", Debug)
|
||||
}
|
||||
|
||||
Method (_Q33, 0, NotSerialized) // Event: THROT_LV3
|
||||
{
|
||||
Store ("EC: THROT_LV3", Debug)
|
||||
}
|
||||
|
||||
Method (_Q34, 0, NotSerialized) // Event: THROT_LV4
|
||||
{
|
||||
Store ("EC: THROT_LV4", Debug)
|
||||
}
|
||||
|
||||
Method (_Q35, 0, NotSerialized) // Event: THROT_LV5
|
||||
{
|
||||
Store ("EC: THROT_LV5", Debug)
|
||||
}
|
||||
|
||||
Method (_Q36, 0, NotSerialized) // Event: THROT_LV6
|
||||
{
|
||||
Store ("EC: THROT_LV6", Debug)
|
||||
}
|
||||
|
||||
Method (_Q37, 0, NotSerialized) // Event: THROT_LV7
|
||||
{
|
||||
Store ("EC: THROT_LV7", Debug)
|
||||
}
|
||||
|
||||
Method (_Q38, 0, NotSerialized) // Event: CPU_DN_SPEED
|
||||
{
|
||||
Store ("EC: CPU_DN_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3C, 0, NotSerialized) // Event: CPU_UP_SPEED
|
||||
{
|
||||
Store ("EC: CPU_UP_SPEED", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3D, 0, NotSerialized) // Event: CPU_TURBO_OFF
|
||||
{
|
||||
Store ("EC: CPU_TURBO_OFF", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3E, 0, NotSerialized) // Event: CPU_TURBO_ON
|
||||
{
|
||||
Store ("EC: CPU_TURBO_ON", Debug)
|
||||
}
|
||||
|
||||
Method (_Q3F, 0, NotSerialized) // Event: SHUTDOWN
|
||||
{
|
||||
Store ("EC: SHUTDOWN", Debug)
|
||||
}
|
||||
|
||||
Method (_Q45, 0, NotSerialized) // Event: SENSOR_T76
|
||||
{
|
||||
SMB2 = 0xCB
|
||||
}
|
||||
|
||||
Method (_Q48, 0, NotSerialized) // Event: Fan Turbo On
|
||||
{
|
||||
Store ("EC: Fan Turbo On", Debug)
|
||||
}
|
||||
|
||||
Method (_Q49, 0, NotSerialized) // Event: Fan Turbo Off
|
||||
{
|
||||
Store ("EC: Fan Turbo Off", Debug)
|
||||
}
|
Loading…
Reference in New Issue