From 718d185f1e041411a3a42862bf83c79b6e51fb36 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Mon, 10 Dec 2018 11:29:36 -0800 Subject: vendorcode/google/chromeos: Use ACPI GPIO pin when possible Have the generated Chrome OS ACPI GPIO table provide the ACPI GPIO pin number instead of the raw GPIO number when possible. This is necessary if the OS uses a different numbering for GPIOs that are reported in ACPI than the actual underlying GPIO number. For example, if the SOC OS driver declares more pins in an ACPI GPIO bank than there are actual pins in the hardware it will have gaps in the number space. This is a reworked version of 6217e9beff16d805ca833e79a2931bcdb3d02a44 which does not try to convert CROS_GPIO_VIRTUAL. BUG=b:120686247 TEST=pass firmware_WriteProtect test on Sarien Signed-off-by: Duncan Laurie Change-Id: I3ad5099b7f2f871c7e516988f60a54eb2a75bef7 Reviewed-on: https://review.coreboot.org/c/31080 Tested-by: build bot (Jenkins) Reviewed-by: Subrata Banik Reviewed-by: Nico Huber --- src/vendorcode/google/chromeos/acpi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/vendorcode') diff --git a/src/vendorcode/google/chromeos/acpi.c b/src/vendorcode/google/chromeos/acpi.c index 6605809023..8fd47a6a76 100644 --- a/src/vendorcode/google/chromeos/acpi.c +++ b/src/vendorcode/google/chromeos/acpi.c @@ -14,11 +14,15 @@ */ #include +#if IS_ENABLED(CONFIG_GENERIC_GPIO_LIB) +#include +#endif #include "chromeos.h" void chromeos_acpi_gpio_generate(const struct cros_gpio *gpios, size_t num) { size_t i; + int gpio_num; acpigen_write_scope("\\"); acpigen_write_name("OIPG"); @@ -28,7 +32,13 @@ void chromeos_acpi_gpio_generate(const struct cros_gpio *gpios, size_t num) acpigen_write_package(4); acpigen_write_integer(gpios[i].type); acpigen_write_integer(gpios[i].polarity); - acpigen_write_integer(gpios[i].gpio_num); + gpio_num = gpios[i].gpio_num; +#if IS_ENABLED(CONFIG_GENERIC_GPIO_LIB) + /* Get ACPI pin from GPIO library if available */ + if (gpios[i].gpio_num != CROS_GPIO_VIRTUAL) + gpio_num = gpio_acpi_pin(gpio_num); +#endif + acpigen_write_integer(gpio_num); acpigen_write_string(gpios[i].device); acpigen_pop_len(); } -- cgit v1.2.3