From patchwork Thu Mar 7 18:00:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ismael Luceno Cortes X-Patchwork-Id: 1053163 X-Patchwork-Delegate: hs@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=silicon-gears.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44FdmQ2xTwz9s70 for ; Fri, 8 Mar 2019 05:03:50 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id E789FC21E12; Thu, 7 Mar 2019 18:02:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 3103EC21E35; Thu, 7 Mar 2019 18:01:18 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C2BF5C21BE5; Thu, 7 Mar 2019 18:01:02 +0000 (UTC) Received: from mx1.silicon-gears.com (mx1.silicon-gears.com [81.47.169.96]) by lists.denx.de (Postfix) with ESMTPS id F2914C21E1E for ; Thu, 7 Mar 2019 18:00:58 +0000 (UTC) From: Ismael Luceno Cortes To: "u-boot@lists.denx.de" Thread-Topic: [PATCH v5 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover Thread-Index: AQHU1Q+1N6sb8zGz3063I2fVtBUHoQ== Date: Thu, 7 Mar 2019 18:00:55 +0000 Message-ID: <20190307180013.12833-7-ismael.luceno@silicon-gears.com> References: <20190307180013.12833-1-ismael.luceno@silicon-gears.com> In-Reply-To: <20190307180013.12833-1-ismael.luceno@silicon-gears.com> Accept-Language: en-GB, es-ES, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-TM-AS-User-Approved-Sender: Yes;No X-TMASE-Result: 10--1.105500-10.000000 X-TMASE-MatchedRID: E05dsB/ButaKDa5m+5vWeBes/RxhysDbHIOuQjCOKFviKUaoIhea7Xnv qbLkjGO6izxssRyufhhpkkWf1+5MwhHdVuZrE/dZXP5rFAucBUHx7plxxm1SPAPAa52tRzEA+Vi hXqn9xLHaO2fwdtcN32b8g1GpLkmuZMLMXtQ7bzGeAiCmPx4NwIRgZNP+6bISxEHRux+uk8ifEz J5hPndGVrQzyKfyue7wvwJZVvluM475MkhHOiZBegEaUEoc9DvVmMYrSZBQTj1vKSFjeJYLuTan 68iQBcBucSYGI3GcEdYA71uCzht4BWsXlpwkvGbJb0gFsgtzp3jqmC1xdPTdfJ3vDpc0p9BVlxr 1FJij9s= X-IMSS-DKIM-White-List: No;No X-TMASE-SNAP-Result: 1.821001.0001-0-1-12:0,22:0,33:0,34:0-0 Cc: Marek Vasut Subject: [U-Boot] [PATCH v5 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Cosmetic change. Any call to the recover function would need to do the same check afterwards, so it's sensible to make it part of the function. Signed-off-by: Ismael Luceno --- Notes: Changes since v3: - Removed unused variable val @ rcar_i2c_set_addr Changes since v2: - Fixed variable names - Fixed return value to be standard Changes since v1: - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support") - Explained the change - Replaced C99-style variable declaration drivers/i2c/rcar_i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 78ef8acacc..2ebae349ed 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -81,12 +81,13 @@ static int rcar_i2c_finish(struct udevice *dev) return ret; } -static void rcar_i2c_recover(struct udevice *dev) +static int rcar_i2c_recover(struct udevice *dev) { struct rcar_i2c_priv *priv = dev_get_priv(dev); u32 mcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_OBPC; u32 mcra = mcr | RCAR_I2C_ICMCR_FSDA; int i; + u32 mstat; /* Send 9 SCL pulses */ for (i = 0; i < 9; i++) { @@ -106,6 +107,9 @@ static void rcar_i2c_recover(struct udevice *dev) udelay(5); writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR); udelay(5); + + mstat = readl(priv->base + RCAR_I2C_ICMSR); + return mstat & RCAR_I2C_ICMCR_FSDA ? -EBUSY : 0; } static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read) @@ -113,7 +117,6 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read) struct rcar_i2c_priv *priv = dev_get_priv(dev); u32 mask = RCAR_I2C_ICMSR_MAT | (read ? RCAR_I2C_ICMSR_MDR : RCAR_I2C_ICMSR_MDE); - u32 val; int ret; writel(0, priv->base + RCAR_I2C_ICMIER); @@ -125,9 +128,7 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read) ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR, RCAR_I2C_ICMCR_FSDA, false, 2, true); if (ret) { - rcar_i2c_recover(dev); - val = readl(priv->base + RCAR_I2C_ICMSR); - if (val & RCAR_I2C_ICMCR_FSDA) { + if (rcar_i2c_recover(dev)) { dev_err(dev, "Bus busy, aborting\n"); return ret; }