diff options
Diffstat (limited to 'sys/dev/ow')
-rw-r--r-- | sys/dev/ow/ow.c | 28 | ||||
-rw-r--r-- | sys/dev/ow/owc_gpiobus.c | 7 |
2 files changed, 14 insertions, 21 deletions
diff --git a/sys/dev/ow/ow.c b/sys/dev/ow/ow.c index 6d89cd445a3b..0325e6b324c8 100644 --- a/sys/dev/ow/ow.c +++ b/sys/dev/ow/ow.c @@ -321,7 +321,7 @@ ow_add_child(device_t dev, romid_t romid) di = malloc(sizeof(*di), M_OW, M_WAITOK); di->romid = romid; - child = device_add_child(dev, NULL, -1); + child = device_add_child(dev, NULL, DEVICE_UNIT_ANY); if (child == NULL) { free(di, M_OW); return ENOMEM; @@ -330,6 +330,12 @@ ow_add_child(device_t dev, romid_t romid) return (0); } +static void +ow_child_deleted(device_t dev, device_t child) +{ + free(device_get_ivars(child), M_OW); +} + static device_t ow_child_by_romid(device_t dev, romid_t romid) { @@ -552,15 +558,13 @@ ow_attach(device_t ndev) sc->dev = ndev; mtx_init(&sc->mtx, device_get_nameunit(sc->dev), "ow", MTX_DEF); ow_enumerate(ndev, ow_search_rom, ow_device_found); - return bus_generic_attach(ndev); + bus_attach_children(ndev); + return (0); } static int ow_detach(device_t ndev) { - device_t *children, child; - int nkid, i; - struct ow_devinfo *di; struct ow_softc *sc; sc = device_get_softc(ndev); @@ -570,19 +574,6 @@ ow_detach(device_t ndev) */ bus_generic_detach(ndev); - /* - * We delete all the children, and free up the ivars - */ - if (device_get_children(ndev, &children, &nkid) != 0) - return ENOMEM; - for (i = 0; i < nkid; i++) { - child = children[i]; - di = device_get_ivars(child); - free(di, M_OW); - device_delete_child(ndev, child); - } - free(children, M_TEMP); - OW_LOCK_DESTROY(sc); return 0; } @@ -703,6 +694,7 @@ static device_method_t ow_methods[] = { DEVMETHOD(device_detach, ow_detach), /* Bus interface */ + DEVMETHOD(bus_child_deleted, ow_child_deleted), DEVMETHOD(bus_child_pnpinfo, ow_child_pnpinfo), DEVMETHOD(bus_read_ivar, ow_read_ivar), DEVMETHOD(bus_write_ivar, ow_write_ivar), diff --git a/sys/dev/ow/owc_gpiobus.c b/sys/dev/ow/owc_gpiobus.c index f919c431c12a..f010a4dc75f1 100644 --- a/sys/dev/ow/owc_gpiobus.c +++ b/sys/dev/ow/owc_gpiobus.c @@ -133,8 +133,9 @@ owc_gpiobus_attach(device_t dev) * interrupts work, because we can't do IO for them until we can read * the system timecounter (which initializes after device attachments). */ - device_add_child(sc->sc_dev, "ow", -1); - return (bus_delayed_attach_children(dev)); + device_add_child(sc->sc_dev, "ow", DEVICE_UNIT_ANY); + bus_delayed_attach_children(dev); + return (0); } static int @@ -145,7 +146,7 @@ owc_gpiobus_detach(device_t dev) sc = device_get_softc(dev); - if ((err = device_delete_children(dev)) != 0) + if ((err = bus_generic_detach(dev)) != 0) return (err); gpio_pin_release(sc->sc_pin); |