public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] omap: Disable GAIA I2C1/I2C4 internal pull-ups
@ 2010-01-21 10:33 Pais, Allen
  2010-02-02  1:53 ` Tony Lindgren
  2010-02-02  3:37 ` Paul Walmsley
  0 siblings, 2 replies; 8+ messages in thread
From: Pais, Allen @ 2010-01-21 10:33 UTC (permalink / raw)
  To: linux-omap@vger.kernel.org

>From 4044fcc9c517e86fbea9f7d3b15d5cf75a767476 Mon Sep 17 00:00:00 2001
From: Allen Pais <allen.pais@ti.com>
Date: Thu, 21 Jan 2010 21:00:04 +0530
Subject: [PATCH 1/2] omap: Disable GAIA I2C1/I2C4 internal pull-ups

This patch disables GAIA I2C1 adn I2C4(SR) internal pull-up, to
use only the external HW resistor >=470 Ohm for the assured
functionality in HS mode.

While testing the I2C in High Speed mode, it was discovered that
without a proper pull-up resistor, there is data corruption during
multi-byte transfer. RTC(time_set) test case was used for testing.

>From the analysis done, it was concluded that ideally we need a
pull-up of 1.6k Ohm(recomended) or atleast 470 Ohm or greater for
assured performance in HS mode.

Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
Signed-off-by: Allen Pais <allen.pais@ti.com>
---
 drivers/mfd/twl-core.c  |   10 ++++++++++
 include/linux/i2c/twl.h |   13 +++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 2a76065..7dcb5e9 100644
--- a/drivers/mfd/twl-core.c
+++ b/drivers/mfd/twl-core.c
@@ -965,6 +965,7 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	int				status;
 	unsigned			i;
 	struct twl4030_platform_data	*pdata = client->dev.platform_data;
+	u8 temp;
 
 	if (!pdata) {
 		dev_dbg(&client->dev, "no platform data?\n");
@@ -1031,6 +1032,15 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		if (status < 0)
 			goto fail;
 	}
+	/* Disable GAIA I2C Pull-up on I2C1 and I2C4(SR) interface
+	 * program I2C_SCL_CTRL_PU(bit 0)=0, I2C_SDA_CTRL_PU (bit 2)=0,
+	 * SR_I2C_SCL_CTRL_PU(bit 4)=0 and SR_I2C_SDA_CTRL_PU(bit 6)=0.
+	 */
+
+	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &temp, REG_GPPUPDCTR1);
+	temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \
+				I2C_SDA_CTRL_PU | I2C_SCL_CTRL_PU);
+	twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
 
 	status = add_children(pdata, id->driver_data);
 fail:
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index bf1c5be..2f4faf9 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -168,6 +168,19 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
 int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
 int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
 
+/*Interface Bit Register (INTBR) offsets
+ *(Use TWL_4030_MODULE_INTBR)
+ */
+
+#define REG_GPPUPDCTR1			0x0F
+
+/*I2C1 and I2C4(SR) SDA/SCL pull-up control bits */
+
+#define I2C_SCL_CTRL_PU			BIT(0)
+#define I2C_SDA_CTRL_PU			BIT(2)
+#define SR_I2C_SCL_CTRL_PU		BIT(4)
+#define SR_I2C_SDA_CTRL_PU		BIT(6)
+
 /*----------------------------------------------------------------------*/
 
 /*
-- 
1.6.3.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-02-03  1:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-21 10:33 [PATCH 1/2] omap: Disable GAIA I2C1/I2C4 internal pull-ups Pais, Allen
2010-02-02  1:53 ` Tony Lindgren
2010-02-02  2:58   ` Pais, Allen
2010-02-02 16:56     ` Tony Lindgren
2010-02-02 21:40       ` Sonasath, Moiz
2010-02-03  1:16         ` Pais, Allen
2010-02-02  3:37 ` Paul Walmsley
2010-02-02 21:50   ` Sonasath, Moiz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox