From: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
To: Linus Walleij <linusw@kernel.org>,
Bartosz Golaszewski <brgl@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Stefan Agner <stefan@agner.ch>,
Dong Aisheng <aisheng.dong@nxp.com>,
Jacky Bai <ping.bai@nxp.com>, Frank Li <Frank.Li@nxp.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>,
linux-gpio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
Peng Fan <peng.fan@nxp.com>
Subject: [PATCH v3 03/11] gpio: vf610: use devm_clk_get_optional_enabled() for clock handling
Date: Thu, 05 Nov 2026 11:53:01 +0800 [thread overview]
Message-ID: <20261105-gpio-vf610-fixes-v3-3-504e19de5ad5@nxp.com> (raw)
In-Reply-To: <20261105-gpio-vf610-fixes-v3-0-504e19de5ad5@nxp.com>
From: Peng Fan <peng.fan@nxp.com>
Replace the manual clock acquisition, enable and cleanup sequences with
devm_clk_get_optional_enabled() for both the port and gpio clocks. The
helper treats a missing clock as NULL and automatically disables and
unprepares the clocks on driver unbind, so the vf610_gpio_disable_clk()
helper is no longer needed.
Unlike the previous code, propagate all errors from the helper,
including clk_prepare_enable() failures. The old code only tolerated
lookup errors and failed probe when enabling the clock failed; continuing
with a disabled clock could fault when accessing the PORT/GPIO registers.
The optional helper already covers the "clock not described" case, so
there is no need to silently ignore other errors.
The clock pointers are only needed during probe now that devm manages
their lifetime, so drop them from struct vf610_gpio_port and use a local
variable instead.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/gpio/gpio-vf610.c | 46 +++++++++-------------------------------------
1 file changed, 9 insertions(+), 37 deletions(-)
diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
index c1c562071c0d..9ebb4469fd15 100644
--- a/drivers/gpio/gpio-vf610.c
+++ b/drivers/gpio/gpio-vf610.c
@@ -34,8 +34,6 @@ struct vf610_gpio_port {
void __iomem *gpio_base;
const struct fsl_gpio_soc_data *sdata;
u8 irqc[VF610_GPIO_PER_PORT];
- struct clk *clk_port;
- struct clk *clk_gpio;
int irq;
};
@@ -206,11 +204,6 @@ static const struct irq_chip vf610_irqchip = {
GPIOCHIP_IRQ_RESOURCE_HELPERS,
};
-static void vf610_gpio_disable_clk(void *data)
-{
- clk_disable_unprepare(data);
-}
-
static int vf610_gpio_probe(struct platform_device *pdev)
{
struct gpio_generic_chip_config config;
@@ -218,6 +211,7 @@ static int vf610_gpio_probe(struct platform_device *pdev)
struct vf610_gpio_port *port;
struct gpio_chip *gc;
struct gpio_irq_chip *girq;
+ struct clk *clk;
unsigned long flags;
int i;
int ret;
@@ -261,37 +255,15 @@ static int vf610_gpio_probe(struct platform_device *pdev)
if (port->irq < 0)
return port->irq;
- port->clk_port = devm_clk_get(dev, "port");
- ret = PTR_ERR_OR_ZERO(port->clk_port);
- if (!ret) {
- ret = clk_prepare_enable(port->clk_port);
- if (ret)
- return ret;
- ret = devm_add_action_or_reset(dev, vf610_gpio_disable_clk,
- port->clk_port);
- if (ret)
- return ret;
- } else if (ret == -EPROBE_DEFER) {
- /*
- * Percolate deferrals, for anything else,
- * just live without the clocking.
- */
- return ret;
- }
+ clk = devm_clk_get_optional_enabled(dev, "port");
+ if (IS_ERR(clk))
+ return dev_err_probe(dev, PTR_ERR(clk),
+ "failed to get/enable port clock\n");
- port->clk_gpio = devm_clk_get(dev, "gpio");
- ret = PTR_ERR_OR_ZERO(port->clk_gpio);
- if (!ret) {
- ret = clk_prepare_enable(port->clk_gpio);
- if (ret)
- return ret;
- ret = devm_add_action_or_reset(dev, vf610_gpio_disable_clk,
- port->clk_gpio);
- if (ret)
- return ret;
- } else if (ret == -EPROBE_DEFER) {
- return ret;
- }
+ clk = devm_clk_get_optional_enabled(dev, "gpio");
+ if (IS_ERR(clk))
+ return dev_err_probe(dev, PTR_ERR(clk),
+ "failed to get/enable gpio clock\n");
gc = &port->chip.gc;
flags = GPIO_GENERIC_PINCTRL_BACKEND;
--
2.51.0
next prev parent reply other threads:[~2026-11-05 3:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 3:52 [PATCH v3 00/11] gpio: vf610: fix clocks and misc cleanup Peng Fan (OSS)
2026-11-05 3:52 ` [PATCH v3 01/11] dt-bindings: gpio: vf610: fix clock requirements per SoC Peng Fan (OSS)
2026-11-05 12:30 ` Peng Fan
2026-11-05 17:22 ` Frank Li
2026-11-06 11:54 ` Krzysztof Kozlowski
2026-11-05 3:53 ` [PATCH v3 02/11] gpio: vf610: simplify with irq_set_irq_wake() Peng Fan (OSS)
2026-11-05 17:23 ` Frank Li
2026-11-06 13:28 ` Linus Walleij
2026-11-05 3:53 ` Peng Fan (OSS) [this message]
2026-11-05 17:25 ` [PATCH v3 03/11] gpio: vf610: use devm_clk_get_optional_enabled() for clock handling Frank Li
2026-11-06 13:29 ` Linus Walleij
2026-11-05 3:53 ` [PATCH v3 04/11] gpio: vf610: drop unneeded header Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 05/11] gpio: vf610: drop unnecessary wrappers Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 06/11] MAINTAINERS: Add VF610 GPIO driver support Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 07/11] arm64: dts: imx8ulp: fix gpio clocks Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 08/11] arm64: dts: imx93: " Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 09/11] arm64: dts: imx95: " Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 10/11] arm64: dts: imx952: " Peng Fan (OSS)
2026-11-05 3:53 ` [PATCH v3 11/11] arm64: dts: imx94: add clocks for gpio controller Peng Fan (OSS)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261105-gpio-vf610-fixes-v3-3-504e19de5ad5@nxp.com \
--to=peng.fan@oss.nxp.com \
--cc=Frank.Li@nxp.com \
--cc=aisheng.dong@nxp.com \
--cc=brgl@bgdev.pl \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peng.fan@nxp.com \
--cc=ping.bai@nxp.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=stefan@agner.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®