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;