From patchwork Mon Feb 11 19:01:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enrico Granata X-Patchwork-Id: 10806705 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 900FE6C2 for ; Mon, 11 Feb 2019 19:01:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7FC58293A8 for ; Mon, 11 Feb 2019 19:01:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7362B2AE23; Mon, 11 Feb 2019 19:01:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 07E66293A8 for ; Mon, 11 Feb 2019 19:01:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387397AbfBKTBR (ORCPT ); Mon, 11 Feb 2019 14:01:17 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:38082 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733294AbfBKTBR (ORCPT ); Mon, 11 Feb 2019 14:01:17 -0500 Received: by mail-pf1-f193.google.com with SMTP id q1so5684429pfi.5 for ; Mon, 11 Feb 2019 11:01:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ospWOkK/asl+2XUsQlMJFKpsi9hzWjjt+jhjOjpJePI=; b=cPrdr72Kr46b07xpUQKaCG7VTFOHLxgcw45o9iw78EhuSq7MrWyovKXYsbT1a4Opkh 34TWfkx3SN4fwpRBy0nuoPsIbVAH4sR0fPSl76R3+KoOHMQQ7cPgWu3+aOI+szFQmiCV FJ59yNb8z42cC15frnhqLLeFhkijlhl6IdKX0= 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=ospWOkK/asl+2XUsQlMJFKpsi9hzWjjt+jhjOjpJePI=; b=oNC+jGTPdiv+H9vMWWO5Z5G8pvNeNev1Kue96Yu34PtUKwY6UxCGqgUT4JESVh/sQu h7fmIWAOhwD3YrImeq3bdY3OoAM+jd88jEVwBItrO6DOHE5NTM9SigKqCDCkFGrP+KsA bxA+KXyxIph7qJ1h7xE/nqnnOkBbvdIKxAQBVmzcpscaez6CPPxxeHW8JsPMd5Vp7zx5 ikKrbsO3kq8f8aaRh06L/Ouhom1ANWrngzmR6+tklJOi6jRnpbBpCAiuefP8VSMTuyNP BmatPYVLN/LlmzsdrGjgU3ty3oj+7KHeAZbjfgTIPNjV4+NjGQn2JaRqqd9gzS/lvvCN lFog== X-Gm-Message-State: AHQUAuaftm9kRl5cld2j+grYy7nj0ixutxWVkd+2vex9s+YNZbbX380X zTztAHBFgtJ4pZUF/OXq5DblXA== X-Google-Smtp-Source: AHgI3IaBVulANnnt7/Hga9dkaw0EBHRVy/8a59aq7GsateTny2FVQHpSAUn1T9iDVh4zv2fqS+aVHA== X-Received: by 2002:a63:2ad4:: with SMTP id q203mr10550084pgq.43.1549911676251; Mon, 11 Feb 2019 11:01:16 -0800 (PST) Received: from egranata0.mtv.corp.google.com ([2620:15c:202:1:e209:54cf:7c16:6776]) by smtp.gmail.com with ESMTPSA id k66sm976877pgc.24.2019.02.11.11.01.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Feb 2019 11:01:15 -0800 (PST) From: egranata@chromium.org To: hdegoede@redhat.com, mika.westerberg@linux.intel.com, dtor@chromium.org, andy.shevchenko@gmail.com, rafael@kernel.org, gregkh@linuxfoundation.org, enric.balletbo@collabora.com, linux-kernel@vger.kernel.org, gwendal@chromium.org, linux-acpi@vger.kernel.org, briannorris@chromium.org, andriy.shevchenko@linux.intel.com Cc: egranata@google.com, Enrico Granata Subject: [PATCH v2] driver: platform: Support parsing GpioInt 0 in platform_get_irq() Date: Mon, 11 Feb 2019 11:01:12 -0800 Message-Id: <20190211190112.209286-1-egranata@chromium.org> X-Mailer: git-send-email 2.20.1.791.gb4d0f1c61a-goog In-Reply-To: <20190207185917.167829-1-egranata@google.com> References: <20190207185917.167829-1-egranata@google.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Enrico Granata ACPI 5 added support for GpioInt resources as a way to provide information about interrupts mediated via a GPIO controller. Several device buses (e.g. SPI, I2C) have support for retrieving an IRQ specified via this type of resource, and providing it directly to the driver as an IRQ number. This is not currently done for the platform drivers, as platform_get_irq() does not try to parse GpioInt() resources. This requires drivers to either have to support only one possible IRQ resource, or to have code in place to try both as a failsafe. While there is a possibility of ambiguity for devices that exposes multiple IRQs, it is easy and feasible to support the common case of devices that only expose one IRQ which would be of either type depending on the underlying system's architecture. This commit adds support for parsing a GpioInt resource in order to fulfill a request for the index 0 IRQ for a platform device. Signed-off-by: Enrico Granata Reviewed-by: Dmitry Torokhov Acked-by: Hans de Goede Reviewed-by: Mika Westerberg Reviewed-by: Rafael J. Wysocki Reviewed-by: Andy Shevchenko Reviewed-by: Rafael J. Wysocki --- Changes in v2: - only support IRQ index 0 drivers/base/platform.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 1c958eb33ef4d..0d3611cd1b3bc 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -127,7 +127,20 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS); } - return r ? r->start : -ENXIO; + if (r) + return r->start; + + /* + * For the index 0 interrupt, allow falling back to GpioInt + * resources. While a device could have both Interrupt and GpioInt + * resources, making this fallback ambiguous, in many common cases + * the device will only expose one IRQ, and this fallback + * allows a common code path across either kind of resource. + */ + if (num == 0 && has_acpi_companion(&dev->dev)) + return acpi_dev_gpio_irq_get(ACPI_COMPANION(&dev->dev), num); + + return -ENXIO; #endif } EXPORT_SYMBOL_GPL(platform_get_irq);