aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/busses/i2c-omap.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/busses/i2c-omap.c')
-rw-r--r--drivers/i2c/busses/i2c-omap.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index e6792abfc2b..0254da47952 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -42,12 +42,12 @@
42#include <linux/pm_runtime.h> 42#include <linux/pm_runtime.h>
43 43
44/* I2C controller revisions */ 44/* I2C controller revisions */
45#define OMAP_I2C_REV_2 0x20 45#define OMAP_I2C_OMAP1_REV_2 0x20
46 46
47/* I2C controller revisions present on specific hardware */ 47/* I2C controller revisions present on specific hardware */
48#define OMAP_I2C_REV_ON_2430 0x36 48#define OMAP_I2C_REV_ON_2430 0x36
49#define OMAP_I2C_REV_ON_3430 0x3C 49#define OMAP_I2C_REV_ON_3430 0x3C
50#define OMAP_I2C_REV_ON_4430 0x40 50#define OMAP_I2C_REV_ON_3530_4430 0x40
51 51
52/* timeout waiting for the controller to respond */ 52/* timeout waiting for the controller to respond */
53#define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000)) 53#define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
@@ -314,7 +314,7 @@ static void omap_i2c_idle(struct omap_i2c_dev *dev)
314 else 314 else
315 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0); 315 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0);
316 316
317 if (dev->rev < OMAP_I2C_REV_2) { 317 if (dev->rev < OMAP_I2C_OMAP1_REV_2) {
318 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); /* Read clears */ 318 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); /* Read clears */
319 } else { 319 } else {
320 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, dev->iestate); 320 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, dev->iestate);
@@ -336,7 +336,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
336 unsigned long internal_clk = 0; 336 unsigned long internal_clk = 0;
337 struct clk *fclk; 337 struct clk *fclk;
338 338
339 if (dev->rev >= OMAP_I2C_REV_2) { 339 if (dev->rev >= OMAP_I2C_OMAP1_REV_2) {
340 /* Disable I2C controller before soft reset */ 340 /* Disable I2C controller before soft reset */
341 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 341 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG,
342 omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) & 342 omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) &
@@ -379,7 +379,9 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
379 * REVISIT: Some wkup sources might not be needed. 379 * REVISIT: Some wkup sources might not be needed.
380 */ 380 */
381 dev->westate = OMAP_I2C_WE_ALL; 381 dev->westate = OMAP_I2C_WE_ALL;
382 omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate); 382 if (dev->rev < OMAP_I2C_REV_ON_3530_4430)
383 omap_i2c_write_reg(dev, OMAP_I2C_WE_REG,
384 dev->westate);
383 } 385 }
384 } 386 }
385 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 387 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
@@ -721,7 +723,7 @@ static inline void i2c_omap_errata_i207(struct omap_i2c_dev *dev, u16 stat)
721#ifdef CONFIG_ARCH_OMAP15XX 723#ifdef CONFIG_ARCH_OMAP15XX
722 724
723static irqreturn_t 725static irqreturn_t
724omap_i2c_rev1_isr(int this_irq, void *dev_id) 726omap_i2c_omap1_isr(int this_irq, void *dev_id)
725{ 727{
726 struct omap_i2c_dev *dev = dev_id; 728 struct omap_i2c_dev *dev = dev_id;
727 u16 iv, w; 729 u16 iv, w;
@@ -775,7 +777,7 @@ omap_i2c_rev1_isr(int this_irq, void *dev_id)
775 return IRQ_HANDLED; 777 return IRQ_HANDLED;
776} 778}
777#else 779#else
778#define omap_i2c_rev1_isr NULL 780#define omap_i2c_omap1_isr NULL
779#endif 781#endif
780 782
781/* 783/*
@@ -1060,7 +1062,7 @@ omap_i2c_probe(struct platform_device *pdev)
1060 * size. This is to ensure that we can handle the status on int 1062 * size. This is to ensure that we can handle the status on int
1061 * call back latencies. 1063 * call back latencies.
1062 */ 1064 */
1063 if (dev->rev >= OMAP_I2C_REV_ON_4430) { 1065 if (dev->rev >= OMAP_I2C_REV_ON_3530_4430) {
1064 dev->fifo_size = 0; 1066 dev->fifo_size = 0;
1065 dev->b_hw = 0; /* Disable hardware fixes */ 1067 dev->b_hw = 0; /* Disable hardware fixes */
1066 } else { 1068 } else {
@@ -1076,7 +1078,8 @@ omap_i2c_probe(struct platform_device *pdev)
1076 /* reset ASAP, clearing any IRQs */ 1078 /* reset ASAP, clearing any IRQs */
1077 omap_i2c_init(dev); 1079 omap_i2c_init(dev);
1078 1080
1079 isr = (dev->rev < OMAP_I2C_REV_2) ? omap_i2c_rev1_isr : omap_i2c_isr; 1081 isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr :
1082 omap_i2c_isr;
1080 r = request_irq(dev->irq, isr, 0, pdev->name, dev); 1083 r = request_irq(dev->irq, isr, 0, pdev->name, dev);
1081 1084
1082 if (r) { 1085 if (r) {