From 8ce36ac54844cf95552dc818fa6d566249b3457e Mon Sep 17 00:00:00 2001 From: Furquan Shaikh Date: Fri, 9 Aug 2019 07:59:06 -0700 Subject: [PATCH] drivers/i2c/generic: Add "compatible" property to _DSD This change adds support for allowing devices to provide a "compatible" property string that can be used when _HID is set to PRP00001. This is used to allow Linux kernel drivers to match the device to appropriate driver based on the OF-style compatible string. Reference: https://www.kernel.org/doc/Documentation/acpi/enumeration.txt BUG=b:129162037 TEST=Verified that atmel touchscreen gets enumerated correctly on kohaku using PRP0001 and compatible string. Change-Id: I8a306854c67ab2f056ea8774df46599ef0c55761 Signed-off-by: Furquan Shaikh Reviewed-on: https://review.coreboot.org/c/coreboot/+/34813 Tested-by: build bot (Jenkins) Reviewed-by: Tim Wawrzynczak Reviewed-by: Paul Fagerburg --- src/drivers/i2c/generic/chip.h | 1 + src/drivers/i2c/generic/generic.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/drivers/i2c/generic/chip.h b/src/drivers/i2c/generic/chip.h index 9e2abb9ed7..99e599d5ea 100644 --- a/src/drivers/i2c/generic/chip.h +++ b/src/drivers/i2c/generic/chip.h @@ -28,6 +28,7 @@ struct drivers_i2c_generic_config { const char *desc; /* Device Description */ unsigned uid; /* ACPI _UID */ enum i2c_speed speed; /* Bus speed in Hz, default is I2C_SPEED_FAST */ + const char *compat_string; /* Compatible string for _HID=PRP0001 */ unsigned wake; /* Wake GPE */ struct acpi_irq irq; /* Interrupt */ diff --git a/src/drivers/i2c/generic/generic.c b/src/drivers/i2c/generic/generic.c index 598f211ed8..9b4f00daa4 100644 --- a/src/drivers/i2c/generic/generic.c +++ b/src/drivers/i2c/generic/generic.c @@ -116,10 +116,13 @@ void i2c_generic_fill_ssdt(struct device *dev, } /* DSD */ - if (config->probed || config->property_count || + if (config->probed || config->property_count || config->compat_string || (reset_gpio_index != -1) || (enable_gpio_index != -1) || (irq_gpio_index != -1)) { dsd = acpi_dp_new_table("_DSD"); + if (config->compat_string) + acpi_dp_add_string(dsd, "compatible", + config->compat_string); if (config->probed) acpi_dp_add_integer(dsd, "linux,probed", 1); if (irq_gpio_index != -1)