aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Green <andy@warmcat.com>2011-03-03 13:50:44 +0000
committerNicolas Pitre <nicolas.pitre@linaro.org>2011-03-03 14:41:41 -0500
commit8f0ab72d6f4bcc20ab0c6b47ece9c1c872f6ca09 (patch)
treefa9ad6fb743271e9c90facba496d9ae027740227
parent164085ed34dae1a5bd8b561fc8791a663a95005d (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>
-rw-r--r--drivers/i2c/busses/i2c-omap.c2
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);