svn commit: r349116 - head/sys/arm/ti

Ian Lepore ian at FreeBSD.org
Sun Jun 16 16:02:51 UTC 2019


Author: ian
Date: Sun Jun 16 16:02:50 2019
New Revision: 349116
URL: https://svnweb.freebsd.org/changeset/base/349116

Log:
  In detach(), call bus_generic_detach() before deleting the iicbus child.
  This gives the bus and its children the chance to return EBUSY to abort
  the detach if they're in the middle of doing some IO.

Modified:
  head/sys/arm/ti/ti_i2c.c

Modified: head/sys/arm/ti/ti_i2c.c
==============================================================================
--- head/sys/arm/ti/ti_i2c.c	Sun Jun 16 15:56:59 2019	(r349115)
+++ head/sys/arm/ti/ti_i2c.c	Sun Jun 16 16:02:50 2019	(r349116)
@@ -735,8 +735,6 @@ ti_i2c_deactivate(device_t dev)
 		sc->sc_irq_h = NULL;
 	}
 
-	bus_generic_detach(sc->sc_dev);
-
 	/* Unmap the I2C controller registers. */
 	if (sc->sc_mem_res != NULL) {
 		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
@@ -925,11 +923,18 @@ ti_i2c_detach(device_t dev)
 	int rv;
 
  	sc = device_get_softc(dev);
-	ti_i2c_deactivate(dev);
-	TI_I2C_LOCK_DESTROY(sc);
-	if (sc->sc_iicbus &&
+
+	if ((rv = bus_generic_detach(dev)) != 0) {
+		device_printf(dev, "cannot detach child devices\n");
+		return (rv);
+	}
+
+    if (sc->sc_iicbus &&
 	    (rv = device_delete_child(dev, sc->sc_iicbus)) != 0)
 		return (rv);
+
+	ti_i2c_deactivate(dev);
+	TI_I2C_LOCK_DESTROY(sc);
 
 	return (0);
 }


More information about the svn-src-all mailing list