Input: drv2667 - use guard notation when acquiring mutex
Using guard notation makes the code more compact and error handling more robust by ensuring that mutexes are released in all code paths when control leaves critical section. Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com> Link: https://lore.kernel.org/r/20240904044244.1042174-10-dmitry.torokhov@gmail.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
@@ -402,59 +402,57 @@ static int drv2667_probe(struct i2c_client *client)
|
||||
static int drv2667_suspend(struct device *dev)
|
||||
{
|
||||
struct drv2667_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, DRV2667_STANDBY);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, DRV2667_STANDBY);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to set standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regulator_disable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_disable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to disable regulator\n");
|
||||
regmap_update_bits(haptics->regmap,
|
||||
DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drv2667_resume(struct device *dev)
|
||||
{
|
||||
struct drv2667_data *haptics = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&haptics->input_dev->mutex);
|
||||
guard(mutex)(&haptics->input_dev->mutex);
|
||||
|
||||
if (input_device_enabled(haptics->input_dev)) {
|
||||
ret = regulator_enable(haptics->regulator);
|
||||
if (ret) {
|
||||
error = regulator_enable(haptics->regulator);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to enable regulator\n");
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
if (ret) {
|
||||
error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
|
||||
DRV2667_STANDBY, 0);
|
||||
if (error) {
|
||||
dev_err(dev, "Failed to unset standby mode\n");
|
||||
regulator_disable(haptics->regulator);
|
||||
goto out;
|
||||
return error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&haptics->input_dev->mutex);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(drv2667_pm_ops, drv2667_suspend, drv2667_resume);
|
||||
|
||||
Reference in New Issue
Block a user