From patchwork Tue Sep 10 23:58:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luka Perkov X-Patchwork-Id: 274088 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 2135D2C0110 for ; Wed, 11 Sep 2013 09:58:39 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753077Ab3IJX6g (ORCPT ); Tue, 10 Sep 2013 19:58:36 -0400 Received: from arrakis.dune.hu ([78.24.191.176]:48481 "EHLO arrakis.dune.hu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753050Ab3IJX6f (ORCPT ); Tue, 10 Sep 2013 19:58:35 -0400 Received: from localhost (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 74EF52806F1; Wed, 11 Sep 2013 01:57:48 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.3.2 X-Virus-Scanned: at arrakis.dune.hu Received: from w500.lan (213-191-157-201.dhcp.iskon.hr [213.191.157.201]) by arrakis.dune.hu (Postfix) with ESMTPSA id C182428052B; Wed, 11 Sep 2013 01:57:47 +0200 (CEST) From: Luka Perkov To: linux-i2c@vger.kernel.org Cc: Wolfram Sang , Luka Perkov , Tim Harvey Subject: [PATCH] i2c: imx: retry on NAK Date: Wed, 11 Sep 2013 01:58:10 +0200 Message-Id: <1378857490-30968-1-git-send-email-luka@openwrt.org> X-Mailer: git-send-email 1.8.4 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org From: Tim Harvey In case of busy i2c try again to get ACK. Signed-off-by: Tim Harvey Tested-by: Luka Perkov --- drivers/i2c/busses/i2c-imx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index ccf4665..c64afe6 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -62,6 +62,7 @@ /* Default value */ #define IMX_I2C_BIT_RATE 100000 /* 100kHz */ +#define IMX_I2C_MAX_RETRIES 3 /* number of retries to attempt */ /* IMX I2C registers: * the I2C register offset is different between SoCs, @@ -298,7 +299,7 @@ static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx) { if (imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR) & I2SR_RXAK) { dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__); - return -EIO; /* No ACK */ + return -EAGAIN; /* try again */ } dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__); @@ -633,6 +634,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev) i2c_imx->adapter.dev.parent = &pdev->dev; i2c_imx->adapter.nr = pdev->id; i2c_imx->adapter.dev.of_node = pdev->dev.of_node; + i2c_imx->adapter.retries = IMX_I2C_MAX_RETRIES; i2c_imx->base = base; /* Get I2C clock */