gpio: remove gpiobus_attach_bus
Since gpiobus_attach_bus can attach the gpiobus child along with its children in the same bus pass, the parent controller's reference to gpiobus might not be set by the time the children need it. Instead, drivers should use gpiobus_add_bus and explicitly call bus_attach_children. Reviewed by: mmel, imp (older version) Approved by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D51578
This commit is contained in:
@@ -1162,11 +1162,12 @@ aw_gpio_attach(device_t dev)
|
||||
fdt_pinctrl_register(dev, "allwinner,pins");
|
||||
fdt_pinctrl_configure_tree(dev);
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL)
|
||||
goto fail;
|
||||
|
||||
config_intrhook_oneshot(aw_gpio_enable_bank_supply, sc);
|
||||
bus_attach_children(dev);
|
||||
|
||||
return (0);
|
||||
|
||||
|
||||
@@ -1322,7 +1322,7 @@ axp2xx_attach(device_t dev)
|
||||
case AXP209:
|
||||
sc->pins = axp209_pins;
|
||||
sc->npins = nitems(axp209_pins);
|
||||
sc->gpiodev = gpiobus_attach_bus(dev);
|
||||
sc->gpiodev = gpiobus_add_bus(dev);
|
||||
|
||||
sc->sensors = axp209_sensors;
|
||||
sc->nsensors = nitems(axp209_sensors);
|
||||
@@ -1333,7 +1333,7 @@ axp2xx_attach(device_t dev)
|
||||
case AXP221:
|
||||
sc->pins = axp221_pins;
|
||||
sc->npins = nitems(axp221_pins);
|
||||
sc->gpiodev = gpiobus_attach_bus(dev);
|
||||
sc->gpiodev = gpiobus_add_bus(dev);
|
||||
|
||||
sc->sensors = axp221_sensors;
|
||||
sc->nsensors = nitems(axp221_sensors);
|
||||
@@ -1374,6 +1374,7 @@ axp2xx_attach(device_t dev)
|
||||
}
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -1609,7 +1609,8 @@ axp8xx_attach(device_t dev)
|
||||
EVENTHANDLER_REGISTER(shutdown_final, axp8xx_shutdown, dev,
|
||||
SHUTDOWN_PRI_LAST);
|
||||
|
||||
sc->gpiodev = gpiobus_attach_bus(dev);
|
||||
sc->gpiodev = gpiobus_add_bus(dev);
|
||||
bus_attach_children(dev);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -840,10 +840,11 @@ bcm_gpio_attach(device_t dev)
|
||||
|
||||
fdt_pinctrl_register(dev, "brcm,pins");
|
||||
fdt_pinctrl_configure_tree(dev);
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL)
|
||||
goto fail;
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
fail:
|
||||
|
||||
@@ -404,10 +404,11 @@ rpi_fw_gpio_attach(device_t dev)
|
||||
}
|
||||
}
|
||||
free(names, M_OFWPROP);
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL)
|
||||
goto fail;
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
fail:
|
||||
|
||||
@@ -861,13 +861,14 @@ imx51_gpio_attach(device_t dev)
|
||||
gpio_pic_register_isrcs(sc);
|
||||
intr_pic_register(dev, OF_xref_from_node(ofw_bus_get_node(dev)));
|
||||
#endif
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
|
||||
if (sc->sc_busdev == NULL) {
|
||||
imx51_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -147,13 +147,14 @@ vf_gpio_attach(device_t dev)
|
||||
"vf_gpio%d.%d", device_get_unit(dev), i);
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
bus_release_resources(dev, vf_gpio_spec, sc->res);
|
||||
mtx_destroy(&sc->sc_mtx);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -291,10 +291,11 @@ a37x0_gpio_attach(device_t dev)
|
||||
if (sc->sc_npins > sc->sc_max_pins)
|
||||
return (ENXIO);
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL)
|
||||
return (ENXIO);
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -340,7 +340,7 @@ mv_gpio_attach(device_t dev)
|
||||
if (rv != 0)
|
||||
return (rv);
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
mtx_destroy(&sc->mutex);
|
||||
bus_release_resource(dev, SYS_RES_IRQ,
|
||||
@@ -348,6 +348,7 @@ mv_gpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -804,12 +804,13 @@ mvebu_gpio_attach(device_t dev)
|
||||
}
|
||||
}
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
mvebu_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -818,12 +818,13 @@ tegra_gpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
tegra_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -674,12 +674,13 @@ ti_gpio_attach(device_t dev)
|
||||
}
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
ti_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -441,12 +441,13 @@ zy7_gpio_attach(device_t dev)
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
zy7_gpio_detach(dev);
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -171,12 +171,13 @@ apple_pinctrl_attach(device_t dev)
|
||||
OF_xref_from_node(ofw_bus_get_node(dev)));
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
device_printf(dev, "failed to attach gpiobus\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
error:
|
||||
mtx_destroy(&sc->sc_mtx);
|
||||
|
||||
@@ -371,12 +371,13 @@ rk_gpio_attach(device_t dev)
|
||||
sc->swporta_ddr = rk_gpio_read_4(sc, RK_GPIO_SWPORTA_DDR);
|
||||
RK_GPIO_UNLOCK(sc);
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
rk_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -181,11 +181,12 @@ rk_grf_gpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -408,12 +408,13 @@ amdgpio_attach(device_t dev)
|
||||
GPIO_PIN_OUTPUT : GPIO_PIN_INPUT;
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
device_printf(dev, "could not attach gpiobus\n");
|
||||
goto err_bus;
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
err_bus:
|
||||
|
||||
@@ -173,11 +173,13 @@ chipc_gpio_attach(device_t dev)
|
||||
if (CC_GPIO_QUIRK(sc, NO_GPIOC)) {
|
||||
sc->gpiobus = NULL;
|
||||
} else {
|
||||
if ((sc->gpiobus = gpiobus_attach_bus(dev)) == NULL) {
|
||||
if ((sc->gpiobus = gpiobus_add_bus(dev)) == NULL) {
|
||||
device_printf(dev, "failed to attach gpiobus\n");
|
||||
error = ENXIO;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
}
|
||||
|
||||
/* Register as the bus GPIO provider */
|
||||
|
||||
@@ -398,12 +398,13 @@ ftgpio_attach(device_t dev)
|
||||
FTGPIO_VERBOSE_PRINTF(sc->dev, "groups GPIO1..GPIO6 enabled\n");
|
||||
|
||||
GPIO_UNLOCK(sc);
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
GPIO_LOCK_DESTROY(sc);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -608,7 +608,7 @@ bytgpio_attach(device_t dev)
|
||||
sc->sc_pad_funcs[pin] = val & BYTGPIO_PCONF0_FUNC_MASK;
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
BYTGPIO_LOCK_DESTROY(sc);
|
||||
bus_release_resource(dev, SYS_RES_MEMORY,
|
||||
@@ -616,6 +616,7 @@ bytgpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
error:
|
||||
|
||||
@@ -441,7 +441,7 @@ chvgpio_attach(device_t dev)
|
||||
bus_write_4(sc->sc_mem_res, CHVGPIO_INTERRUPT_MASK, 0);
|
||||
bus_write_4(sc->sc_mem_res, CHVGPIO_INTERRUPT_STATUS, 0xffff);
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
CHVGPIO_LOCK_DESTROY(sc);
|
||||
bus_release_resource(dev, SYS_RES_MEMORY,
|
||||
@@ -451,6 +451,7 @@ chvgpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -167,12 +167,13 @@ dwgpio_attach(device_t dev)
|
||||
snprintf(sc->gpio_pins[i].gp_name, GPIOMAXNAME,
|
||||
"dwgpio%d.%d", device_get_unit(dev), i);
|
||||
}
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
mtx_destroy(&sc->sc_mtx);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -330,24 +330,6 @@ gpiobus_add_bus(device_t dev)
|
||||
return (busdev);
|
||||
}
|
||||
|
||||
/*
|
||||
* Attach a gpiobus child.
|
||||
* Note that the controller is expected
|
||||
* to be fully initialized at this point.
|
||||
*/
|
||||
device_t
|
||||
gpiobus_attach_bus(device_t dev)
|
||||
{
|
||||
device_t busdev;
|
||||
|
||||
busdev = gpiobus_add_bus(dev);
|
||||
if (busdev == NULL)
|
||||
return (NULL);
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (busdev);
|
||||
}
|
||||
|
||||
int
|
||||
gpiobus_detach_bus(device_t dev)
|
||||
{
|
||||
|
||||
@@ -171,7 +171,6 @@ struct resource *gpio_alloc_intr_resource(device_t consumer_dev, int *rid,
|
||||
|
||||
int gpio_check_flags(uint32_t, uint32_t);
|
||||
device_t gpiobus_add_bus(device_t);
|
||||
device_t gpiobus_attach_bus(device_t);
|
||||
int gpiobus_detach_bus(device_t);
|
||||
|
||||
#endif /* __GPIOBUS_H__ */
|
||||
|
||||
@@ -495,13 +495,14 @@ pl061_attach(device_t dev)
|
||||
goto free_isrc;
|
||||
}
|
||||
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
device_printf(dev, "couldn't attach gpio bus\n");
|
||||
PL061_LOCK_DESTROY(sc);
|
||||
goto free_isrc;
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
free_isrc:
|
||||
|
||||
@@ -379,12 +379,13 @@ qoriq_gpio_attach(device_t dev)
|
||||
|
||||
OF_device_register_xref(OF_xref_from_node(ofw_bus_get_node(dev)), dev);
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
qoriq_gpio_detach(dev);
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -142,12 +142,13 @@ pcf8574_attach(device_t dev)
|
||||
(void)pcf8574_write(sc, 0xff);
|
||||
|
||||
sx_init(&sc->lock, "pcf8574");
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "Could not create busdev child\n");
|
||||
sx_destroy(&sc->lock);
|
||||
return (ENXIO);
|
||||
}
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ tca64xx_attach(device_t dev)
|
||||
|
||||
mtx_init(&sc->mtx, "tca64xx gpio", "gpio", MTX_DEF);
|
||||
OF_device_register_xref(OF_xref_from_node(ofw_bus_get_node(dev)), dev);
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "Could not create busdev child\n");
|
||||
return (ENXIO);
|
||||
@@ -281,6 +281,7 @@ tca64xx_attach(device_t dev)
|
||||
}
|
||||
#endif
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -1258,13 +1258,14 @@ nct_attach(device_t dev)
|
||||
|
||||
GPIO_UNLOCK(sc);
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "failed to attach to gpiobus\n");
|
||||
GPIO_LOCK_DESTROY(sc);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -217,10 +217,11 @@ lbggpio_attach(device_t dev)
|
||||
}
|
||||
|
||||
/* support gpio */
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL)
|
||||
return (ENXIO);
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -346,13 +346,14 @@ qcom_tlmm_ipq4018_attach(device_t dev)
|
||||
fdt_pinctrl_register(dev, NULL);
|
||||
fdt_pinctrl_configure_by_name(dev, "default");
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "%s: failed to attach bus\n", __func__);
|
||||
qcom_tlmm_ipq4018_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -308,7 +308,7 @@ rcc_gpio_attach(device_t dev)
|
||||
RCC_WRITE(sc, RCC_GPIO_GP_LVL, sc->sc_output);
|
||||
|
||||
/* Attach the gpiobus. */
|
||||
sc->sc_busdev = gpiobus_attach_bus(dev);
|
||||
sc->sc_busdev = gpiobus_add_bus(dev);
|
||||
if (sc->sc_busdev == NULL) {
|
||||
bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_io_rid,
|
||||
sc->sc_io_res);
|
||||
@@ -316,6 +316,7 @@ rcc_gpio_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -708,11 +708,12 @@ cp2112gpio_attach(device_t dev)
|
||||
}
|
||||
}
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "gpiobus_attach_bus failed\n");
|
||||
device_printf(dev, "gpiobus_add_bus failed\n");
|
||||
goto detach;
|
||||
}
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
detach:
|
||||
|
||||
@@ -228,12 +228,13 @@ mpc85xx_gpio_attach(device_t dev)
|
||||
|
||||
OF_device_register_xref(OF_xref_from_node(ofw_bus_get_node(dev)), dev);
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
mpc85xx_gpio_detach(dev);
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -157,13 +157,14 @@ sfgpio_attach(device_t dev)
|
||||
sc->gpio_pins[i].gp_name[GPIOMAXNAME - 1] = '\0';
|
||||
}
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "Cannot attach gpiobus\n");
|
||||
error = ENXIO;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
|
||||
fail:
|
||||
|
||||
@@ -321,13 +321,14 @@ jh7110_gpio_attach(device_t dev)
|
||||
JH7110_GPIO_WRITE(sc, GPIOE_1, 0);
|
||||
JH7110_GPIO_WRITE(sc, GPIOEN, 1);
|
||||
|
||||
sc->busdev = gpiobus_attach_bus(dev);
|
||||
sc->busdev = gpiobus_add_bus(dev);
|
||||
if (sc->busdev == NULL) {
|
||||
device_printf(dev, "Cannot attach gpiobus\n");
|
||||
jh7110_gpio_detach(dev);
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
bus_attach_children(dev);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user