All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jon Smirl <jonsmirl@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V3] mpc5200: reduce delays in i2c
Date: Tue, 31 Mar 2009 17:37:28 -0400	[thread overview]
Message-ID: <20090331213728.17969.91950.stgit@localhost> (raw)

Make the i2c delays smaller. The measured delay is 55us at
100Khz. Set the delay to 15us which should work for 400Khz.
100Khz will loop four times and get a 60us delay. Try four
times at a 15us delay and then revert to the previous behavior
of 1ms delays.
---
 cpu/mpc5xxx/i2c.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/cpu/mpc5xxx/i2c.c b/cpu/mpc5xxx/i2c.c
index e2506d8..dba9071 100644
--- a/cpu/mpc5xxx/i2c.c
+++ b/cpu/mpc5xxx/i2c.c
@@ -39,6 +39,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #endif
 
 #define I2C_TIMEOUT	100
+#define I2C_TIMEOUT_QUICK 4
 #define I2C_RETRIES	3
 
 struct mpc5xxx_i2c_tap {
@@ -80,7 +81,7 @@ static void mpc_reg_out(volatile u32 *reg, int val, int mask)
 static int wait_for_bb(void)
 {
 	struct mpc5xxx_i2c *regs    = (struct mpc5xxx_i2c *)I2C_BASE;
-	int                 timeout = I2C_TIMEOUT;
+	int                 timeout = I2C_TIMEOUT + I2C_TIMEOUT_QUICK;
 	int                 status;
 
 	status = mpc_reg_in(&regs->msr);
@@ -94,7 +95,7 @@ static int wait_for_bb(void)
 		mpc_reg_out(&regs->mcr, 0, 0);
 		mpc_reg_out(&regs->mcr, I2C_EN, 0);
 #endif
-		udelay(1000);
+		timeout > I2C_TIMEOUT ? udelay(15) : udelay(1000);
 		status = mpc_reg_in(&regs->msr);
 	}
 
@@ -104,12 +105,12 @@ static int wait_for_bb(void)
 static int wait_for_pin(int *status)
 {
 	struct mpc5xxx_i2c *regs    = (struct mpc5xxx_i2c *)I2C_BASE;
-	int                 timeout = I2C_TIMEOUT;
+	int                 timeout = I2C_TIMEOUT + I2C_TIMEOUT_QUICK;
 
 	*status = mpc_reg_in(&regs->msr);
 
 	while (timeout-- && !(*status & I2C_IF)) {
-		udelay(1000);
+		timeout > I2C_TIMEOUT ? udelay(15) : udelay(1000);
 		*status = mpc_reg_in(&regs->msr);
 	}
 

             reply	other threads:[~2009-03-31 21:37 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-31 21:37 Jon Smirl [this message]
2009-04-04 21:17 ` [U-Boot] [PATCH V3] mpc5200: reduce delays in i2c Wolfgang Denk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090331213728.17969.91950.stgit@localhost \
    --to=jonsmirl@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.