[PATCH v2 1/2] omap i2c: make errata 1.153 workaround a separate function

2010-03-25 Thread Alexander Shishkin
This is to avoid insanely long lines and levels of indentation.

Signed-off-by: Alexander Shishkin virtu...@slind.org
Acked-by: Tony Lindgren t...@atomide.com
CC: linux-...@vger.kernel.org
CC: linux-omap@vger.kernel.org
CC: n...@ti.com
---
 drivers/i2c/busses/i2c-omap.c |   43 ++--
 1 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index 75bf3ad..2d146ac 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -671,6 +671,27 @@ omap_i2c_rev1_isr(int this_irq, void *dev_id)
 #define omap_i2c_rev1_isr  NULL
 #endif
 
+/*
+ * OMAP3430 Errata 1.153: When an XRDY/XDR is hit, wait for XUDF before writing
+ * data to DATA_REG. Otherwise some data bytes can be lost while transferring
+ * them from the memory to the I2C interface.
+ */
+static int errata_omap3_1p153(struct omap_i2c_dev *dev, u16 *stat, int *err)
+{
+   while (!(*stat  OMAP_I2C_STAT_XUDF)) {
+   if (*stat  (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
+   omap_i2c_ack_stat(dev, *stat  (OMAP_I2C_STAT_XRDY |
+   OMAP_I2C_STAT_XDR));
+   *err |= OMAP_I2C_STAT_XUDF;
+   return -ETIMEDOUT;
+   }
+   cpu_relax();
+   *stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
+   }
+
+   return 0;
+}
+
 static irqreturn_t
 omap_i2c_isr(int this_irq, void *dev_id)
 {
@@ -794,25 +815,9 @@ complete:
break;
}
 
-   /*
-* OMAP3430 Errata 1.153: When an XRDY/XDR
-* is hit, wait for XUDF before writing data
-* to DATA_REG. Otherwise some data bytes can
-* be lost while transferring them from the
-* memory to the I2C interface.
-*/
-
-   if (dev-rev = OMAP_I2C_REV_ON_3430) {
-   while (!(stat  
OMAP_I2C_STAT_XUDF)) {
-   if (stat  
(OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
-   
omap_i2c_ack_stat(dev, stat  (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
-   err |= 
OMAP_I2C_STAT_XUDF;
-   goto complete;
-   }
-   cpu_relax();
-   stat = 
omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
-   }
-   }
+   if ((dev-rev = OMAP_I2C_REV_ON_3430) 
+   errata_omap3_1p153(dev, stat, err))
+   goto complete;
 
omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
}
-- 
1.6.3.3

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] omap i2c: make errata 1.153 workaround a separate function

2010-01-05 Thread Alexander Shishkin
On Mon, Dec 21, 2009 at 01:29:58 +0200, Alexander Shishkin wrote:
 This is to avoid insanely long lines and levels of indentation.

Ben, do you want me to resend these with Tony's acks or can you consider
applying them?

Regards,
--
Alex
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] omap i2c: make errata 1.153 workaround a separate function

2009-12-28 Thread Tony Lindgren
* Alexander Shishkin virtu...@slind.org [091221 03:29]:
 This is to avoid insanely long lines and levels of indentation.
 
 Signed-off-by: Alexander Shishkin virtu...@slind.org
 CC: linux-...@vger.kernel.org
 CC: linux-omap@vger.kernel.org
 CC: n...@ti.com

Nice, this driver sure could use some clean-up.

Acked-by: Tony Lindgren t...@atomide.com

 ---
  drivers/i2c/busses/i2c-omap.c |   43 ++--
  1 files changed, 24 insertions(+), 19 deletions(-)
 
 diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
 index 75bf3ad..2d146ac 100644
 --- a/drivers/i2c/busses/i2c-omap.c
 +++ b/drivers/i2c/busses/i2c-omap.c
 @@ -671,6 +671,27 @@ omap_i2c_rev1_isr(int this_irq, void *dev_id)
  #define omap_i2c_rev1_isrNULL
  #endif
  
 +/*
 + * OMAP3430 Errata 1.153: When an XRDY/XDR is hit, wait for XUDF before 
 writing
 + * data to DATA_REG. Otherwise some data bytes can be lost while transferring
 + * them from the memory to the I2C interface.
 + */
 +static int errata_omap3_1p153(struct omap_i2c_dev *dev, u16 *stat, int *err)
 +{
 + while (!(*stat  OMAP_I2C_STAT_XUDF)) {
 + if (*stat  (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
 + omap_i2c_ack_stat(dev, *stat  (OMAP_I2C_STAT_XRDY |
 + OMAP_I2C_STAT_XDR));
 + *err |= OMAP_I2C_STAT_XUDF;
 + return -ETIMEDOUT;
 + }
 + cpu_relax();
 + *stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
 + }
 +
 + return 0;
 +}
 +
  static irqreturn_t
  omap_i2c_isr(int this_irq, void *dev_id)
  {
 @@ -794,25 +815,9 @@ complete:
   break;
   }
  
 - /*
 -  * OMAP3430 Errata 1.153: When an XRDY/XDR
 -  * is hit, wait for XUDF before writing data
 -  * to DATA_REG. Otherwise some data bytes can
 -  * be lost while transferring them from the
 -  * memory to the I2C interface.
 -  */
 -
 - if (dev-rev = OMAP_I2C_REV_ON_3430) {
 - while (!(stat  
 OMAP_I2C_STAT_XUDF)) {
 - if (stat  
 (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
 - 
 omap_i2c_ack_stat(dev, stat  (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
 - err |= 
 OMAP_I2C_STAT_XUDF;
 - goto complete;
 - }
 - cpu_relax();
 - stat = 
 omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
 - }
 - }
 + if ((dev-rev = OMAP_I2C_REV_ON_3430) 
 + errata_omap3_1p153(dev, stat, err))
 + goto complete;
  
   omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
   }
 -- 
 1.6.3.3
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-i2c in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html