summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/davinci_i2c.c17
-rw-r--r--drivers/i2c/npcm_i2c.c7
-rw-r--r--drivers/i2c/omap24xx_i2c.c2
3 files changed, 16 insertions, 10 deletions
diff --git a/drivers/i2c/davinci_i2c.c b/drivers/i2c/davinci_i2c.c
index 39132747208..9bba0600e3e 100644
--- a/drivers/i2c/davinci_i2c.c
+++ b/drivers/i2c/davinci_i2c.c
@@ -19,6 +19,7 @@
#include <asm/arch/i2c_defs.h>
#include <asm/io.h>
#include <linux/delay.h>
+#include <linux/types.h>
#include "davinci_i2c.h"
/* Information about i2c controller */
@@ -87,7 +88,7 @@ static void _flush_rx(struct i2c_regs *i2c_base)
static uint _davinci_i2c_setspeed(struct i2c_regs *i2c_base,
uint speed)
{
- uint32_t div, psc;
+ u32 div, psc;
psc = 2;
/* SCLL + SCLH */
@@ -122,10 +123,10 @@ static void _davinci_i2c_init(struct i2c_regs *i2c_base,
udelay(1000);
}
-static int _davinci_i2c_read(struct i2c_regs *i2c_base, uint8_t chip,
- uint32_t addr, int alen, uint8_t *buf, int len)
+static int _davinci_i2c_read(struct i2c_regs *i2c_base, u8 chip,
+ u32 addr, int alen, u8 *buf, int len)
{
- uint32_t tmp;
+ u32 tmp;
int i;
if ((alen < 0) || (alen > 2)) {
@@ -220,10 +221,10 @@ static int _davinci_i2c_read(struct i2c_regs *i2c_base, uint8_t chip,
return 0;
}
-static int _davinci_i2c_write(struct i2c_regs *i2c_base, uint8_t chip,
- uint32_t addr, int alen, uint8_t *buf, int len)
+static int _davinci_i2c_write(struct i2c_regs *i2c_base, u8 chip,
+ u32 addr, int alen, u8 *buf, int len)
{
- uint32_t tmp;
+ u32 tmp;
int i;
if ((alen < 0) || (alen > 2)) {
@@ -302,7 +303,7 @@ static int _davinci_i2c_write(struct i2c_regs *i2c_base, uint8_t chip,
return 0;
}
-static int _davinci_i2c_probe_chip(struct i2c_regs *i2c_base, uint8_t chip)
+static int _davinci_i2c_probe_chip(struct i2c_regs *i2c_base, u8 chip)
{
int rc = 1;
diff --git a/drivers/i2c/npcm_i2c.c b/drivers/i2c/npcm_i2c.c
index c64752e1467..bff0d04f1a5 100644
--- a/drivers/i2c/npcm_i2c.c
+++ b/drivers/i2c/npcm_i2c.c
@@ -34,6 +34,7 @@
#define SMBCTL3_SDA_LVL BIT(6)
/* SMBCST */
+#define SMBCST_BUSY BIT(0)
#define SMBCST_BB BIT(1)
#define SMBCST_TGSCL BIT(5)
@@ -479,11 +480,17 @@ static int npcm_i2c_xfer(struct udevice *dev,
struct npcm_i2c_bus *bus = dev_get_priv(dev);
struct npcm_i2c_regs *reg = bus->reg;
int ret = 0, err = 0;
+ u8 val;
if (nmsgs < 1 || nmsgs > 2) {
printf("%s: commands not support\n", __func__);
return -EREMOTEIO;
}
+
+ /* Wait for module out of busy */
+ if (readb_poll_timeout(&reg->cst, val, !(val & SMBCST_BUSY), 1000))
+ return -EBUSY;
+
/* clear ST register */
writeb(0xFF, &reg->st);
diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c
index a6361d3d17d..2c6f8ea5901 100644
--- a/drivers/i2c/omap24xx_i2c.c
+++ b/drivers/i2c/omap24xx_i2c.c
@@ -134,12 +134,10 @@ static const u8 __maybe_unused reg_map_ip_v2[] = {
};
struct omap_i2c {
- struct udevice *clk;
int ip_rev;
struct i2c *regs;
unsigned int speed;
int waitdelay;
- int clk_id;
};
static inline const u8 *omap_i2c_get_ip_reg_map(int ip_rev)