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

Device (EC0)
{
	Name (_HID, EISAID("PNP0C09"))
	Name (_UID, 0)
	Name (_GPE, CONFIG_EC_HP_KBC1126_GPE)

	Name (_CRS, ResourceTemplate ()
	{
		IO (Decode16, 0x62, 0x62, 1, 1)
		IO (Decode16, 0x66, 0x66, 1, 1)
	})

	OperationRegion (ECRM, EmbeddedControl, 0x00, 0xFF)
	Field (ECRM, ByteAcc, NoLock, Preserve)
	{
		PMCD,   32,
		S0FL,   8,
		SXF0,   8,
		SXF1,   8,
		CPWR,   16,
		CVLT,   16,
		CCUR,   16,
		DIDX,   8,
		CIDX,   8,
		PMCC,   8,
		PMEP,   8,
		Offset (0x22),
		CRZN,   8,
		THTA,   8,
		HYST,   8,
		CRIT,   8,
		TEMP,   8,
		TENA,   8,
		Offset (0x29),
		TOAD,   8,
		PHTP,   8,
		THEM,   8,
		TMPO,   8,
		Offset (0x2E),
		FRDC,   8,
		FTGC,   8,
		PLTP,   8,
		Offset (0x32),
		DTMP,   8,
		Offset (0x35),
		PL1,    8,
		PL2,    8,
		BCVD,   8,
		Offset (0x40),
		ABDI,   8,
		ABAD,   8,
		ABIX,   8,
		ABDA,   8,
		ABST,   8,
		PORI,   8,
		Offset (0x4C),
		PSSB,   8,
		Offset (0x80),
		Offset (0x81),
		    ,   4,
		SLPT,   4,
		FNSW,   1,
		SFNC,   1,
		ACPI,   1,
		    ,   1,
		    ,   1,
		    ,   1,
		    ,   1,
		DETF,   1,
		LIDS,   1,
		TBLT,   1,
		    ,   1,
		    ,   1,
		    ,   1,
		COMM,   1,
		PME,    1,
		SBVD,   1,

		/* 0x84 to 0x9A is in battery.asl */

		Offset (0x9B),
		BATE,   16,
		BPR,    16,
		BCR,    16,
		BRC,    16,
		BCC,    16,
		BPV,    16,
		BCV2,   16,
		BCV3,   16,
		BCV4,   16,
		BCW,    16,
		BATF,   16,
		BCL,    16,
		MAXC,   16,
		BCG1,   8,
		BT1I,   1,
		BT2I,   1,
		    ,   2,
		BATN,   4,
		BSTS,   16,
		BCG2,   8,
		Offset (0xBD),
		BMO,    8,
		Offset (0xBF),
		BRCV,   8,
		Offset (0xC1),
		BIF,    8,
		BRCC,   8,

		/* 0xC9 to 0xCD in battery.asl */

		Offset (0xCF),
		CTLB,   8,
		Offset (0xD1),
		BTY,    8,
		Offset (0xD5),
		MFAC,   8,
		CFAN,   8,
		PFAN,   8,
		OCPS,   8,
		OCPR,   8,
		OCPE,   8,
		TMP1,   8,
		TMP2,   8,
		NABT,   4,
		BCM,    4,
		CCBQ,   16,
		CBT,    16,
		Offset (0xE3),
		OST,    4,
		Offset (0xE4),
		Offset (0xE5),
		TPTE,   1,
		TBBN,   1,
		    ,   3,
		TP,     1,
		Offset (0xE6),
		SHK,    8,
		AUDS,   1,
		SPKR,   1,
		Offset (0xE8),
		HSEN,   4,
		HSST,   4,
		Offset (0xEA),
		    ,   2,
		WWP,    1,
		WLP,    1,
		Offset (0xEF),
		INCH,   2,
		IDIS,   2,
		INAC,   1
	}

	Method (ECRI, 0, Serialized)
	{
		OST = 0x7 /* FIXME: OS specific, in Linux is 7 */
		PWUP (0x07, 0xFF)
		Local0 = GBAP ()
		ITLB ()
		SBTN (Local0, 0x81)
	}

	Method (_REG, 2, NotSerialized)
	{
		ACPI = 1
		ECRI ()
	}

	/* mailbox: port 0x200 and 0x201 */
	OperationRegion (MAIO, SystemIO, 0x0200, 0x02)
	Field (MAIO, ByteAcc, NoLock, Preserve)
	{
		MAIN,   8,
		MADT,   8
	}
	IndexField (MAIN, MADT, ByteAcc, NoLock, Preserve)
	{
		Offset (0x8C),
		    ,   7,
		CLID,   1,
		Offset (0x95),
		PWM0,   8,
		Offset (0x9D),
		PWMC,   8
	}

	Mutex (ECMX, 0x00)

#include "ac.asl"
#include "battery.asl"
#include "lid.asl"

	/* The following are _Qxx methods in vendor DSDT whose function
	   is unknown. Just leave a debug message here. */

	Method (_Q04)
	{
		Printf ("EC: _Q04")
		PNOT()
	}

	Method (_Q05)
	{
		Printf ("EC: _Q05")
	}

	Method (_Q0B)
	{
		Printf ("EC: _Q0B")
	}

	Method (_Q0C)
	{
		Printf ("EC: _Q0C")
	}

	Method (_Q0D)
	{
		Printf ("EC: _Q0D")
	}
}