summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/i2c/hid/hid.c19
-rw-r--r--src/mainboard/google/sarien/variants/sarien/devicetree.cb4
2 files changed, 23 insertions, 0 deletions
diff --git a/src/drivers/i2c/hid/hid.c b/src/drivers/i2c/hid/hid.c
index d570892c1d..035e5633c6 100644
--- a/src/drivers/i2c/hid/hid.c
+++ b/src/drivers/i2c/hid/hid.c
@@ -18,6 +18,8 @@
#include <stdint.h>
#include <string.h>
#include "chip.h"
+#include <gpio.h>
+#include <console/console.h>
#if CONFIG(HAVE_ACPI_TABLES)
static void i2c_hid_fill_dsm(struct device *dev)
@@ -60,6 +62,23 @@ static void i2c_hid_enable(struct device *dev)
{
struct drivers_i2c_hid_config *config = dev->chip_info;
+ if (!config)
+ return;
+
+ /* Check if device is present by reading GPIO */
+ if (config->generic.device_present_gpio) {
+ int present = gpio_get(config->generic.device_present_gpio);
+ present ^= config->generic.device_present_gpio_invert;
+
+ printk(BIOS_INFO, "%s is %spresent\n",
+ dev->chip_ops->name, present ? "" : "not ");
+
+ if (!present) {
+ dev->enabled = 0;
+ return;
+ }
+ }
+
dev->ops = &i2c_hid_ops;
if (config && config->generic.desc) {
diff --git a/src/mainboard/google/sarien/variants/sarien/devicetree.cb b/src/mainboard/google/sarien/variants/sarien/devicetree.cb
index 625655b38c..12e5dea4aa 100644
--- a/src/mainboard/google/sarien/variants/sarien/devicetree.cb
+++ b/src/mainboard/google/sarien/variants/sarien/devicetree.cb
@@ -329,6 +329,8 @@ chip soc/intel/cannonlake
register "generic.enable_off_delay_ms" = "100"
register "generic.has_power_resource" = "1"
register "hid_desc_reg_offset" = "0x01"
+ register "generic.device_present_gpio" = "GPP_B4"
+ register "generic.device_present_gpio_invert" = "1"
device i2c 10 on end
end
chip drivers/i2c/generic
@@ -339,6 +341,8 @@ chip soc/intel/cannonlake
register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_E7)"
register "enable_delay_ms" = "5"
register "has_power_resource" = "1"
+ register "device_present_gpio" = "GPP_B4"
+ register "device_present_gpio_invert" = "1"
device i2c 34 on end
end
end # I2C #0