Merge branch 'next-i2c-omap' into next-i2c
This commit is contained in:
commit
2086f848e0
@ -49,24 +49,24 @@
|
|||||||
#define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
|
#define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
|
||||||
|
|
||||||
#define OMAP_I2C_REV_REG 0x00
|
#define OMAP_I2C_REV_REG 0x00
|
||||||
#define OMAP_I2C_IE_REG 0x04
|
#define OMAP_I2C_IE_REG 0x01
|
||||||
#define OMAP_I2C_STAT_REG 0x08
|
#define OMAP_I2C_STAT_REG 0x02
|
||||||
#define OMAP_I2C_IV_REG 0x0c
|
#define OMAP_I2C_IV_REG 0x03
|
||||||
/* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
|
/* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
|
||||||
#define OMAP_I2C_WE_REG 0x0c
|
#define OMAP_I2C_WE_REG 0x03
|
||||||
#define OMAP_I2C_SYSS_REG 0x10
|
#define OMAP_I2C_SYSS_REG 0x04
|
||||||
#define OMAP_I2C_BUF_REG 0x14
|
#define OMAP_I2C_BUF_REG 0x05
|
||||||
#define OMAP_I2C_CNT_REG 0x18
|
#define OMAP_I2C_CNT_REG 0x06
|
||||||
#define OMAP_I2C_DATA_REG 0x1c
|
#define OMAP_I2C_DATA_REG 0x07
|
||||||
#define OMAP_I2C_SYSC_REG 0x20
|
#define OMAP_I2C_SYSC_REG 0x08
|
||||||
#define OMAP_I2C_CON_REG 0x24
|
#define OMAP_I2C_CON_REG 0x09
|
||||||
#define OMAP_I2C_OA_REG 0x28
|
#define OMAP_I2C_OA_REG 0x0a
|
||||||
#define OMAP_I2C_SA_REG 0x2c
|
#define OMAP_I2C_SA_REG 0x0b
|
||||||
#define OMAP_I2C_PSC_REG 0x30
|
#define OMAP_I2C_PSC_REG 0x0c
|
||||||
#define OMAP_I2C_SCLL_REG 0x34
|
#define OMAP_I2C_SCLL_REG 0x0d
|
||||||
#define OMAP_I2C_SCLH_REG 0x38
|
#define OMAP_I2C_SCLH_REG 0x0e
|
||||||
#define OMAP_I2C_SYSTEST_REG 0x3c
|
#define OMAP_I2C_SYSTEST_REG 0x0f
|
||||||
#define OMAP_I2C_BUFSTAT_REG 0x40
|
#define OMAP_I2C_BUFSTAT_REG 0x10
|
||||||
|
|
||||||
/* I2C Interrupt Enable Register (OMAP_I2C_IE): */
|
/* I2C Interrupt Enable Register (OMAP_I2C_IE): */
|
||||||
#define OMAP_I2C_IE_XDR (1 << 14) /* TX Buffer drain int enable */
|
#define OMAP_I2C_IE_XDR (1 << 14) /* TX Buffer drain int enable */
|
||||||
@ -161,6 +161,7 @@ struct omap_i2c_dev {
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
void __iomem *base; /* virtual */
|
void __iomem *base; /* virtual */
|
||||||
int irq;
|
int irq;
|
||||||
|
int reg_shift; /* bit shift for I2C register addresses */
|
||||||
struct clk *iclk; /* Interface clock */
|
struct clk *iclk; /* Interface clock */
|
||||||
struct clk *fclk; /* Functional clock */
|
struct clk *fclk; /* Functional clock */
|
||||||
struct completion cmd_complete;
|
struct completion cmd_complete;
|
||||||
@ -189,12 +190,12 @@ struct omap_i2c_dev {
|
|||||||
static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,
|
static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,
|
||||||
int reg, u16 val)
|
int reg, u16 val)
|
||||||
{
|
{
|
||||||
__raw_writew(val, i2c_dev->base + reg);
|
__raw_writew(val, i2c_dev->base + (reg << i2c_dev->reg_shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)
|
static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)
|
||||||
{
|
{
|
||||||
return __raw_readw(i2c_dev->base + reg);
|
return __raw_readw(i2c_dev->base + (reg << i2c_dev->reg_shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init omap_i2c_get_clocks(struct omap_i2c_dev *dev)
|
static int __init omap_i2c_get_clocks(struct omap_i2c_dev *dev)
|
||||||
@ -924,6 +925,11 @@ omap_i2c_probe(struct platform_device *pdev)
|
|||||||
dev->b_hw = 1; /* Enable hardware fixes */
|
dev->b_hw = 1; /* Enable hardware fixes */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cpu_is_omap7xx())
|
||||||
|
dev->reg_shift = 1;
|
||||||
|
else
|
||||||
|
dev->reg_shift = 2;
|
||||||
|
|
||||||
/* reset ASAP, clearing any IRQs */
|
/* reset ASAP, clearing any IRQs */
|
||||||
omap_i2c_init(dev);
|
omap_i2c_init(dev);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user