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 Shinde X-Patchwork-Id: 14983 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id CB67B23E1F for ; Tue, 19 Feb 2013 12:13:12 +0000 (UTC) Received: from mail-vc0-f171.google.com (mail-vc0-f171.google.com [209.85.220.171]) by fiordland.canonical.com (Postfix) with ESMTP id 6AF77A18E3B for ; Tue, 19 Feb 2013 12:13:12 +0000 (UTC) Received: by mail-vc0-f171.google.com with SMTP id p1so4193044vcq.16 for ; Tue, 19 Feb 2013 04:13:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-forwarded-to:x-forwarded-for:delivered-to:x-received :received-spf:x-auditid:from:to:cc:subject:date:message-id:x-mailer :x-brightmail-tracker:x-brightmail-tracker:dlp-filter:x-mtr :x-cfilter-loop:x-gm-message-state; bh=CazJDGcbYxWvYMsWT/zReHF9F0qNP+0MFAAaeZ8FNxs=; b=hJiunf8tYH7HDu0pfLp9wJBhaxJxd3gOEQG4y0Rsz9K69sa4O0DYA+MX/DZo+aQW9j EES58jGAXSFo6OMhmmQ+YElOKMHAu1QeRLO216jtsEQz4o1OVlkNfug3Q3/dNz27cbMb D3PoBYKluhG1+lDh9Qrm/VPQcxctjN3SQNHxrbUWociWbbLewwlk5hpMteR1OhRZLGVm SuJClOJ+l33Y9AANGFRjFIZCC+j6kt9PHZp+B2IQIM3w217N9qSiik0WhPRiI35MhAIj OBkHqty8u8AQi5xnQQSYjPkx5z6XDCxXMSFGEWiWOHIaSG7ZUy9PLcDSEP9ii29E0jev TxdQ== X-Received: by 10.52.88.237 with SMTP id bj13mr17607914vdb.75.1361275991885; Tue, 19 Feb 2013 04:13:11 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.58.145.101 with SMTP id st5csp138045veb; Tue, 19 Feb 2013 04:13:11 -0800 (PST) X-Received: by 10.66.145.130 with SMTP id su2mr1247780pab.74.1361275990447; Tue, 19 Feb 2013 04:13:10 -0800 (PST) Received: from mailout3.samsung.com (mailout3.samsung.com. [203.254.224.33]) by mx.google.com with ESMTP id yh7si16239559pbc.94.2013.02.19.04.13.09; Tue, 19 Feb 2013 04:13:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of rajeshwari.s@samsung.com designates 203.254.224.33 as permitted sender) client-ip=203.254.224.33; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of rajeshwari.s@samsung.com designates 203.254.224.33 as permitted sender) smtp.mail=rajeshwari.s@samsung.com Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MIG00DVLV9W7U70@mailout3.samsung.com>; Tue, 19 Feb 2013 21:13:09 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.123]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 3A.2A.16905.45C63215; Tue, 19 Feb 2013 21:13:09 +0900 (KST) X-AuditID: cbfee68d-b7f4f6d000004209-af-51236c5489c3 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id F0.9A.03918.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>; Tue, 19 Feb 2013 21:13:08 +0900 (KST) From: Rajeshwari Shinde To: u-boot@lists.denx.de Cc: patches@linaro.org, sjg@chromium.org, mk7.kang@samsung.com, chander.kashyap@linaro.org, hs@denx.de Subject: [PATCH] I2C: S3C24X0: Bug fixes in i2c_transfer 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+NgFtrELMWRmVeSWpSXmKPExsWyRsSkWjc0RznQYMMuJouH62+yWEw5/IXF gcnjzrU9bAGMUVw2Kak5mWWpRfp2CVwZjw8fZiloFKk4euMFawPjNf4uRk4OCQETienbzzND 2GISF+6tZ+ti5OIQEljKKNF9eic7TFHLoYlMEInpjBL/9q9nhXAmMklMb7rACFLFJmAksfXk NDBbREBC4lf/VTCbWSBD4vaHJSwgtrCAhcSdy6eA4hwcLAKqEnsnpYCEeQXcJRq+HIW6QkHi 2NSvYPMlBA6wSezsewDWyyIgIPFt8iEWkF4JAVmJTQeg6iUlDq64wTKBUXABI8MqRtHUguSC 4qT0IkO94sTc4tK8dL3k/NxNjMDwOv3vWe8OxtsHrA8xJgONm8gsJZqcDwzPvJJ4Q2MTc1Nj UzMjS0tLU9KElcR55S7JBAoJpCeWpGanphakFsUXleakFh9iZOLglGpgbBYPF3Q/58XGftna SOHP4sDjzaWHtv1lnFl3Y/HmDE3Pyf3bTx9W+RTxVOja+XDbqYuDOAuFw2R6/jRNXf9YPdRc f/ptfV01JfWjOYLpE/6xdq6Z2Pfl7i0mAYFnPXv8Xn6TuHqh3O7p5Wv6lxdv5G0+aqm9Sczp TPPyHVe1vkmeXjAvt87cSImlOCPRUIu5qDgRAPGlkyRFAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnkeLIzCtJLcpLzFFi42I5/e+xoG5IjnKgwY6FphYP199ksZhy+AuL A5PHnWt72AIYoxoYbTJSE1NSixRS85LzUzLz0m2VvIPjneNNzQwMdQ0tLcyVFPISc1NtlVx8 AnTdMnOAZisplCXmlAKFAhKLi5X07TBNCA1x07WAaYzQ9Q0JgusxMkADCWsYMx4fPsxS0ChS cfTGC9YGxmv8XYycHBICJhIthyYyQdhiEhfurWfrYuTiEBKYzijxb/96VghnIpPE9KYLjCBV bAJGEltPTgOzRQQkJH71XwWzmQUyJG5/WMICYgsLWEjcuXwKKM7BwSKgKrF3UgpImFfAXaLh y1FmiGUKEsemfmWdwMi9gJFhFaNoakFyQXFSeq6hXnFibnFpXrpecn7uJkZw8D6T2sG4ssHi EKMAB6MSD6+Hi1KgEGtiWXFl7iFGCQ5mJRHe+ZbKgUK8KYmVValF+fFFpTmpxYcYk4GWT2SW Ek3OB0ZWXkm8obGJuamxqaWJhYmZJWnCSuK8jKeeBAgJpCeWpGanphakFsFsYeLglGpgLLh/ bkuLtce67GP3G+Yn9+u/+x4uf/G88pznrpnzZgUXbfc1Xxhu+N4hQZdh3/n7VicfVEz8OKkp f3tdWpDEN/fZu4XW3tn7NzZFyndqm8DL71uE2850nkm/5Vl8ct3ThkPrl69gFF3/TnzqZiPb z3MFOn2ijyf8yxHcev2BlXDv3GLzx9luaUosxRmJhlrMRcWJAPRq2USiAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Gm-Message-State: ALoCoQlLDZ5EdcGDoHRa9+BkHP7o9res3Rw0gmMPIJ3P7bNPLl9HzkZlTAY8H/u73zAP1MNiGEKN 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 Tested-by: Hung-ying Tyan --- 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)) {