Ejemplo n.º 1
0
/* --------------------------------------------------------------------------
 *
 * Bus
 *
 */
static int
tegra_gpio_detach(device_t dev)
{
	struct tegra_gpio_softc *sc;
	int i;

	sc = device_get_softc(dev);

	KASSERT(mtx_initialized(&sc->mtx), ("gpio mutex not initialized"));

	for (i = 0; i < GPIO_NUM_BANKS; i++) {
		if (sc->irq_ih[i] != NULL)
			bus_teardown_intr(dev, sc->irq_res[i], sc->irq_ih[i]);
	}

	if (sc->isrcs != NULL)
		tegra_gpio_pic_detach(sc);

	gpiobus_detach_bus(dev);

	for (i = 0; i < GPIO_NUM_BANKS; i++) {
		if (sc->irq_res[i] != NULL)
			bus_release_resource(dev, SYS_RES_IRQ, 0,
			    sc->irq_res[i]);
	}
	if (sc->mem_res != NULL)
		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->mem_res);
	GPIO_LOCK_DESTROY(sc);

	return(0);
}
Ejemplo n.º 2
0
/**
 *	ti_gpio_detach - detach function for the driver
 *	@dev: scm device handle
 *
 *	Allocates and sets up the driver context, this simply entails creating a
 *	bus mappings for the SCM register set.
 *
 *	LOCKING:
 *	None
 *
 *	RETURNS:
 *	Always returns 0
 */
static int
ti_gpio_detach(device_t dev)
{
	struct ti_gpio_softc *sc = device_get_softc(dev);

	KASSERT(mtx_initialized(&sc->sc_mtx), ("gpio mutex not initialized"));

	/* Disable all interrupts */
	if (sc->sc_mem_res != NULL)
		ti_gpio_intr_clr(sc, 0xffffffff);
	gpiobus_detach_bus(dev);
	if (sc->sc_isrcs != NULL)
		ti_gpio_pic_detach(sc);
	/* Release the memory and IRQ resources. */
	if (sc->sc_irq_hdl) {
		bus_teardown_intr(dev, sc->sc_irq_res,
		    sc->sc_irq_hdl);
	}
	bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irq_rid,
	    sc->sc_irq_res);
	bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_mem_rid,
	    sc->sc_mem_res);
	TI_GPIO_LOCK_DESTROY(sc);

	return (0);
}
Ejemplo n.º 3
0
static int
aml8726_gpio_detach(device_t dev)
{
	struct aml8726_gpio_softc *sc = device_get_softc(dev);

	gpiobus_detach_bus(dev);

	AML_GPIO_LOCK_DESTROY(sc);

	bus_release_resources(dev, aml8726_gpio_spec, sc->res);

	return (0);
}
Ejemplo n.º 4
0
static int
tegra_gpio_detach(device_t dev)
{
	struct tegra_gpio_softc *sc;

	sc = device_get_softc(dev);

	KASSERT(mtx_initialized(&sc->sc_mtx), ("gpio mutex not initialized"));

	gpiobus_detach_bus(dev);
	if (sc->gpio_ih != NULL)
		bus_teardown_intr(dev, sc->irq_res, sc->gpio_ih);
	if (sc->irq_res != NULL)
		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq_res);
	if (sc->mem_res != NULL)
		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->mem_res);
	mtx_destroy(&sc->sc_mtx);

	return(0);
}
Ejemplo n.º 5
0
static int
bytgpio_detach(device_t dev)
{
	struct bytgpio_softc	*sc;

	sc = device_get_softc(dev);

	if (sc->sc_busdev)
		gpiobus_detach_bus(dev);

	BYTGPIO_LOCK_DESTROY(sc);

	if (sc->sc_pad_funcs)
		free(sc->sc_pad_funcs, M_DEVBUF);

	if (sc->sc_mem_res != NULL)
		bus_release_resource(dev, SYS_RES_MEMORY,
		    sc->sc_mem_rid, sc->sc_mem_res);

	return (0);
}
Ejemplo n.º 6
0
static int
octeon_gpio_detach(device_t dev)
{
    struct octeon_gpio_softc *sc = device_get_softc(dev);
    int i;

    KASSERT(mtx_initialized(&sc->gpio_mtx), ("gpio mutex not initialized"));

    for ( i = 0; i < OCTEON_GPIO_IRQS; i++) {
        if (sc->gpio_ih[i])
            bus_teardown_intr(dev, sc->gpio_irq_res[i],
                              sc->gpio_ih[i]);
        if (sc->gpio_irq_res[i])
            bus_release_resource(dev, SYS_RES_IRQ,
                                 sc->gpio_irq_rid[i], sc->gpio_irq_res[i]);
    }
    gpiobus_detach_bus(dev);
    mtx_destroy(&sc->gpio_mtx);

    return(0);
}