diff options
author | Andy Green <andy@warmcat.com> | 2011-03-03 13:50:44 +0000 |
---|---|---|
committer | Nicolas Pitre <nicolas.pitre@linaro.org> | 2011-03-03 14:41:41 -0500 |
commit | 8f0ab72d6f4bcc20ab0c6b47ece9c1c872f6ca09 (patch) | |
tree | fa9ad6fb743271e9c90facba496d9ae027740227 /drivers/i2c/busses/i2c-omap.c | |
parent | 164085ed34dae1a5bd8b561fc8791a663a95005d (diff) |
OMAP3 and 4 I2C use cpu type consistently for new register availabilitylinaro-linux-2.6.38-upstream-04Mar2011
The driver makes the choice about which register layout to
use based on cpu, however it then tries to use the probed
peripheral unit version register to decide whether to access
registers that only exist in the 4430 unit.
Unfortunately, the unit with the smaller register map on the
OMAP3530 has the same peripheral unit version number, leading
the OMAP3530 to dereference the register map beyond the bounds
of its array, and then to access a 'random' register offset taken
from whatever happens to be sitting beyond the register map
array, as reported here
https://bugs.launchpad.net/linux-linaro/+bug/645324
This patch makes both the choice of register map and the decision
to use a register only present in the larger map both do so based
on cpu type, which correctly reflects register availability.
Cc: patches@linaro.org
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Diffstat (limited to 'drivers/i2c/busses/i2c-omap.c')
-rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index 843fccc703d..c82db907744 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c @@ -309,7 +309,7 @@ static void omap_i2c_idle(struct omap_i2c_dev *dev) pdata = pdev->dev.platform_data; dev->iestate = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); - if (dev->rev >= OMAP_I2C_REV_ON_4430) + if (cpu_is_omap44xx()) omap_i2c_write_reg(dev, OMAP_I2C_OMAP4430_IRQENABLE_CLR, 1); else omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0); |