From patchwork Mon May 10 10:02:27 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Shishkin X-Patchwork-Id: 98127 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o4AA3GNt031801 for ; Mon, 10 May 2010 10:03:16 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756311Ab0EJKDO (ORCPT ); Mon, 10 May 2010 06:03:14 -0400 Received: from smtp.nokia.com ([192.100.122.233]:33484 "EHLO mgw-mx06.nokia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751390Ab0EJKDN (ORCPT ); Mon, 10 May 2010 06:03:13 -0400 Received: from esebh106.NOE.Nokia.com (esebh106.ntc.nokia.com [172.21.138.213]) by mgw-mx06.nokia.com (Switch-3.3.3/Switch-3.3.3) with ESMTP id o4AA2Yeb027518; Mon, 10 May 2010 13:02:53 +0300 Received: from vaebh104.NOE.Nokia.com ([10.160.244.30]) by esebh106.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 10 May 2010 13:02:47 +0300 Received: from mgw-sa01.ext.nokia.com ([147.243.1.47]) by vaebh104.NOE.Nokia.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.3959); Mon, 10 May 2010 13:02:46 +0300 Received: from trapdoor (esdhcp040182.research.nokia.com [172.21.40.182]) by mgw-sa01.ext.nokia.com (Switch-3.3.3/Switch-3.3.3) with ESMTP id o4AA2iJi023471 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO); Mon, 10 May 2010 13:02:45 +0300 Received: from ash by trapdoor with local (Exim 4.71) (envelope-from ) id 1OBPov-0008DU-5o; Mon, 10 May 2010 13:02:41 +0300 From: Alexander Shishkin To: Aaro Koskinen , Tony Lindgren Cc: ben-linux@fluff.org, nm@ti.com, linux-omap@vger.kernel.org, linux-i2c@vger.kernel.org, Alexander Shishkin Subject: [PATCH v3] omap i2c: add a timeout to the busy waiting Date: Mon, 10 May 2010 13:02:27 +0300 Message-Id: <1273485747-31533-1-git-send-email-virtuoso@slind.org> X-Mailer: git-send-email 1.7.1.1.g15764 In-Reply-To: <4BAB7551.6040203@nokia.com> References: <4BAB7551.6040203@nokia.com> X-OriginalArrivalTime: 10 May 2010 10:02:46.0803 (UTC) FILETIME=[F0CFEE30:01CAF027] X-Nokia-AV: Clean Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Mon, 10 May 2010 10:03:16 +0000 (UTC) diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index ef73483..00fd02e 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c @@ -763,17 +763,25 @@ omap_i2c_rev1_isr(int this_irq, void *dev_id) */ static int errata_omap3_1p153(struct omap_i2c_dev *dev, u16 *stat, int *err) { - while (!(*stat & OMAP_I2C_STAT_XUDF)) { + unsigned long timeout = 10000; + + while (--timeout && !(*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); } + if (!timeout) { + dev_err(dev->dev, "timeout waiting on XUDF bit\n"); + return 0; + } + return 0; }