From patchwork Tue Feb 19 12:19:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajeshwari Birje X-Patchwork-Id: 221687 X-Patchwork-Delegate: hs@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3A1B32C007E for ; Tue, 19 Feb 2013 23:13:21 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3245C4A10D; Tue, 19 Feb 2013 13:13:19 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ovSSmuwyZPoF; Tue, 19 Feb 2013 13:13:19 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4DF034A10F; Tue, 19 Feb 2013 13:13:17 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D3B9D4A10F for ; Tue, 19 Feb 2013 13:13:15 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0xxdXGmzVLvw for ; Tue, 19 Feb 2013 13:13:14 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by theia.denx.de (Postfix) with ESMTP id 205CD4A10D for ; Tue, 19 Feb 2013 13:13:12 +0100 (CET) Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MIG00CL2V9VGS80@mailout3.samsung.com> for u-boot@lists.denx.de; Tue, 19 Feb 2013 21:13:09 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.124]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 94.98.06456.55C63215; Tue, 19 Feb 2013 21:13:09 +0900 (KST) X-AuditID: cbfee68e-b7fc26d000001938-fd-51236c55542a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 6A.70.03880.45C63215; Tue, 19 Feb 2013 21:13:08 +0900 (KST) Received: from rajeshwari-linux.sisodomain.com ([107.108.215.115]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MIG00K22V87F330@mmp2.samsung.com> for u-boot@lists.denx.de; Tue, 19 Feb 2013 21:13:08 +0900 (KST) From: Rajeshwari Shinde To: u-boot@lists.denx.de Date: Tue, 19 Feb 2013 17:49:45 +0530 Message-id: <1361276385-2600-1-git-send-email-rajeshwari.s@samsung.com> X-Mailer: git-send-email 1.7.4.4 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrDLMWRmVeSWpSXmKPExsWyRsSkRjc0RznQoH8Nq8XbvZ3sDoweZ+/s YAxgjOKySUnNySxLLdK3S+DKeHz4MEtBo0jF0RsvWBsYr/F3MXJySAiYSDy69ZgZwhaTuHBv PRuILSSwlFFiwSoRmJqvRy8zdjFyAcWnM0rcuPeAHcJZxSQxpfs/O0gVm4CRxNaT0xhBbBEB CYlf/VfBbGaBDInbH5awgNjCAhYSdy6fAopzcLAIqErsnZQCEuYVcJdo+HIU6ggFiWNTv7KC zJcQ2MMmcfbePLA5LAICEt8mH2IB6ZUQkJXYdACqXlLi4IobLBMYBRcwMqxiFE0tSC4oTkov MtIrTswtLs1L10vOz93ECAyp0/+e9e1gvHnA+hBjMtC4icxSosn5wJDMK4k3NDYxNzU2NTOy tLQ0JU1YSZxX/pJMoJBAemJJanZqakFqUXxRaU5q8SFGJg5OqQbGXuPNE19u3aV5PDDeoM0p PlhGaWu73OX1U5Wv/2WzfPVbZ//ec/qzG1/Ydm38W/xCetn0MwWmqqZfl87QaTW4EZ0ctq1n pwfDZ+k5S2f//H1JtDbPs1zXwu3X+T3iqxJbc/7VyFv06PK2Hwi6suRdnQ/j7Rt7frE5vGN8 xFbcfmTxxy9Sq3+kKLEUZyQaajEXFScCACWOc5U/AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupikeLIzCtJLcpLzFFi42I5/e+xoG5IjnKgwbzpZhZv93ayOzB6nL2z gzGAMaqB0SYjNTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnFJ0DXLTMH aKySQlliTilQKCCxuFhJ3w7ThNAQN10LmMYIXd+QILgeIwM0kLCGMePx4cMsBY0iFUdvvGBt YLzG38XIySEhYCLx9ehlRghbTOLCvfVsXYxcHEIC0xklbtx7wA7hrGKSmNL9nx2kik3ASGLr yWlgHSICEhK/+q+C2cwCGRK3PyxhAbGFBSwk7lw+BRTn4GARUJXYOykFJMwr4C7R8OUoM8Qy BYljU7+yTmDkXsDIsIpRNLUguaA4KT3XSK84Mbe4NC9dLzk/dxMjOGSfSe9gXNVgcYhRgINR iYf3g6NSoBBrYllxZe4hRgkOZiUR3vmWyoFCvCmJlVWpRfnxRaU5qcWHGJOBlk9klhJNzgfG U15JvKGxibmpsamliYWJmSVpwkrivIynngQICaQnlqRmp6YWpBbBbGHi4JRqYPSSnr5p9XLN shi5K+rBiofcWEWen2JNEJ7e/kNdu3uppskvxuebHOauM2mxb7i4xtQqtU6T5c/pS+9WaDIr bX/7zsY4WcHkwdr9/7uvWi2++PDLT8futQvu/H76ysG4LYLZ69+Ma7FLlL+6H2Z2vb/HWWQy +0HGOaenSyhmZV02e2PXFqr/VE2JpTgj0VCLuag4EQCmkhVlnQIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: hs@denx.de, patches@linaro.org Subject: [U-Boot] [PATCH] I2C: S3C24X0: Bug fixes in i2c_transfer X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de This patch corrects the following issues 1) Write the correct M/T Stop value to I2CSTAT after i2c write. According to the spec, after finish the data transmission, we should write a M/T Stop (I2C_MODE_MT | I2C_TXRX_ENA) to I2CSTAT instead of a M/R Stop (I2C_MODE_MR | I2C_TXRX_ENA). 2) Not split the write to I2CSTAT into 2 steps in i2c read. According to the spec, we should write the combined M/R Start value to I2CSTAT after setting the slave address to I2CDS 3) Fix the mistake of making an equality check to an assignment. In the case of I2C write with the zero-length address, while tranfering the data, it should be an equality check (==) instead of an assignment (=). Signed-off-by: Tom Wai-Hong Tam Signed-off-by: Rajeshwari Shinde --- drivers/i2c/s3c24x0_i2c.c | 14 ++++++-------- 1 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c index 00308b5..46d2506 100644 --- a/drivers/i2c/s3c24x0_i2c.c +++ b/drivers/i2c/s3c24x0_i2c.c @@ -324,7 +324,7 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c, writel(I2C_MODE_MT | I2C_TXRX_ENA | I2C_START_STOP, &i2c->iicstat); i = 0; - while ((i < data_len) && (result = I2C_OK)) { + while ((i < data_len) && (result == I2C_OK)) { result = WaitForXfer(i2c); writel(data[i], &i2c->iicds); ReadWriteByte(i2c); @@ -336,17 +336,16 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c, result = WaitForXfer(i2c); /* send STOP */ - writel(I2C_MODE_MR | I2C_TXRX_ENA, &i2c->iicstat); + writel(I2C_MODE_MT | I2C_TXRX_ENA, &i2c->iicstat); ReadWriteByte(i2c); break; case I2C_READ: if (addr && addr_len) { - writel(I2C_MODE_MT | I2C_TXRX_ENA, &i2c->iicstat); writel(chip, &i2c->iicds); /* send START */ - writel(readl(&i2c->iicstat) | I2C_START_STOP, - &i2c->iicstat); + writel(I2C_MODE_MT | I2C_TXRX_ENA | I2C_START_STOP, + &i2c->iicstat); result = WaitForXfer(i2c); if (IsACK(i2c)) { i = 0; @@ -380,11 +379,10 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c, } } else { - writel(I2C_MODE_MR | I2C_TXRX_ENA, &i2c->iicstat); writel(chip, &i2c->iicds); /* send START */ - writel(readl(&i2c->iicstat) | I2C_START_STOP, - &i2c->iicstat); + writel(I2C_MODE_MR | I2C_TXRX_ENA | I2C_START_STOP, + &i2c->iicstat); result = WaitForXfer(i2c); if (IsACK(i2c)) {