Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp498441pxu; Wed, 7 Oct 2020 08:26:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2WPXiIdWuXK5+N5lM50MopdkVm7/FWNlH4mByvQHYp53d0z4itRIBErT74aWs5NO/dl0S X-Received: by 2002:aa7:d488:: with SMTP id b8mr4025033edr.21.1602084378908; Wed, 07 Oct 2020 08:26:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602084378; cv=none; d=google.com; s=arc-20160816; b=a0oM9JFfpQrLfj7S6qBpa2OtjBHXUW/YSN+4Y2wpl71vis7St3TvGFpy54LDbXXint Rp1KB/vFxmqrRylIepGItqKHGUpOsIVonCVuJJm06u6d2rAq0MkFxtXvIwzlE7AluaJq /0889/+5uZv4cptKmn85pAI7d4I21zrPpVehYJQ7Mje3XxNhaTgWk8GYoQj7JAQfBSc5 W0DRRjC9UvlwInJabesgAdqG4EB7DGgK6kZ5xp5JpzEaWArU4ww4CroUl0JDEfCfNccP KyMvOoOBLT2OZmR9D9+10PB2IyE6mp7CnYddrZa8vyZ+oI3UHNvvbk8jMkIKVi5K+TvM 7HLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=rNQYMOjlq1aKIAzyaHLCSq9n+JTeYHmlVEQY1yVQKVE=; b=smj/M+W7s35zWXUHFWueutXZMWPo1YkNPffPIqnmybS6r7rvzKlICeh8p/lXIuVcOd urQ4vMgz9p9zOWPbjum3rIHuF31bU+p9dMvvrS9mlE5lauQibAgLFFYtzVFIPvkQ9vX1 EXAWdSSBahlme0l1SQVNFCvTukEJJ4BRSggN1z/AQomn/ZX4iT0Z/W1/PNADpenaDl1T Kl395Uv7EO1S9hm7QR4SYYzYL9/0RziVoG3cKG4UkgA2eGG7t/UY6Hp8qxujJ02ns7nO oZwjTGxvf2Mfs7CPTnbeeW9yRkIE0nu57lFnEZpmPChuxVY8qzUA03W1saYApRzyXHz3 ybTA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id rn19si1617786ejb.340.2020.10.07.08.25.56; Wed, 07 Oct 2020 08:26:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727852AbgJGIrv (ORCPT + 99 others); Wed, 7 Oct 2020 04:47:51 -0400 Received: from mailout07.rmx.de ([94.199.90.95]:41137 "EHLO mailout07.rmx.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726218AbgJGIrv (ORCPT ); Wed, 7 Oct 2020 04:47:51 -0400 Received: from kdin02.retarus.com (kdin02.dmz1.retloc [172.19.17.49]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mailout07.rmx.de (Postfix) with ESMTPS id 4C5nz56dJWzBvZd; Wed, 7 Oct 2020 10:47:45 +0200 (CEST) Received: from mta.arri.de (unknown [217.111.95.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by kdin02.retarus.com (Postfix) with ESMTPS id 4C5nxy6PCwz2TTLm; Wed, 7 Oct 2020 10:46:46 +0200 (CEST) Received: from N95HX1G2.wgnetz.xx (192.168.54.119) by mta.arri.de (192.168.100.104) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 7 Oct 2020 10:46:21 +0200 From: Christian Eggers To: Oleksij Rempel , Shawn Guo , Sascha Hauer , Fabio Estevam , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , "David Laight" CC: Pengutronix Kernel Team , NXP Linux Team , , , , Christian Eggers , Krzysztof Kozlowski , Subject: [PATCH v5 1/3] i2c: imx: Fix reset of I2SR_IAL flag Date: Wed, 7 Oct 2020 10:45:22 +0200 Message-ID: <20201007084524.10835-2-ceggers@arri.de> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201007084524.10835-1-ceggers@arri.de> References: <20201007084524.10835-1-ceggers@arri.de> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [192.168.54.119] X-RMX-ID: 20201007-104650-4C5nxy6PCwz2TTLm-0@kdin02 X-RMX-SOURCE: 217.111.95.66 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org According to the "VFxxx Controller Reference Manual" (and the comment block starting at line 97), Vybrid requires writing a one for clearing an interrupt flag. Syncing the method for clearing I2SR_IIF in i2c_imx_isr(). Signed-off-by: Christian Eggers Fixes: 4b775022f6fd ("i2c: imx: add struct to hold more configurable quirks") Reviewed-by: Uwe Kleine-König Cc: stable@vger.kernel.org --- drivers/i2c/busses/i2c-imx.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 0ab5381aa012..cbdcab73a055 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -412,6 +412,19 @@ static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) dma->chan_using = NULL; } +static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) +{ + unsigned int temp; + + /* + * i2sr_clr_opcode is the value to clear all interrupts. Here we want to + * clear only , so we write ~i2sr_clr_opcode with just + * toggled. This is required because i.MX needs W1C and Vybrid uses W0C. + */ + temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); +} + static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) { unsigned long orig_jiffies = jiffies; @@ -424,8 +437,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool a /* check for arbitration lost */ if (temp & I2SR_IAL) { - temp &= ~I2SR_IAL; - imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); + i2c_imx_clear_irq(i2c_imx, I2SR_IAL); return -EAGAIN; } @@ -623,9 +635,7 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id) if (temp & I2SR_IIF) { /* save status register */ i2c_imx->i2csr = temp; - temp &= ~I2SR_IIF; - temp |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF); - imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); + i2c_imx_clear_irq(i2c_imx, I2SR_IIF); wake_up(&i2c_imx->queue); return IRQ_HANDLED; } -- Christian Eggers Embedded software developer Arnold & Richter Cine Technik GmbH & Co. Betriebs KG Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRA 57918 Persoenlich haftender Gesellschafter: Arnold & Richter Cine Technik GmbH Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRB 54477 Geschaeftsfuehrer: Dr. Michael Neuhaeuser; Stephan Schenk; Walter Trauninger; Markus Zeiler