gpio: Add support for translating gpio_t into ACPI pin
Add a function for an SOC to define that will allow it to map the SOC-specific gpio_t value into an appropriate ACPI pin. The exact behavior depends on the GPIO implementation in the SOC, but it can be used to provide a pin number that is relative to the community or bank that a GPIO resides in. Change-Id: Icb97ccf7d6a9034877614d49166bc9e4fe659bcf Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/15512 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
d48d5a626b
commit
5b6c28c43d
|
@ -314,8 +314,13 @@ void acpi_device_write_gpio(const struct acpi_gpio *gpio)
|
||||||
acpi_device_fill_from_len(pin_table_offset, start);
|
acpi_device_fill_from_len(pin_table_offset, start);
|
||||||
|
|
||||||
/* Pin Table, one word for each pin */
|
/* Pin Table, one word for each pin */
|
||||||
for (pin = 0; pin < gpio->pin_count; pin++)
|
for (pin = 0; pin < gpio->pin_count; pin++) {
|
||||||
acpigen_emit_word(gpio->pins[pin]);
|
uint16_t acpi_pin = gpio->pins[pin];
|
||||||
|
#if IS_ENABLED(CONFIG_GENERIC_GPIO_LIB)
|
||||||
|
acpi_pin = gpio_acpi_pin(acpi_pin);
|
||||||
|
#endif
|
||||||
|
acpigen_emit_word(acpi_pin);
|
||||||
|
}
|
||||||
|
|
||||||
/* Fill in Resource Source Name Offset */
|
/* Fill in Resource Source Name Offset */
|
||||||
acpi_device_fill_from_len(resource_offset, start);
|
acpi_device_fill_from_len(resource_offset, start);
|
||||||
|
|
|
@ -40,6 +40,16 @@ int _gpio_base3_value(gpio_t gpio[], int num_gpio, int binary_first);
|
||||||
*/
|
*/
|
||||||
const char *gpio_acpi_path(gpio_t gpio);
|
const char *gpio_acpi_path(gpio_t gpio);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function may be implemented by SoC/board code to provide
|
||||||
|
* a mapping from the internal representation of a GPIO to the 16bit
|
||||||
|
* value used in an ACPI GPIO pin table entry.
|
||||||
|
*
|
||||||
|
* If not implemented by the SOC the default handler will return 0
|
||||||
|
* because the underlying type of gpio_t is unknown.
|
||||||
|
*/
|
||||||
|
uint16_t gpio_acpi_pin(gpio_t gpio);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read the value presented by the set of GPIOs, when each pin is interpreted
|
* Read the value presented by the set of GPIOs, when each pin is interpreted
|
||||||
* as a base-2 digit (LOW = 0, HIGH = 1).
|
* as a base-2 digit (LOW = 0, HIGH = 1).
|
||||||
|
|
|
@ -145,3 +145,9 @@ __attribute__((weak)) const char *gpio_acpi_path(gpio_t gpio)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Default handler returns 0 because type of gpio_t is unknown */
|
||||||
|
__attribute__((weak)) uint16_t gpio_acpi_pin(gpio_t gpio)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue