* [PATCH] extcon: ptn5150: request the IRQ after the resources its work uses
@ 2026-11-12 7:03 Myeonghun Pak
0 siblings, 0 replies; only message in thread
From: Myeonghun Pak @ 2026-11-12 7:03 UTC (permalink / raw)
To: Krzysztof Kozlowski, MyungJoo Ham, Chanwoo Choi
Cc: linux-kernel, stable, Ijae Kim
The IRQ is requested before the work cleanup action is registered.
On unbind, devres cancels irq_work and releases its switches before
freeing the IRQ, allowing an interrupt to queue work against released
resources. Earlier probe failures can leave the work uncancelled.
Request the IRQ after registering the cleanup action so devres frees
it before cancelling the work and releasing its resources. Keep
ptn5150_init_dev_type() after the IRQ request: clearing pending status
before installing the falling-edge handler can lose an interrupt.
Found by a static analysis tool under development.
Compile-tested with W=1 for arm64 and x86_64.
Not tested on hardware.
Fixes: 782cd939cbe0 ("extcon: ptn5150: Add queue work sync before driver release")
Cc: stable@vger.kernel.org
Co-developed-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
---
drivers/extcon/extcon-ptn5150.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/extcon/extcon-ptn5150.c b/drivers/extcon/extcon-ptn5150.c
index 0b96b58b4212..6ee4edd7adbd 100644
--- a/drivers/extcon/extcon-ptn5150.c
+++ b/drivers/extcon/extcon-ptn5150.c
@@ -307,16 +307,6 @@ static int ptn5150_i2c_probe(struct i2c_client *i2c)
}
}
- ret = devm_request_threaded_irq(dev, info->irq, NULL,
- ptn5150_irq_handler,
- IRQF_TRIGGER_FALLING |
- IRQF_ONESHOT,
- i2c->name, info);
- if (ret < 0) {
- dev_err(dev, "failed to request handler for INTB IRQ\n");
- return ret;
- }
-
/* Allocate extcon device */
info->edev = devm_extcon_dev_allocate(info->dev, ptn5150_extcon_cable);
if (IS_ERR(info->edev)) {
@@ -338,11 +328,6 @@ static int ptn5150_i2c_probe(struct i2c_client *i2c)
extcon_set_property_capability(info->edev, EXTCON_USB_HOST,
EXTCON_PROP_USB_TYPEC_POLARITY);
- /* Initialize PTN5150 device and print vendor id and version id */
- ret = ptn5150_init_dev_type(info);
- if (ret)
- return -EINVAL;
-
connector = device_get_named_child_node(dev, "connector");
if (connector) {
info->orient_sw = fwnode_typec_switch_get(connector);
@@ -362,6 +347,21 @@ static int ptn5150_i2c_probe(struct i2c_client *i2c)
if (ret)
return ret;
+ ret = devm_request_threaded_irq(dev, info->irq, NULL,
+ ptn5150_irq_handler,
+ IRQF_TRIGGER_FALLING |
+ IRQF_ONESHOT,
+ i2c->name, info);
+ if (ret < 0) {
+ dev_err(dev, "failed to request handler for INTB IRQ\n");
+ return ret;
+ }
+
+ /* Initialize PTN5150 device and print vendor id and version id */
+ ret = ptn5150_init_dev_type(info);
+ if (ret)
+ return -EINVAL;
+
/*
* Update current extcon state if for example OTG connection was there
* before the probe
base-commit: 630059a5a632377b9b7b487baccde92b7ae1dd47
--
2.43.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-11-12 7:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-12 7:03 [PATCH] extcon: ptn5150: request the IRQ after the resources its work uses Myeonghun Pak
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®