Skip to content

Commit 444ff00

Browse files
jwrdegoedesre
authored andcommitted
power: supply: bq27xxx: Fix I2C IRQ race on remove
devm_request_threaded_irq() requested IRQs are only free-ed after the driver's remove function has ran. So the IRQ could trigger and call bq27xxx_battery_update() after bq27xxx_battery_teardown() has already run. Switch to explicitly free-ing the IRQ in bq27xxx_battery_i2c_remove() to fix this. Fixes: 8807feb ("power: bq27xxx_battery: Add interrupt handling support") Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
1 parent 5c34c0a commit 444ff00

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/power/supply/bq27xxx_battery_i2c.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client)
179179
i2c_set_clientdata(client, di);
180180

181181
if (client->irq) {
182-
ret = devm_request_threaded_irq(&client->dev, client->irq,
182+
ret = request_threaded_irq(client->irq,
183183
NULL, bq27xxx_battery_irq_handler_thread,
184184
IRQF_ONESHOT,
185185
di->name, di);
@@ -209,6 +209,7 @@ static void bq27xxx_battery_i2c_remove(struct i2c_client *client)
209209
{
210210
struct bq27xxx_device_info *di = i2c_get_clientdata(client);
211211

212+
free_irq(client->irq, di);
212213
bq27xxx_battery_teardown(di);
213214

214215
mutex_lock(&battery_mutex);

0 commit comments

Comments
 (0)