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(®s->msr);
@@ -94,7 +95,7 @@ static int wait_for_bb(void)
mpc_reg_out(®s->mcr, 0, 0);
mpc_reg_out(®s->mcr, I2C_EN, 0);
#endif
- udelay(1000);
+ timeout > I2C_TIMEOUT ? udelay(15) : udelay(1000);
status = mpc_reg_in(®s->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(®s->msr);
while (timeout-- && !(*status & I2C_IF)) {
- udelay(1000);
+ timeout > I2C_TIMEOUT ? udelay(15) : udelay(1000);
*status = mpc_reg_in(®s->msr);
}
next 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.