summaryrefslogtreecommitdiff
path: root/src/drivers/i2c/generic/generic.c
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2016-09-26 10:31:22 -0700
committerMartin Roth <martinroth@google.com>2016-09-28 22:17:43 +0200
commitfbf2c79b489a526e5ab7359ce56be0b4b66c854b (patch)
tree2dbf89a7861ea851648eea01c38224d0c74d44da /src/drivers/i2c/generic/generic.c
parenteeabb75e8c5a72fb01c1966fd91ea398818f15b3 (diff)
downloadcoreboot-fbf2c79b489a526e5ab7359ce56be0b4b66c854b.tar.xz
drivers/i2c/generic: Add config for marking device as probed
Add a config option to the generic I2C device driver to indicate to the OS that this device should be probed before being added. This can be used to provide ACPI device instantiations to devices that may not actually exist on the board. For example, if multiple trackpad vendors are supported on the same board they can both be described in ACPI and the OS will probe the address and load the driver only if the device responds to the probe at that address. BUG=chrome-os-partner:57686 Change-Id: I22cffb4b15f25d97dfd37dc58bca315f57bafc59 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/16742 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/drivers/i2c/generic/generic.c')
-rw-r--r--src/drivers/i2c/generic/generic.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/drivers/i2c/generic/generic.c b/src/drivers/i2c/generic/generic.c
index 62e2e9a813..30a280bcff 100644
--- a/src/drivers/i2c/generic/generic.c
+++ b/src/drivers/i2c/generic/generic.c
@@ -35,6 +35,7 @@ static void i2c_generic_fill_ssdt(struct device *dev)
.speed = config->speed ? : I2C_SPEED_FAST,
.resource = scope,
};
+ struct acpi_dp *dsd = NULL;
if (!dev->enabled || !scope)
return;
@@ -65,6 +66,12 @@ static void i2c_generic_fill_ssdt(struct device *dev)
acpigen_write_PRW(config->wake, 3);
}
+ if (config->probed) {
+ dsd = acpi_dp_new_table("_DSD");
+ acpi_dp_add_integer(dsd, "linux,probed", 1);
+ acpi_dp_write(dsd);
+ }
+
acpigen_pop_len(); /* Device */
acpigen_pop_len(); /* Scope */