From patchwork Fri Aug 14 15:50:44 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sifan Naeem X-Patchwork-Id: 507481 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 F325D140293 for ; Sat, 15 Aug 2015 01:48:15 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755469AbbHNPsJ (ORCPT ); Fri, 14 Aug 2015 11:48:09 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:47573 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755464AbbHNPsH (ORCPT ); Fri, 14 Aug 2015 11:48:07 -0400 Received: from KLMAIL01.kl.imgtec.org (unknown [192.168.5.35]) by Websense Email Security Gateway with ESMTPS id 9E559C994A16A; Fri, 14 Aug 2015 16:48:03 +0100 (IST) Received: from hhmail02.hh.imgtec.org (10.100.10.20) by KLMAIL01.kl.imgtec.org (192.168.5.35) with Microsoft SMTP Server (TLS) id 14.3.195.1; Fri, 14 Aug 2015 16:48:06 +0100 Received: from iw-build-3.kl.imgtec.org (192.168.167.63) by hhmail02.hh.imgtec.org (10.100.10.20) with Microsoft SMTP Server (TLS) id 14.3.235.1; Fri, 14 Aug 2015 16:48:05 +0100 From: Sifan Naeem To: Wolfram Sang , James Hogan , , Ezequiel Garcia CC: Ionela Voinescu , Sifan Naeem Subject: [PATCH v2 3/5] i2c: img-scb: add handle for stop detected interrupt Date: Fri, 14 Aug 2015 16:50:44 +0100 Message-ID: <1439567447-8139-4-git-send-email-sifan.naeem@imgtec.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1439567447-8139-1-git-send-email-sifan.naeem@imgtec.com> References: <1439567447-8139-1-git-send-email-sifan.naeem@imgtec.com> MIME-Version: 1.0 X-Originating-IP: [192.168.167.63] Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Stop Detected interrupt is triggered when a Stop bit is detected on the bus, which indicates the end of the current transfer. When the end of a transfer is indicated by the Stop Detected interrupt, drain the FIFO and signal completion for the transaction. But if the interrupt was triggered before all data is written to the fifo or with more data expected return error with transfer complete signal. Halting the bus is no longer necessary after a stop bit is detected on the bus, as there cannot be a repeated start transfer when the stop bit has been issued, hence remove the transaction halt bit. Signed-off-by: Sifan Naeem --- drivers/i2c/busses/i2c-img-scb.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-img-scb.c b/drivers/i2c/busses/i2c-img-scb.c index 75a44e794d75..17e13ff475bb 100644 --- a/drivers/i2c/busses/i2c-img-scb.c +++ b/drivers/i2c/busses/i2c-img-scb.c @@ -152,6 +152,7 @@ #define INT_TRANSACTION_DONE BIT(15) #define INT_SLAVE_EVENT BIT(16) #define INT_TIMING BIT(18) +#define INT_STOP_DETECTED BIT(19) #define INT_FIFO_FULL_FILLING (INT_FIFO_FULL | INT_FIFO_FILLING) @@ -175,7 +176,8 @@ INT_WRITE_ACK_ERR | \ INT_FIFO_FULL | \ INT_FIFO_FILLING | \ - INT_FIFO_EMPTY) + INT_FIFO_EMPTY | \ + INT_STOP_DETECTED) #define INT_ENABLE_MASK_WAITSTOP (INT_SLAVE_EVENT | \ INT_ADDR_ACK_ERR | \ @@ -873,6 +875,13 @@ static unsigned int img_i2c_auto(struct img_i2c *i2c, mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); + if (int_status & INT_STOP_DETECTED) { + /* Drain remaining data in FIFO and complete transaction */ + if (i2c->msg.flags & I2C_M_RD) + img_i2c_read_fifo(i2c); + return ISR_COMPLETE(0); + } + if (i2c->msg.flags & I2C_M_RD) { if (int_status & INT_FIFO_FULL_FILLING) { img_i2c_read_fifo(i2c);