/* SPDX-License-Identifier: GPL-2.0-only */

/*
 * The mainboard must define a PNOT method to handle power
 * state notifications and Notify CPU device objects to
 * re-evaluate their _PPC and _CST tables.
 */

Device (EC0)
{
	Name (_HID, EISAID ("PNP0C09"))
	Name (_UID, 1)
	Name (_GPE, EC_SCI_GPE)	// GPE for Runtime SCI

	OperationRegion (ERAM, EmbeddedControl, 0x00, 0xff)
	Field (ERAM, ByteAcc, Lock, Preserve)
	{
		// EC Name Space Configuration
		    , 1,        // Reserved                              ; 00h.0
		LCDS, 1,        // 1= BACKLIGHT ON , 0= BACKLIGHT OFF    ; 00h.1
		, 6,            // Reserved                              ; 00h.2 ~ 00h.6
		HTBN, 8,        // HOTKEY_BUTTON_NUMBER                  ; 01h For ABO Hot Key Function
		HTBT, 8,        // HOTKEY_BUTTON_TYPE                    ; 02h For ABO Hot Key Function
		LMEN, 1,        // Launch Manager enable .(1=Enable )    ; 03h.0, Lauanch manage
		, 7,            // Reserved                              ; 03h.1 ~ 03h.7
		ADAP, 2,        // Adaptor Type                          ; 04h.0 ~ 1
		                // 0x00 = default(65w)
		                // 0x01 = 65w
		                // 0x02 = 90w
		                // 0x03 = 120w
		, 6,            // Reserved                             ; 04h.2 ~ 04h.7
		Offset(0x08),   // Project Common Name space definition ; 08h - 2Ch
		Offset(0x2D),
		DSPM, 1,        // Display Mode.(0=dGPU, 1=iGPU )       ; 2Dh.0
		Offset(0x2E),
		EFP1, 4,        // Turbo Off P-State                    ; 2Eh.3-0
		Offset(0x40),   // ABO Common Name space definition     ; 2F - 5Ch
		Offset(0x5D),
		ENIB, 16,       // Ext_NameSpace_Index                  ; 5Dh
		                // Ext_NameSpace_Bank                   ; 5Eh
		ENDD, 8,        // Ext_NameSpace_Data                   ; 5Fh
		Offset(0x60),
		SMPR, 8,        // SMBus protocol register              ; 60h
		SMST, 8,        // SMBus status register                ; 61h
		SMAD, 8,        // SMBus address register               ; 62h
		SMCM, 8,        // SMBus command register               ; 63h
		SMD0, 0x100,    // SMBus data regs (32)                 ; 64h - 83h
		BCNT, 8,        // SMBus Block Count                    ; 84h
		SMAA, 24,       // SMBus Alarm Address                  ; 85h - 87h
		Offset(0x90),
		BMFN, 72,       // Battery Manufacture name             ; 90h - 98h
		BATD, 56,       // Battery Device name                  ; 99h - 9fh
		Offset(0xA1),
		, 1,            // Reserve                              ; A1h.0
		VIDO, 1,        // Video Out Button (1=Pressed)         ; A1h.1
		TOUP, 1,        // Touch Pad Button (0=On, 1=Off)       ; A1h.2
		Offset(0xA2),
		ODTS, 8,        // OS Shutdown Temp2 (DTS)              ; A2h
		Offset(0xA3),
		OSTY, 3,        // OSTYPE :   000- XP                   ; A3h.0-2
		                //            001- Vista
		                //            010- Linux
		                //            011- Win7
		, 4,            // Reserve                              ; A3h.3-6
		ADPT, 1,        // AC Adapter (0=OffLine, 1=OnLine)     ; A3h.7
		Offset(0xA4),
		PWAK, 1,        // PME Wake Enable(0=Disable, 1=Enable) ; A4h.0
		MWAK, 1,        // Modem Wake Enable(0/1=Disable/Enable); A4h.1
		LWAK, 1,        // LAN Wake Enable (0=Disable, 1=Enable); A4h.2
		RWAK, 1,        // RTC Wake Enable(0=DIsable,1=Enable)  ; A4h.3
		WWAK, 1,        // WLAN wake Enable (0=Disable,1=Enable); A4h.4
		UWAK, 1,        // USB WAKE(0=Disable, 1=Enable)        ; A4h.5
		KWAK, 1,        // Keyboard WAKE(0=Disable,1=Enable)    ; A4h.6
		TWAK, 1,        // TouchPad WAKE(0=Disable,1=Enable)    ; A4h.7
		Offset(0xA5),
		CCAC, 1,        // Charge Current (1=AC OFF)            ; A5h.0
		AOAC, 1,        // Adapter OVP (1=AC OFF)               ; A5h.1
		BLAC, 1,        // Batt learning (1=AC OFF)             ; A5h.2
		PSRC, 1,        // Command (1=AC OFF)                   ; A5h.3
		BOAC, 1,        // Batt OVP (1=AC OFF)                  ; A5h.4
		LCAC, 1,        // Leak Current (1=AC OFF)              ; A5h.5
		AAAC, 1,        // Air Adapter (1=AC OFF)               ; A5h.6
		ACAC, 1,        // AC Off (1=AC OFF)                    ; A5h.7
		Offset(0xA6),
		S3ST, 1,        // System entry S3 State                : A6.0
		S3RM, 1,        // System resume from S3 State          : A6.1
		S4ST, 1,        // System entry S4 State                : A6.2
		S4RM, 1,        // System resume from S4 State          : A6.3
		S5ST, 1,        // System entry S4 State                : A6.4
		S5RM, 1,        // System resume from S4 State          : A6.5
		, 2,            // Reserve                              ; A6h.6-7
		Offset(0xA7),
		OSTT, 8,        // OS Throttling Temp                   ; A7h
		OSST, 8,        // OS Shutdown Temp                     ; A8h
		THLT, 8,        // Throttling Temp                      ; A9h
		TCNL, 8,        // Tcontrol Temp                        ; AAh
		MODE, 1,        // Mode(0=Local, 1=Remote)              ; ABh.0
		, 2,            // Reserve                              ; ABh.1-2
		INIT, 1,        // INITOK(0/1=Controlled by OS/EC)      ; ABh.3
		FAN1, 1,        // FAN1 Active                          ; ABh.4
		FAN2, 1,        // FAN2 Active                          ; ABh.5
		FANT, 1,        // FAN Speed Time OK                    ; ABh.6
		SKNM, 1,        // Skin Mode (0/1=Skin Address 90/92)   ; ABh.7
		SDTM, 8,        // Shutdown Thermal Temperature         ; ACh
		FSSN, 4,        // Fan Speed Step Number                ; ADh.0-3
		                // 00 : Fan Off
		                // 01 : Fan On Speed 1
		                // 10 : Fan On Speed 2
		                // 11 : Fan On Speed 3
		FANU, 4,        // Machine Fan's number                 ; ADh.4-7
		PCVL, 4,        // Throttling Level                     ; AEh.0-3
		                // 0000 : Nothing
		                // 0001 : Clock throttling 12.5%
		                // 0010 : Clock throttling 25%
		                // 0011 : Clock throttling 37.5%
		                // 0100 : Clock throttling 50%
		, 2,            // Reserved                             ; AEh.4-5
		SWTO, 1,        // SW Throttling (1=Active)             ; AEh.6
		TTHR, 1,        // HW (THRM#) Throttling (1=Active)     ; AEh.7
		TTHM, 1,        // TS_THERMAL(1:Throttling for thermal) ; AFh.0
		THTL, 1,        // THROTTLING(1:Ctrl H/W throttling act); AFh.1
		, 2,            // Reserved                             ; AFh.2-3
		NPST, 4,        // Number of P-State level              ; AFh.4-7
		CTMP, 8,        // Current CPU Temperature              ; B0h
		CTML, 8,        // CPU local temperature                ; B1h
		SKTA, 8,        // Skin Temperature A                   ; B2h
		SKTB, 8,        // GPU Temperature                      ; B3h
		SKTC, 8,        // Skin Temperature C                   ; B4h
		, 8,            // Reserved                             ; B5h
		NTMP, 8,        // North Bridge Diode Temp              ; B6h
		Offset(0xB7),
		, 1,            // Reserved                             ; B7h.0
		SKEY, 1,        // Security key event                   ; B7h.1
		DIGM, 1,        // Digital Mode (1=Selected)            ; B7h.2
		CDLE, 1,        // CD lock mode enable                  ; B7h.3
		, 4,            // Reserved                             ; B7h.4-7
		, 1,            // Reserved                             ; B8h.0
		LIDF, 1,        // LID flag (1=Closed, 0=Opened)        ; B8h.1
		PMEE, 1,        // PME event (0=off, 1=On)              ; B8h.2
		PWBE, 1,        // Power button event (0=off, 1=On)     ; B8h.3
		RNGE, 1,        // Ring in event (0=off, 1=On)          ; B8h.4
		BTWE, 1,        // Bluetooth wake event (0=off, 1=On)   ; B8h.5
		, 2,            // Reserved                             ; B8h.6-7
		Offset(0xB9),
		BRTS, 8,        // Brightness Value                     ; B9h
		S35M, 1,        // S3.5 HotKey test mode                ; BAh.0
		S35S, 1,        // S3.5 function status                 ; BAh.1
		, 2,            // Reserved                             ; BAh.2-3
		FFEN, 1,        // IRST support bit (1= Support)        ; BAh.4
		FFST, 1,        // IRST status flag                     ; BAh.5
		, 2,            // Reserved                             ; BAh.6-7
		WLAT, 1,        // Wireless LAN (0=Inactive, 1=Active)  ; BBh.0
		BTAT, 1,        // BlueTooth (0=Inactive, 1=Active)     ; BBh.1
		WLEX, 1,        // Wireless LAN (0=Not Exist, 1=Exist)  ; BBh.2
		BTEX, 1,        // BlueTooth (0=Not Exist, 1=Exist)     ; BBh.3
		KLSW, 1,        // Kill Switch (0=Off, 1=On)            ; BBh.4
		WLOK, 1,        // Wireless LAN Initialize OK           ; BBh.5
		AT3G, 1,        // 3G (0=non-active, 1=active)          ; BBh.6
		EX3G, 1,        // 3G (0=Not Exist, 1=Exist)            ; BBh.7
		PJID, 8,        // Project ID                           ; BCh
		CPUJ, 3,        // CPU Type                             ; BDh.0-2
		                // 00, Tj85,
		                // 01, Tj90,
		                // 02, Tj100,
		                // 03, Tj105,
		                // 04 - 07, Reserved
		CPNM, 3,        // CPU Core number                      ; BDh.3-5
		                // 00, Single Core
		                // 01, Dual Core
		                // 02, Quad Core
		                // 03 - 07, Reserved
		GATY, 2,        // VGA Type                             ; BDh.6-7
		                // 00, UMA
		                // 01. Discrete
		                // 02 - 03, Reserved
		Offset(0xBE),
		BOL0, 1,        // Batt0 (0=OffLine, 1=OnLine)          ; BEh.0
		BOL1, 1,        // Batt1 (0=OffLine, 1=OnLine)          ; BEh.1
		, 2,            // Reserved                             ; BEh.2-3
		BCC0, 1,        // Batt0 be charging (1=Charging)       ; BEh.4
		BCC1, 1,        // Batt1 be charging (1=Charging)       ; BEh.5
		, 2,            // Reserved                             ; BEh.6-7
		BPU0, 1,        // Batt0 (1=PowerUp)                    ; BFh.0
		BPU1, 1,        // Batt1 (1=PowerUp)                    ; BFh.1
		, 2,            // Reserved                             ; BFh.2-3
		BOS0, 1,        // Batt0 (1=OnSMBUS)                    ; BFh.4
		BOS1, 1,        // Batt1 (1=OnSMBUS)                    ; BFh.5
		, 2,            // Reserved                             ; BFh.6-7
		Offset(0xC0),
		BTY0, 1,        // Batt Type (0=NiMh, 1=LiIon)          ; C0h.0
		BAM0, 1,        // Battery mode (0=mA, 1=mW)            ; C0h.1
		BAL0, 1,        // Low Battery                          ; C0h.2
		, 1,            // Reserved                             ; C0h.3
		BMF0, 3,        // Battery Manufacturer                 ; C0h.4-6
		                // 001 : Sanyo
		                // 010 : Sony
		                // 100 : Pansonic
		                // 101 : CPT
		, 1,            // Reserved                             ; C0h.7
		BST0, 8,        // Battery Status                       ; C1h
		                // Bit0 : Discharging
		                // Bit1 : Charging
		                // Bit2 : Discharg and Critical Low
		                // Bit3-7 : Reserved
		BRC0, 16,       // Batt Remaining Capacity              ; C2h, C3h
		BSN0, 16,       // Batt Serial Number                   ; C4h, C5h
		BPV0, 16,       // Batt Present Voltage                 ; C6h, C7h
		BDV0, 16,       // Batt Design Voltage                  ; C8h, C9h
		BDC0, 16,       // Batt Design Capacity                 ; CAh, CBh
		BFC0, 16,       // Batt Last Full Charge Capacity       ; CCh, CDh
		GAU0, 8,        // Batt Gasgauge                        ; CEh
		CYC0, 8,        // Batt Cycle Counter                   ; CFh
		BPC0, 16,       // Batt Current                         ; D0h, D1h
		BAC0, 16,       // Batt Average Current                 ; D2h, D3h
		BTW0, 8,        // Batt Comsuption                      ; D4h
		BVL0, 8,        // Batt Battery Volt                    ; D5h
		BTM0, 8,        // Batt Battery Temp                    ; D6h
		BAT0, 8,        // Batt Average Temp (Degree C)         ; D7h
		BCG0, 16,       // Batt charge current                  ; D8h, D9h
		BCT0, 8,        // Batt Current Temp Semple counter     ; DAh
		BCI0, 8,        // BATT CMD Index for read BATT(SMB)    ; DBh
		BCM0, 8,        // Count up to Communicate BATT         ; DCh
		BOT0, 8,        // Count up if BATT over Temp           ; DDh
		BSSB, 16,       // BATT Battery Status SMB              ; DEh, DFh
		BOV0, 8,        // BATT Over Voltage Count              ; E0h
		BCF0, 8,        // BATT Communication Fail Counter      ; E1h
		BAD0, 8,        // Battery Voltage of ADC               ; E2h
		BCV1, 16,       // Cell Voltage 1 (mV)                  ; E3h, E4h
		BCV2, 16,       // Cell Voltage 2 (mV)                  ; E5h, E6h
		BCV3, 16,       // Cell Voltage 3 (mV)                  ; E7h, E8h
		BCV4, 16,       // Cell Voltage 4 (mV)                  ; E9h, EAh
		Offset(0xF4),
		BMD0, 16,       // Manufacture Date                     ; F4h, F5h
		                // Batt Day	                            ; BIT[4:0] (Day)
		                // Batt Month                           ; BIT[9:5] (Month)
		                // Batt Year                            ; BIT[15:10] (Year)
		BACV, 16,       // Charging Voltage                     ; F6h, F7h
		BDN0, 8,        // Battery Cell Number                  ; F8h
		, 8             // Last byte for Reserved.
	}

	Method (_CRS, 0, NotSerialized)
	{
		Name (ECMD, ResourceTemplate()
		{
			IO (Decode16, 0x62, 0x62, 0, 1)
			IO (Decode16, 0x66, 0x66, 0, 1)
		})
		Return (ECMD)
	}

	Method (_REG, 2, NotSerialized)
	{
		// Initialize AC power state
		\PWRS = ADPT

		// Force a read of CPU temperature
		Local0 = CTML
		/* So that we don't get a warning that Local0 is unused.  */
		Local0++
	}


/*
 * EC Query Responses
 *
 * DTS temperature update    10h
 * Decrease brightness event 11h
 * Increase brightness event 12h
 * Cover lid open            15h
 * Cover lid close           16h
 * External device plugged   17h
 * External device removed   18h
 * Bluetooth wake up event   19h
 * Scr expand event          1Bh
 * Display toggle            1Ch
 * CPU  fast/slow event      1Dh
 * Battery in critical low   22h
 * Battery in low state      23h
 * Battery pack plug in      25h
 * Docking in                2Ah
 * Undock                    2Bh
 * Power button pressed      32h
 * AC plug in                37h
 * AC removed                38h
 * Modem ring in             3Ah
 * PME signal active         3Eh
 * Hotkey make Function      45h
 * Hotkey break Function     46h
 */

	/* Decrease brightness hotkey */
	Method (_Q11, 0, NotSerialized)
	{
		\_SB.MB.BRTD()
	}

	/* Increase brightness hotkey */
	Method (_Q12, 0, NotSerialized)
	{
		\_SB.MB.BRTU()
	}

	/* Lid opened */
	Method (_Q15, 0, NotSerialized)
	{
		\_SB.MB.LIDO()
	}

	/* Lid closed */
	Method (_Q16, 0, NotSerialized)
	{
		\_SB.MB.LIDC()
	}

	/* Switch display hotkey */
	Method (_Q1C, 0, NotSerialized)
	{
		\_SB.MB.DSPS()
	}

	// AC Power Connected
	Method (_Q37, 0, NotSerialized)
	{
		\PWRS = 1
		Notify (AC, 0x80)
		Notify (BATX, 0x80)
		// TODO ADD CPU power profile
		\PNOT ()
	}

	// AC Power Removed
	Method (_Q38, 0, NotSerialized)
	{
		\PWRS = 0
		Notify (AC, 0x80)
		Notify (BATX, 0x80)
		// TODO ADD CPU power profile
		\PNOT ()
	}

	/* Wireless toggle hotkey */
	Method (_Q40, 0, NotSerialized)
	{
		\_SB.MB.WLTG()
	}

	// Battery at critical low state
	Method (_Q22, 0, NotSerialized)
	{
		Notify (BATX, 0x80)
	}

	// Battery insert
	Method(_Q25, 0, NotSerialized)
	{
		Notify(BATX, 0x81)
		Notify(BATX, 0x80)
	}

	// Commuation Device Disable/Enable Event
	Method(_Q60, 0, NotSerialized)
	{
		IF(WLEX) //if Wlan exist
		{
			//TODO LANE = WLAT
		}
	}

	#include "ac.asl"
	#include "battery.asl"
}