ec: add support for KBC1126 in HP laptops
- let the coreboot build system insert the two blobs to the coreboot image - EC and Super I/O initialization - ACPI support Tested on 2760p, 8460p, 2570p, 8470p. Issue: Kernel gives the following error: ACPI Error: No handler for Region [ECRM] (...) [EmbeddedControl] ACPI Error: Region EmbeddedControl (ID=3) has no handler TODO: - consider moving the Super I/O initialization code to ramstage, or reuse the existing sio/smsc/kbc1100 code (if so, how to add the additional kbc1126 specific functions to sio/kbc1100) - sort out the ACPI code which is mostly from the ACPI dump of vendor firmware - find out why the digitizer in hp/2760p doesn't work - GRUB payload freezing on all HP Elitebooks may be related to EC Change-Id: I6b16eb7e26303eda740f52d667dedb7cc04b4ef0 Signed-off-by: Iru Cai <mytbk920423@gmail.com> Reviewed-on: https://review.coreboot.org/19072 Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
ae1548621a
commit
44d399c394
|
@ -0,0 +1,61 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2017 Iru Cai
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
|
||||
config EC_HP_KBC1126
|
||||
bool
|
||||
help
|
||||
Interface to SMSC KBC1126 embedded controller in HP laptops.
|
||||
|
||||
if EC_HP_KBC1126
|
||||
|
||||
comment "Please select the following otherwise your laptop cannot be powered on."
|
||||
|
||||
config KBC1126_FIRMWARE
|
||||
bool "Add firmware images for KBC1126 EC"
|
||||
depends on EC_HP_KBC1126
|
||||
default n
|
||||
help
|
||||
Select this option to add the two firmware blobs for KBC1126.
|
||||
You need these two blobs to power on your machine.
|
||||
|
||||
config KBC1126_FW1
|
||||
string "KBC1126 firmware #1 path and filename"
|
||||
depends on KBC1126_FIRMWARE
|
||||
default "fw1.bin"
|
||||
help
|
||||
The path and filename of the file to use as KBC1126 firmware #1.
|
||||
You can use util/kbc1126/kbc1126_ec_dump to dump it from the
|
||||
vendor firmware.
|
||||
|
||||
config KBC1126_FW1_OFFSET
|
||||
string
|
||||
depends on KBC1126_FIRMWARE
|
||||
default "0xffffe800"
|
||||
|
||||
config KBC1126_FW2
|
||||
string "KBC1126 filename #2 path and filename"
|
||||
depends on KBC1126_FIRMWARE
|
||||
default "fw2.bin"
|
||||
help
|
||||
The path and filename of the file to use as KBC1126 firmware #2.
|
||||
You can use util/kbc1126/kbc1126_ec_dump to dump it from the
|
||||
vendor firmware.
|
||||
|
||||
config KBC1126_FW2_OFFSET
|
||||
string
|
||||
depends on KBC1126_FIRMWARE
|
||||
default "0xfffee000"
|
||||
|
||||
endif
|
|
@ -0,0 +1,58 @@
|
|||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2017 Iru Cai
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
|
||||
ifeq ($(CONFIG_EC_HP_KBC1126),y)
|
||||
KBC1126_EC_INSERT:=$(top)/util/kbc1126/kbc1126_ec_insert
|
||||
INTERMEDIATE+=kbc1126_ec_insert
|
||||
|
||||
ifeq ($(CONFIG_KBC1126_FIRMWARE),y)
|
||||
cbfs-files-y += ecfw1.bin
|
||||
cbfs-files-y += ecfw2.bin
|
||||
|
||||
ecfw1.bin-file := $(call strip_quotes,$(CONFIG_KBC1126_FW1))
|
||||
ecfw1.bin-position := $(CONFIG_KBC1126_FW1_OFFSET)
|
||||
ecfw1.bin-type := raw
|
||||
|
||||
ecfw2.bin-file := $(call strip_quotes,$(CONFIG_KBC1126_FW2))
|
||||
ecfw2.bin-position := $(CONFIG_KBC1126_FW2_OFFSET)
|
||||
ecfw2.bin-type := raw
|
||||
endif
|
||||
|
||||
kbc1126_ec_insert: $(obj)/coreboot.pre
|
||||
ifeq ($(CONFIG_KBC1126_FIRMWARE),y)
|
||||
printf " Building kbc1126_ec_insert.\n"
|
||||
$(MAKE) -C util/kbc1126
|
||||
printf " KBC1126 Inserting KBC1126 firmware blobs.\n"
|
||||
$(KBC1126_EC_INSERT) $(obj)/coreboot.pre \
|
||||
$(CONFIG_KBC1126_FW1_OFFSET) $(CONFIG_KBC1126_FW2_OFFSET)
|
||||
endif
|
||||
|
||||
PHONY+=kbc1126_ec_insert
|
||||
|
||||
build_complete::
|
||||
ifeq ($(CONFIG_KBC1126_FIRMWARE),)
|
||||
printf "\n** WARNING **\n"
|
||||
printf "You haven't added the firmware blobs for KBC1126 EC.\n"
|
||||
printf "You may be unable to power on your laptop without these blobs.\n"
|
||||
printf "Please select the following option to add them:\n\n"
|
||||
printf " Chipset --->\n"
|
||||
printf " [*] Add firmware images for KBC1126 EC\n\n"
|
||||
printf "You can read util/kbc1126/README.md for details.\n\n"
|
||||
endif
|
||||
|
||||
ramstage-y += ec.c
|
||||
romstage-y += early_init.c
|
||||
|
||||
endif
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
Name (ACST, 0x01)
|
||||
Name (SMAR, 0x00)
|
||||
|
||||
Field (ECRM, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
Offset (0x84),
|
||||
ADP, 1,
|
||||
ADID, 2
|
||||
}
|
||||
|
||||
Method (UPAD, 0, Serialized)
|
||||
{
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
If ((GACP & 0x01))
|
||||
{
|
||||
GACP &= 0x06
|
||||
Release (BTMX)
|
||||
Acquire (ECMX, 0xFFFF)
|
||||
Local0 = ADP
|
||||
Local1 = ADID
|
||||
Release (ECMX)
|
||||
ACST = Local0
|
||||
SMAR = Local1
|
||||
}
|
||||
Else
|
||||
{
|
||||
Release (BTMX)
|
||||
}
|
||||
}
|
||||
|
||||
Method (GPID, 0, Serialized)
|
||||
{
|
||||
UPAD ()
|
||||
Return (SMAR)
|
||||
}
|
||||
|
||||
Method (GACS, 0, Serialized) /* get AC status */
|
||||
{
|
||||
UPAD ()
|
||||
Return (ACST)
|
||||
}
|
||||
|
||||
Device (AC)
|
||||
{
|
||||
Name (_HID, "ACPI0003")
|
||||
Name (_PCL, Package () { \_SB })
|
||||
|
||||
Method (_STA)
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
|
||||
Method (_PSR, 0, NotSerialized)
|
||||
{
|
||||
Local0 = GACS ()
|
||||
PWRS = Local0 /* GNVS.PWRS */
|
||||
Local1 = GPID ()
|
||||
ACST = Local0
|
||||
SMAR = Local1
|
||||
Return (Local0)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q06, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: AC STATUS", Debug)
|
||||
PWUP (0x05, (0x02 | 0x01))
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (AC, 0x80)
|
||||
PNOT ()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,520 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
Field (ECRM, ByteAcc, NoLock, Preserve)
|
||||
{
|
||||
Offset (0x84),
|
||||
, 3,
|
||||
LCTV, 1,
|
||||
BATP, 4,
|
||||
BPU, 1,
|
||||
Offset (0x86),
|
||||
BSEL, 4, /* battery select */
|
||||
Offset (0x87),
|
||||
LB1, 8,
|
||||
LB2, 8,
|
||||
BDC, 16,
|
||||
Offset (0x8D),
|
||||
BFC, 16, /* battery full capacity */
|
||||
BRTE, 16,
|
||||
BTC, 1,
|
||||
Offset (0x92),
|
||||
BME, 16,
|
||||
BDN, 8,
|
||||
BDV, 16, /* battery design voltage */
|
||||
BCV1, 16,
|
||||
BST, 4,
|
||||
Offset (0xC9),
|
||||
BSN, 16, /* battery serial number */
|
||||
BDAT, 16, /* battery date */
|
||||
BMF, 8,
|
||||
}
|
||||
|
||||
Name (NGBF, 0xFF)
|
||||
Name (NGBT, 0xFF)
|
||||
Name (GACP, 0x07)
|
||||
Name (NBAP, 0x00)
|
||||
Name (NNBO, 0x01)
|
||||
Name (NDCB, 0x00)
|
||||
Mutex (BTMX, 0x00)
|
||||
|
||||
#define NLB1 0xC8 /* design capacity of warning */
|
||||
#define NLB2 0x64 /* design capacity of low */
|
||||
|
||||
Method (ITLB, 0, NotSerialized)
|
||||
{
|
||||
Divide ((NLB1 + 0x09), 0x0A, Local0, Local1)
|
||||
Divide ((0x96 + 0x09), 0x0A, Local0, Local2)
|
||||
Local0 = Local0
|
||||
LB1 = Local1
|
||||
LB2 = Local2
|
||||
}
|
||||
|
||||
Method (PWUP, 2, Serialized)
|
||||
{
|
||||
Local0 = 0x00
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
Local1 = (Arg0 | GACP)
|
||||
GACP = (Local1 & 0x07)
|
||||
If ((GACP & 0x02))
|
||||
{
|
||||
NGBF |= Arg1
|
||||
}
|
||||
|
||||
If ((GACP & 0x04))
|
||||
{
|
||||
If ((NGBT != 0xFF))
|
||||
{
|
||||
Local0 = 0x01
|
||||
}
|
||||
|
||||
NGBT |= Arg1
|
||||
}
|
||||
|
||||
Release (BTMX)
|
||||
Return (Local0)
|
||||
}
|
||||
|
||||
Method (GBAP, 0, Serialized)
|
||||
{
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
If ((GACP & 0x02))
|
||||
{
|
||||
GACP &= 0x05
|
||||
Release (BTMX)
|
||||
Acquire (ECMX, 0xFFFF)
|
||||
NBAP = BATP
|
||||
Release (ECMX)
|
||||
}
|
||||
Else
|
||||
{
|
||||
Release (BTMX)
|
||||
}
|
||||
Return (NBAP)
|
||||
}
|
||||
|
||||
Method (BTDR, 1, Serialized)
|
||||
{
|
||||
If ((Arg0 == 0x01))
|
||||
{
|
||||
NNBO = 0x01
|
||||
}
|
||||
ElseIf ((Arg0 == 0x00))
|
||||
{
|
||||
NNBO = 0x00
|
||||
}
|
||||
|
||||
Return (NNBO)
|
||||
}
|
||||
|
||||
Method (BSTA, 1, Serialized)
|
||||
{
|
||||
BTDR (0x01)
|
||||
Local0 = GBAP ()
|
||||
Local1 = 0x0F
|
||||
If ((Local0 & Arg0))
|
||||
{
|
||||
Local1 = 0x1F
|
||||
}
|
||||
Return (Local1)
|
||||
}
|
||||
|
||||
Device (BAT0)
|
||||
{
|
||||
Name (_HID, EisaId ("PNP0C0A"))
|
||||
Name (_UID, 0x01)
|
||||
|
||||
Method (_STA, 0, NotSerialized)
|
||||
{
|
||||
Return (BSTA (0x01))
|
||||
}
|
||||
|
||||
Method (_BIF, 0, NotSerialized)
|
||||
{
|
||||
Return (BTIF (0x00))
|
||||
}
|
||||
|
||||
Method (_BST, 0, NotSerialized)
|
||||
{
|
||||
Return (BTSZ (0x00))
|
||||
}
|
||||
|
||||
Name (_PCL, Package (0x01)
|
||||
{
|
||||
\_SB
|
||||
})
|
||||
}
|
||||
|
||||
Device (BAT1)
|
||||
{
|
||||
Name (_HID, EisaId ("PNP0C0A"))
|
||||
Name (_UID, 0x02)
|
||||
|
||||
Method (_STA, 0, NotSerialized)
|
||||
{
|
||||
Return (BSTA (0x02))
|
||||
}
|
||||
|
||||
Method (_BIF, 0, NotSerialized)
|
||||
{
|
||||
Return (BTIF (0x01))
|
||||
}
|
||||
|
||||
Method (_BST, 0, NotSerialized)
|
||||
{
|
||||
Return (BTSZ (0x01))
|
||||
}
|
||||
|
||||
Name (_PCL, Package (0x01)
|
||||
{
|
||||
\_SB
|
||||
})
|
||||
}
|
||||
|
||||
Name (NBTI, Package (0x02)
|
||||
{
|
||||
Package (0x0D)
|
||||
{
|
||||
0x01, /* power unit: mA */
|
||||
0xFFFFFFFF, /* design capacity */
|
||||
0xFFFFFFFF, /* last full charge capacity */
|
||||
0x01, /* battery technology */
|
||||
0xFFFFFFFF, /* design voltage */
|
||||
0x00, /* design capacity of warning */
|
||||
0x00, /* design capacity of low */
|
||||
0x64, /* battery capacity granularity 1 */
|
||||
0x64, /* battery capacity granularity 2 */
|
||||
"Primary", /* model number */
|
||||
"100000", /* serial number */
|
||||
"LIon", /* battery type */
|
||||
"Hewlett-Packard" /* OEM information */
|
||||
},
|
||||
|
||||
Package (0x0D)
|
||||
{
|
||||
0x01,
|
||||
0xFFFFFFFF,
|
||||
0xFFFFFFFF,
|
||||
0x01,
|
||||
0xFFFFFFFF,
|
||||
0x00,
|
||||
0x00,
|
||||
0x64,
|
||||
0x64,
|
||||
"Travel",
|
||||
"100000",
|
||||
"LIon",
|
||||
"Hewlett-Packard"
|
||||
}
|
||||
})
|
||||
|
||||
Name (NBST, Package (0x02)
|
||||
{
|
||||
Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0},
|
||||
Package (0x04) {0x00, 0x00, 0x0FA0, 0x04B0}
|
||||
})
|
||||
|
||||
Name (NDBS, Package (0x04)
|
||||
{
|
||||
0x00,
|
||||
0x00,
|
||||
0x0FA0,
|
||||
0x04B0
|
||||
})
|
||||
|
||||
Method (\ISTR, 2, NotSerialized)
|
||||
{
|
||||
Name (NUMB, Buffer (6) { " " })
|
||||
Local0 = Arg0
|
||||
Local1 = Arg1
|
||||
While (Local1)
|
||||
{
|
||||
Local1--
|
||||
Divide (Local0, 10, Local2, Local0)
|
||||
Add (Local2, 48, Index (NUMB, Local1))
|
||||
}
|
||||
ToString (NUMB, Arg1, Local3)
|
||||
Return (Local3)
|
||||
}
|
||||
|
||||
Method (GBSS, 2, Serialized)
|
||||
{
|
||||
Local3 = \ISTR (Arg0, 0x05)
|
||||
Concatenate (Local3, " ", Local4)
|
||||
Local0 = (Arg1 >> 0x09)
|
||||
Local1 = (Local0 + 1980)
|
||||
Local2 = \ISTR (Local1, 0x04)
|
||||
Concatenate (Local4, Local2, Local3)
|
||||
Concatenate (Local3, "/", Local4)
|
||||
Local0 = (Arg1 >> 0x05)
|
||||
Local1 = (Local0 & 0x0F)
|
||||
Local2 = \ISTR (Local1, 0x02)
|
||||
Concatenate (Local4, Local2, Local3)
|
||||
Concatenate (Local3, "/", Local4)
|
||||
Local1 = (Arg1 & 0x1F)
|
||||
Local2 = \ISTR (Local1, 0x02)
|
||||
Concatenate (Local4, Local2, Local3)
|
||||
Return (Local3)
|
||||
}
|
||||
|
||||
Method (BTIG, 1, Serialized) /* in vendor DSDT is EC0.BTIF */
|
||||
{
|
||||
Local7 = (0x01 << Arg0)
|
||||
BTDR (0x01)
|
||||
If ((BSTA (Local7) == 0x0F))
|
||||
{
|
||||
Return (0xFF)
|
||||
}
|
||||
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
Local0 = NGBF
|
||||
Release (BTMX)
|
||||
If (((Local0 & Local7) == 0x00))
|
||||
{
|
||||
Return (0x00)
|
||||
}
|
||||
|
||||
NBST [Arg0] = NDBS
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
NGBT |= Local7
|
||||
Release (BTMX)
|
||||
|
||||
/* fill battery information */
|
||||
Acquire (ECMX, 0xFFFF)
|
||||
BSEL = Arg0
|
||||
Local0 = BFC
|
||||
DerefOf (NBTI [Arg0]) [0x01] = Local0
|
||||
DerefOf (NBTI [Arg0]) [0x02] = Local0
|
||||
DerefOf (NBTI [Arg0]) [0x04] = BDV
|
||||
DerefOf (NBTI [Arg0]) [0x05] = NLB1
|
||||
DerefOf (NBTI [Arg0]) [0x06] = NLB2
|
||||
Local0 = BSN
|
||||
Local1 = BDAT
|
||||
Release (ECMX)
|
||||
|
||||
/* serial number */
|
||||
Local2 = GBSS (Local0, Local1)
|
||||
DerefOf (NBTI [Arg0]) [0x0A] = Local2
|
||||
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
NGBF &= ~Local7
|
||||
Release (BTMX)
|
||||
Return (0x00)
|
||||
}
|
||||
|
||||
Method (BTIF, 1, Serialized) /* in vendor DSDT is SB.BTIF */
|
||||
{
|
||||
Local0 = BTIG (Arg0)
|
||||
If ((Local0 == 0xFF))
|
||||
{
|
||||
Return (Package (0x0D)
|
||||
{
|
||||
0x00,
|
||||
0xFFFFFFFF,
|
||||
0xFFFFFFFF,
|
||||
0x01,
|
||||
0xFFFFFFFF,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
0x00
|
||||
})
|
||||
}
|
||||
Else
|
||||
{
|
||||
Return (DerefOf (NBTI [Arg0]))
|
||||
}
|
||||
}
|
||||
|
||||
Name (NFBS, 0x01)
|
||||
Method (BTSZ, 1, Serialized) /* in vendor DSDT is EC.BTST */
|
||||
{
|
||||
Local1 = NFBS
|
||||
If (NFBS)
|
||||
{
|
||||
NFBS = 0x00
|
||||
}
|
||||
BTST (Arg0, Local1)
|
||||
Return (DerefOf (NBST [Arg0]))
|
||||
}
|
||||
|
||||
Method (BTST, 2, Serialized)
|
||||
{
|
||||
Local7 = (0x01 << Arg0)
|
||||
BTDR (0x01)
|
||||
If ((BSTA (Local7) == 0x0F))
|
||||
{
|
||||
NBST [Arg0] = Package (0x04)
|
||||
{
|
||||
0x00,
|
||||
0xFFFFFFFF,
|
||||
0xFFFFFFFF,
|
||||
0xFFFFFFFF
|
||||
}
|
||||
Return (0xFF)
|
||||
}
|
||||
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
If (Arg1)
|
||||
{
|
||||
NGBT = 0xFF
|
||||
}
|
||||
|
||||
Local0 = NGBT /* \_SB_.PCI0.LPCB.EC0_.NGBT */
|
||||
Release (BTMX)
|
||||
If (((Local0 & Local7) == 0x00))
|
||||
{
|
||||
Return (0x00)
|
||||
}
|
||||
|
||||
Acquire (ECMX, 0xFFFF)
|
||||
BSEL = Arg0
|
||||
Local0 = BST
|
||||
Local3 = BPR
|
||||
DerefOf (NBST [Arg0]) [0x02] = BRC
|
||||
DerefOf (NBST [Arg0]) [0x03] = BPV
|
||||
Release (ECMX)
|
||||
|
||||
If ((GACS () == 0x01))
|
||||
{
|
||||
Local0 &= ~0x01
|
||||
}
|
||||
Else
|
||||
{
|
||||
Local0 &= ~0x02
|
||||
}
|
||||
|
||||
If ((Local0 & 0x01))
|
||||
{
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
NDCB = Local7
|
||||
Release (BTMX)
|
||||
}
|
||||
|
||||
DerefOf (NBST [Arg0]) [0x00] = Local0
|
||||
If ((Local0 & 0x01))
|
||||
{
|
||||
If (((Local3 < 0x0190) || (Local3 > 0x1964)))
|
||||
{
|
||||
Local5 = DerefOf (DerefOf (NBST [Arg0]) [0x01])
|
||||
If (((Local5 < 0x0190) || (Local5 > 0x1964)))
|
||||
{
|
||||
Local3 = (0x1AF4 / 0x02)
|
||||
}
|
||||
Else
|
||||
{
|
||||
Local3 = Local5
|
||||
}
|
||||
}
|
||||
}
|
||||
ElseIf (((Local0 & 0x02) == 0x00))
|
||||
{
|
||||
Local3 = 0x00
|
||||
}
|
||||
|
||||
DerefOf (NBST [Arg0]) [0x01] = Local3
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
NGBT &= ~Local7
|
||||
Release (BTMX)
|
||||
Return (0x00)
|
||||
}
|
||||
|
||||
Method (SBTN, 2, Serialized)
|
||||
{
|
||||
If ((Arg0 & 0x01))
|
||||
{
|
||||
Notify (BAT0, Arg1)
|
||||
}
|
||||
|
||||
If ((Arg0 & 0x02))
|
||||
{
|
||||
Notify (BAT1, Arg1)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q03, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q03", Debug)
|
||||
Acquire (BTMX, 0xFFFF)
|
||||
Local0 = NDCB
|
||||
Release (BTMX)
|
||||
PWUP (0x04, Local0)
|
||||
SBTN (Local0, 0x80)
|
||||
}
|
||||
|
||||
Method (_Q08, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: PRIMARY BATTERY ATTACHED/DETACHED", Debug)
|
||||
PWUP (0x06, 0x01)
|
||||
Local0 = GBAP ()
|
||||
If ((Local0 != 0x02))
|
||||
{
|
||||
PWUP (0x04, 0x02)
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT1, 0x80)
|
||||
}
|
||||
}
|
||||
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT0, 0x81)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q09, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: PRIMARY BATTERY STATUS", Debug)
|
||||
PWUP (0x04, 0x01)
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q18, 0, NotSerialized)
|
||||
{
|
||||
Store("EC: SECONDARY BATTERY ATTACHED/DETACHED", Debug)
|
||||
PWUP (0x06, 0x02)
|
||||
Local0 = GBAP ()
|
||||
If ((Local0 != 0x01))
|
||||
{
|
||||
PWUP (0x04, 0x01)
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT0, 0x80)
|
||||
}
|
||||
}
|
||||
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT1, 0x81) // Information Change
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q19, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: SECONDARY BATTERY STATUS", Debug)
|
||||
PWUP (0x04, 0x02)
|
||||
If (BTDR (0x02))
|
||||
{
|
||||
Notify (BAT1, 0x80)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,241 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
Device (EC0)
|
||||
{
|
||||
Name (_HID, EISAID("PNP0C09"))
|
||||
Name (_UID, 0)
|
||||
Name (_GPE, 0x16)
|
||||
|
||||
Name (_CRS, ResourceTemplate ()
|
||||
{
|
||||
IO (Decode16, 0x62, 0x62, 1, 1)
|
||||
IO (Decode16, 0x66, 0x66, 1, 1)
|
||||
})
|
||||
|
||||
Method (_STA, 0, NotSerialized)
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
|
||||
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, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q04", Debug)
|
||||
PNOT()
|
||||
}
|
||||
|
||||
Method (_Q05, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q05", Debug)
|
||||
}
|
||||
|
||||
Method (_Q0B, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q0B", Debug)
|
||||
}
|
||||
|
||||
Method (_Q0C, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q0C", Debug)
|
||||
}
|
||||
|
||||
Method (_Q0D, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: _Q0D", Debug)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
Device (LID)
|
||||
{
|
||||
Name (_HID, EisaId ("PNP0C0D"))
|
||||
Method (_LID, 0, NotSerialized)
|
||||
{
|
||||
Local0 = CLID
|
||||
Return (Local0)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_Q0A, 0, NotSerialized)
|
||||
{
|
||||
Store ("EC: LID STATUS", Debug)
|
||||
Notify (LID, 0x80)
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _EC_HP_KBC1126_CHIP_H
|
||||
#define _EC_HP_KBC1126_CHIP_H
|
||||
|
||||
struct ec_hp_kbc1126_config
|
||||
{
|
||||
u16 ec_data_port;
|
||||
u16 ec_cmd_port;
|
||||
u8 ec_ctrl_reg;
|
||||
u8 ec_fan_ctrl_value;
|
||||
};
|
||||
|
||||
#endif /* _EC_HP_KBC1126_CHIP_H */
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2011 Iru Cai <mytbk920423@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <device/pnp.h>
|
||||
#include "ec.h"
|
||||
|
||||
void kbc1126_enter_conf(void)
|
||||
{
|
||||
outb(0x55, 0x2e);
|
||||
outb(0x22, 0x2e);
|
||||
outb(0x00, 0x2f);
|
||||
outb(0x23, 0x2e);
|
||||
outb(0x00, 0x2f);
|
||||
outb(0x24, 0x2e);
|
||||
outb(0x84, 0x2f);
|
||||
}
|
||||
|
||||
void kbc1126_exit_conf(void)
|
||||
{
|
||||
outb(0xaa, 0x2e);
|
||||
/* one more time in PlatformStage1 of vendor firmware */
|
||||
outb(0xaa, 0x2e);
|
||||
|
||||
outb(0x83, 0x200);
|
||||
outb(0x00, 0x201);
|
||||
inb(0x201);
|
||||
}
|
||||
|
||||
void kbc1126_mailbox_init(void)
|
||||
{
|
||||
pnp_devfn_t dev = PNP_DEV(0x2e, KBC1100_MAILBOX);
|
||||
pnp_set_logical_device(dev);
|
||||
pnp_set_iobase(dev, PNP_IDX_IO0, 0x200);
|
||||
pnp_set_enable(dev, 1);
|
||||
}
|
||||
|
||||
void kbc1126_kbc_init(void)
|
||||
{
|
||||
pnp_devfn_t dev = PNP_DEV(0x2e, KBC1100_KBC);
|
||||
pnp_set_logical_device(dev);
|
||||
pnp_set_irq(dev, PNP_IDX_IRQ0, 0x1);
|
||||
pnp_set_irq(dev, PNP_IDX_IRQ1, 0xc);
|
||||
pnp_set_enable(dev, 1);
|
||||
}
|
||||
|
||||
void kbc1126_ec_init(void)
|
||||
{
|
||||
pnp_devfn_t dev = PNP_DEV(0x2e, KBC1100_EC0);
|
||||
pnp_set_logical_device(dev);
|
||||
pnp_set_iobase(dev, PNP_IDX_IO0, 0x62);
|
||||
pnp_set_enable(dev, 1);
|
||||
}
|
||||
|
||||
void kbc1126_com1_init(void)
|
||||
{
|
||||
pnp_devfn_t dev = PNP_DEV(0x2e, SMSCSUPERIO_SP1);
|
||||
pnp_set_logical_device(dev);
|
||||
pnp_set_iobase(dev, PNP_IDX_IO0, 0x280);
|
||||
pnp_set_irq(dev, PNP_IDX_IRQ0, 0x6);
|
||||
pnp_set_enable(dev, 1);
|
||||
}
|
||||
|
||||
void kbc1126_pm1_init(void)
|
||||
{
|
||||
pnp_devfn_t dev = PNP_DEV(0x2e, KBC1100_PM1);
|
||||
pnp_set_logical_device(dev);
|
||||
pnp_set_iobase(dev, PNP_IDX_IO0, 0x220);
|
||||
pnp_set_enable(dev, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* This code is found in PEI module F65354B9-1FF0-46D7-A5F7-0926CB238048
|
||||
* of the OEM firmware.
|
||||
*
|
||||
* For mainboards without a Super I/O at 0x4e, without this code, superiotool
|
||||
* will detect an Infineon Super I/O at 0x4e.
|
||||
*/
|
||||
|
||||
void kbc1126_disable4e(void)
|
||||
{
|
||||
outb(0x55, 0x4e);
|
||||
|
||||
outb(0x26, 0x4e);
|
||||
outb(0x00, 0x4f);
|
||||
outb(0x27, 0x4e);
|
||||
outb(0xfe, 0x4f);
|
||||
outb(0x60, 0x4e);
|
||||
outb(0xfe, 0x4f);
|
||||
outb(0x61, 0x4e);
|
||||
outb(0x80, 0x4f);
|
||||
outb(0x30, 0x4e);
|
||||
outb(0x01, 0x4f);
|
||||
|
||||
outb(0xaa, 0x4e);
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2009 coresystems GmbH
|
||||
* Copyright (C) 2017 Iru Cai
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <delay.h>
|
||||
|
||||
#include "ec.h"
|
||||
#include "chip.h"
|
||||
|
||||
static u16 ec_data_port;
|
||||
static u16 ec_cmd_port;
|
||||
|
||||
#define KBD_IBF (1 << 1) /* 1: input buffer full (data ready for ec) */
|
||||
#define KBD_OBF (1 << 0) /* 1: output buffer full (data ready for host) */
|
||||
|
||||
static void ec_setports(u16 data, u16 cmd)
|
||||
{
|
||||
ec_data_port = data;
|
||||
ec_cmd_port = cmd;
|
||||
}
|
||||
|
||||
static int send_kbd_command(u8 command)
|
||||
{
|
||||
int timeout;
|
||||
|
||||
timeout = 0x7ff;
|
||||
while ((inb(ec_cmd_port) & KBD_IBF) && --timeout) {
|
||||
udelay(10);
|
||||
if ((timeout & 0xff) == 0)
|
||||
printk(BIOS_SPEW, ".");
|
||||
}
|
||||
if (!timeout) {
|
||||
printk(BIOS_DEBUG, "Timeout while sending command 0x%02x to EC!\n",
|
||||
command);
|
||||
return -1;
|
||||
}
|
||||
|
||||
outb(command, ec_cmd_port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int send_kbd_data(u8 data)
|
||||
{
|
||||
int timeout;
|
||||
|
||||
timeout = 0x7ff;
|
||||
while ((inb(ec_cmd_port) & KBD_IBF) && --timeout) { /* wait for IBF = 0 */
|
||||
udelay(10);
|
||||
if ((timeout & 0xff) == 0)
|
||||
printk(BIOS_SPEW, ".");
|
||||
}
|
||||
if (!timeout) {
|
||||
printk(BIOS_DEBUG, "Timeout while sending data 0x%02x to EC!\n",
|
||||
data);
|
||||
return -1;
|
||||
}
|
||||
|
||||
outb(data, ec_data_port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* kbc1126_thermalinit: initialize fan control
|
||||
* The code is found in EcThermalInit of the vendor firmware.
|
||||
*/
|
||||
static int kbc1126_thermalinit(u8 cmd, u8 value)
|
||||
{
|
||||
printk(BIOS_DEBUG, "KBC1126: initialize fan control.");
|
||||
|
||||
if (send_kbd_command(cmd) < 0)
|
||||
return -1;
|
||||
|
||||
if (send_kbd_data(0x27) < 0)
|
||||
return -1;
|
||||
|
||||
if (send_kbd_data(0x01) < 0)
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* The following code is needed for fan control when AC is plugged in.
|
||||
*/
|
||||
|
||||
if (send_kbd_command(cmd) < 0)
|
||||
return -1;
|
||||
|
||||
if (send_kbd_data(0xd5) < 0)
|
||||
return -1;
|
||||
|
||||
if (send_kbd_data(value) < 0)
|
||||
return -1;
|
||||
|
||||
printk(BIOS_DEBUG, "KBC1126: fan control initialized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* kbc1126_kbdled: set CapsLock and NumLock LEDs
|
||||
* This is used in MemoryErrorReport of the vendor firmware.
|
||||
*/
|
||||
static void kbc1126_kbdled(u8 cmd, u8 val)
|
||||
{
|
||||
if (send_kbd_command(cmd) < 0)
|
||||
return;
|
||||
|
||||
if (send_kbd_data(0xf0) < 0)
|
||||
return;
|
||||
|
||||
if (send_kbd_data(val) < 0)
|
||||
return;
|
||||
}
|
||||
|
||||
static void kbc1126_enable(struct device *dev)
|
||||
{
|
||||
struct ec_hp_kbc1126_config *conf = dev->chip_info;
|
||||
ec_setports(conf->ec_data_port, conf->ec_cmd_port);
|
||||
kbc1126_kbdled(conf->ec_ctrl_reg, 0);
|
||||
if (kbc1126_thermalinit(conf->ec_ctrl_reg, conf->ec_fan_ctrl_value) < 0)
|
||||
printk(BIOS_DEBUG, "KBC1126: error when initializing fan control.\n");
|
||||
}
|
||||
|
||||
struct chip_operations ec_hp_kbc1126_ops = {
|
||||
CHIP_NAME("SMSC KBC1126 for HP laptops")
|
||||
.enable_dev = kbc1126_enable
|
||||
};
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2017 Iru Cai
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _EC_HP_KBC1126_EC_H
|
||||
#define _EC_HP_KBC1126_EC_H
|
||||
|
||||
#define KBC1100_PM1 1 /* PM1 */
|
||||
#define SMSCSUPERIO_SP1 4 /* Com1 */
|
||||
#define SMSCSUPERIO_SP2 5 /* Com2 */
|
||||
#define KBC1100_KBC 7 /* Keyboard */
|
||||
#define KBC1100_EC0 8 /* EC Channel 0 */
|
||||
#define KBC1100_MAILBOX 9 /* Mail Box */
|
||||
#define KBC1100_GPIO 0x0A /* GPIO */
|
||||
#define KBC1100_SPI 0x0B /* Share flash interface */
|
||||
|
||||
#define KBC1100_EC1 0x0D /* EC Channel 1 */
|
||||
#define KBC1100_EC2 0x0E /* EC Channel 2 */
|
||||
|
||||
/* early init */
|
||||
void kbc1126_enter_conf(void);
|
||||
void kbc1126_exit_conf(void);
|
||||
void kbc1126_mailbox_init(void);
|
||||
void kbc1126_kbc_init(void);
|
||||
void kbc1126_ec_init(void);
|
||||
void kbc1126_com1_init(void);
|
||||
void kbc1126_pm1_init(void);
|
||||
void kbc1126_disable4e(void);
|
||||
|
||||
#endif /* _EC_HP_KBC1126_EC_H */
|
Loading…
Reference in New Issue