Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/gpio/gpioc.c
Show First 20 Lines • Show All 576 Lines • ▼ Show 20 Lines | gpioc_attach(device_t dev) | ||||
sc->sc_unit = device_get_unit(dev); | sc->sc_unit = device_get_unit(dev); | ||||
err = GPIO_PIN_MAX(sc->sc_pdev, &sc->sc_npins); | err = GPIO_PIN_MAX(sc->sc_pdev, &sc->sc_npins); | ||||
sc->sc_npins++; /* Number of pins is one more than max pin number. */ | sc->sc_npins++; /* Number of pins is one more than max pin number. */ | ||||
if (err != 0) | if (err != 0) | ||||
return (err); | return (err); | ||||
sc->sc_pin_intr = malloc(sizeof(struct gpioc_pin_intr) * sc->sc_npins, | sc->sc_pin_intr = malloc(sizeof(struct gpioc_pin_intr) * sc->sc_npins, | ||||
M_GPIOC, M_WAITOK | M_ZERO); | M_GPIOC, M_WAITOK | M_ZERO); | ||||
for (int i = 0; i <= sc->sc_npins; i++) { | for (int i = 0; i < sc->sc_npins; i++) { | ||||
sc->sc_pin_intr[i].pin = malloc(sizeof(struct gpiobus_pin), | sc->sc_pin_intr[i].pin = malloc(sizeof(struct gpiobus_pin), | ||||
M_GPIOC, M_WAITOK | M_ZERO); | M_GPIOC, M_WAITOK | M_ZERO); | ||||
sc->sc_pin_intr[i].sc = sc; | sc->sc_pin_intr[i].sc = sc; | ||||
sc->sc_pin_intr[i].pin->pin = i; | sc->sc_pin_intr[i].pin->pin = i; | ||||
sc->sc_pin_intr[i].pin->dev = sc->sc_pdev; | sc->sc_pin_intr[i].pin->dev = sc->sc_pdev; | ||||
mtx_init(&sc->sc_pin_intr[i].mtx, "gpioc pin", NULL, MTX_DEF); | mtx_init(&sc->sc_pin_intr[i].mtx, "gpioc pin", NULL, MTX_DEF); | ||||
SLIST_INIT(&sc->sc_pin_intr[i].privs); | SLIST_INIT(&sc->sc_pin_intr[i].privs); | ||||
} | } | ||||
Show All 17 Lines | |||||
gpioc_detach(device_t dev) | gpioc_detach(device_t dev) | ||||
{ | { | ||||
struct gpioc_softc *sc = device_get_softc(dev); | struct gpioc_softc *sc = device_get_softc(dev); | ||||
int err; | int err; | ||||
if (sc->sc_ctl_dev) | if (sc->sc_ctl_dev) | ||||
destroy_dev(sc->sc_ctl_dev); | destroy_dev(sc->sc_ctl_dev); | ||||
for (int i = 0; i <= sc->sc_npins; i++) { | for (int i = 0; i < sc->sc_npins; i++) { | ||||
mtx_destroy(&sc->sc_pin_intr[i].mtx); | mtx_destroy(&sc->sc_pin_intr[i].mtx); | ||||
free(&sc->sc_pin_intr[i].pin, M_GPIOC); | free(&sc->sc_pin_intr[i].pin, M_GPIOC); | ||||
} | } | ||||
free(sc->sc_pin_intr, M_GPIOC); | free(sc->sc_pin_intr, M_GPIOC); | ||||
if ((err = bus_generic_detach(dev)) != 0) | if ((err = bus_generic_detach(dev)) != 0) | ||||
return (err); | return (err); | ||||
▲ Show 20 Lines • Show All 438 Lines • Show Last 20 Lines |