| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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() | ||
| } | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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}) | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| }; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 | ||
| } |