drivers/i2c/sx9310: Add support for GPIO IRQ

This change adds support for mainboards to use GPIO IRQ instead of
IOAPIC to accomodate for cases where IOAPIC routing might not be
available for certain pads.

BUG=b:129794308

Change-Id: I3e2bb4280303cea177cc0c803d29140731e2b44a
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32273
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Furquan Shaikh 2019-04-10 10:22:06 -07:00
parent 55208409bc
commit aea9871a62
2 changed files with 20 additions and 5 deletions

View File

@ -22,10 +22,20 @@
#define REGISTER(NAME) uint8_t NAME #define REGISTER(NAME) uint8_t NAME
struct drivers_i2c_sx9310_config { struct drivers_i2c_sx9310_config {
const char *desc; /* Device Description */ /* Device Description */
unsigned int uid; /* ACPI _UID */ const char *desc;
enum i2c_speed speed; /* Bus speed in Hz, default is I2C_SPEED_FAST */
struct acpi_irq irq; /* Interrupt */ /* ACPI _UID */
unsigned int uid;
/* Bus speed in Hz, default is I2C_SPEED_FAST */
enum i2c_speed speed;
/* Use GPIO-based interrupt instead of IO-APIC */
struct acpi_gpio irq_gpio;
/* IO-APIC interrupt */
struct acpi_irq irq;
#include "registers.h" #include "registers.h"
}; };

View File

@ -59,7 +59,12 @@ static void i2c_sx9310_fill_ssdt(struct device *dev)
acpigen_write_name("_CRS"); acpigen_write_name("_CRS");
acpigen_write_resourcetemplate_header(); acpigen_write_resourcetemplate_header();
acpi_device_write_i2c(&i2c); acpi_device_write_i2c(&i2c);
acpi_device_write_interrupt(&config->irq);
if (config->irq_gpio.pin_count)
acpi_device_write_gpio(&config->irq_gpio);
else
acpi_device_write_interrupt(&config->irq);
acpigen_write_resourcetemplate_footer(); acpigen_write_resourcetemplate_footer();
/* DSD */ /* DSD */