Make the GPIO children attach to the first unit available and not only to

unit 0.

It seems that this 'simplification' was copied to all GPIO drivers in tree.

This fix a bug where a GPIO controller could fail to attach its children
(gpioc and gpiobus) if another GPIO driver attach first.
This commit is contained in:
Luiz Otavio O Souza 2014-10-28 18:33:59 +00:00
parent 527e4e62ac
commit 8839e0e9f3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=273799
15 changed files with 35 additions and 31 deletions

View File

@ -474,8 +474,8 @@ a10_gpio_attach(device_t dev)
}
sc->sc_gpio_npins = i;
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
a10_gpio_sc = sc;

View File

@ -747,8 +747,9 @@ bcm_gpio_attach(device_t dev)
bcm_gpio_sysctl_init(sc);
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
fail:

View File

@ -435,8 +435,8 @@ imx51_gpio_attach(device_t dev)
"imx_gpio%d.%d", device_get_unit(dev), i);
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -146,8 +146,8 @@ vf_gpio_attach(device_t dev)
"vf_gpio%d.%d", device_get_unit(dev), i);
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -192,8 +192,8 @@ lpc_gpio_attach(device_t dev)
lpc_gpio_sc = sc;
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -504,8 +504,8 @@ rk30_gpio_attach(device_t dev)
}
sc->sc_gpio_npins = i;
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
rk30_gpio_sc = sc;

View File

@ -559,8 +559,8 @@ pad_attach(device_t dev)
"pad%d.%d", device_get_unit(dev), i);
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -800,8 +800,8 @@ ti_gpio_attach(device_t dev)
}
/* Finish of the probe call */
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -329,8 +329,8 @@ zy7_gpio_attach(device_t dev)
/* Completely reset. */
zy7_gpio_hw_reset(sc);
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -318,8 +318,9 @@ avila_gpio_attach(device_t dev)
sc->sc_valid |= 1 << p->pin;
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
#undef N
}

View File

@ -447,8 +447,9 @@ cambria_gpio_attach(device_t dev)
cambria_gpio_pin_setflags(dev, pin, p->flags);
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -441,8 +441,9 @@ ar71xx_gpio_attach(device_t dev)
ar71xx_gpio_pin_set(dev, j, 1);
}
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -441,8 +441,9 @@ octeon_gpio_attach(device_t dev)
}
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -511,9 +511,8 @@ rt305x_gpio_attach(device_t dev)
}
#endif
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
return (bus_generic_attach(dev));
}

View File

@ -182,8 +182,8 @@ wiigpio_attach(device_t dev)
"GPIO_PIN_INPUT" : "GPIO_PIN_OUTPUT");
#endif
}
device_add_child(dev, "gpioc", device_get_unit(dev));
device_add_child(dev, "gpiobus", device_get_unit(dev));
device_add_child(dev, "gpioc", -1);
device_add_child(dev, "gpiobus", -1);
/*
* We will be responsible for powering off the system.
*/