Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7d054817b780e664bed6701b2aa637718e1905b7
Commit:     7d054817b780e664bed6701b2aa637718e1905b7
Parent:     494dbb64dc5b369cc28542f4c4d634e57b0d7f18
Author:     Jean Delvare <[EMAIL PROTECTED]>
AuthorDate: Tue May 1 23:26:33 2007 +0200
Committer:  Jean Delvare <[EMAIL PROTECTED]>
CommitDate: Tue May 1 23:26:33 2007 +0200

    i2c-pxa: Clean transaction stop
    
    It was reported to me that the i2c-pxa driver was not able to process
    more that 50 transactions per second. Investigation revealed that the
    I2C unit was busy for 20 ms after every transaction. The reason seems
    to be that we forget to clear the STOP and ACKNACK bits at the end of
    the transaction. According to the PXA27x developer's manual, we shall
    do so.
    
    Signed-off-by: Jean Delvare <[EMAIL PROTECTED]>
    Cc: Lennert Buytenhek <[EMAIL PROTECTED]>
    Cc: Nicolas Pitre <[EMAIL PROTECTED]>
---
 drivers/i2c/busses/i2c-pxa.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 14e83d0..2fc3bce 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -539,6 +539,18 @@ static inline void i2c_pxa_start_message(struct pxa_i2c 
*i2c)
        writel(icr | ICR_START | ICR_TB, _ICR(i2c));
 }
 
+static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
+{
+       u32 icr;
+
+       /*
+        * Clear the STOP and ACK flags
+        */
+       icr = readl(_ICR(i2c));
+       icr &= ~(ICR_STOP | ICR_ACKNAK);
+       writel(icr, _IRC(i2c));
+}
+
 /*
  * We are protected by the adapter bus mutex.
  */
@@ -581,6 +593,7 @@ static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct 
i2c_msg *msg, int num)
         * The rest of the processing occurs in the interrupt handler.
         */
        timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
+       i2c_pxa_stop_message(i2c);
 
        /*
         * We place the return code in i2c->msg_idx.
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to