[PATCH 0/9] gpio: mxc: bug fixes and probe cleanup

From: Peng Fan (OSS)

Date: Sat Oct 03 2026 - 08:09:33 EST


Two bug fixes and follows up with probe modernization and bitops cleanup.

We not receive bug report and met issues during our test, so patch 1&2
are not critial for now.

Patches 1-2 are bug fixes:

1. Fix a race where the chained IRQ handler is installed before the
IRQ domain, generic IRQ chip, and port list entry are ready.
Also fixes a latent use-after-free on probe failure paths that
never unregistered the handler.

2. Fix wakeup_pads being typed as u32 while accessed through
set_bit/clear_bit (unsigned long *), causing adjacent field
corruption on 64-bit platforms. Switch to atomic bitops for
concurrency safety and fix the disable path to preserve the
wakeup_pads bit on disable_irq_wake() failure.

Patches 3-9 are cleanups, each building on the previous:

3. Cache of_device_is_compatible() results at probe into struct
fields, avoiding repeated DT string comparisons in suspend/resume.

4. Use devm_add_action_or_reset() for irq_domain_remove(), removing
manual cleanup in error paths.

5. Switch to devm-managed PM runtime and dev_err_probe(), eliminating
the remaining goto error labels entirely.

6. Introduce a local 'dev' variable and migrate to
device_is_compatible() for firmware-agnostic matching.

7. Introduce MXC_ICR_REG/MXC_ICR_MASK macros and use
field_prep()/field_get() for ICR register access, replacing
duplicated magic-number arithmetic in gpio_set_irq_type() and
mxc_flip_edge().

8. Replace open-coded '1 << n' with BIT() throughout the driver.

9. Simplify gpio_set_wake_irq() using irq_set_irq_wake() and
assign_bit().

Signed-off-by: Peng Fan <peng.fan@xxxxxxx>
---
Peng Fan (9):
gpio: mxc: fix race between chained IRQ handler install and probe completion
gpio: mxc: fix wakeup_pads bit operations for correctness
gpio: mxc: cache compatible checks at probe time
gpio: mxc: use devm action for irq_domain cleanup
gpio: mxc: use devres-managed PM runtime and dev_err_probe
gpio: mxc: use local dev variable and device_is_compatible()
gpio: mxc: introduce MXC_ICR macros and use field_prep/field_get
gpio: mxc: use BIT() macro for single-bit operations
gpio: mxc: simplify gpio_set_wake_irq() with irq_set_irq_wake and assign_bit

drivers/gpio/gpio-mxc.c | 158 ++++++++++++++++++++++++------------------------
1 file changed, 79 insertions(+), 79 deletions(-)
---
base-commit: f0406245cb9855e6318335a8a223551354291a46
change-id: 20261003-gpio-mxc-cleanup-e49cc626c51e

Best regards,
--
Peng Fan <peng.fan@xxxxxxx>