diff options
| -rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index b20235415878..96f3bedb2799 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
| @@ -52,6 +52,8 @@ | |||
| 52 | #define OMAP_I2C_IE_REG 0x04 | 52 | #define OMAP_I2C_IE_REG 0x04 |
| 53 | #define OMAP_I2C_STAT_REG 0x08 | 53 | #define OMAP_I2C_STAT_REG 0x08 |
| 54 | #define OMAP_I2C_IV_REG 0x0c | 54 | #define OMAP_I2C_IV_REG 0x0c |
| 55 | /* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */ | ||
| 56 | #define OMAP_I2C_WE_REG 0x0c | ||
| 55 | #define OMAP_I2C_SYSS_REG 0x10 | 57 | #define OMAP_I2C_SYSS_REG 0x10 |
| 56 | #define OMAP_I2C_BUF_REG 0x14 | 58 | #define OMAP_I2C_BUF_REG 0x14 |
| 57 | #define OMAP_I2C_CNT_REG 0x18 | 59 | #define OMAP_I2C_CNT_REG 0x18 |
| @@ -89,6 +91,24 @@ | |||
| 89 | #define OMAP_I2C_STAT_NACK (1 << 1) /* No ack interrupt enable */ | 91 | #define OMAP_I2C_STAT_NACK (1 << 1) /* No ack interrupt enable */ |
| 90 | #define OMAP_I2C_STAT_AL (1 << 0) /* Arbitration lost int ena */ | 92 | #define OMAP_I2C_STAT_AL (1 << 0) /* Arbitration lost int ena */ |
| 91 | 93 | ||
| 94 | /* I2C WE wakeup enable register */ | ||
| 95 | #define OMAP_I2C_WE_XDR_WE (1 << 14) /* TX drain wakup */ | ||
| 96 | #define OMAP_I2C_WE_RDR_WE (1 << 13) /* RX drain wakeup */ | ||
| 97 | #define OMAP_I2C_WE_AAS_WE (1 << 9) /* Address as slave wakeup*/ | ||
| 98 | #define OMAP_I2C_WE_BF_WE (1 << 8) /* Bus free wakeup */ | ||
| 99 | #define OMAP_I2C_WE_STC_WE (1 << 6) /* Start condition wakeup */ | ||
| 100 | #define OMAP_I2C_WE_GC_WE (1 << 5) /* General call wakeup */ | ||
| 101 | #define OMAP_I2C_WE_DRDY_WE (1 << 3) /* TX/RX data ready wakeup */ | ||
| 102 | #define OMAP_I2C_WE_ARDY_WE (1 << 2) /* Reg access ready wakeup */ | ||
| 103 | #define OMAP_I2C_WE_NACK_WE (1 << 1) /* No acknowledgment wakeup */ | ||
| 104 | #define OMAP_I2C_WE_AL_WE (1 << 0) /* Arbitration lost wakeup */ | ||
| 105 | |||
| 106 | #define OMAP_I2C_WE_ALL (OMAP_I2C_WE_XDR_WE | OMAP_I2C_WE_RDR_WE | \ | ||
| 107 | OMAP_I2C_WE_AAS_WE | OMAP_I2C_WE_BF_WE | \ | ||
| 108 | OMAP_I2C_WE_STC_WE | OMAP_I2C_WE_GC_WE | \ | ||
| 109 | OMAP_I2C_WE_DRDY_WE | OMAP_I2C_WE_ARDY_WE | \ | ||
| 110 | OMAP_I2C_WE_NACK_WE | OMAP_I2C_WE_AL_WE) | ||
| 111 | |||
| 92 | /* I2C Buffer Configuration Register (OMAP_I2C_BUF): */ | 112 | /* I2C Buffer Configuration Register (OMAP_I2C_BUF): */ |
| 93 | #define OMAP_I2C_BUF_RDMA_EN (1 << 15) /* RX DMA channel enable */ | 113 | #define OMAP_I2C_BUF_RDMA_EN (1 << 15) /* RX DMA channel enable */ |
| 94 | #define OMAP_I2C_BUF_RXFIF_CLR (1 << 14) /* RX FIFO Clear */ | 114 | #define OMAP_I2C_BUF_RXFIF_CLR (1 << 14) /* RX FIFO Clear */ |
| @@ -279,6 +299,13 @@ static int omap_i2c_init(struct omap_i2c_dev *dev) | |||
| 279 | __ffs(SYSC_CLOCKACTIVITY_MASK)); | 299 | __ffs(SYSC_CLOCKACTIVITY_MASK)); |
| 280 | 300 | ||
| 281 | omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, v); | 301 | omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, v); |
| 302 | /* | ||
| 303 | * Enabling all wakup sources to stop I2C freezing on | ||
| 304 | * WFI instruction. | ||
| 305 | * REVISIT: Some wkup sources might not be needed. | ||
| 306 | */ | ||
| 307 | omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, | ||
| 308 | OMAP_I2C_WE_ALL); | ||
| 282 | 309 | ||
| 283 | } | 310 | } |
| 284 | } | 311 | } |
