From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2C77C433F5 for ; Thu, 18 Nov 2021 10:57:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AF58161548 for ; Thu, 18 Nov 2021 10:57:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343535AbhKRLAG (ORCPT ); Thu, 18 Nov 2021 06:00:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:31378 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245681AbhKRLAE (ORCPT ); Thu, 18 Nov 2021 06:00:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1637233023; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=TFJT39/WGFMZxv8SO8aQbFb6I5VtsxS8mYP9w5nJmmU=; b=LVvG+jMqDFsQOrglcz1Pq1/thnrkS8jWHduaO6gqHDODHLxMjKkS1kAFoUqTcKwiaozdzL 3OBr6/TEZxhXsdp3eL3bD9R6GEW6fiZYlI6b1mpXg7/JB5GQJj9IJFZ3b3BBefZnuaLinI m7Rs/lyGC+S+rKBI2sSP7xXibK12Ou0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-338-cm2N0JgAPwSfLuLoV0iGMg-1; Thu, 18 Nov 2021 05:57:00 -0500 X-MC-Unique: cm2N0JgAPwSfLuLoV0iGMg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 75353100C66A; Thu, 18 Nov 2021 10:56:59 +0000 (UTC) Received: from x1.localdomain (unknown [10.39.195.190]) by smtp.corp.redhat.com (Postfix) with ESMTP id DAB5D56A86; Thu, 18 Nov 2021 10:56:51 +0000 (UTC) From: Hans de Goede To: Mika Westerberg , Andy Shevchenko , Linus Walleij Cc: Hans de Goede , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, Yauhen Kharuzhy Subject: [PATCH v2 1/3] pinctrl: cherryview: Don't use pin/offset 0 to mark an interrupt line as unused Date: Thu, 18 Nov 2021 11:56:48 +0100 Message-Id: <20211118105650.207638-1-hdegoede@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Offset/pin 0 is a perfectly valid offset, so stop using it to have the special meaning of interrupt line not used in the intr_lines. Instead introduce a new special INTR_LINE_UNUSED value which is never a valid offset and use that to indicate unused interrupt lines. Cc: Yauhen Kharuzhy Signed-off-by: Hans de Goede --- Changes in v2: - Reword commit + log messages a bit (as requested by Mika) --- drivers/pinctrl/intel/pinctrl-cherryview.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c index 980099028cf8..55ccdcecd94e 100644 --- a/drivers/pinctrl/intel/pinctrl-cherryview.c +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c @@ -73,6 +73,8 @@ struct intel_pad_context { u32 padctrl1; }; +#define INTR_LINE_UNUSED U32_MAX + /** * struct intel_community_context - community context for Cherryview * @intr_lines: Mapping between 16 HW interrupt wires and GPIO offset (in GPIO number space) @@ -812,7 +814,7 @@ static int chv_gpio_request_enable(struct pinctrl_dev *pctldev, /* Reset the interrupt mapping */ for (i = 0; i < ARRAY_SIZE(cctx->intr_lines); i++) { if (cctx->intr_lines[i] == offset) { - cctx->intr_lines[i] = 0; + cctx->intr_lines[i] = INTR_LINE_UNUSED; break; } } @@ -1319,7 +1321,7 @@ static unsigned chv_gpio_irq_startup(struct irq_data *d) else handler = handle_edge_irq; - if (!cctx->intr_lines[intsel]) { + if (cctx->intr_lines[intsel] == INTR_LINE_UNUSED) { irq_set_handler_locked(d, handler); cctx->intr_lines[intsel] = pin; } @@ -1412,6 +1414,12 @@ static void chv_gpio_irq_handler(struct irq_desc *desc) unsigned int offset; offset = cctx->intr_lines[intr_line]; + if (offset == INTR_LINE_UNUSED) { + dev_err(pctrl->dev, "interrupt on unused interrupt line %u\n", + intr_line); + continue; + } + generic_handle_domain_irq(gc->irq.domain, offset); } @@ -1620,9 +1628,10 @@ static int chv_pinctrl_probe(struct platform_device *pdev) struct intel_community *community; struct device *dev = &pdev->dev; struct acpi_device *adev = ACPI_COMPANION(dev); + struct intel_community_context *cctx; struct intel_pinctrl *pctrl; acpi_status status; - int ret, irq; + int i, ret, irq; soc_data = intel_pinctrl_get_soc_data(pdev); if (IS_ERR(soc_data)) @@ -1663,6 +1672,10 @@ static int chv_pinctrl_probe(struct platform_device *pdev) if (!pctrl->context.communities) return -ENOMEM; + cctx = &pctrl->context.communities[0]; + for (i = 0; i < ARRAY_SIZE(cctx->intr_lines); i++) + cctx->intr_lines[i] = INTR_LINE_UNUSED; + irq = platform_get_irq(pdev, 0); if (irq < 0) return irq; -- 2.31.1