From patchwork Thu Mar 9 06:56:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 736847 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 3vf1k54QBmz9sNK for ; Thu, 9 Mar 2017 18:10:05 +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="hL7jzsDt"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750724AbdCIHKC (ORCPT ); Thu, 9 Mar 2017 02:10:02 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33624 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750793AbdCIHKA (ORCPT ); Thu, 9 Mar 2017 02:10:00 -0500 Received: by mail-wm0-f68.google.com with SMTP id n11so9406394wma.0 for ; Wed, 08 Mar 2017 23:09:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=SjXnVHidD3tuwJoOO3aabHMgwWn5gdYH62dCyP/g2Lk=; b=hL7jzsDtDRdvTMrc/4qfZvZcpQZ5OAKJ0Nz2eERs2lTD9o3IPFdthzfxUdVsnBpubt tEjUmpdrWP20MO3JHEOeTSnpYgLK4uDVgPUyPyEB+2FfKUiY3Nb1MRSD+ICi3DxfmhAX Sz3F4hGWKVghByHQtTIresmoIHLsxEYLbMV8oRQvsMDspdpL277S/czS1/SQu0Vsy1ym R9dbXtWCPKdQLOEA7XXCizydrbOjxg2L+YaP5Jf/RuMuNeCjXZX3V4NpOoPOKf4QfSiB jlwUy9347XogfcY6yZ5q7zTWpLF4Q7+kiJvjz2NY8bGazU6Syq7y09C/YMJuhn5EaTBW cvHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=SjXnVHidD3tuwJoOO3aabHMgwWn5gdYH62dCyP/g2Lk=; b=CulvGMUexeu/Pa5OdHUhY2lrFqSM461QsMo6QN20dozQZ0uuy5TQPDpW8S9I8rVOC2 tWFjDEez7xf66XPUiq8niO9mTogPDabHurHfsnxpKCLBtD3+aEXoICETjNEhw915FK4y 9QRqYiewJ6o2Md1w6XjM3vke3huTyZMcT9jVb++w01170zzfs46JIQ5TvIkyPad2E5kt 32xruOrR2LgAMX1wxESkvzldqGruhDvtB4oP9so0S+zEg0ZQdqapk8VDxuNTjJZOzi8l 7FOY/aEb9nv4EFadcYl9aY1zbbJyupjA+ZNbSvzj3cs5jCvlXp2SUzpB61Y4C4gy90Uz qHfQ== X-Gm-Message-State: AMke39k0Sd51WsLM1tlcjXUOq+HYVOU5A7lM+EyNZOrOKbE2jlo03brNg1xCokstJT3oMA== X-Received: by 10.28.136.68 with SMTP id k65mr27327733wmd.48.1489042908692; Wed, 08 Mar 2017 23:01:48 -0800 (PST) Received: from ?IPv6:2003:c6:ebdc:4000:b589:624b:5134:aa75? (p200300C6EBDC4000B589624B5134AA75.dip0.t-ipconnect.de. [2003:c6:ebdc:4000:b589:624b:5134:aa75]) by smtp.googlemail.com with ESMTPSA id w130sm5397327wmg.0.2017.03.08.23.01.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 08 Mar 2017 23:01:48 -0800 (PST) Subject: [PATCH v2 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 From: Heiner Kallweit Message-ID: Date: Thu, 9 Mar 2017 07:56:49 +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 --- 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 74d433cd..3e6f5e50 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: