2020-12-01 18:21:52

by Adam Ward

[permalink] [raw]
Subject: [PATCH 0/1] regulator: da9121: add IRQ free to release function

This patch fixes the DA9121 driver to disable the IRQ before cancelling
the work, to be sure the IRQ doesn't restart it before all IRQs are
masked

Adam Ward (1):
regulator: da9121: Request IRQ directly and free in release function
to avoid masking race

drivers/regulator/da9121-regulator.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

--
1.9.1


2020-12-01 18:22:13

by Adam Ward

[permalink] [raw]
Subject: [PATCH 1/1] regulator: da9121: Request IRQ directly and free in release function to avoid masking race

Signed-off-by: Adam Ward <[email protected]>
---
drivers/regulator/da9121-regulator.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/da9121-regulator.c b/drivers/regulator/da9121-regulator.c
index d9a8a4b..3e59f68 100644
--- a/drivers/regulator/da9121-regulator.c
+++ b/drivers/regulator/da9121-regulator.c
@@ -945,8 +945,7 @@ static int da9121_config_irq(struct i2c_client *i2c,

chip->passive_delay = p_delay;

- ret = devm_request_threaded_irq(chip->dev,
- chip->chip_irq, NULL,
+ ret = request_threaded_irq(chip->chip_irq, NULL,
da9121_irq_handler,
IRQF_TRIGGER_LOW|IRQF_ONESHOT,
"da9121", chip);
@@ -1036,6 +1035,7 @@ static int da9121_i2c_remove(struct i2c_client *i2c)
const int mask_all[4] = { 0xFF, 0xFF, 0xFF, 0xFF };
int ret = 0;

+ free_irq(chip->chip_irq, chip);
cancel_delayed_work_sync(&chip->work);

ret = regmap_bulk_write(chip->regmap, DA9121_REG_SYS_MASK_0, mask_all, 4);
--
1.9.1