UPSTREAM: arch/x86/acpigen: Provide helper functions for enabling/disabling GPIO
In order to allow GPIOs to be set/clear according to their polarity,
provide helper functions that check for polarity and call set/clear
SoC functions for generating ACPI code.
BUG=None
BRANCH=None
TEST=Verified that the ACPI code generated remains the same as before
for reef.
Change-Id: I0857d9e5625eca339f6185acea204fcfba901d25
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: bf4845dd3a
Original-Change-Id: Ie8bdb9dc18e61a4a658f1447d6f1db0b166d9c12
Original-Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Original-Reviewed-on: https://review.coreboot.org/18427
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Original-Tested-by: build bot (Jenkins)
Reviewed-on: https://chromium-review.googlesource.com/445821
This commit is contained in:
parent
a688592f90
commit
d9028464b3
4 changed files with 57 additions and 6 deletions
|
|
@ -512,14 +512,14 @@ void acpi_device_add_power_res(
|
|||
/* Method (_ON, 0, Serialized) */
|
||||
acpigen_write_method_serialized("_ON", 0);
|
||||
if (reset_gpio)
|
||||
acpigen_soc_set_tx_gpio(reset_gpio);
|
||||
acpigen_enable_tx_gpio(reset);
|
||||
if (enable_gpio) {
|
||||
acpigen_soc_set_tx_gpio(enable_gpio);
|
||||
acpigen_enable_tx_gpio(enable);
|
||||
if (enable_delay_ms)
|
||||
acpigen_write_sleep(enable_delay_ms);
|
||||
}
|
||||
if (reset_gpio) {
|
||||
acpigen_soc_clear_tx_gpio(reset_gpio);
|
||||
acpigen_disable_tx_gpio(reset);
|
||||
if (reset_delay_ms)
|
||||
acpigen_write_sleep(reset_delay_ms);
|
||||
}
|
||||
|
|
@ -528,9 +528,9 @@ void acpi_device_add_power_res(
|
|||
/* Method (_OFF, 0, Serialized) */
|
||||
acpigen_write_method_serialized("_OFF", 0);
|
||||
if (reset_gpio)
|
||||
acpigen_soc_set_tx_gpio(reset_gpio);
|
||||
acpigen_enable_tx_gpio(reset);
|
||||
if (enable_gpio)
|
||||
acpigen_soc_clear_tx_gpio(enable_gpio);
|
||||
acpigen_disable_tx_gpio(enable);
|
||||
acpigen_pop_len(); /* _OFF method */
|
||||
|
||||
acpigen_pop_len(); /* PowerResource PRIC */
|
||||
|
|
|
|||
|
|
@ -1299,3 +1299,26 @@ int __attribute__((weak)) acpigen_soc_clear_tx_gpio(unsigned int gpio_num)
|
|||
acpigen_write_debug_string("clear_tx_gpio not available");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper functions for enabling/disabling Tx GPIOs based on the GPIO
|
||||
* polarity. These functions end up calling acpigen_soc_{set,clear}_tx_gpio to
|
||||
* make callbacks into SoC acpigen code.
|
||||
*
|
||||
* Returns 0 on success and -1 on error.
|
||||
*/
|
||||
int acpigen_enable_tx_gpio(struct acpi_gpio *gpio)
|
||||
{
|
||||
if (gpio->polarity == ACPI_GPIO_ACTIVE_HIGH)
|
||||
return acpigen_soc_set_tx_gpio(gpio->pins[0]);
|
||||
else
|
||||
return acpigen_soc_clear_tx_gpio(gpio->pins[0]);
|
||||
}
|
||||
|
||||
int acpigen_disable_tx_gpio(struct acpi_gpio *gpio)
|
||||
{
|
||||
if (gpio->polarity == ACPI_GPIO_ACTIVE_LOW)
|
||||
return acpigen_soc_set_tx_gpio(gpio->pins[0]);
|
||||
else
|
||||
return acpigen_soc_clear_tx_gpio(gpio->pins[0]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <arch/acpi.h>
|
||||
#include <arch/acpi_device.h>
|
||||
|
||||
/* Values that can be returned for ACPI Device _STA method */
|
||||
#define ACPI_STATUS_DEVICE_PRESENT (1 << 0)
|
||||
|
|
@ -289,4 +290,14 @@ int acpigen_soc_set_tx_gpio(unsigned int gpio_num);
|
|||
/* Generate ACPI AML code to set Tx value of GPIO to 0. */
|
||||
int acpigen_soc_clear_tx_gpio(unsigned int gpio_num);
|
||||
|
||||
/*
|
||||
* Helper functions for enabling/disabling Tx GPIOs based on the GPIO
|
||||
* polarity. These functions end up calling acpigen_soc_{set,clear}_tx_gpio to
|
||||
* make callbacks into SoC acpigen code.
|
||||
*
|
||||
* Returns 0 on success and -1 on error.
|
||||
*/
|
||||
int acpigen_enable_tx_gpio(struct acpi_gpio *gpio);
|
||||
int acpigen_disable_tx_gpio(struct acpi_gpio *gpio);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue