From patchwork Sat Mar 11 18:24:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 737719 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vgXbp2pXdz9s2s for ; Sun, 12 Mar 2017 05:24:54 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vQ2vnELb"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933093AbdCKSYy (ORCPT ); Sat, 11 Mar 2017 13:24:54 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:36631 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932743AbdCKSYx (ORCPT ); Sat, 11 Mar 2017 13:24:53 -0500 Received: by mail-wr0-f196.google.com with SMTP id l37so15221732wrc.3 for ; Sat, 11 Mar 2017 10:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:references:cc:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=09q0sReMtUT83aec66Da6hyo2iMnVpQqlPVwEcxX2kg=; b=vQ2vnELbzQPI5KO8o41qJt/OVzINKKaElG+hSwkGRXgpRZzfEFTjZpz5szTInvvpIF w5CFVC9aEr3TVuLuXvbf+lTQIPqKK7WGCeXe0VlCRTA+2PifroAVjZZWdi76ad7J5Vk9 Wn7v/hRyeU7gKCCZ6h6OJxNYQkcQthS5gWAQh1NVWeovTMzwkHEPi9pJyjX/oN8Ks5PK K2JW+RYn693ipbm211gzZNR128l1Jf3LO3BCZ4TZL6MgOLrfvQkgJl+W1D7E2zQRSsXS zahjx2tO4bI817G/lyL3YQRrl6hIv8Big8Wg6H1yppTPybM8OG/geYZXNo5GaP8xjrqe hWSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:references:cc:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=09q0sReMtUT83aec66Da6hyo2iMnVpQqlPVwEcxX2kg=; b=OtS9q6RdZ1z/KC4/i5+ur93ogtSs+89CFQ68VSuZoTS23jSNuQ2+A5dVYzetVKyaB+ /tvkkzg508BVEWZgeBEGwzB/QkeYL2068ZPsAZmCOoPYUbjsbpNv8jyb6VAuAjuMT6Ye c7QKs4sFP4dAKcRdOQb6R0ByfgduviM5GKip1UD39BV7VwRgsRvC+jf+jShG5VdzKXeR JCZdBcMCJ1JlG6KI9azOJHU5JE+LTfz2Wpc5GDo9mEBdXIEzihX9hpVW3i5EfNkmpkLb QRM78zCDQo/F3omMc0/lO9Q8y23cy8+UcFeNfROWvywdZdwszvUzHvZU0HtF608RVD81 irsQ== X-Gm-Message-State: AMke39mBkZZqTj6D2TVbzfmTwTBNZDfx+bJN73IkivzUAb58oJmXPdByLZvX1JsjfZsQIw== X-Received: by 10.223.144.209 with SMTP id i75mr20651099wri.51.1489256691390; Sat, 11 Mar 2017 10:24:51 -0800 (PST) Received: from ?IPv6:2003:c6:ebdc:4000:3419:a191:120:8b2e? (p200300C6EBDC40003419A19101208B2E.dip0.t-ipconnect.de. [2003:c6:ebdc:4000:3419:a191:120:8b2e]) by smtp.googlemail.com with ESMTPSA id s26sm18225999wra.66.2017.03.11.10.24.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 Mar 2017 10:24:51 -0800 (PST) From: Heiner Kallweit Subject: [PATCH v3 08/10] i2c: meson: don't create separate token chain just for the stop command To: Wolfram Sang , Jerome Brunet References: Cc: "linux-i2c@vger.kernel.org" , linux-amlogic@lists.infradead.org Message-ID: <814b4558-e3ec-7342-dd39-06d6af87573f@gmail.com> Date: Sat, 11 Mar 2017 19:24:10 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org We can directly add the stop token to the token chain including the last transfer chunk. This is more efficient than creating a separate token chain just for the stop command. And it allows us to get rid of state STATE_STOP completely. Signed-off-by: Heiner Kallweit --- v2: - rebased v3: - no changes --- drivers/i2c/busses/i2c-meson.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/drivers/i2c/busses/i2c-meson.c b/drivers/i2c/busses/i2c-meson.c index 0b09e059..6c873ed8 100644 --- a/drivers/i2c/busses/i2c-meson.c +++ b/drivers/i2c/busses/i2c-meson.c @@ -55,7 +55,6 @@ enum { STATE_IDLE, STATE_READ, STATE_WRITE, - STATE_STOP, }; /** @@ -205,19 +204,9 @@ static void meson_i2c_prepare_xfer(struct meson_i2c *i2c) if (write) meson_i2c_put_data(i2c, i2c->msg->buf + i2c->pos, i2c->count); -} - -static void meson_i2c_stop(struct meson_i2c *i2c) -{ - dev_dbg(i2c->dev, "%s: last %d\n", __func__, i2c->last); - if (i2c->last) { - i2c->state = STATE_STOP; + if (i2c->last && i2c->pos + i2c->count >= i2c->msg->len) meson_i2c_add_token(i2c, TOKEN_STOP); - } else { - i2c->state = STATE_IDLE; - complete(&i2c->done); - } } static irqreturn_t meson_i2c_irq(int irqno, void *dev_id) @@ -262,7 +251,8 @@ static irqreturn_t meson_i2c_irq(int irqno, void *dev_id) } if (i2c->pos >= i2c->msg->len) { - meson_i2c_stop(i2c); + i2c->state = STATE_IDLE; + complete(&i2c->done); break; } @@ -272,16 +262,13 @@ static irqreturn_t meson_i2c_irq(int irqno, void *dev_id) i2c->pos += i2c->count; if (i2c->pos >= i2c->msg->len) { - meson_i2c_stop(i2c); + i2c->state = STATE_IDLE; + complete(&i2c->done); break; } meson_i2c_prepare_xfer(i2c); break; - case STATE_STOP: - i2c->state = STATE_IDLE; - complete(&i2c->done); - break; } out: