mb/google/link: rework TP/TS ACPI for new Windows I2C driver
This supports a brand new I2C driver that is designed specifically for the Pixel 2013 chromebook (LINK). The GMBus interface on the IGPU is an i2c-compatible interface, but AFAIK only Link has touch devices attached in this way. On Windows, the PCIe device for the IGP is owned by the Intel proprietary driver, hence a separate ACPI device has to be added for the I2C driver arbitrator to attach to. The MMIO method is used instead of _CRS so that Windows does not try to assign ownership of the resource to our device (even though we're using the MMIO registers at the same time as the IGP driver). Even though in theory 2 drivers accessing the same MMIO may cause problems, in testing, there has been no issues with sleep/wake/hibernate, updating/installing/uninstalling the IGP driver, or changing display resolutions with the i2c driver attached. The arbitrator is necessary as well, since even though there are multiple i2c buses, the MMIO registers are shared. Hence a shared lock is required for i2c access across the buses. The original Sleep Button devices are preserved for Linux due to the completely custom and non-standard implementation of the Windows driver in order to work around the non-standard nature of Link's hardware. Change-Id: If7ee05d15bc17d335cf8c1a8e80bea62800de475 Signed-off-by: CoolStar <coolstarorganization@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/76159 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com> Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
This commit is contained in:
parent
97439ecc01
commit
545d9992dc
|
@ -11,9 +11,6 @@ Scope (\_SB) {
|
||||||
// automatically enable it as a wake source
|
// automatically enable it as a wake source
|
||||||
Name(_HID, EisaId("PNP0C0E"))
|
Name(_HID, EisaId("PNP0C0E"))
|
||||||
|
|
||||||
// Trackpad Wake is GPIO12
|
|
||||||
Name(_PRW, Package() { BOARD_TRACKPAD_WAKE_GPIO, 0x03 } )
|
|
||||||
|
|
||||||
Name(_CRS, ResourceTemplate()
|
Name(_CRS, ResourceTemplate()
|
||||||
{
|
{
|
||||||
// PIRQE -> GSI20
|
// PIRQE -> GSI20
|
||||||
|
@ -35,9 +32,6 @@ Scope (\_SB) {
|
||||||
// automatically enable it as a wake source
|
// automatically enable it as a wake source
|
||||||
Name(_HID, EisaId("PNP0C0E"))
|
Name(_HID, EisaId("PNP0C0E"))
|
||||||
|
|
||||||
// Touchscreen Wake is GPIO14
|
|
||||||
Name(_PRW, Package(){0x1e, 0x03})
|
|
||||||
|
|
||||||
Name(_CRS, ResourceTemplate()
|
Name(_CRS, ResourceTemplate()
|
||||||
{
|
{
|
||||||
// PIRQG -> GSI22
|
// PIRQG -> GSI22
|
||||||
|
@ -48,3 +42,109 @@ Scope (\_SB) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Scope (\_SB.PCI0.GFX0)
|
||||||
|
{
|
||||||
|
Device (GMBS){
|
||||||
|
Name (_HID, "BOOT0001")
|
||||||
|
Method (_STA, 0, NotSerialized) // _STA: Status
|
||||||
|
{
|
||||||
|
Return (0x0F)
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (MMIO, 0, Serialized)
|
||||||
|
{
|
||||||
|
Local0 = BAR0 & 0xFFFFFFFFFFFFFFF0
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (LVGA) {
|
||||||
|
Name (_HID, "BOOT0002")
|
||||||
|
Name (_UID, 0)
|
||||||
|
Name (_DSD, Package () {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
Package (2) {"coolstar,bus-number", GMBUS_PIN_VGADDC}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Method (_STA)
|
||||||
|
{
|
||||||
|
Return (0xF)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (ATPD)
|
||||||
|
{
|
||||||
|
Name (_HID, "ATML0000")
|
||||||
|
Name (_DDN, "Atmel Touchpad")
|
||||||
|
Name (_UID, 0)
|
||||||
|
|
||||||
|
Name (_CRS, ResourceTemplate()
|
||||||
|
{
|
||||||
|
I2cSerialBus (
|
||||||
|
BOARD_TRACKPAD_I2C_ADDR, // SlaveAddress
|
||||||
|
ControllerInitiated, // SlaveMode
|
||||||
|
100000, // ConnectionSpeed
|
||||||
|
AddressingMode7Bit, // AddressingMode
|
||||||
|
"\\_SB.PCI0.GFX0.GMBS.LVGA", // ResourceSource
|
||||||
|
)
|
||||||
|
|
||||||
|
Interrupt (ResourceConsumer, Level, ActiveLow) { BOARD_TRACKPAD_IRQ }
|
||||||
|
})
|
||||||
|
|
||||||
|
// Trackpad Wake is GPIO12
|
||||||
|
Name(_PRW, Package() { BOARD_TRACKPAD_WAKE_GPIO, 0x03 } )
|
||||||
|
|
||||||
|
Method (_STA)
|
||||||
|
{
|
||||||
|
Return (0xF)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (LPNL) {
|
||||||
|
Name (_HID, "BOOT0002")
|
||||||
|
Name (_UID, 1)
|
||||||
|
Name (_DSD, Package () {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
Package (2) {"coolstar,bus-number", GMBUS_PIN_PANEL}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Method (_STA)
|
||||||
|
{
|
||||||
|
Return (0xF)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (ATSA)
|
||||||
|
{
|
||||||
|
Name (_HID, "ATML0001")
|
||||||
|
Name (_DDN, "Atmel TouchScreen")
|
||||||
|
Name (_UID, 0)
|
||||||
|
|
||||||
|
Name (_CRS, ResourceTemplate()
|
||||||
|
{
|
||||||
|
I2cSerialBus (
|
||||||
|
BOARD_TOUCHSCREEN_I2C_ADDR, // SlaveAddress
|
||||||
|
ControllerInitiated, // SlaveMode
|
||||||
|
100000, // ConnectionSpeed
|
||||||
|
AddressingMode7Bit, // AddressingMode
|
||||||
|
"\\_SB.PCI0.GFX0.GMBS.LPNL", // ResourceSource
|
||||||
|
)
|
||||||
|
|
||||||
|
Interrupt (ResourceConsumer, Level, ActiveLow) { BOARD_TOUCHSCREEN_IRQ }
|
||||||
|
})
|
||||||
|
|
||||||
|
// Touchscreen Wake is GPIO14
|
||||||
|
Name(_PRW, Package() { BOARD_TOUCHSCREEN_WAKE_GPIO, 0x03 } )
|
||||||
|
|
||||||
|
Method (_STA)
|
||||||
|
{
|
||||||
|
Return (0xF)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ DefinitionBlock(
|
||||||
#include <southbridge/intel/common/acpi/platform.asl>
|
#include <southbridge/intel/common/acpi/platform.asl>
|
||||||
|
|
||||||
#include "acpi/platform.asl"
|
#include "acpi/platform.asl"
|
||||||
#include "acpi/mainboard.asl"
|
|
||||||
|
|
||||||
// Thermal handler
|
// Thermal handler
|
||||||
#include "acpi/thermal.asl"
|
#include "acpi/thermal.asl"
|
||||||
|
@ -34,5 +33,8 @@ DefinitionBlock(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mainboard devices must be defined after _SB.PCI0.GFX0 as they're attached to the IGPU
|
||||||
|
#include "acpi/mainboard.asl"
|
||||||
|
|
||||||
#include <southbridge/intel/common/acpi/sleepstates.asl>
|
#include <southbridge/intel/common/acpi/sleepstates.asl>
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,13 @@
|
||||||
#define BOARD_TOUCHSCREEN_NAME "touchscreen"
|
#define BOARD_TOUCHSCREEN_NAME "touchscreen"
|
||||||
#define BOARD_TOUCHSCREEN_I2C_ADDR 0x4a
|
#define BOARD_TOUCHSCREEN_I2C_ADDR 0x4a
|
||||||
#define BOARD_TOUCHSCREEN_IRQ 22
|
#define BOARD_TOUCHSCREEN_IRQ 22
|
||||||
|
#define BOARD_TOUCHSCREEN_WAKE_GPIO 0x1e
|
||||||
|
|
||||||
#define GPIO_REC_MODE 9
|
#define GPIO_REC_MODE 9
|
||||||
|
|
||||||
#define GPIO_SPI_WP 57
|
#define GPIO_SPI_WP 57
|
||||||
|
|
||||||
|
#define GMBUS_PIN_VGADDC 2
|
||||||
|
#define GMBUS_PIN_PANEL 3
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue