Received: by 10.223.185.116 with SMTP id b49csp3038698wrg; Mon, 5 Mar 2018 12:59:46 -0800 (PST) X-Google-Smtp-Source: AG47ELtiiZOCNUcB2cS94veVWAADt8gQTKQIi7YwlQ3+0DR1W2IuMEmCiKwTW7WebPYA/0FpsNYr X-Received: by 2002:a17:902:a985:: with SMTP id bh5-v6mr8594161plb.35.1520283586807; Mon, 05 Mar 2018 12:59:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520283586; cv=none; d=google.com; s=arc-20160816; b=lWZIMQIu33hZTR2E88+sQr5IiFqpd0MJ0/3UdBfIegcgX55fH9xbtw1ONBoozqAPLX qTXowgznbCvnNERf+JoecKq2OobV9fF2Y5ngAwst6rr+jpJSLuhEC7vD9dmEI9ILVrfm s8oOK/RFqGPCl3MZ5HVEAyb7ITH0oLNb54zEpSU5O7iZWMXDi1LWH+BXkuHm6UgLg+2C JgaqZ5HiOtkk7dEO4s2rS2PY6HqM+PW81STcBifmWmLEyQvOskRR7r4LKgwH7h/dlRWc 1gJv1KLuA1BnnR0c5U2Jgn4z4Tl19AKd/2u0s9NRNt8L0XRpEWLms9a64n0eqa/yGTqW R1Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=yRx73NE/miEZb9IpCW0MvYQDqvLIGfdCwfDJ0T3G7Po=; b=na5mt5q8bBaXTF1Pw/oM0IsaQyC5AGGUUA4vq0Btefa9zi6NkGB9H/Bc3+hBvTwHiu xm3IppuZlEOv9Y79RgWJap7Qd78fuXARJiFgvRjDNib8cf798azU3I4h8+wrxgRKbKzU 6iWGRuFbHry0KhtOBSu7CLBRw0h5iBOUEJLOan4VP95D9zvG2j1lWrhDfwEM1nTlFQy+ ogfgprFRPTfgPhpx9Vn3zCtyej9r60+vTHAIP4m73VXejvj4FzAu/RhlQicg0VZunqfv Vdrwe2Pz651w7DaB4O1UWqdldfHKqZlsqm7P7b+yJnIpNw+0CX1eJctUzQQYRRRTNcuV 6SpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gateworks-com.20150623.gappssmtp.com header.s=20150623 header.b=0HM94LX8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m12-v6si6761545pls.74.2018.03.05.12.59.32; Mon, 05 Mar 2018 12:59:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gateworks-com.20150623.gappssmtp.com header.s=20150623 header.b=0HM94LX8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752975AbeCEU6J (ORCPT + 99 others); Mon, 5 Mar 2018 15:58:09 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:44990 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932567AbeCEU6H (ORCPT ); Mon, 5 Mar 2018 15:58:07 -0500 Received: by mail-pl0-f65.google.com with SMTP id 9-v6so4932526ple.11 for ; Mon, 05 Mar 2018 12:58:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=yRx73NE/miEZb9IpCW0MvYQDqvLIGfdCwfDJ0T3G7Po=; b=0HM94LX8Al3rEbOk7qKcAykI862Hvpm9QnvO8KD+BXi+VjMv7KyLLSIvsbEAmkQ0Xz 40dciisXtA3RAQgApvnNTFF+yMV6GmVmz7s61HfgcdWvbBARXMWpXkVopYOmjb8Qz02/ Y2TSt7wiwn+9PcXqIojoUJR1ltGcd7spk4WMOzXC++ATu0duol9SP+NKP+jRLpFwAi6M SXhFR9N7kKu1/RpwUUUMd+bASxhzkKLg1zR+a0odSK5D6K82UTAoJzIj+4ZdKjCP0vd/ wAkRrYEYj/dLN8hTZwLS4sFI7XKNDx9R0lop7sWsG2+Oe95QdAlz1fm/xo6AEVJKktmY cifA== 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; bh=yRx73NE/miEZb9IpCW0MvYQDqvLIGfdCwfDJ0T3G7Po=; b=QpY52BxVsFcjClU7Z/JOvjawbIu2JFyKH6dN13+xi2zi/DP38xNUqhizwsokMqD7Zl pdxCJujvctsyzLlBgaOrAo0TUsfocm5mCQox2VFZzzZlLV/dZ/AK1ZGt+88UZIKqzHjT mr56jdlTZQwUrAnVTnZsTw71p41LiLTemwmkJkkMGcYy2mhB2rz4WtxfutkUpHICuhT/ rT+zreR4e9JHBNHg9wQ2XHFK4iz9MJd8xaYNk4t6oYVutdbPOO/HDO+mUEq3Ae6Bgi7G AtQr2hGu/vZCNslUoHMFI4Aupuse3JY7farraOpw8O6HQXiudYH9XT0kcBtWI5YTIrpT OMgw== X-Gm-Message-State: APf1xPCyPsPo8eUP3tPzAW1fi5xGl8hgmfugpjf7dOhRL7ZVylsCrc6t w4ZtJC+RXthvNMMtuQ+AbNyi7YFj X-Received: by 2002:a17:902:7445:: with SMTP id e5-v6mr14257462plt.204.1520283485950; Mon, 05 Mar 2018 12:58:05 -0800 (PST) Received: from tharvey.pdc.gateworks.com (68-189-91-139.static.snlo.ca.charter.com. [68.189.91.139]) by smtp.gmail.com with ESMTPSA id m190sm21153143pga.42.2018.03.05.12.58.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 05 Mar 2018 12:58:04 -0800 (PST) From: Tim Harvey To: linux-kernel@vger.kernel.org, Mark Brown , Benjamin Gaignard , Lee Jones , Tony Lindgren Cc: Guo Zeng Subject: [PATCH v2] regmap: irq: fix ack-invert Date: Mon, 5 Mar 2018 12:57:37 -0800 Message-Id: <1520283457-31637-1-git-send-email-tharvey@gateworks.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When acking irqs we need to take into account the ack-invert case. Without this chips that require 0's to ACK interrupts will never clear the interrupt. By using regmap_irq_update_bits to ACK the interrupts we use the masked status bits so we take care not to affect any other bits then use ack_invert to determine if we clear or set those bits. The only user of ack_invert currently appears to be the motorola-cpcap driver which we find is incorrectly setting ack_invert and thus we fix that at the same time as otherwise it would break. Cc: Guo Zeng Cc: Benjamin Gaignard Cc: Lee Jones Cc: Tony Lindgren Signed-off-by: Tim Harvey --- v2: - use regmap_irq_update_bits for readability as well as taking into account only affecting bits we are acking - add fix for affected motorola-cpcap driver --- drivers/base/regmap/regmap-irq.c | 5 ++++- drivers/mfd/motorola-cpcap.c | 3 --- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c index 429ca8e..840cadee 100644 --- a/drivers/base/regmap/regmap-irq.c +++ b/drivers/base/regmap/regmap-irq.c @@ -360,7 +360,10 @@ static irqreturn_t regmap_irq_thread(int irq, void *d) if (data->status_buf[i] && (chip->ack_base || chip->use_ack)) { reg = chip->ack_base + (i * map->reg_stride * data->irq_reg_stride); - ret = regmap_write(map, reg, data->status_buf[i]); + ret = regmap_irq_update_bits(d, reg, + data->status_buf[i], + chip->ack_invert ? + 0x00 : 0xFF); if (ret != 0) dev_err(map->dev, "Failed to ack 0x%x: %d\n", reg, ret); diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c index d2cc1ea..59082cf 100644 --- a/drivers/mfd/motorola-cpcap.c +++ b/drivers/mfd/motorola-cpcap.c @@ -99,7 +99,6 @@ static struct regmap_irq_chip cpcap_irq_chip[CPCAP_NR_IRQ_CHIPS] = { .ack_base = CPCAP_REG_MI1, .mask_base = CPCAP_REG_MIM1, .use_ack = true, - .ack_invert = true, }, { .name = "cpcap-m2", @@ -108,7 +107,6 @@ static struct regmap_irq_chip cpcap_irq_chip[CPCAP_NR_IRQ_CHIPS] = { .ack_base = CPCAP_REG_MI2, .mask_base = CPCAP_REG_MIM2, .use_ack = true, - .ack_invert = true, }, { .name = "cpcap1-4", @@ -117,7 +115,6 @@ static struct regmap_irq_chip cpcap_irq_chip[CPCAP_NR_IRQ_CHIPS] = { .ack_base = CPCAP_REG_INT1, .mask_base = CPCAP_REG_INTM1, .use_ack = true, - .ack_invert = true, }, }; -- 2.7.4