aboutsummaryrefslogtreecommitdiff
path: root/drivers/power/supply
diff options
context:
space:
mode:
authorGravatar Andrew Davis <afd@ti.com> 2024-01-23 09:09:12 -0600
committerGravatar Sebastian Reichel <sebastian.reichel@collabora.com> 2024-01-27 00:49:17 +0100
commitf2d506d9fe10f0104951f61ad0d414ac8b8dbc38 (patch)
tree592735bef9b5a255d8930f4fcb73d99e346a2532 /drivers/power/supply
parentpower: supply: bq27xxx: Add devm action to free IDA (diff)
downloadlinux-f2d506d9fe10f0104951f61ad0d414ac8b8dbc38.tar.gz
linux-f2d506d9fe10f0104951f61ad0d414ac8b8dbc38.tar.bz2
linux-f2d506d9fe10f0104951f61ad0d414ac8b8dbc38.zip
power: supply: bq27xxx: Use devm to free device mutex
Use a device lifecycle managed action to free the device mutex. This helps prevent mistakes like freeing out of order in cleanup functions and forgetting to free on error paths. Signed-off-by: Andrew Davis <afd@ti.com> Link: https://lore.kernel.org/r/20240123150914.308510-3-afd@ti.com Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Diffstat (limited to 'drivers/power/supply')
-rw-r--r--drivers/power/supply/bq27xxx_battery.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
index 1c4a9d137744..d3b6327b16b5 100644
--- a/drivers/power/supply/bq27xxx_battery.c
+++ b/drivers/power/supply/bq27xxx_battery.c
@@ -2101,6 +2101,13 @@ static void bq27xxx_external_power_changed(struct power_supply *psy)
mod_delayed_work(system_wq, &di->work, HZ / 2);
}
+static void bq27xxx_battery_mutex_destroy(void *data)
+{
+ struct mutex *lock = data;
+
+ mutex_destroy(lock);
+}
+
int bq27xxx_battery_setup(struct bq27xxx_device_info *di)
{
struct power_supply_desc *psy_desc;
@@ -2108,9 +2115,14 @@ int bq27xxx_battery_setup(struct bq27xxx_device_info *di)
.of_node = di->dev->of_node,
.drv_data = di,
};
+ int ret;
INIT_DELAYED_WORK(&di->work, bq27xxx_battery_poll);
mutex_init(&di->lock);
+ ret = devm_add_action_or_reset(di->dev, bq27xxx_battery_mutex_destroy,
+ &di->lock);
+ if (ret)
+ return ret;
di->regs = bq27xxx_chip_data[di->chip].regs;
di->unseal_key = bq27xxx_chip_data[di->chip].unseal_key;
@@ -2158,7 +2170,6 @@ void bq27xxx_battery_teardown(struct bq27xxx_device_info *di)
cancel_delayed_work_sync(&di->work);
power_supply_unregister(di->bat);
- mutex_destroy(&di->lock);
}
EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown);