From 2ed935b28bd471a4df1154772c6ae994eaa9f70c Mon Sep 17 00:00:00 2001
From: Gaby <gaby@MacBook-Air-de-Gaby.local>
Date: Mon, 17 Aug 2026 14:18:06 +0200
Subject: [PATCH] dwiic_acpi: defer IETP until GPIO is ready

---
 sys/dev/acpi/dwiic_acpi.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/sys/dev/acpi/dwiic_acpi.c b/sys/dev/acpi/dwiic_acpi.c
index 25343b29e02..e0b77b4ec79 100644
--- a/sys/dev/acpi/dwiic_acpi.c
+++ b/sys/dev/acpi/dwiic_acpi.c
@@ -44,6 +44,7 @@ struct dwiic_crs {
 
 int		dwiic_acpi_match(struct device *, void *, void *);
 void		dwiic_acpi_attach(struct device *, struct device *, void *);
+void		dwiic_acpi_rescan(struct device *);
 
 int		dwiic_acpi_parse_crs(int, union acpi_resource *, void *);
 int		dwiic_acpi_found_ihidev(struct dwiic_softc *,
@@ -272,6 +273,14 @@ dwiic_acpi_attach(struct device *parent, struct device *self, void *aux)
 #endif
 }
 
+void
+dwiic_acpi_rescan(struct device *self)
+{
+	struct dwiic_softc *sc = (struct dwiic_softc *)self;
+
+	aml_find_node(sc->sc_devnode, "_HID", dwiic_acpi_found_hid, sc);
+}
+
 int
 dwiic_acpi_parse_crs(int crsidx, union acpi_resource *crs, void *arg)
 {
@@ -476,8 +485,14 @@ dwiic_acpi_found_hid(struct aml_node *node, void *arg)
 		return dwiic_acpi_found_ihidev(sc, node, dev, crs);
 	else if (dwiic_matchhids(dev, iatp_hids))
 		return dwiic_acpi_found_iatp(sc, node, dev, crs);
-	else if (dwiic_matchhids(dev, ietp_hids) || dwiic_matchhids(cdev, ietp_hids))
+	else if (dwiic_matchhids(dev, ietp_hids) || dwiic_matchhids(cdev, ietp_hids)) {
+		if (crs.gpio_int_node != NULL && crs.gpio_int_node->gpio == NULL) {
+       printf("dwiic: deferring IETP\n");
+       config_defer(&sc->sc_dev, dwiic_acpi_rescan);
+       return 0;
+		}
 		return dwiic_acpi_found_ietp(sc, node, dev, crs);
+	}
 
 	memset(&ia, 0, sizeof(ia));
 	ia.ia_tag = sc->sc_iba.iba_tag;
-- 
2.50.1 (Apple Git-155)

