From patchwork Mon Aug 31 20:22:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354575 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=YKUGtkIe; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9115rLz9sTF for ; Tue, 1 Sep 2020 06:23:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729979AbgHaUXb (ORCPT ); Mon, 31 Aug 2020 16:23:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44750 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728129AbgHaUX3 (ORCPT ); Mon, 31 Aug 2020 16:23:29 -0400 Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE7D4C061573; Mon, 31 Aug 2020 13:23:28 -0700 (PDT) Received: by mail-lf1-x144.google.com with SMTP id c15so4260774lfi.3; Mon, 31 Aug 2020 13:23:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=o54z0KyncSkTIRCR00YgxkSeoepil1oHLoUd4CNcJV8=; b=YKUGtkIeM4sT3ADMccYAqtjuhhdcIC/Br+EJIXZ6BLesD5mO6uhtw6m1wSHFaVvC+m BiYmG4hNtIwbAdh9AIvX+A0AnbhZ+NfoCSEB/q4hlv0iiWwzuJ8kGsAJevDcEPI1zrYB N6iem77dI7vTFn+KQXIzA6uxT6uutN8YxGQFPHnDiEYNeQlP5vwW+aWpLR6ZxcNzkXEJ Pzbt+SVn5iAm393aKlRbX662AIy72DPKYy65aFALHuf+Eg3nz+1GbUTvw7HqLhA6fV58 opdtOfwp+U8VSXfHPnhHo6YCb8JXXZYASEt0UU48viHlcmrbDb0W4NZy+RsrTQVEmXWz ombQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=o54z0KyncSkTIRCR00YgxkSeoepil1oHLoUd4CNcJV8=; b=QV+v2Nd+13Fz+oRvP8YPzcDqb+WpWuyLlN0uCnbkCcQsvfvszpW+Jx0u8ZwOqhiHUc 5rwAFxHLlkl8ut2rleyfueJf/eJU35MzfjVnb7M2dsu28RqX6TrbCRYBsRSCyQemgHVG ycz6QvsmgFE82UyvQB0XlET8Wu6wxE99W3nF3JgjttMIwmIX+5+idwq78acoHBuYj42z MB5+1KJ/pbH8NgZJD7wcBeO0KVrF+M85gCiDNsJESR6hBwc+EMsrEcdo6irErnsDQf+v sLFhsk4URDzyzh3kp3+//UPJRSbQsxKP+tZu97aqVTY7XBbL25NxPuz1UqyCTnisAwD0 cU/w== X-Gm-Message-State: AOAM531nyMnk7Z1OSEStiu0ckeGGcbSF1nA7sG1/SstMGbaZyK3SvQuD BMNNoJVXnRuzKvnw+8Uk4Gw= X-Google-Smtp-Source: ABdhPJwOCcYqnIkdSbxBQu7IW0uhHMbUBoMCNzewxnXSQH2p8bj0BC99J2mu5z9k7AGVxEweTlgp/w== X-Received: by 2002:ac2:5dc1:: with SMTP id x1mr1402141lfq.217.1598905406717; Mon, 31 Aug 2020 13:23:26 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:26 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 01/12] i2c: tegra: Make tegra_i2c_flush_fifos() usable in atomic transfer Date: Mon, 31 Aug 2020 23:22:52 +0300 Message-Id: <20200831202303.15391-2-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The tegra_i2c_flush_fifos() shouldn't sleep in atomic transfer and jiffies are not updating if interrupts are disabled. Hence let's use proper delay functions and use ktime API in order not to hang atomic transfer. Note that this patch doesn't fix any known problem because normally FIFO is flushed at the time of starting a new transfer. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 00d3e4d7a01e..aab58395fb71 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -470,7 +470,8 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev) { - unsigned long timeout = jiffies + HZ; + ktime_t ktime = ktime_get(); + ktime_t ktimeout = ktime_add_ms(ktime, 1000); unsigned int offset; u32 mask, val; @@ -489,13 +490,22 @@ static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev) i2c_writel(i2c_dev, val, offset); while (i2c_readl(i2c_dev, offset) & mask) { - if (time_after(jiffies, timeout)) { - dev_warn(i2c_dev->dev, "timeout waiting for fifo flush\n"); - return -ETIMEDOUT; - } - usleep_range(1000, 2000); + if (ktime_after(ktime, ktimeout)) + goto err_timeout; + + if (i2c_dev->is_curr_atomic_xfer) + mdelay(1); + else + fsleep(1000); + + ktime = ktime_get(); } return 0; + +err_timeout: + dev_err(i2c_dev->dev, "fifo flush timed out\n"); + + return -ETIMEDOUT; } static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev) From patchwork Mon Aug 31 20:22:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354594 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=TQSm3orK; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgMB14J3mz9sTT for ; Tue, 1 Sep 2020 06:24:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729984AbgHaUXc (ORCPT ); Mon, 31 Aug 2020 16:23:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44752 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729976AbgHaUX3 (ORCPT ); Mon, 31 Aug 2020 16:23:29 -0400 Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 571B6C061575; Mon, 31 Aug 2020 13:23:29 -0700 (PDT) Received: by mail-lf1-x142.google.com with SMTP id z25so1102795lfj.9; Mon, 31 Aug 2020 13:23:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FRnx45u7/i2kry58qh4geYUb8/TK/AjF/UDJOIFPEeg=; b=TQSm3orKZFtx48PL9rXWPF+QicyZywM+5js65DonZeTjkZfqJDGS4rnAS1d5hv6MDV rFm3PgpGOjmuqKbqYE9N/grYw2dHI6n33ljM76xM2yu/0bBF7C5aFN+OI4CGbK8GX36p aZgmT1K/5D2HAOnVT77RZ1wLuftRqLNBb4jygAcMzWn5DWnO9QBT5sLUtzNOEDzaAlwd FXF30aK8TTP2qhegf9cNTdbt2hqhh/RMkA5A026tbRUMb0z8R+oVwQhJJHyyztG6MP4/ gJcrb2UroEGGdzjTkkhCD6TQer2rnZrNbE3tY0d0zFfHbPXUxhC3cXZS4WorFSJj9+hy 4Yew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FRnx45u7/i2kry58qh4geYUb8/TK/AjF/UDJOIFPEeg=; b=poK6vXQgcOS87VMQMH8ccPsTkBGHsKpPx3OtEQ9s7cqpTv3UjZV9cnmVMP/cEB6moD IVgk1wm4t1PACtbO4BmyZ3nSU53L5HB7iJmwzT350zfBqFlJTF2IRAsGRcepPwyXJ2FR AJt3XZkv3HgSgR1gJFXwwX2zOxvIPLkMaDKXu6BRcCuODoZ9BDnZOrPKXT+9CjzUY91C 4Ym81It0ZiNgM1fsPA1PBwYhjyxgMcxxt37CBhohx2bQEgXxByuoaqp1h8kph+Zu1bka Uji4YDeUoyxMQpqPjR8QphNKs+9Qa7BQE/SwaqFVsEs9LNevKMXG2Otr0NkRMoe9s0kL pBSg== X-Gm-Message-State: AOAM530YvLm9UkyCwqZjKcCOIUz0aadBNHGfoBReaJWP9iVaacdv7AiC cZhC2N3VVEDpRwxWcFhY3feqHsq35Jc= X-Google-Smtp-Source: ABdhPJz3PRoABhtWRAaEJeBE6ftdtg0VDdHNNymnzHMEgS8i06hSaZNuqdqbf5qJP6c0lT/ylt8YIw== X-Received: by 2002:a19:ef13:: with SMTP id n19mr1446589lfh.1.1598905407773; Mon, 31 Aug 2020 13:23:27 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:27 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 02/12] i2c: tegra: Add missing newline before returns Date: Mon, 31 Aug 2020 23:22:53 +0300 Message-Id: <20200831202303.15391-3-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Some places in the code are missing a newline before return, making code more difficult to read and creating inconsistency of the code. This patch adds the missing newlines. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index aab58395fb71..9bd91b6f32f4 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -317,6 +317,7 @@ static unsigned long tegra_i2c_reg_addr(struct tegra_i2c_dev *i2c_dev, reg += (reg >= I2C_TX_FIFO) ? 0x10 : 0x40; else if (i2c_dev->is_vi) reg = 0xc00 + (reg << 2); + return reg; } @@ -392,6 +393,7 @@ static int tegra_i2c_dma_submit(struct tegra_i2c_dev *i2c_dev, size_t len) dma_desc->callback_param = i2c_dev; dmaengine_submit(dma_desc); dma_async_issue_pending(chan); + return 0; } @@ -500,6 +502,7 @@ static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev) ktime = ktime_get(); } + return 0; err_timeout: @@ -707,6 +710,7 @@ static int __maybe_unused tegra_i2c_runtime_resume(struct device *dev) clk_disable(i2c_dev->slow_clk); disable_fast_clk: clk_disable(i2c_dev->fast_clk); + return ret; } @@ -1421,6 +1425,7 @@ static u32 tegra_i2c_func(struct i2c_adapter *adap) if (i2c_dev->hw->has_continue_xfer_support) ret |= I2C_FUNC_NOSTART; + return ret; } @@ -1888,6 +1893,7 @@ static int tegra_i2c_remove(struct platform_device *pdev) clk_unprepare(i2c_dev->fast_clk); tegra_i2c_release_dma(i2c_dev); + return 0; } From patchwork Mon Aug 31 20:22:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354598 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=dP1lmEFy; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgMB9456Dz9sTT for ; Tue, 1 Sep 2020 06:24:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727955AbgHaUY0 (ORCPT ); Mon, 31 Aug 2020 16:24:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729978AbgHaUXb (ORCPT ); Mon, 31 Aug 2020 16:23:31 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA171C061755; Mon, 31 Aug 2020 13:23:30 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id w14so8242559ljj.4; Mon, 31 Aug 2020 13:23:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LlFFuQSVpP4nuOnidxL8KPHKkAPDk1QX0MDXTli+RAU=; b=dP1lmEFyf6frzJ1B8XZwURB2SeEh72JMFlrp4WrwxklfKetjzVQguOcrFwb0h1Wtn6 OE6DtQMLQMy8dyGpXFcOWw9t6rIcMz6FOWXTspiLX++zGiiVnnIp4AzPuCQpMnftCFc8 9Repl1fNNy4fQMNZgKJYxWeAjjTE4Pixxk0hQDke8SMzEzniV5lqq0gEn3mPWCcO4iKQ vw5KC+SgWXCZAzFaoOZg0TAe5SjFqmiBZREiEcuTYaLmv9haR8XIq4UQjX3hE/LpxgeW YVUyKoRpA5NhubrAaLS/iE4B45mNIgzXT8BPliqFxKAJ4n1iz3u4FrnCkjXk/JCMgoE7 0w0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LlFFuQSVpP4nuOnidxL8KPHKkAPDk1QX0MDXTli+RAU=; b=HoiE1himpQt4ADDKe95lRxLo/zyca/BsKn7r5GQCid9AYpW3av749zNN1aUZoUTa5S rdutUA2+yq6ETl3MDSuFwPQbDiRsW7kHaXL9YcveEsPmFqRUijboCxX4TSztj4qjHLSI LEHLYgCyN4BCktD4Sp/aPxVP07COytEHJ8tUWsAwufr2qxs/3eU3kaSRRepGwernTyn0 7gIjBHN/fiJwYzsodidrtIXqRBfxVr138cbPorIaP8H/eseEikELa21ENWt+rfPgNqgH gzqFpTEHNvJ3pB0H97sZlwz/FhIRxI3mR8EmM/48BWqGgWMYfbpAfh5+/aNo+X+BehyO Gkfw== X-Gm-Message-State: AOAM532dRv2/ffYWOmTjeOO/n816unsvweDiNlhBJQt0+u3VVI651dkX ueWVG5+f7aEcIgPGVE9wBLO5AotExFo= X-Google-Smtp-Source: ABdhPJwVuNjpPMZLuTwO3BMasZHAYnlVKPN4KyfqL+kt3zKw0lRQAeuEw6UDBzbhWJsOO7BbJzp25w== X-Received: by 2002:a2e:a58a:: with SMTP id m10mr1311257ljp.247.1598905408626; Mon, 31 Aug 2020 13:23:28 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:28 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 03/12] i2c: tegra: Clean up messages in the code Date: Mon, 31 Aug 2020 23:22:54 +0300 Message-Id: <20200831202303.15391-4-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Use lowercase and consistent wording for all messages in the code. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 50 ++++++++++++++++------------------ 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 9bd91b6f32f4..efbb20049cf8 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -427,7 +427,7 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) return 0; if (!IS_ENABLED(CONFIG_TEGRA20_APB_DMA)) { - dev_dbg(i2c_dev->dev, "Support for APB DMA not enabled!\n"); + dev_dbg(i2c_dev->dev, "dma support not enabled\n"); return 0; } @@ -450,7 +450,7 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) dma_buf = dma_alloc_coherent(i2c_dev->dev, i2c_dev->dma_buf_size, &dma_phys, GFP_KERNEL | __GFP_NOWARN); if (!dma_buf) { - dev_err(i2c_dev->dev, "failed to allocate the DMA buffer\n"); + dev_err(i2c_dev->dev, "failed to allocate dma buffer\n"); err = -ENOMEM; goto err_out; } @@ -672,8 +672,7 @@ static int __maybe_unused tegra_i2c_runtime_resume(struct device *dev) ret = clk_enable(i2c_dev->fast_clk); if (ret < 0) { - dev_err(i2c_dev->dev, - "Enabling fast clk failed, err %d\n", ret); + dev_err(dev, "failed to enable fast clock: %d\n", ret); return ret; } @@ -685,8 +684,7 @@ static int __maybe_unused tegra_i2c_runtime_resume(struct device *dev) ret = clk_enable(i2c_dev->div_clk); if (ret < 0) { - dev_err(i2c_dev->dev, - "Enabling div clk failed, err %d\n", ret); + dev_err(dev, "failed to enable div clock: %d\n", ret); goto disable_slow_clk; } @@ -850,7 +848,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev, bool clk_reinit) i2c_dev->bus_clk_rate * clk_multiplier); if (err) { dev_err(i2c_dev->dev, - "failed changing clock rate: %d\n", err); + "failed to set div-clk rate: %d\n", err); return err; } } @@ -1052,7 +1050,7 @@ static void tegra_i2c_config_fifo_trig(struct tegra_i2c_dev *i2c_dev, slv_config.device_fc = true; ret = dmaengine_slave_config(chan, &slv_config); if (ret < 0) { - dev_err(i2c_dev->dev, "DMA slave config failed: %d\n", + dev_err(i2c_dev->dev, "dma slave config failed: %d\n", ret); dev_err(i2c_dev->dev, "falling back to PIO\n"); tegra_i2c_release_dma(i2c_dev); @@ -1163,8 +1161,7 @@ static int tegra_i2c_issue_bus_clear(struct i2c_adapter *adap) reg = i2c_readl(i2c_dev, I2C_BUS_CLEAR_STATUS); if (!(reg & I2C_BC_STATUS)) { - dev_err(i2c_dev->dev, - "un-recovered arbitration lost\n"); + dev_err(i2c_dev->dev, "un-recovered arbitration lost\n"); return -EIO; } @@ -1221,8 +1218,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, err = tegra_i2c_dma_submit(i2c_dev, xfer_size); if (err < 0) { dev_err(i2c_dev->dev, - "starting RX DMA failed, err %d\n", - err); + "starting rx dma failed: %d\n", err); return err; } @@ -1281,8 +1277,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, err = tegra_i2c_dma_submit(i2c_dev, xfer_size); if (err < 0) { dev_err(i2c_dev->dev, - "starting TX DMA failed, err %d\n", - err); + "starting tx dma failed: %d\n", err); return err; } } else { @@ -1321,7 +1316,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, i2c_dev->tx_dma_chan); if (!time_left && !completion_done(&i2c_dev->dma_complete)) { - dev_err(i2c_dev->dev, "DMA transfer timeout\n"); + dev_err(i2c_dev->dev, "dma transfer timeout\n"); tegra_i2c_init(i2c_dev, true); return -ETIMEDOUT; } @@ -1676,7 +1671,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); if (!res) { - dev_err(&pdev->dev, "no irq resource\n"); + dev_err(dev, "no irq resource\n"); return -EINVAL; } irq = res->start; @@ -1705,7 +1700,9 @@ static int tegra_i2c_probe(struct platform_device *pdev) i2c_dev->rst = devm_reset_control_get_exclusive(&pdev->dev, "i2c"); if (IS_ERR(i2c_dev->rst)) { - dev_err(&pdev->dev, "missing controller reset\n"); + dev_err(dev, "failed to get controller reset: %pe\n", + i2c_dev->rst); + return PTR_ERR(i2c_dev->rst); } @@ -1725,7 +1722,9 @@ static int tegra_i2c_probe(struct platform_device *pdev) if (!i2c_dev->hw->has_single_clk_source) { fast_clk = devm_clk_get(&pdev->dev, "fast-clk"); if (IS_ERR(fast_clk)) { - dev_err(&pdev->dev, "missing fast clock\n"); + dev_err(dev, "failed to get fast clock\n: %ld\n", + PTR_ERR(fast_clk)); + return PTR_ERR(fast_clk); } i2c_dev->fast_clk = fast_clk; @@ -1746,7 +1745,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) ret = clk_prepare(i2c_dev->fast_clk); if (ret < 0) { - dev_err(i2c_dev->dev, "Clock prepare failed %d\n", ret); + dev_err(dev, "failed to prepare fast clock: %d\n", ret); return ret; } @@ -1770,7 +1769,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) ret = clk_prepare(i2c_dev->div_clk); if (ret < 0) { - dev_err(i2c_dev->dev, "Clock prepare failed %d\n", ret); + dev_err(dev, "failed to prepare div-clk: %d\n", ret); goto unprepare_slow_clk; } @@ -1787,13 +1786,13 @@ static int tegra_i2c_probe(struct platform_device *pdev) if (!pm_runtime_enabled(&pdev->dev)) { ret = tegra_i2c_runtime_resume(&pdev->dev); if (ret < 0) { - dev_err(&pdev->dev, "runtime resume failed\n"); + dev_err(dev, "runtime resume failed\n"); goto unprepare_div_clk; } } else { ret = pm_runtime_get_sync(i2c_dev->dev); if (ret < 0) { - dev_err(&pdev->dev, "runtime resume failed\n"); + dev_err(dev, "runtime resume failed\n"); goto disable_rpm; } } @@ -1801,8 +1800,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) if (i2c_dev->is_multimaster_mode) { ret = clk_enable(i2c_dev->div_clk); if (ret < 0) { - dev_err(i2c_dev->dev, "div_clk enable failed %d\n", - ret); + dev_err(dev, "failed to enable div-clk: %d\n", ret); goto put_rpm; } } @@ -1816,7 +1814,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) ret = tegra_i2c_init(i2c_dev, false); if (ret) { - dev_err(&pdev->dev, "Failed to initialize i2c controller\n"); + dev_err(dev, "failed to initialize i2c controller\n"); goto release_dma; } @@ -1825,7 +1823,7 @@ static int tegra_i2c_probe(struct platform_device *pdev) ret = devm_request_irq(&pdev->dev, i2c_dev->irq, tegra_i2c_isr, IRQF_NO_SUSPEND, dev_name(&pdev->dev), i2c_dev); if (ret) { - dev_err(&pdev->dev, "Failed to request irq %i\n", i2c_dev->irq); + dev_err(dev, "failed to request irq %i\n", i2c_dev->irq); goto release_dma; } From patchwork Mon Aug 31 20:22:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354592 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=NJqsCF5l; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9v0S1Zz9sTd for ; Tue, 1 Sep 2020 06:24:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728143AbgHaUYR (ORCPT ); Mon, 31 Aug 2020 16:24:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729986AbgHaUXc (ORCPT ); Mon, 31 Aug 2020 16:23:32 -0400 Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24791C061236; Mon, 31 Aug 2020 13:23:31 -0700 (PDT) Received: by mail-lf1-x144.google.com with SMTP id q8so4250529lfb.6; Mon, 31 Aug 2020 13:23:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6gUfms9VwMfk9ITu4jVbZVgXv6mmTy3KlTEz8VOyz88=; b=NJqsCF5l9/SOErOgl5TDzh418jpBPZse0a1qkyeseil06MU8o3wdPcs1ua9ehJm1fn 4OpRrE8OVB8JXV+KGCLD5UkT38vFAWxrCA2JlyJPMsrickBQ446ZKf41Wm0dPMzuG8Qq JCeCVMT6KEhaWBLskzkldSCcjprRRDr/Vd8BrVfUlVcxIHfLb7V0NiZXtWt/SXInVSx0 UhUweIpjrZd8u/I970pi2P5Y90dhqjX3THwcvnekxH7Hb3c8Li62WB7Saf/V1pEyawRY x9wmt6/yIpSl1JXzHPpAxTYdn8MQWdOfYrA65MxcLZgN9aQ6e71Uq6jhZYsHVCEvdyT4 SBxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6gUfms9VwMfk9ITu4jVbZVgXv6mmTy3KlTEz8VOyz88=; b=QnUUqqVwrDDnB6zyZQPCLbYe8pDAvR0HVid8WpI+YCKVhHi3aMVD1f4mSy1avkxueO do7SmqbMw9LkJiz2aOdTAuCmcHR9VCAoPTSsl3qNxm+EGYjklWbc+BixNleHvgHVqnCs /uXV4wC0NSzdXv2WoKMklE77EEAQL8UjPCPLtfY4Ae3BKFV/5iGPHNyAoqwfRWmvCoQD V7xswEaDVjT/HhMqyEQz2KTz7i3OfrxwET2RLO4Xz27XAd9c0Zx49lxNkG2ARdwOGrLj /xIQ+pLsQ1UuyVlZIgwy6KxwOPB2fcSfWTS6Ep6ZADG1/foN1K8ymKcTMnKsdlCmNTfm 3lgg== X-Gm-Message-State: AOAM531buUTc9W57xJK4dYSVrFU++gJ0YeO0iYveTGdU+VdW23fYg+tE jKwhlBbQU+5l+Z1S8ccJfYkEC59ufVo= X-Google-Smtp-Source: ABdhPJzbaQQoKggsHAFVZ3HnVI/ftrhvE0c2GEgHx3HYi2Pdoj5e0a0UhKuZF9JBGW63VOKWsTJgyA== X-Received: by 2002:a05:6512:20c1:: with SMTP id u1mr1442285lfr.17.1598905409571; Mon, 31 Aug 2020 13:23:29 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:29 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 04/12] i2c: tegra: Don't ignore tegra_i2c_flush_fifos() error Date: Mon, 31 Aug 2020 23:22:55 +0300 Message-Id: <20200831202303.15391-5-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The tegra_i2c_flush_fifos() may fail and transfer should be aborted in this case. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index efbb20049cf8..a7ef3a93e1b5 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1181,7 +1181,9 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, bool dma; u16 xfer_time = 100; - tegra_i2c_flush_fifos(i2c_dev); + err = tegra_i2c_flush_fifos(i2c_dev); + if (err) + return err; i2c_dev->msg_buf = msg->buf; i2c_dev->msg_buf_remaining = msg->len; From patchwork Mon Aug 31 20:22:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354593 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=B/KOs4w0; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgMB10sJXz9sTS for ; Tue, 1 Sep 2020 06:24:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730084AbgHaUYR (ORCPT ); Mon, 31 Aug 2020 16:24:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729982AbgHaUXc (ORCPT ); Mon, 31 Aug 2020 16:23:32 -0400 Received: from mail-lf1-x141.google.com (mail-lf1-x141.google.com [IPv6:2a00:1450:4864:20::141]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9B0BC061573; Mon, 31 Aug 2020 13:23:31 -0700 (PDT) Received: by mail-lf1-x141.google.com with SMTP id j15so4235992lfg.7; Mon, 31 Aug 2020 13:23:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gHgiuwktFuNHisqmCuic313IjjZCR0r8Yab3mbg/wXU=; b=B/KOs4w02g8hE+IsBUTqQnmPot9G0NMpLoolhcnpdPOZ52L8Fly9+DRSScCdIe1Qho Ryr1dS3S6EvZGJ619GEYzZSMb2WuC5BbpXVseDU1Xt0IsRB9hw4pRM2w530PbY12zwkt Mt7U/3AD6iCIgt5QqgRrUp/WOTJVQbLxXOSydezCzPitbKeaqN/XHWlwuGow0+YaNpmr S3PfoyFV4fAm+dnLzAXU6/pYe95YFsU7Hn3IJ2mtQaWbtU4CwBPmylEkZV0WYq3+GhbQ f3NxcB96omwY8drfT03TlMKg9QmY5ZaOrZr7x8tonxPm1O4SJZobCgR8KKZQRhZm6Ahn EY+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gHgiuwktFuNHisqmCuic313IjjZCR0r8Yab3mbg/wXU=; b=oaSFrycO3imk46BjWrXLSGXOTeiM/RML/8O1bWjQ7LIU+UUg6DcWJDpDKdSq6iRk7y qsz91IgrXLI1hEA3L+C402u3GlidU052fVEXGp6jcIbbSRkeEtwRSlUaImtooLLesVyR HAbwm2bOglXyDWHG84J030CIQoYVK5NsAUXScLC9l7Y85gjOOEcwbmXrVOJSuHwMGeE+ 6d5N+bEzfVE5MP9lq6uthDqaoIKS+zbqkflSL09emY3CBdqCp+FR77c7LtrmMHIB0pFI w0wcsWGAeQEPIqmvKnSpyZfdDNq1SgRF6kQT/5bd+5gio61WQ926Vluo56XFwekbFDly PHeg== X-Gm-Message-State: AOAM533oJGKHIlm8lL8eSUAVxmzhBG2w88yzF3USRgl+60dFlZCKXqoG 4ypxT96EFn+o8syym9BslEQ= X-Google-Smtp-Source: ABdhPJxt9ABEAYWD+Ee6lkGkyhj6ob/OlMlRV1yzeBhAbCEpBchmHKVUrbzxHNNT7lBYIDhO0pnlyg== X-Received: by 2002:a05:6512:2010:: with SMTP id a16mr1414256lfb.196.1598905410419; Mon, 31 Aug 2020 13:23:30 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:29 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 05/12] i2c: tegra: Use reset_control_reset() Date: Mon, 31 Aug 2020 23:22:56 +0300 Message-Id: <20200831202303.15391-6-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Use a single reset_control_reset() instead of assert/deasset couple in order to make code cleaner a tad. Note that the reset_control_reset() uses 1 microsecond delay instead of 2 that was used previously, but this shouldn't matter. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index a7ef3a93e1b5..6957be34bc41 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -791,9 +791,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev, bool clk_reinit) u32 tsu_thd; u8 tlow, thigh; - reset_control_assert(i2c_dev->rst); - udelay(2); - reset_control_deassert(i2c_dev->rst); + reset_control_reset(i2c_dev->rst); if (i2c_dev->is_dvc) tegra_dvc_init(i2c_dev); From patchwork Mon Aug 31 20:22:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354589 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=s2SjT3e5; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9h3nwNz9sTb for ; Tue, 1 Sep 2020 06:24:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727088AbgHaUYH (ORCPT ); Mon, 31 Aug 2020 16:24:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729993AbgHaUXe (ORCPT ); Mon, 31 Aug 2020 16:23:34 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD0AFC061575; Mon, 31 Aug 2020 13:23:32 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id w14so8242698ljj.4; Mon, 31 Aug 2020 13:23:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GLHlPtKZW3oaSnAxdxb6Ut2lkaobqhUaiSU4BDIhVwo=; b=s2SjT3e5zert8kx3/5iT0KLS2r/M2QZPRU+fOo1Ej8jCqasA/C4EWk65mCz8t0Abc8 rJ/2+iRYqi71Uy6+XL8I0hekJbHq+WKIBOjSAbGRtJDb81Lji9CgJX8G56PuVsvneJd9 VtKq/wECUEW0A45aqY5UAPgqIZMLFFYxDHxwxc2+X/hrZStL8gEg/gDXdwa5IOGDQ4vp nQ/0HMfT69UJHBNev9lNZ5EjG3GWI+4UBVvuxWkxpdY/iWXB5IuWtNdHPV+vd/IzFaOq ghNkoR9hvpe5Id8CQRADbkItJOdQB68tDu8LXH/Btw5vNLiMqu7Ik6HugHsUZKp4gKcK KC3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GLHlPtKZW3oaSnAxdxb6Ut2lkaobqhUaiSU4BDIhVwo=; b=nGmEHifOifSq4uvMrvfDAw61F9gwuuEjRZhzstDTR/qrac6W/3EXlZsjZPOCEsktUU EndT1GKHteAJ9FQYqJhHiHrcO8W4qiIr/0BxSDJOT44sNU+w8qJoSr/VkIYf2zJSHExj w/944ITzaqMWCrNzAekcK+Pr+cyvaFhj1KS6Yu0gXnYkcfi1M2ZZOgYxwA7DtqNDirX6 kuuoZ1D+WUoA+/H1rJPV1y9ZUFqdZQtqg4Y41JijfQ1mOldgiZWiyZ8SpaQ0Q2x5d0qn GmL6f29In+jfbLbvISnhxXuop7U/jkBiP4IhSxs6aLUI8dVEZWajle21knsA0GfksQCI 5zRg== X-Gm-Message-State: AOAM530wbc65y0HAX3jtWzTuSykBuFNI/ZEHLNyd8Sc5af4eOv7jLxOH sQ063hlowGQuXviEe9iBUzs= X-Google-Smtp-Source: ABdhPJxUJ8ffttDOOKmAUBy3luHUOjhvo5Ks3SEUuUzrQnHA6uys/qvPMM57XkQ+cMi1ywycUB6DLw== X-Received: by 2002:a05:651c:1b4:: with SMTP id c20mr1320998ljn.432.1598905411289; Mon, 31 Aug 2020 13:23:31 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:30 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 06/12] i2c: tegra: Improve formatting of function variables Date: Mon, 31 Aug 2020 23:22:57 +0300 Message-Id: <20200831202303.15391-7-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Reorder the definition of variables in the code in order to make code easier to read. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 51 ++++++++++++++-------------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 6957be34bc41..2c00f2e39514 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -419,8 +419,8 @@ static void tegra_i2c_release_dma(struct tegra_i2c_dev *i2c_dev) static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) { struct dma_chan *chan; - u32 *dma_buf; dma_addr_t dma_phys; + u32 *dma_buf; int err; if (!i2c_dev->hw->has_apb_dma || i2c_dev->is_vi) @@ -513,11 +513,11 @@ static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev) static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev) { - u32 val; - int rx_fifo_avail; - u8 *buf = i2c_dev->msg_buf; size_t buf_remaining = i2c_dev->msg_buf_remaining; + u8 *buf = i2c_dev->msg_buf; int words_to_transfer; + int rx_fifo_avail; + u32 val; /* * Catch overflow due to message fully sent @@ -574,11 +574,11 @@ static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev) static int tegra_i2c_fill_tx_fifo(struct tegra_i2c_dev *i2c_dev) { - u32 val; - int tx_fifo_avail; - u8 *buf = i2c_dev->msg_buf; size_t buf_remaining = i2c_dev->msg_buf_remaining; + u8 *buf = i2c_dev->msg_buf; int words_to_transfer; + int tx_fifo_avail; + u32 val; if (i2c_dev->hw->has_mst_fifo) { val = i2c_readl(i2c_dev, I2C_MST_FIFO_STATUS); @@ -785,11 +785,8 @@ static void tegra_i2c_vi_init(struct tegra_i2c_dev *i2c_dev) static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev, bool clk_reinit) { - u32 val; + u32 val, clk_divisor, clk_multiplier, tsu_thd, tlow, thigh; int err; - u32 clk_divisor, clk_multiplier; - u32 tsu_thd; - u8 tlow, thigh; reset_control_reset(i2c_dev->rst); @@ -895,9 +892,9 @@ static int tegra_i2c_disable_packet_mode(struct tegra_i2c_dev *i2c_dev) static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) { - u32 status; const u32 status_err = I2C_INT_NO_ACK | I2C_INT_ARBITRATION_LOST; struct tegra_i2c_dev *i2c_dev = dev_id; + u32 status; status = i2c_readl(i2c_dev, I2C_INT_STATUS); @@ -1001,12 +998,11 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) static void tegra_i2c_config_fifo_trig(struct tegra_i2c_dev *i2c_dev, size_t len) { - u32 val, reg; - u8 dma_burst; struct dma_slave_config slv_config = {0}; + unsigned long reg_offset; + u32 val, reg, dma_burst; struct dma_chan *chan; int ret; - unsigned long reg_offset; if (i2c_dev->hw->has_mst_fifo) reg = I2C_MST_FIFO_CONTROL; @@ -1132,9 +1128,9 @@ tegra_i2c_wait_completion_timeout(struct tegra_i2c_dev *i2c_dev, static int tegra_i2c_issue_bus_clear(struct i2c_adapter *adap) { struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap); - int err; unsigned long time_left; u32 reg; + int err; reinit_completion(&i2c_dev->msg_complete); reg = FIELD_PREP(I2C_BC_SCLK_THRESHOLD, 9) | I2C_BC_STOP_COND | @@ -1170,14 +1166,12 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, struct i2c_msg *msg, enum msg_end_type end_state) { - u32 packet_header; - u32 int_mask; - unsigned long time_left; - size_t xfer_size; + unsigned long time_left, xfer_time = 100; + u32 packet_header, int_mask; u32 *buffer = NULL; - int err = 0; + size_t xfer_size; bool dma; - u16 xfer_time = 100; + int err; err = tegra_i2c_flush_fifos(i2c_dev); if (err) @@ -1371,8 +1365,7 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap); - int i; - int ret; + int i, ret; ret = pm_runtime_get_sync(i2c_dev->dev); if (ret < 0) { @@ -1427,8 +1420,8 @@ static u32 tegra_i2c_func(struct i2c_adapter *adap) static void tegra_i2c_parse_dt(struct tegra_i2c_dev *i2c_dev) { struct device_node *np = i2c_dev->dev->of_node; - int ret; bool multi_mode; + int ret; ret = of_property_read_u32(np, "clock-frequency", &i2c_dev->bus_clk_rate); @@ -1654,14 +1647,12 @@ MODULE_DEVICE_TABLE(of, tegra_i2c_of_match); static int tegra_i2c_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + struct clk *div_clk, *fast_clk; struct tegra_i2c_dev *i2c_dev; + phys_addr_t base_phys; struct resource *res; - struct clk *div_clk; - struct clk *fast_clk; void __iomem *base; - phys_addr_t base_phys; - int irq; - int ret; + int irq, ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); base_phys = res->start; From patchwork Mon Aug 31 20:22:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354588 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=moS0Xsln; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9g4pTPz9sTS for ; Tue, 1 Sep 2020 06:24:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729996AbgHaUXf (ORCPT ); Mon, 31 Aug 2020 16:23:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729991AbgHaUXe (ORCPT ); Mon, 31 Aug 2020 16:23:34 -0400 Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC69AC061573; Mon, 31 Aug 2020 13:23:33 -0700 (PDT) Received: by mail-lf1-x144.google.com with SMTP id y17so4240424lfa.8; Mon, 31 Aug 2020 13:23:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fLWAd459e53PrxCTbDW1N5SV9Ygjm3TESfTNB8/GCRE=; b=moS0Xsln368Ql3Iml8OegwXxXr099iGmNzylaB7uyzTZrMMQJ1RkVXm4Ymryer/kTs k8uxyPKgHCX9HU84dELgdlgk1Veb6iGGS1VsYm6d7m10CSfJ6/vXPOGiKltT5PoR6fH1 JL3X8BRqlf2LnGlUDs8XxfMn+9T/KSA1LOHZNa4pPJ19XI5rMFMXCRj5AE7NHB8GpsUx yi8psP5WHQ9q2jVdGGxA/9FEHYESTQ45Kzp+qG13FABDHEfpdGViOwY0qkzSd52rmFQ7 iTQFS7ilDerXbULeTSctmVTYJx/xgCm5W5rfOjumQu9S5VDOHkbq2O6P+7DplQWWe02x 7bQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fLWAd459e53PrxCTbDW1N5SV9Ygjm3TESfTNB8/GCRE=; b=o1GDHNm1c6udbCdtPeZ9JNDkq+YvuIsldTT/5hZFhHn0AGLJk7rG6eBqKA8KGJ8nqy ethXQQieLK1Bop9J1mYqhsClEUmrx1fXKQLGxdjBYU+n8jMH0jmxQufm1keRZyOG7bML kXu8H2VEVJ9GLMKy1fCpwf8gQDbzosKQ8Pu41OJ0uaZaX8115KVrnyYo4tOLQLnbAYst CWwZK8BMMICtiBLCyuYP3HPsGsZKk3t/iLleCKEzrbwaQWpJcN+tTHX9LPBcPnfUDLN7 axUsWLUK4Fz+w3WwNaIjO9QUBRQDVC07+ceUCtjTpvwaZEovpOU9MPB25CEEiVWQ4ax3 GT8w== X-Gm-Message-State: AOAM531ILjVmhq4EFULC7+zTOYVN64ldtOTPwwhlCb1Dc8U7/zOUJBtj lp/WEqkgP39QpN4z6oFmS2w= X-Google-Smtp-Source: ABdhPJxhhieFe/dZDTLvTfMsdNHfbjiADWLaVrIlGUcg6xkDNBCWnG7J4dwDH3Crrb21HcREJf/aLw== X-Received: by 2002:a05:6512:6c1:: with SMTP id u1mr1472042lff.28.1598905412237; Mon, 31 Aug 2020 13:23:32 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:31 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 07/12] i2c: tegra: Use dev_err_probe() Date: Mon, 31 Aug 2020 23:22:58 +0300 Message-Id: <20200831202303.15391-8-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Use dev_err_probe() to replace the manual -EPROBE_DEFER handling, making code cleaner. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 2c00f2e39514..525a757bdc66 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1646,8 +1646,8 @@ MODULE_DEVICE_TABLE(of, tegra_i2c_of_match); static int tegra_i2c_probe(struct platform_device *pdev) { + struct clk *div_clk, *fast_clk, *slow_clk; struct device *dev = &pdev->dev; - struct clk *div_clk, *fast_clk; struct tegra_i2c_dev *i2c_dev; phys_addr_t base_phys; struct resource *res; @@ -1668,12 +1668,9 @@ static int tegra_i2c_probe(struct platform_device *pdev) irq = res->start; div_clk = devm_clk_get(&pdev->dev, "div-clk"); - if (IS_ERR(div_clk)) { - if (PTR_ERR(div_clk) != -EPROBE_DEFER) - dev_err(&pdev->dev, "missing controller clock\n"); - - return PTR_ERR(div_clk); - } + if (IS_ERR(div_clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(div_clk), + "failed to get div-clk\n"); i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL); if (!i2c_dev) @@ -1712,24 +1709,20 @@ static int tegra_i2c_probe(struct platform_device *pdev) if (!i2c_dev->hw->has_single_clk_source) { fast_clk = devm_clk_get(&pdev->dev, "fast-clk"); - if (IS_ERR(fast_clk)) { - dev_err(dev, "failed to get fast clock\n: %ld\n", - PTR_ERR(fast_clk)); + if (IS_ERR(fast_clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(fast_clk), + "failed to get fast clock\n"); - return PTR_ERR(fast_clk); - } i2c_dev->fast_clk = fast_clk; } if (i2c_dev->is_vi) { - i2c_dev->slow_clk = devm_clk_get(dev, "slow"); - if (IS_ERR(i2c_dev->slow_clk)) { - if (PTR_ERR(i2c_dev->slow_clk) != -EPROBE_DEFER) - dev_err(dev, "failed to get slow clock: %ld\n", - PTR_ERR(i2c_dev->slow_clk)); + slow_clk = devm_clk_get(dev, "slow"); + if (IS_ERR(slow_clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(slow_clk), + "failed to get slow clock\n"); - return PTR_ERR(i2c_dev->slow_clk); - } + i2c_dev->slow_clk = slow_clk; } platform_set_drvdata(pdev, i2c_dev); From patchwork Mon Aug 31 20:22:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354578 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=cYVaZxhb; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM98132Kz9sTS for ; Tue, 1 Sep 2020 06:23:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730006AbgHaUXh (ORCPT ); Mon, 31 Aug 2020 16:23:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730003AbgHaUXg (ORCPT ); Mon, 31 Aug 2020 16:23:36 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C145BC061573; Mon, 31 Aug 2020 13:23:34 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id i10so8265247ljn.2; Mon, 31 Aug 2020 13:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NLHjuAzOuZSHd7eSjO+fVmyPsvQw6RuPt2s9HQlH5zc=; b=cYVaZxhbYOsEZ7KLVudLAlT5m70uAnVXUFjg6Aj3Sjzp6KQwyErJ2aRa8FTaGPnGpw EjZYAZVz/rRWYjevDjEDCR64elZSxJt3QySO7Rqx25z6UdSo47+1caJYkD83ck73hBlz 6BLFlOYxKSIJuk5o3nTlv1tbHZmfS9vgN+nTS2hsBlO+gxHMJxgz+6Snd7zt4/xXCJe0 CfJZGECHifRqe8FDsJiHKtdWTNgLQiRdoEI/bBNkF5yP7BfihyeBEVbyDJ6PhZbNwWqG km2ojhNqvydrUViaZwR7v5uuHeYhGYSr3iJJBvFCnVnHsIrfUnpuWCIQtdJKpDhlLqvT Zk1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NLHjuAzOuZSHd7eSjO+fVmyPsvQw6RuPt2s9HQlH5zc=; b=oVWEYZvyWjl2lJ/dP9ckF0GE9n1uVi++l80ex/D0Sk2H378yXEkEZP0RgXAh+1IkDf 3B81dCHVm5i/rQz0DLWLM5ucbUrks9T+eGkcSEiYrt3NwtzQaZ4hobSsYecKsELBuDvv 4IKp+p/XNyFMBAliAj3a3xBCc9KqZRMb3Cds2apGyWbvkFLV34XfXkcdxkrqrvtwPZqd ct7qEFotqcRTRQF9aeHw7VSNIK2ezGHdxXehJfddgKpRvJ46R/dyuizYmfCjWU6vVcu3 eA/B41p4GwgNH/3biB4w2Ef0bIrF+nQ6/gNboy64mlHLP5RGA53DTHhxRxCOBDAo29JA M0Wg== X-Gm-Message-State: AOAM5338doNbJdUnNPY59l44PtKAiwI0Nj0rytbtJ6iBQCWtdMqqozM5 t6FCXsn2C5i0MF/zXlOiIQo= X-Google-Smtp-Source: ABdhPJwLtpISZ3sz4+Yc7b9gpScF/LB0sk9/4oMzj3TxzE9hsK4Edko4jVQQWqLhH7LJbbz5ZYvs7Q== X-Received: by 2002:a05:651c:102c:: with SMTP id w12mr1499516ljm.464.1598905413238; Mon, 31 Aug 2020 13:23:33 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:32 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 08/12] i2c: tegra: Runtime PM always available on Tegra Date: Mon, 31 Aug 2020 23:22:59 +0300 Message-Id: <20200831202303.15391-9-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The runtime PM is guaranteed to be always available on Tegra after commit 40b2bb1b132a ("ARM: tegra: enforce PM requirement"). Hence let's remove all the RPM-availability checking and handling from the code. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 525a757bdc66..ca8c16b1c049 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1767,18 +1767,10 @@ static int tegra_i2c_probe(struct platform_device *pdev) if (!i2c_dev->is_vi) pm_runtime_irq_safe(&pdev->dev); pm_runtime_enable(&pdev->dev); - if (!pm_runtime_enabled(&pdev->dev)) { - ret = tegra_i2c_runtime_resume(&pdev->dev); - if (ret < 0) { - dev_err(dev, "runtime resume failed\n"); - goto unprepare_div_clk; - } - } else { - ret = pm_runtime_get_sync(i2c_dev->dev); - if (ret < 0) { - dev_err(dev, "runtime resume failed\n"); - goto disable_rpm; - } + ret = pm_runtime_get_sync(i2c_dev->dev); + if (ret < 0) { + dev_err(dev, "runtime resume failed\n"); + goto disable_rpm; } if (i2c_dev->is_multimaster_mode) { @@ -1836,16 +1828,10 @@ static int tegra_i2c_probe(struct platform_device *pdev) clk_disable(i2c_dev->div_clk); put_rpm: - if (pm_runtime_enabled(&pdev->dev)) - pm_runtime_put_sync(&pdev->dev); - else - tegra_i2c_runtime_suspend(&pdev->dev); + pm_runtime_put_sync(&pdev->dev); disable_rpm: - if (pm_runtime_enabled(&pdev->dev)) - pm_runtime_disable(&pdev->dev); - -unprepare_div_clk: + pm_runtime_disable(&pdev->dev); clk_unprepare(i2c_dev->div_clk); unprepare_slow_clk: @@ -1867,8 +1853,6 @@ static int tegra_i2c_remove(struct platform_device *pdev) clk_disable(i2c_dev->div_clk); pm_runtime_disable(&pdev->dev); - if (!pm_runtime_status_suspended(&pdev->dev)) - tegra_i2c_runtime_suspend(&pdev->dev); clk_unprepare(i2c_dev->div_clk); clk_unprepare(i2c_dev->slow_clk); From patchwork Mon Aug 31 20:23:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354580 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Alz/nBPN; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9B04byz9sTb for ; Tue, 1 Sep 2020 06:23:42 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730009AbgHaUXi (ORCPT ); Mon, 31 Aug 2020 16:23:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730002AbgHaUXg (ORCPT ); Mon, 31 Aug 2020 16:23:36 -0400 Received: from mail-lf1-x141.google.com (mail-lf1-x141.google.com [IPv6:2a00:1450:4864:20::141]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7FEFC061755; Mon, 31 Aug 2020 13:23:35 -0700 (PDT) Received: by mail-lf1-x141.google.com with SMTP id d2so4253654lfj.1; Mon, 31 Aug 2020 13:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CXR3qFOucIlowGPKcNGJFAMcsQBtXy750zI361J9ej4=; b=Alz/nBPN6UfECssskFJIiKHc3/mteaugVOqVMlHw3bXKBJttjUJTf4b4Tyus/coSIZ njVtt3ABX2ZIAsjd3MI2UP+4Z4LRTOm4UtHRAWnDc+LOZd33r4+kqOJiYPKkLJZqYD+I n3zW0H07tzKEZBoD/mHREy5rSoPCanYmG5f9dWyFVyR7p1cSxd6qgHcDf+y7ftKOQRM5 FXhM7vyvZcrNMmEG3wK8Aewh4G7qDkBkYOuh6W7+ep7EXG9s8FfdH3/48Ozu0NvxZXyH 8oJBoh9OAXcbNLMexnLcxVaGXUWQgzSCfFWWNMzMdOkwOMfgJeAAkTcmQpPEeX0q+Hwe 2/VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CXR3qFOucIlowGPKcNGJFAMcsQBtXy750zI361J9ej4=; b=A9+vzwIddAUCTpQbUiDwgIWcEJHL4U6dhz5nQTVaWyZVUmIpaS4UVpMlUxDIcV40zj 1TVANE5NU/WkYrmynTTHrxxmPRUtwVDbJo2hqo4/jw3Awsy8q02Qm4rueq8HtRQgG6GJ is+BM3JXjpCrRwJQ7IdgYjIiQZkN5Hhm288SrMPDfftD8bpeVVFaAQAjYCEBeSQnJd/t EQUZWvHJYHaNvfYbPUesubxLe4EEV1Mk9scNJHfgQ+PZ7wQZHmL6jzV69OVTS+EUYoRB B08p1CtoIGSnMCVR/BhnAZBQupJUFMQyslzn1GfGNVOWfWFHZs1iTVvgM/gfcfPYHr1E Ag4g== X-Gm-Message-State: AOAM530DOIWGkXFxhAvxGPQNYWKAZZtt7IBTraic17ZcUqP4zCe0lEmL wmEn0/VNti9Rz6BXYYH3Uos= X-Google-Smtp-Source: ABdhPJyTQ3qcwMOeLXC2wZ+bXSCVbAo9h1Anvs04+EJuot5/Ejb+UlRLYbnEvvUk5C/insA/nLtCoQ== X-Received: by 2002:a19:818a:: with SMTP id c132mr1457536lfd.76.1598905414167; Mon, 31 Aug 2020 13:23:34 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:33 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 09/12] i2c: tegra: Clean up probe function Date: Mon, 31 Aug 2020 23:23:00 +0300 Message-Id: <20200831202303.15391-10-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The driver's probe function code is difficult to read and follow. This patch splits probe function into several logical parts that are easy to work with. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 398 ++++++++++++++++++++------------- 1 file changed, 240 insertions(+), 158 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index ca8c16b1c049..57a3e1a9eef7 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -447,6 +447,9 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) i2c_dev->tx_dma_chan = chan; + i2c_dev->dma_buf_size = i2c_dev->adapter.quirks->max_write_len + + I2C_PACKET_HEADER_SIZE; + dma_buf = dma_alloc_coherent(i2c_dev->dev, i2c_dev->dma_buf_size, &dma_phys, GFP_KERNEL | __GFP_NOWARN); if (!dma_buf) { @@ -1417,19 +1420,27 @@ static u32 tegra_i2c_func(struct i2c_adapter *adap) return ret; } -static void tegra_i2c_parse_dt(struct tegra_i2c_dev *i2c_dev) +static int tegra_i2c_parse_dt(struct tegra_i2c_dev *i2c_dev) { struct device_node *np = i2c_dev->dev->of_node; + u32 bus_clk_rate = I2C_MAX_STANDARD_MODE_FREQ; bool multi_mode; - int ret; - ret = of_property_read_u32(np, "clock-frequency", - &i2c_dev->bus_clk_rate); - if (ret) - i2c_dev->bus_clk_rate = I2C_MAX_STANDARD_MODE_FREQ; /* default clock rate */ + of_property_read_u32(np, "clock-frequency", &bus_clk_rate); + i2c_dev->bus_clk_rate = bus_clk_rate; multi_mode = of_property_read_bool(np, "multi-master"); i2c_dev->is_multimaster_mode = multi_mode; + + i2c_dev->hw = of_device_get_match_data(i2c_dev->dev); + + if (of_device_is_compatible(np, "nvidia,tegra20-i2c-dvc")) + i2c_dev->is_dvc = true; + + if (of_device_is_compatible(np, "nvidia,tegra210-i2c-vi")) + i2c_dev->is_vi = true; + + return 0; } static const struct i2c_algorithm tegra_i2c_algo = { @@ -1644,221 +1655,292 @@ static const struct of_device_id tegra_i2c_of_match[] = { }; MODULE_DEVICE_TABLE(of, tegra_i2c_of_match); -static int tegra_i2c_probe(struct platform_device *pdev) +static int tegra_i2c_init_resources(struct tegra_i2c_dev *i2c_dev, + struct platform_device *pdev) { - struct clk *div_clk, *fast_clk, *slow_clk; - struct device *dev = &pdev->dev; - struct tegra_i2c_dev *i2c_dev; - phys_addr_t base_phys; struct resource *res; - void __iomem *base; - int irq, ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - base_phys = res->start; - base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(base)) - return PTR_ERR(base); - - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!res) { - dev_err(dev, "no irq resource\n"); + if (WARN_ON(!res)) return -EINVAL; - } - irq = res->start; - div_clk = devm_clk_get(&pdev->dev, "div-clk"); - if (IS_ERR(div_clk)) - return dev_err_probe(&pdev->dev, PTR_ERR(div_clk), - "failed to get div-clk\n"); + i2c_dev->base_phys = res->start; - i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL); - if (!i2c_dev) - return -ENOMEM; + i2c_dev->base = devm_ioremap_resource(i2c_dev->dev, res); + if (IS_ERR(i2c_dev->base)) + return PTR_ERR(i2c_dev->base); - i2c_dev->base = base; - i2c_dev->base_phys = base_phys; - i2c_dev->div_clk = div_clk; - i2c_dev->adapter.algo = &tegra_i2c_algo; - i2c_dev->adapter.retries = 1; - i2c_dev->adapter.timeout = 6 * HZ; - i2c_dev->irq = irq; - i2c_dev->cont_id = pdev->id; - i2c_dev->dev = &pdev->dev; + res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (WARN_ON(!res)) + return -EINVAL; - i2c_dev->rst = devm_reset_control_get_exclusive(&pdev->dev, "i2c"); - if (IS_ERR(i2c_dev->rst)) { - dev_err(dev, "failed to get controller reset: %pe\n", - i2c_dev->rst); + i2c_dev->irq = res->start; - return PTR_ERR(i2c_dev->rst); - } + return 0; +} - tegra_i2c_parse_dt(i2c_dev); +static int tegra_i2c_init_clocks(struct tegra_i2c_dev *i2c_dev) +{ + const struct tegra_i2c_hw_feature *hw = i2c_dev->hw; + struct device *dev = i2c_dev->dev; + struct clk *clk; + int err, mode; + + clk = devm_clk_get(dev, "div-clk"); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "failed to get div-clk\n"); - i2c_dev->hw = of_device_get_match_data(&pdev->dev); - i2c_dev->is_dvc = of_device_is_compatible(pdev->dev.of_node, - "nvidia,tegra20-i2c-dvc"); - i2c_dev->is_vi = of_device_is_compatible(dev->of_node, - "nvidia,tegra210-i2c-vi"); - i2c_dev->adapter.quirks = i2c_dev->hw->quirks; - i2c_dev->dma_buf_size = i2c_dev->adapter.quirks->max_write_len + - I2C_PACKET_HEADER_SIZE; - init_completion(&i2c_dev->msg_complete); - init_completion(&i2c_dev->dma_complete); + i2c_dev->div_clk = clk; - if (!i2c_dev->hw->has_single_clk_source) { - fast_clk = devm_clk_get(&pdev->dev, "fast-clk"); - if (IS_ERR(fast_clk)) - return dev_err_probe(&pdev->dev, PTR_ERR(fast_clk), - "failed to get fast clock\n"); + if (!hw->has_single_clk_source) { + clk = devm_clk_get(dev, "fast-clk"); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "failed to get fast clk\n"); - i2c_dev->fast_clk = fast_clk; + i2c_dev->fast_clk = clk; } if (i2c_dev->is_vi) { - slow_clk = devm_clk_get(dev, "slow"); - if (IS_ERR(slow_clk)) - return dev_err_probe(&pdev->dev, PTR_ERR(slow_clk), - "failed to get slow clock\n"); + clk = devm_clk_get(dev, "slow"); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "failed to get slow clk\n"); - i2c_dev->slow_clk = slow_clk; + i2c_dev->slow_clk = clk; } - platform_set_drvdata(pdev, i2c_dev); - - ret = clk_prepare(i2c_dev->fast_clk); - if (ret < 0) { - dev_err(dev, "failed to prepare fast clock: %d\n", ret); - return ret; + err = clk_prepare(i2c_dev->fast_clk); + if (err) { + dev_err(dev, "failed to prepare fast clk: %d\n", err); + return err; } - ret = clk_prepare(i2c_dev->slow_clk); - if (ret < 0) { - dev_err(dev, "failed to prepare slow clock: %d\n", ret); + err = clk_prepare(i2c_dev->slow_clk); + if (err) { + dev_err(dev, "failed to prepare slow clk: %d\n", err); goto unprepare_fast_clk; } - if (i2c_dev->bus_clk_rate > I2C_MAX_FAST_MODE_FREQ && - i2c_dev->bus_clk_rate <= I2C_MAX_FAST_MODE_PLUS_FREQ) - i2c_dev->clk_divisor_non_hs_mode = - i2c_dev->hw->clk_divisor_fast_plus_mode; - else if (i2c_dev->bus_clk_rate > I2C_MAX_STANDARD_MODE_FREQ && - i2c_dev->bus_clk_rate <= I2C_MAX_FAST_MODE_FREQ) - i2c_dev->clk_divisor_non_hs_mode = - i2c_dev->hw->clk_divisor_fast_mode; - else - i2c_dev->clk_divisor_non_hs_mode = - i2c_dev->hw->clk_divisor_std_mode; - - ret = clk_prepare(i2c_dev->div_clk); - if (ret < 0) { - dev_err(dev, "failed to prepare div-clk: %d\n", ret); + err = clk_prepare(i2c_dev->div_clk); + if (err) { + dev_err(dev, "failed to prepare div-clk: %d\n", err); goto unprepare_slow_clk; } - /* - * VI I2C is in VE power domain which is not always on and not - * an IRQ safe. So, IRQ safe device can't be attached to a non-IRQ - * safe domain as it prevents powering off the PM domain. - * Also, VI I2C device don't need to use runtime IRQ safe as it will - * not be used for atomic transfers. - */ - if (!i2c_dev->is_vi) - pm_runtime_irq_safe(&pdev->dev); - pm_runtime_enable(&pdev->dev); - ret = pm_runtime_get_sync(i2c_dev->dev); - if (ret < 0) { - dev_err(dev, "runtime resume failed\n"); - goto disable_rpm; - } - if (i2c_dev->is_multimaster_mode) { - ret = clk_enable(i2c_dev->div_clk); - if (ret < 0) { - dev_err(dev, "failed to enable div-clk: %d\n", ret); - goto put_rpm; + err = clk_enable(i2c_dev->div_clk); + if (err) { + dev_err(dev, "failed to enable div-clk: %d\n", err); + goto unprepare_div_clk; } } - if (i2c_dev->hw->supports_bus_clear) - i2c_dev->adapter.bus_recovery_info = &tegra_i2c_recovery_info; + switch (i2c_dev->bus_clk_rate) { + case I2C_MAX_FAST_MODE_FREQ ... I2C_MAX_FAST_MODE_PLUS_FREQ: + mode = hw->clk_divisor_fast_plus_mode; + break; - ret = tegra_i2c_init_dma(i2c_dev); - if (ret < 0) - goto disable_div_clk; + case I2C_MAX_STANDARD_MODE_FREQ ... I2C_MAX_FAST_MODE_FREQ - 1: + mode = hw->clk_divisor_fast_mode; + break; - ret = tegra_i2c_init(i2c_dev, false); - if (ret) { - dev_err(dev, "failed to initialize i2c controller\n"); - goto release_dma; + default: + mode = hw->clk_divisor_std_mode; + break; } - irq_set_status_flags(i2c_dev->irq, IRQ_NOAUTOEN); + i2c_dev->clk_divisor_non_hs_mode = mode; - ret = devm_request_irq(&pdev->dev, i2c_dev->irq, tegra_i2c_isr, - IRQF_NO_SUSPEND, dev_name(&pdev->dev), i2c_dev); - if (ret) { - dev_err(dev, "failed to request irq %i\n", i2c_dev->irq); - goto release_dma; + return 0; + +unprepare_div_clk: + clk_unprepare(i2c_dev->div_clk); +unprepare_slow_clk: + clk_unprepare(i2c_dev->slow_clk); +unprepare_fast_clk: + clk_unprepare(i2c_dev->fast_clk); + + return err; +} + +static void tegra_i2c_release_clocks(struct tegra_i2c_dev *i2c_dev) +{ + if (i2c_dev->is_multimaster_mode) + clk_disable(i2c_dev->div_clk); + + clk_unprepare(i2c_dev->div_clk); + clk_unprepare(i2c_dev->slow_clk); + clk_unprepare(i2c_dev->fast_clk); +} + +static int tegra_i2c_init_reset_control(struct tegra_i2c_dev *i2c_dev) +{ + struct device *dev = i2c_dev->dev; + struct reset_control *rst; + + rst = devm_reset_control_get_exclusive(dev, "i2c"); + if (IS_ERR(rst)) { + dev_err(dev, "failed to get controller reset: %pe\n", rst); + return PTR_ERR(rst); } - i2c_set_adapdata(&i2c_dev->adapter, i2c_dev); + i2c_dev->rst = rst; + + return 0; +} + +static int tegra_i2c_init_adapter(struct tegra_i2c_dev *i2c_dev) +{ + i2c_dev->adapter.dev.of_node = i2c_dev->dev->of_node; + i2c_dev->adapter.dev.parent = i2c_dev->dev; + i2c_dev->adapter.retries = 1; + i2c_dev->adapter.timeout = 6 * HZ; + i2c_dev->adapter.quirks = i2c_dev->hw->quirks; i2c_dev->adapter.owner = THIS_MODULE; i2c_dev->adapter.class = I2C_CLASS_DEPRECATED; - strlcpy(i2c_dev->adapter.name, dev_name(&pdev->dev), + i2c_dev->adapter.algo = &tegra_i2c_algo; + i2c_dev->adapter.nr = i2c_dev->cont_id; + + if (i2c_dev->hw->supports_bus_clear) + i2c_dev->adapter.bus_recovery_info = &tegra_i2c_recovery_info; + + strscpy(i2c_dev->adapter.name, dev_name(i2c_dev->dev), sizeof(i2c_dev->adapter.name)); - i2c_dev->adapter.dev.parent = &pdev->dev; - i2c_dev->adapter.nr = pdev->id; - i2c_dev->adapter.dev.of_node = pdev->dev.of_node; - ret = i2c_add_numbered_adapter(&i2c_dev->adapter); - if (ret) - goto release_dma; + i2c_set_adapdata(&i2c_dev->adapter, i2c_dev); - pm_runtime_put(&pdev->dev); + return 0; +} + +static int tegra_i2c_init_runtime_pm(struct tegra_i2c_dev *i2c_dev) +{ + /* + * VI I2C is in VE power domain which is not always ON and not + * IRQ-safe. Thus, IRQ-safe device shouldn't be attached to a + * non IRQ-safe domain because this prevents powering off the power + * domain. + * + * VI I2C device shouldn't be marked as IRQ-safe because VI I2C won't + * be used for atomic transfers. + */ + if (!i2c_dev->is_vi) + pm_runtime_irq_safe(i2c_dev->dev); + + pm_runtime_enable(i2c_dev->dev); return 0; +} -release_dma: - tegra_i2c_release_dma(i2c_dev); +static void tegra_i2c_release_runtime_pm(struct tegra_i2c_dev *i2c_dev) +{ + pm_runtime_disable(i2c_dev->dev); +} -disable_div_clk: - if (i2c_dev->is_multimaster_mode) - clk_disable(i2c_dev->div_clk); +static int tegra_i2c_init_interrupt(struct tegra_i2c_dev *i2c_dev) +{ + irq_set_status_flags(i2c_dev->irq, IRQ_NOAUTOEN); -put_rpm: - pm_runtime_put_sync(&pdev->dev); + return devm_request_irq(i2c_dev->dev, i2c_dev->irq, tegra_i2c_isr, + IRQF_NO_SUSPEND, dev_name(i2c_dev->dev), + i2c_dev); +} -disable_rpm: - pm_runtime_disable(&pdev->dev); - clk_unprepare(i2c_dev->div_clk); +static int tegra_i2c_init_hardware(struct tegra_i2c_dev *i2c_dev) +{ + int ret; -unprepare_slow_clk: - clk_unprepare(i2c_dev->slow_clk); + ret = pm_runtime_get_sync(i2c_dev->dev); + if (ret < 0) { + dev_err(i2c_dev->dev, "runtime resume failed: %d\n", ret); + return ret; + } -unprepare_fast_clk: - clk_unprepare(i2c_dev->fast_clk); + ret = tegra_i2c_init(i2c_dev, false); + pm_runtime_put(i2c_dev->dev); return ret; } -static int tegra_i2c_remove(struct platform_device *pdev) +static int tegra_i2c_probe(struct platform_device *pdev) { - struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev); + struct tegra_i2c_dev *i2c_dev; + int err; - i2c_del_adapter(&i2c_dev->adapter); + i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL); + if (!i2c_dev) + return -ENOMEM; - if (i2c_dev->is_multimaster_mode) - clk_disable(i2c_dev->div_clk); + platform_set_drvdata(pdev, i2c_dev); - pm_runtime_disable(&pdev->dev); + init_completion(&i2c_dev->msg_complete); + init_completion(&i2c_dev->dma_complete); - clk_unprepare(i2c_dev->div_clk); - clk_unprepare(i2c_dev->slow_clk); - clk_unprepare(i2c_dev->fast_clk); + i2c_dev->cont_id = pdev->id; + i2c_dev->dev = &pdev->dev; + + err = tegra_i2c_parse_dt(i2c_dev); + if (err) + return err; + + err = tegra_i2c_init_resources(i2c_dev, pdev); + if (err) + return err; + + err = tegra_i2c_init_adapter(i2c_dev); + if (err) + return err; + + err = tegra_i2c_init_reset_control(i2c_dev); + if (err) + return err; + + err = tegra_i2c_init_interrupt(i2c_dev); + if (err) + return err; + + err = tegra_i2c_init_clocks(i2c_dev); + if (err) + return err; + + err = tegra_i2c_init_runtime_pm(i2c_dev); + if (err) + goto release_clocks; + + err = tegra_i2c_init_dma(i2c_dev); + if (err) + goto release_rpm; + + err = tegra_i2c_init_hardware(i2c_dev); + if (err) + goto release_dma; + + err = i2c_add_numbered_adapter(&i2c_dev->adapter); + if (err) + goto release_dma; + + return 0; + +release_dma: + tegra_i2c_release_dma(i2c_dev); +release_rpm: + tegra_i2c_release_runtime_pm(i2c_dev); +release_clocks: + tegra_i2c_release_clocks(i2c_dev); + + return err; +} + +static int tegra_i2c_remove(struct platform_device *pdev) +{ + struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev); + + i2c_del_adapter(&i2c_dev->adapter); tegra_i2c_release_dma(i2c_dev); + tegra_i2c_release_runtime_pm(i2c_dev); + tegra_i2c_release_clocks(i2c_dev); return 0; } From patchwork Mon Aug 31 20:23:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354583 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=CMjEz4Rj; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9S6SNKz9sTT for ; Tue, 1 Sep 2020 06:23:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730038AbgHaUX4 (ORCPT ); Mon, 31 Aug 2020 16:23:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729397AbgHaUXi (ORCPT ); Mon, 31 Aug 2020 16:23:38 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 829AEC061575; Mon, 31 Aug 2020 13:23:36 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id t23so8245978ljc.3; Mon, 31 Aug 2020 13:23:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Oay/lLFbyAzhcLMmu4x+aLy0m9Fy52Fvfqcuwro8waU=; b=CMjEz4Rjy3TQB8KrVPWAVy6ph+o91WuDdsixMYI6u0uiDPUX5ptTPot3ZWSCZvVNOL 98wtOouTsK4wHQCMjoSoe1zqYm+ldUEGmXDKVF8YcaTMxKkn0YLgyuJOOdAYCW1iVgSJ ui7F8SydFW8LdfJfSFf50bmwLDsOc88ea8R9JI56QMQp+x4/jFrLUnA47Yt5Wnt5pMeI 4JUW7jqiHTrTRS9yeA4SbU+Sag6IcPeQHdSMnm6gYDcL4Ng2MYoRYhkFFW/RudBjTdey oAdNLNrRcVUV15oxCV1Kw+/gp4GryxKX26u06MySgCFaYWDn0HGC5DRlbmT7RnlWcqcq 2YFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Oay/lLFbyAzhcLMmu4x+aLy0m9Fy52Fvfqcuwro8waU=; b=fUeTCd1yKStLhB/QQkk0K6dVdVhgv803dWn4zuWieGqUa0xQbU85YVgCCHPczH9vKN 1+H6ozT4xazyI8S8WnS75MrXPVxXljw1JtKzHcCk5m8P6w2uxG/XvoR+XQTTWPI6xCit mpM8gVgDVrrPY/7dLzRdsnQ6MgcPTluttauaNNQEWq2k3CKwvSVbJ4eSO5QtY9zzFmBJ oshWtA7yQsaPp8T1A1go70KNT9GLmqYD3Y+DCXi0tRFerKWQc6ds98DLezYyjdJ2sher bLV/mtDVYUJ+H4kitXIwQ+YBECOJWrXuSc8jfPxbWTm3LoHTr0+4Jy919tx+LFz+urOp O23w== X-Gm-Message-State: AOAM530N68O3Ha7ke+jlSvfXNAakTEuDu/klG+eUUT0taPsdaD7D19/f OTlegEEYhbPzGaXkIktW+Ro= X-Google-Smtp-Source: ABdhPJysKveOQlsgQpRxqwLInIhpzMoJajQ6e+D68gjm+5YvVNqyGKcgn55fl/b9trQRe+ScrZEkfQ== X-Received: by 2002:a05:651c:3c5:: with SMTP id f5mr1285209ljp.209.1598905414977; Mon, 31 Aug 2020 13:23:34 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:34 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 10/12] i2c: tegra: Drop '_timeout' from wait/poll function names Date: Mon, 31 Aug 2020 23:23:01 +0300 Message-Id: <20200831202303.15391-11-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Drop '_timeout' postfix from the wait/poll completion function names in order to make the names shorter, making code cleaner a tad. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 57a3e1a9eef7..8c8f3189928e 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1067,10 +1067,9 @@ static void tegra_i2c_config_fifo_trig(struct tegra_i2c_dev *i2c_dev, i2c_writel(i2c_dev, val, reg); } -static unsigned long -tegra_i2c_poll_completion_timeout(struct tegra_i2c_dev *i2c_dev, - struct completion *complete, - unsigned int timeout_ms) +static unsigned long tegra_i2c_poll_completion(struct tegra_i2c_dev *i2c_dev, + struct completion *complete, + unsigned int timeout_ms) { ktime_t ktime = ktime_get(); ktime_t ktimeout = ktime_add_ms(ktime, timeout_ms); @@ -1094,16 +1093,14 @@ tegra_i2c_poll_completion_timeout(struct tegra_i2c_dev *i2c_dev, return 0; } -static unsigned long -tegra_i2c_wait_completion_timeout(struct tegra_i2c_dev *i2c_dev, - struct completion *complete, - unsigned int timeout_ms) +static unsigned long tegra_i2c_wait_completion(struct tegra_i2c_dev *i2c_dev, + struct completion *complete, + unsigned int timeout_ms) { unsigned long ret; if (i2c_dev->is_curr_atomic_xfer) { - ret = tegra_i2c_poll_completion_timeout(i2c_dev, complete, - timeout_ms); + ret = tegra_i2c_poll_completion(i2c_dev, complete, timeout_ms); } else { enable_irq(i2c_dev->irq); ret = wait_for_completion_timeout(complete, @@ -1121,8 +1118,7 @@ tegra_i2c_wait_completion_timeout(struct tegra_i2c_dev *i2c_dev, * needs to be checked after timeout. */ if (ret == 0) - ret = tegra_i2c_poll_completion_timeout(i2c_dev, - complete, 0); + ret = tegra_i2c_poll_completion(i2c_dev, complete, 0); } return ret; @@ -1149,8 +1145,8 @@ static int tegra_i2c_issue_bus_clear(struct i2c_adapter *adap) i2c_writel(i2c_dev, reg, I2C_BUS_CLEAR_CNFG); tegra_i2c_unmask_irq(i2c_dev, I2C_INT_BUS_CLR_DONE); - time_left = tegra_i2c_wait_completion_timeout( - i2c_dev, &i2c_dev->msg_complete, 50); + time_left = tegra_i2c_wait_completion(i2c_dev, &i2c_dev->msg_complete, + 50); if (time_left == 0) { dev_err(i2c_dev->dev, "timed out for bus clear\n"); return -ETIMEDOUT; @@ -1296,8 +1292,9 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, i2c_readl(i2c_dev, I2C_INT_MASK)); if (dma) { - time_left = tegra_i2c_wait_completion_timeout( - i2c_dev, &i2c_dev->dma_complete, xfer_time); + time_left = tegra_i2c_wait_completion(i2c_dev, + &i2c_dev->dma_complete, + xfer_time); /* * Synchronize DMA first, since dmaengine_terminate_sync() @@ -1328,8 +1325,8 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, } } - time_left = tegra_i2c_wait_completion_timeout( - i2c_dev, &i2c_dev->msg_complete, xfer_time); + time_left = tegra_i2c_wait_completion(i2c_dev, &i2c_dev->msg_complete, + xfer_time); tegra_i2c_mask_irq(i2c_dev, int_mask); From patchwork Mon Aug 31 20:23:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354586 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=fCU/Dx8t; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9b3T6Kz9sTT for ; Tue, 1 Sep 2020 06:24:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728967AbgHaUYB (ORCPT ); Mon, 31 Aug 2020 16:24:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730008AbgHaUXh (ORCPT ); Mon, 31 Aug 2020 16:23:37 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C96CC061573; Mon, 31 Aug 2020 13:23:37 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id h19so8183393ljg.13; Mon, 31 Aug 2020 13:23:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jmovjAY9j0dVZf96aSac3Dc+xJBuOPrZDQWdllUq+pE=; b=fCU/Dx8tvbcoyvNUPtaTDfKJ8A7FbQiEvlY2BmXaOkJS13gveH47Yi45ImNVrGnKZS kKmwhsvSb8Kd13lZayV5/MgrEn+RCeYNtQMJ8yKOfsUFjG9EE045P8TN+BqR3gBSUQ7n 40/RO5jybe72Ty1mQr2Hl97hw0qDX2DuvW0L+F4VIpDZ0tFJ23XzTTYogj1T5Igk2SHH ep9xSMIw93HkfMS3Kri8hgKPrljp4xFiff/MTolx5UpCqiS5mGUmrKSjGl0F8Q+F72+j LT3mwXPwmWt+hOmvIxVGGc1Id9l5J6dQOYvO836o08ynX3JnMHZ2ylUD695qmZyvayf3 UZnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jmovjAY9j0dVZf96aSac3Dc+xJBuOPrZDQWdllUq+pE=; b=RaMmWwmEbLucCfP/Lg6WFEebtGaG/D8HEOCwC8w6aO01qQKhpvgaGRXUNH2yZ6/DE6 PxTvtHu1DY1byW7SpNrILjCXZ71IvhE+NQYqjf9ke1Dwvt3GoOr9bvOS9yMF5loy+cac bjdxhGwFe5cqSgNK1+KZdb1rAMxx17jbWxlDkz0/b5IS5P5SBpLGQLL8gCY74tfTE+Rr 5hs5oBQcjLX0k77iIOckCWzsV3cttjiYeMD+r5UvLIAOKXz2NmVsbAewDLDYTTtAdGXv YN5n/BErmd46PyFtJ2VHj3bVr4s4XCBbJmftK4DYK0WjHpi7C7siUNaYzTNVOBD5YfGW sl3A== X-Gm-Message-State: AOAM530IvnBYqvMNfoavRjzY6qkxGdTETkjSUiFJFIbQfUu8j9MlWTgQ 9ruSmZ1mSYprfE2/uGReqAs= X-Google-Smtp-Source: ABdhPJyDsebouJmCUaVM3mg/nCCMNc4U5uho2p+q/dBV12nLUJ5aUkeoZBXZXWR8y3L8cwD7jisoKw== X-Received: by 2002:a2e:9810:: with SMTP id a16mr1235522ljj.157.1598905415849; Mon, 31 Aug 2020 13:23:35 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:35 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 11/12] i2c: tegra: Remove likely/unlikely from the code Date: Mon, 31 Aug 2020 23:23:02 +0300 Message-Id: <20200831202303.15391-12-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org The likely/unlikely annotations should be used only in a hot paths of performance-critical code. The I2C driver doesn't have such paths, and thus, there is no justification for usage of likely/unlikely annotations in the code. Hence remove them. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 8c8f3189928e..d9b9fe6b5637 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -910,7 +910,7 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) goto err; } - if (unlikely(status & status_err)) { + if (status & status_err) { tegra_i2c_disable_packet_mode(i2c_dev); if (status & I2C_INT_NO_ACK) i2c_dev->msg_err |= I2C_ERR_NO_ACK; @@ -1341,7 +1341,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, i2c_dev->msg_err); i2c_dev->is_curr_dma_xfer = false; - if (likely(i2c_dev->msg_err == I2C_ERR_NONE)) + if (i2c_dev->msg_err == I2C_ERR_NONE) return 0; tegra_i2c_init(i2c_dev, true); From patchwork Mon Aug 31 20:23:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1354581 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=EZzqYpEO; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4BgM9R4dqCz9sTT for ; Tue, 1 Sep 2020 06:23:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730021AbgHaUXm (ORCPT ); Mon, 31 Aug 2020 16:23:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730012AbgHaUXi (ORCPT ); Mon, 31 Aug 2020 16:23:38 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44B06C061755; Mon, 31 Aug 2020 13:23:38 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id t23so8246041ljc.3; Mon, 31 Aug 2020 13:23:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5O0l+Bq/1wXJwQvYBDxAgJWZ0eTWjkmkrvvVOAIAir0=; b=EZzqYpEO992KMUFaPjDM10IzYBgd2wd1BfoO4qpLA88MEuESOvEuC4k4PhwlB6VGLX csjALF/iMczy/bt9yWYAhRDVxsLMKvV88Rq7FOiQJaqekqSBLMy3Lt6fCnp1p76oY0/D MDqm8mw6poUaD8sSSVSdVfK5V6T17bl2Mr02WYIqVmaGSZ+/ZHGJtFlSGTWgcvqqr3ZA rMVheDSxnfBqiTAxVBa4o0c+3mtzgr0TVib4zRVXjb1EMqp30y+Fa8OuQY9XXcHYgKem NhRh7WdHzQe7qpco0xHHcZZ2Wd5OlVYxELWlWhP6MGByLN4Qh8pGUDAY6KcaJk1RJA3v KTdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5O0l+Bq/1wXJwQvYBDxAgJWZ0eTWjkmkrvvVOAIAir0=; b=a53Pc5jbalfo7SFfwbGGzO1RKmGPDxdbL9a5WTlOdUgRKVtUTbxOTFwxhzxGNsTJ72 Sh0JtrgSVl4BLm7chdITX6VM64WN7iiUqLC4gtejeLlQalPha7bdB9UmrxY8t6XEJ+14 m0M+e7auoeKen1fdquOUw/RVajflqZqWW5JAYeSYmBseCWJQEv3dIx726sCOMxcu0Ufu C4KMhwOBq2kDkiX6NHSEDkzR1PwowPo268szYzVzXHaBAJmp4DHniQAx8MCeUvwI8csy 0kX4/S0L/Z39kWAOnQHYWH8MvLaqZS2mlacUXOyrM+xoC6YD6p/JlzG50X2SlYGa+j6b aSOA== X-Gm-Message-State: AOAM533CnObwtYrNbU+84wza2INucIB2Zv15adw6UnLiH4xE42Sc0OCv CJCsOQVteANsQz53mj7AyFc= X-Google-Smtp-Source: ABdhPJxkqPcqa95PPehmNojOvbeYBYkWZ/z5d1pbUE1VKbiuLHKegekHB2uGofevUy1PCMj8dop6PQ== X-Received: by 2002:a2e:7c0f:: with SMTP id x15mr1437701ljc.205.1598905416785; Mon, 31 Aug 2020 13:23:36 -0700 (PDT) Received: from localhost.localdomain (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.gmail.com with ESMTPSA id z20sm1769054ljk.97.2020.08.31.13.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 13:23:36 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Laxman Dewangan , Wolfram Sang Cc: linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 12/12] i2c: tegra: Factor out error recovery from tegra_i2c_xfer_msg() Date: Mon, 31 Aug 2020 23:23:03 +0300 Message-Id: <20200831202303.15391-13-digetx@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200831202303.15391-1-digetx@gmail.com> References: <20200831202303.15391-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Factor out error recovery code from tegra_i2c_xfer_msg() in order to make this function easier to read and follow. Signed-off-by: Dmitry Osipenko --- drivers/i2c/busses/i2c-tegra.c | 46 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index d9b9fe6b5637..c2803fe9d834 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1161,6 +1161,32 @@ static int tegra_i2c_issue_bus_clear(struct i2c_adapter *adap) return -EAGAIN; } +static int tegra_i2c_error_recover(struct tegra_i2c_dev *i2c_dev, + struct i2c_msg *msg) +{ + if (i2c_dev->msg_err == I2C_ERR_NONE) + return 0; + + tegra_i2c_init(i2c_dev, true); + + /* start recovery upon arbitration loss in single master mode */ + if (i2c_dev->msg_err == I2C_ERR_ARBITRATION_LOST) { + if (!i2c_dev->is_multimaster_mode) + return i2c_recover_bus(&i2c_dev->adapter); + + return -EAGAIN; + } + + if (i2c_dev->msg_err == I2C_ERR_NO_ACK) { + if (msg->flags & I2C_M_IGNORE_NAK) + return 0; + + return -EREMOTEIO; + } + + return -EIO; +} + static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, struct i2c_msg *msg, enum msg_end_type end_state) @@ -1341,24 +1367,12 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, i2c_dev->msg_err); i2c_dev->is_curr_dma_xfer = false; - if (i2c_dev->msg_err == I2C_ERR_NONE) - return 0; - tegra_i2c_init(i2c_dev, true); - /* start recovery upon arbitration loss in single master mode */ - if (i2c_dev->msg_err == I2C_ERR_ARBITRATION_LOST) { - if (!i2c_dev->is_multimaster_mode) - return i2c_recover_bus(&i2c_dev->adapter); - return -EAGAIN; - } - - if (i2c_dev->msg_err == I2C_ERR_NO_ACK) { - if (msg->flags & I2C_M_IGNORE_NAK) - return 0; - return -EREMOTEIO; - } + err = tegra_i2c_error_recover(i2c_dev, msg); + if (err) + return err; - return -EIO; + return 0; } static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],