svn commit: r325045 - head/sys/dev/sdhci
Ian Lepore
ian at FreeBSD.org
Fri Oct 27 17:21:45 UTC 2017
Author: ian
Date: Fri Oct 27 17:21:43 2017
New Revision: 325045
URL: https://svnweb.freebsd.org/changeset/base/325045
Log:
Actually release resources in detach() rather than just returning EBUSY.
This will enable use of 'devctl disable', allow creation of a module, etc.
Modified:
head/sys/dev/sdhci/fsl_sdhci.c
Modified: head/sys/dev/sdhci/fsl_sdhci.c
==============================================================================
--- head/sys/dev/sdhci/fsl_sdhci.c Fri Oct 27 17:05:14 2017 (r325044)
+++ head/sys/dev/sdhci/fsl_sdhci.c Fri Oct 27 17:21:43 2017 (r325045)
@@ -803,9 +803,26 @@ fsl_sdhci_get_platform_clock(device_t dev)
static int
fsl_sdhci_detach(device_t dev)
{
+ struct fsl_sdhci_softc *sc = device_get_softc(dev);
- /* sdhci_fdt_gpio_teardown(sc->gpio); */
- return (EBUSY);
+ if (sc->gpio != NULL)
+ sdhci_fdt_gpio_teardown(sc->gpio);
+
+ callout_drain(&sc->r1bfix_callout);
+
+ if (sc->intr_cookie != NULL)
+ bus_teardown_intr(dev, sc->irq_res, sc->intr_cookie);
+ if (sc->irq_res != NULL)
+ bus_release_resource(dev, SYS_RES_IRQ,
+ rman_get_rid(sc->irq_res), sc->irq_res);
+
+ if (sc->mem_res != NULL) {
+ sdhci_cleanup_slot(&sc->slot);
+ bus_release_resource(dev, SYS_RES_MEMORY,
+ rman_get_rid(sc->mem_res), sc->mem_res);
+ }
+
+ return (0);
}
static int
@@ -918,13 +935,7 @@ fsl_sdhci_attach(device_t dev)
return (0);
fail:
- if (sc->intr_cookie)
- bus_teardown_intr(dev, sc->irq_res, sc->intr_cookie);
- if (sc->irq_res)
- bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq_res);
- if (sc->mem_res)
- bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->mem_res);
-
+ fsl_sdhci_detach(dev);
return (err);
}
@@ -932,7 +943,7 @@ static int
fsl_sdhci_probe(device_t dev)
{
- if (!ofw_bus_status_okay(dev))
+ if (!ofw_bus_status_okay(dev))
return (ENXIO);
switch (ofw_bus_search_compatible(dev, compat_data)->ocd_data) {
More information about the svn-src-all
mailing list