From nobody Mon Apr 6 23:46:21 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B925C35E95D; Tue, 17 Mar 2026 09:28:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773739717; cv=none; b=BZxCsIAXwzvphUeggApgD6o2o1FToVXayqXHoJvFSxU03JJ00b/dnT/7YmIEELxVHozjpib0V8zRCK9Ytb/BNHdGMZLieZrPkauCWJVqB+I+iw4lkA+bVEH8LUkEb1wUrjERfhgGUgxTTs8COo/jZ8BhOiE7k8yISpHURxK+zWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773739717; c=relaxed/simple; bh=D3rv23vP3GNGYsHHzaSWIvumnHJui1I0W5+mW/jdySo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eG7xw6F5Utua1sqTebCXh1pqHT1Lwpcor7o3yDJLfWlf40XZFUXQ17U4I4zGVXqZXWa9+JNiti7BYBwNirF7Py/yljuuTyw4YZNbxuRlfrEIjgNsYV1qTeE4vsenCZicvhOEs5hsZjxq+HfaEdYEb6sBeqGjhaTwmerKmnrpAdU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BL/PJH8a; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BL/PJH8a" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB000C19425; Tue, 17 Mar 2026 09:28:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773739717; bh=D3rv23vP3GNGYsHHzaSWIvumnHJui1I0W5+mW/jdySo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BL/PJH8agzSyMdw4uJyASEJmgJ7fXvaRqhJawkDECXmHuvNbZgUW/V1lA01iNIo0L 14nLbcuqgwpSopgId52KC0I0rrTThoAFkdO23D6VYOF7hqIpsL+0lH9uDbxbCbtkSv hrLiZzMu6m3mu8gxDOpjrW65+zC1fwNqp3jz825Bp1V7iIZYmMclze71S6sAZCgeRU zdZ82Y32/PZALqGmi7d4VAnEM56UpLG54BHO6d1xIO/TfwX4/gsNhBfdqaHmzffrTC t737aP/4SHaMWdS5bGUOh8F+Gz3vLSnkaUbMaB4eQKlB0gwoF7pdVE8q5G9h01cCF7 dDK0IxNPyAXWA== From: Linus Walleij Date: Tue, 17 Mar 2026 10:28:31 +0100 Subject: [PATCH v2 1/2] dt-bindings: mfd: wlf,arizona: Add irq-gpios Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260317-mfd-arizona-irq-v2-1-9ea546f517dc@kernel.org> References: <20260317-mfd-arizona-irq-v2-0-9ea546f517dc@kernel.org> In-Reply-To: <20260317-mfd-arizona-irq-v2-0-9ea546f517dc@kernel.org> To: Lee Jones , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: patches@opensource.cirrus.com, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, Linus Walleij X-Mailer: b4 0.14.3 The Wolfson Microelectronics Arizona sometimes needs to poll the GPIO line corresponding to the IRQ to counter bugs in the hardware that appear on edge-triggered IRQs. For this situation, provide the optional irq-gpios property. Signed-off-by: Linus Walleij --- Documentation/devicetree/bindings/mfd/wlf,arizona.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/wlf,arizona.yaml b/Docum= entation/devicetree/bindings/mfd/wlf,arizona.yaml index 7902f3c5d289..dbf1f1e0a57e 100644 --- a/Documentation/devicetree/bindings/mfd/wlf,arizona.yaml +++ b/Documentation/devicetree/bindings/mfd/wlf,arizona.yaml @@ -194,6 +194,15 @@ properties: reset-gpios: maxItems: 1 =20 + irq-gpios: + maxItems: 1 + description: + Nominally a functional IRQ should be provided in the interrupts + property. However due to glitches in the hardware, the GPIO line + corresponding to the IRQ sometimes need to be iteratively polled to + check for the triggering edge. If this bug is present, the GPIO line + should be passed here. + wlf,reset: description: GPIO specifier for the GPIO controlling RESET --=20 2.53.0 From nobody Mon Apr 6 23:46:21 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36AEB35E932; Tue, 17 Mar 2026 09:28:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773739720; cv=none; b=hrfU6y6JWWNOWerf0gaacgNdO/L6JCfDl+yhaZF333dsgLh9XtR0gzANG36xwceILVVfyvc59DpvYwvHhEvzvYZCg5OibUweS4auGWkTsROqxpE6C++tNeg4YBVU63U9sF6uevgwJgabW1B04rjlZuMzxx2UmaIrEWMUCQoaSqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773739720; c=relaxed/simple; bh=0XadDfVDtlWCn1GA2CM/7sC5VbJYfQ7TO6u8LyC1810=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IAYnpxoO2Jni7mt4s+S3j8Ab0gqRcquqi+4WVF7/pLGq+x6I3+JrYXiQPG+D13LPsw9fMK7BU9P6A9zjj0La00nufoj3hl7JD6Wiv+CuiIAqa8zWQuyWaSKLcgyMEC681f8oQbXyyO+/l3VZlXqQxln4wIriukpXjQMJY3uhwFY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LgWVuYBh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LgWVuYBh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1433FC2BCB6; Tue, 17 Mar 2026 09:28:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773739719; bh=0XadDfVDtlWCn1GA2CM/7sC5VbJYfQ7TO6u8LyC1810=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LgWVuYBhi5A1A6oMHQNbL7i0ztVQbIqVWXlezjmcHKj2W7gSVoA21VHs6ZzPGBQtQ zoPLa4vSg3/r9u/lStn3/2HJGN+xft+068Nsr8qEDW46LWs1ENsn/C5zjqVS5v+sY3 e7rSBb8oUlwp1GDAvgdr2tjXwQoxVGyuQFDYrpzzusacY3vr8ysMfeHmwdcCUz1uzl bNyUYtJxewY70iNm6lueeWvqXgtW/S6p3xYlCttttK3tVZsR26X9Vqy/rCfdLYIekm nG8lBPiolCK/xnTcP1QdiKxRpJEcCpYBEtGrmxWQ5kPxDObe4BxaCFRDWY9FZuYz+p 1AOkKtSFCdbGQ== From: Linus Walleij Date: Tue, 17 Mar 2026 10:28:32 +0100 Subject: [PATCH v2 2/2] mfd: arizona: Convert GPIO IRQ handling to descriptors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260317-mfd-arizona-irq-v2-2-9ea546f517dc@kernel.org> References: <20260317-mfd-arizona-irq-v2-0-9ea546f517dc@kernel.org> In-Reply-To: <20260317-mfd-arizona-irq-v2-0-9ea546f517dc@kernel.org> To: Lee Jones , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: patches@opensource.cirrus.com, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, Linus Walleij X-Mailer: b4 0.14.3 Convert the arizona polling GPIO handling to use a GPIO descripor instead of passing a global GPIO number as platform data. This mechanism is not used in the kernel, but let's preserve the mechanism to be nice. Users can define "irq-gpios" in the devicetree or software node for the Arizona chip to provide the GPIO line corresponding to the IRQ. Signed-off-by: Linus Walleij Reviewed-by: Charles Keepax --- drivers/mfd/arizona-irq.c | 45 ++++++++++++++++++-----------------= ---- include/linux/mfd/arizona/core.h | 2 ++ include/linux/mfd/arizona/pdata.h | 5 ----- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c index 544016d420fe..b6f63031268e 100644 --- a/drivers/mfd/arizona-irq.c +++ b/drivers/mfd/arizona-irq.c @@ -136,21 +136,19 @@ static irqreturn_t arizona_irq_thread(int irq, void *= data) dev_err(arizona->dev, "Failed to read main IRQ status: %d\n", ret); } -#ifdef CONFIG_GPIOLIB_LEGACY /* * Poll the IRQ pin status to see if we're really done * if the interrupt controller can't do it for us. */ - if (!arizona->pdata.irq_gpio) { + if (!arizona->irq_gpiod) { break; } else if (arizona->pdata.irq_flags & IRQF_TRIGGER_RISING && - gpio_get_value_cansleep(arizona->pdata.irq_gpio)) { + gpiod_get_value_cansleep(arizona->irq_gpiod)) { poll =3D true; } else if (arizona->pdata.irq_flags & IRQF_TRIGGER_FALLING && - !gpio_get_value_cansleep(arizona->pdata.irq_gpio)) { + !gpiod_get_value_cansleep(arizona->irq_gpiod)) { poll =3D true; } -#endif } while (poll); =20 pm_runtime_put_autosuspend(arizona->dev); @@ -350,27 +348,25 @@ int arizona_irq_init(struct arizona *arizona) goto err_map_main_irq; } =20 -#ifdef CONFIG_GPIOLIB_LEGACY - /* Used to emulate edge trigger and to work around broken pinmux */ - if (arizona->pdata.irq_gpio) { - if (gpio_to_irq(arizona->pdata.irq_gpio) !=3D arizona->irq) { - dev_warn(arizona->dev, "IRQ %d is not GPIO %d (%d)\n", - arizona->irq, arizona->pdata.irq_gpio, - gpio_to_irq(arizona->pdata.irq_gpio)); - arizona->irq =3D gpio_to_irq(arizona->pdata.irq_gpio); - } - - ret =3D devm_gpio_request_one(arizona->dev, - arizona->pdata.irq_gpio, - GPIOF_IN, "arizona IRQ"); - if (ret !=3D 0) { - dev_err(arizona->dev, - "Failed to request IRQ GPIO %d:: %d\n", - arizona->pdata.irq_gpio, ret); - arizona->pdata.irq_gpio =3D 0; + /* + * Used to emulate edge trigger and to work around broken pinmux + * define "irq-gpios" in device tree or software node. + */ + arizona->irq_gpiod =3D devm_gpiod_get_optional(arizona->dev, "irq", + GPIOD_IN); + if (IS_ERR(arizona->irq_gpiod)) { + ret =3D PTR_ERR(arizona->irq_gpiod); + dev_err(arizona->dev, "error getting IRQ GPIO (%d)\n", ret); + goto err_irq_gpiod; + } + if (arizona->irq_gpiod) { + if (gpiod_to_irq(arizona->irq_gpiod) !=3D arizona->irq) { + dev_warn(arizona->dev, "IRQ %d is not right GPIO\n", + arizona->irq); + arizona->irq =3D gpiod_to_irq(arizona->irq_gpiod); } + gpiod_set_consumer_name(arizona->irq_gpiod, "arizona IRQ"); } -#endif =20 ret =3D request_threaded_irq(arizona->irq, NULL, arizona_irq_thread, flags, "arizona", arizona); @@ -409,6 +405,7 @@ int arizona_irq_init(struct arizona *arizona) arizona_free_irq(arizona, ARIZONA_IRQ_BOOT_DONE, arizona); err_boot_done: free_irq(arizona->irq, arizona); +err_irq_gpiod: err_main_irq: regmap_del_irq_chip(irq_find_mapping(arizona->virq, ARIZONA_MAIN_IRQ_INDEX), diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/c= ore.h index 6d6f96b2b29f..7129651c9af6 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h @@ -11,6 +11,7 @@ #define _WM_ARIZONA_CORE_H =20 #include +#include #include #include #include @@ -136,6 +137,7 @@ struct arizona { struct irq_domain *virq; struct regmap_irq_chip_data *aod_irq_chip; struct regmap_irq_chip_data *irq_chip; + struct gpio_desc *irq_gpiod; =20 bool hpdet_clamp; unsigned int hp_ena; diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/= pdata.h index f72e6d4b14a7..20118bad869a 100644 --- a/include/linux/mfd/arizona/pdata.h +++ b/include/linux/mfd/arizona/pdata.h @@ -188,11 +188,6 @@ struct arizona_pdata { /** Haptic actuator type */ unsigned int hap_act; =20 -#ifdef CONFIG_GPIOLIB_LEGACY - /** GPIO for primary IRQ (used for edge triggered emulation) */ - int irq_gpio; -#endif - /** General purpose switch control */ unsigned int gpsw; }; --=20 2.53.0