summaryrefslogtreecommitdiffstats
path: root/sys/arm/ti
diff options
context:
space:
mode:
authorrpaulo <rpaulo@FreeBSD.org>2014-05-10 08:10:01 +0000
committerrpaulo <rpaulo@FreeBSD.org>2014-05-10 08:10:01 +0000
commita2ba4354919a095c8ea39bf428069f1bc3140a34 (patch)
tree5b9145f1373845c06a43ec6196417c993a7b1461 /sys/arm/ti
parent7faac4cdbfaa3179f16e97c3ba742981faa14b02 (diff)
downloadFreeBSD-src-a2ba4354919a095c8ea39bf428069f1bc3140a34.zip
FreeBSD-src-a2ba4354919a095c8ea39bf428069f1bc3140a34.tar.gz
MFC r259126:
Activate the device before attempt to access any of its registers. Without this change we may end up with a panic (Fatal kernel mode data abort: 'External Non-Linefetch Abort (S)') as described in http://e2e.ti.com/support/arm/sitara_arm/f/791/t/276862.aspx. It is now possible to bring up I2C1 and I2C2 on BBB.
Diffstat (limited to 'sys/arm/ti')
-rw-r--r--sys/arm/ti/ti_i2c.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/arm/ti/ti_i2c.c b/sys/arm/ti/ti_i2c.c
index 28bf3ca..f23a8ea 100644
--- a/sys/arm/ti/ti_i2c.c
+++ b/sys/arm/ti/ti_i2c.c
@@ -1076,20 +1076,20 @@ ti_i2c_attach(device_t dev)
goto out;
}
- /* XXXOMAP3: FIXME get proper revision here */
- /* First read the version number of the I2C module */
- sc->sc_rev = ti_i2c_read_2(sc, I2C_REG_REVNB_HI) & 0xff;
-
- device_printf(dev, "I2C revision %d.%d\n", sc->sc_rev >> 4,
- sc->sc_rev & 0xf);
-
- /* Activate the H/W */
+ /* First we _must_ activate the H/W */
err = ti_i2c_activate(dev);
if (err) {
device_printf(dev, "ti_i2c_activate failed\n");
goto out;
}
+ /* XXXOMAP3: FIXME get proper revision here */
+ /* Read the version number of the I2C module */
+ sc->sc_rev = ti_i2c_read_2(sc, I2C_REG_REVNB_HI) & 0xff;
+
+ device_printf(dev, "I2C revision %d.%d\n", sc->sc_rev >> 4,
+ sc->sc_rev & 0xf);
+
/* activate the interrupt */
err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
NULL, ti_i2c_intr, sc, &sc->sc_irq_h);
OpenPOWER on IntegriCloud