Module Name:    src
Committed By:   jmcneill
Date:           Tue Jan 26 00:19:53 UTC 2021

Modified Files:
        src/sys/arch/arm/broadcom: bcm2835_bsc_acpi.c
        src/sys/arch/x86/pci: dwiic_pci.c
        src/sys/dev/acpi: acpi_i2c.c acpi_i2c.h acpi_util.c acpi_util.h
            dwiic_acpi.c nxpiic_acpi.c
        src/sys/dev/i2c: i2cmux.c

Log Message:
Add a device_t parameter to acpi_enter_i2c_devs. If non-NULL, all child
acpi_devnodes will be claimed by that device so we don't later try to
attach a duplicate device to that node at acpinodebus.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/x86/pci/dwiic_pci.c
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/acpi/acpi_i2c.c \
    src/sys/dev/acpi/acpi_util.h
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/acpi/acpi_i2c.h
cvs rdiff -u -r1.20 -r1.21 src/sys/dev/acpi/acpi_util.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/acpi/dwiic_acpi.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/acpi/nxpiic_acpi.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/i2c/i2cmux.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c
diff -u src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c:1.1 src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c:1.2
--- src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c:1.1	Tue Mar 31 12:23:17 2020
+++ src/sys/arch/arm/broadcom/bcm2835_bsc_acpi.c	Tue Jan 26 00:19:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_bsc_acpi.c,v 1.1 2020/03/31 12:23:17 jmcneill Exp $ */
+/* $NetBSD: bcm2835_bsc_acpi.c,v 1.2 2021/01/26 00:19:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2020 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_acpi.c,v 1.1 2020/03/31 12:23:17 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_acpi.c,v 1.2 2021/01/26 00:19:52 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -160,7 +160,7 @@ bsciic_acpi_attach(device_t parent, devi
 
 	memset(&iba, 0, sizeof(iba));
 	iba.iba_tag = &sc->sc_i2c;
-	iba.iba_child_devices = acpi_enter_i2c_devs(aa->aa_node);
+	iba.iba_child_devices = acpi_enter_i2c_devs(self, aa->aa_node);
 	config_found_ia(self, "i2cbus", &iba, iicbus_print);
 
 done:

Index: src/sys/arch/x86/pci/dwiic_pci.c
diff -u src/sys/arch/x86/pci/dwiic_pci.c:1.2 src/sys/arch/x86/pci/dwiic_pci.c:1.3
--- src/sys/arch/x86/pci/dwiic_pci.c:1.2	Wed Sep 26 19:06:33 2018
+++ src/sys/arch/x86/pci/dwiic_pci.c	Tue Jan 26 00:19:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: dwiic_pci.c,v 1.2 2018/09/26 19:06:33 jakllsch Exp $ */
+/* $NetBSD: dwiic_pci.c,v 1.3 2021/01/26 00:19:52 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwiic_pci.c,v 1.2 2018/09/26 19:06:33 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwiic_pci.c,v 1.3 2021/01/26 00:19:52 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -170,7 +170,7 @@ pci_dwiic_attach(device_t parent, device
 
 	if (sc->sc_acpinode) {
 		sc->sc_dwiic.sc_iba.iba_child_devices = 
-		    acpi_enter_i2c_devs(sc->sc_acpinode);
+		    acpi_enter_i2c_devs(NULL, sc->sc_acpinode);
 	} else {
 		aprint_verbose_dev(self, "no matching ACPI node\n");
 	}

Index: src/sys/dev/acpi/acpi_i2c.c
diff -u src/sys/dev/acpi/acpi_i2c.c:1.9 src/sys/dev/acpi/acpi_i2c.c:1.10
--- src/sys/dev/acpi/acpi_i2c.c:1.9	Mon Jan 25 12:15:32 2021
+++ src/sys/dev/acpi/acpi_i2c.c	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_i2c.c,v 1.9 2021/01/25 12:15:32 jmcneill Exp $ */
+/* $NetBSD: acpi_i2c.c,v 1.10 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_i2c.c,v 1.9 2021/01/25 12:15:32 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_i2c.c,v 1.10 2021/01/26 00:19:53 jmcneill Exp $");
 
 #include <dev/acpi/acpireg.h>
 #include <dev/acpi/acpivar.h>
@@ -225,7 +225,7 @@ acpi_enter_i2c_device(struct acpi_devnod
 
 
 prop_array_t
-acpi_enter_i2c_devs(struct acpi_devnode *devnode)
+acpi_enter_i2c_devs(device_t dev, struct acpi_devnode *devnode)
 {
 	struct acpi_devnode *ad;
 	prop_array_t array = prop_array_create();
@@ -240,5 +240,10 @@ acpi_enter_i2c_devs(struct acpi_devnode 
 			continue;
 		acpi_enter_i2c_device(ad, array);
 	}
+
+	if (dev != NULL) {
+		acpi_claim_childdevs(dev, devnode);
+	}
+
 	return array;
 }
Index: src/sys/dev/acpi/acpi_util.h
diff -u src/sys/dev/acpi/acpi_util.h:1.9 src/sys/dev/acpi/acpi_util.h:1.10
--- src/sys/dev/acpi/acpi_util.h:1.9	Thu Jan 14 14:35:53 2021
+++ src/sys/dev/acpi/acpi_util.h	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: acpi_util.h,v 1.9 2021/01/14 14:35:53 thorpej Exp $ */
+/*	$NetBSD: acpi_util.h,v 1.10 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
@@ -102,4 +102,6 @@ ACPI_STATUS	 acpi_dsm_integer(ACPI_HANDL
 			ACPI_INTEGER, const ACPI_OBJECT *,
 			ACPI_INTEGER *);
 
+ACPI_STATUS	 acpi_claim_childdevs(device_t, struct acpi_devnode *);
+
 #endif	/* !_SYS_DEV_ACPI_ACPI_UTIL_H */

Index: src/sys/dev/acpi/acpi_i2c.h
diff -u src/sys/dev/acpi/acpi_i2c.h:1.1 src/sys/dev/acpi/acpi_i2c.h:1.2
--- src/sys/dev/acpi/acpi_i2c.h:1.1	Sun Dec 10 16:51:30 2017
+++ src/sys/dev/acpi/acpi_i2c.h	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_i2c.h,v 1.1 2017/12/10 16:51:30 bouyer Exp $ */
+/* $NetBSD: acpi_i2c.h,v 1.2 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -34,5 +34,5 @@
 #define _SYS_DEV_ACPI_ACPI_I2C_H
 #include <prop/proplib.h>
 
-prop_array_t acpi_enter_i2c_devs(struct acpi_devnode *);
+prop_array_t acpi_enter_i2c_devs(device_t, struct acpi_devnode *);
 #endif /*  _SYS_DEV_ACPI_ACPI_I2C_H */

Index: src/sys/dev/acpi/acpi_util.c
diff -u src/sys/dev/acpi/acpi_util.c:1.20 src/sys/dev/acpi/acpi_util.c:1.21
--- src/sys/dev/acpi/acpi_util.c:1.20	Thu Jan 14 14:35:53 2021
+++ src/sys/dev/acpi/acpi_util.c	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: acpi_util.c,v 1.20 2021/01/14 14:35:53 thorpej Exp $ */
+/*	$NetBSD: acpi_util.c,v 1.21 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2003, 2007, 2021 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_util.c,v 1.20 2021/01/14 14:35:53 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_util.c,v 1.21 2021/01/26 00:19:53 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/kmem.h>
@@ -864,3 +864,19 @@ acpi_dsm(ACPI_HANDLE handle, uint8_t *uu
 	return acpi_dsm_typed(handle, uuid, rev, func, arg3, ACPI_TYPE_ANY,
 	    return_obj);
 }
+
+ACPI_STATUS
+acpi_claim_childdevs(device_t dev, struct acpi_devnode *devnode)
+{
+	struct acpi_devnode *ad;
+
+	SIMPLEQ_FOREACH(ad, &devnode->ad_child_head, ad_child_list) {
+		if (ad->ad_device != NULL)
+			continue;
+		aprint_debug(dev, "claiming %s\n", acpi_name(ad->ad_handle));
+		ad->ad_device = dev;
+		acpi_claim_childdevs(dev, ad);
+	}
+
+	return AE_OK;
+}

Index: src/sys/dev/acpi/dwiic_acpi.c
diff -u src/sys/dev/acpi/dwiic_acpi.c:1.5 src/sys/dev/acpi/dwiic_acpi.c:1.6
--- src/sys/dev/acpi/dwiic_acpi.c:1.5	Sun Jan 24 16:33:48 2021
+++ src/sys/dev/acpi/dwiic_acpi.c	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: dwiic_acpi.c,v 1.5 2021/01/24 16:33:48 jmcneill Exp $ */
+/* $NetBSD: dwiic_acpi.c,v 1.6 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwiic_acpi.c,v 1.5 2021/01/24 16:33:48 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwiic_acpi.c,v 1.6 2021/01/26 00:19:53 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -128,7 +128,7 @@ dwiic_acpi_attach(device_t parent, devic
 
 	dwiic_acpi_configure(sc, aa->aa_node->ad_handle);
 
-	sc->sc_iba.iba_child_devices = acpi_enter_i2c_devs(aa->aa_node);
+	sc->sc_iba.iba_child_devices = acpi_enter_i2c_devs(self, aa->aa_node);
 
 	dwiic_attach(sc);
 

Index: src/sys/dev/acpi/nxpiic_acpi.c
diff -u src/sys/dev/acpi/nxpiic_acpi.c:1.2 src/sys/dev/acpi/nxpiic_acpi.c:1.3
--- src/sys/dev/acpi/nxpiic_acpi.c:1.2	Mon Jan 25 12:09:58 2021
+++ src/sys/dev/acpi/nxpiic_acpi.c	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: nxpiic_acpi.c,v 1.2 2021/01/25 12:09:58 jmcneill Exp $ */
+/* $NetBSD: nxpiic_acpi.c,v 1.3 2021/01/26 00:19:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nxpiic_acpi.c,v 1.2 2021/01/25 12:09:58 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nxpiic_acpi.c,v 1.3 2021/01/26 00:19:53 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -151,7 +151,7 @@ nxpiic_acpi_attach(device_t parent, devi
 	msc->sc_flags |= MOTOI2C_F_ENABLE_INV | MOTOI2C_F_STATUS_W1C;
 	msc->sc_iord = nxpiic_acpi_iord;
 	msc->sc_iowr = nxpiic_acpi_iowr;
-	msc->sc_child_devices = acpi_enter_i2c_devs(aa->aa_node);
+	msc->sc_child_devices = acpi_enter_i2c_devs(self, aa->aa_node);
 
 	motoi2c_attach_common(self, msc, &settings);
 

Index: src/sys/dev/i2c/i2cmux.c
diff -u src/sys/dev/i2c/i2cmux.c:1.3 src/sys/dev/i2c/i2cmux.c:1.4
--- src/sys/dev/i2c/i2cmux.c:1.3	Mon Jan 25 12:18:18 2021
+++ src/sys/dev/i2c/i2cmux.c	Tue Jan 26 00:19:53 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i2cmux.c,v 1.3 2021/01/25 12:18:18 jmcneill Exp $	*/
+/*	$NetBSD: i2cmux.c,v 1.4 2021/01/26 00:19:53 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i2cmux.c,v 1.3 2021/01/25 12:18:18 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i2cmux.c,v 1.4 2021/01/26 00:19:53 jmcneill Exp $");
 
 #include <sys/types.h>
 #include <sys/device.h>
@@ -199,7 +199,7 @@ iicmux_attach_bus(struct iicmux_softc * 
 		KASSERT(ad != NULL);
 		struct i2cbus_attach_args iba = {
 			.iba_tag = &bus->controller,
-			.iba_child_devices = acpi_enter_i2c_devs(ad)
+			.iba_child_devices = acpi_enter_i2c_devs(NULL, ad)
 		};
 		config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print);
 	}	break;

Reply via email to