Message ID | 20240904044244.1042174-8-dmitry.torokhov@gmail.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 0a54609a890e808f9d7ad944a99a25b17153f65c |
Headers | show |
Series | Convert misc input drivers to use new cleanup facilities | expand |
On 04/09/2024 06:42, Dmitry Torokhov wrote: > 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. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> > --- > drivers/input/misc/drv260x.c | 50 +++++++++++++++++------------------- > 1 file changed, 24 insertions(+), 26 deletions(-) > > diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c > index 61b503835aa6..96cd6a078c8a 100644 > --- a/drivers/input/misc/drv260x.c > +++ b/drivers/input/misc/drv260x.c > @@ -537,64 +537,62 @@ static int drv260x_probe(struct i2c_client *client) > static int drv260x_suspend(struct device *dev) > { > struct drv260x_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, > - DRV260X_MODE, > - DRV260X_STANDBY_MASK, > - DRV260X_STANDBY); > - if (ret) { > + error = regmap_update_bits(haptics->regmap, > + DRV260X_MODE, > + DRV260X_STANDBY_MASK, > + DRV260X_STANDBY); > + if (error) { > dev_err(dev, "Failed to set standby mode\n"); > - goto out; > + return error; > } > > gpiod_set_value(haptics->enable_gpio, 0); > > - 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, > DRV260X_MODE, > DRV260X_STANDBY_MASK, 0); > + return error; > } > } > -out: > - mutex_unlock(&haptics->input_dev->mutex); > - return ret; > + > + return 0; > } > > static int drv260x_resume(struct device *dev) > { > struct drv260x_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, > - DRV260X_MODE, > - DRV260X_STANDBY_MASK, 0); > - if (ret) { > + error = regmap_update_bits(haptics->regmap, > + DRV260X_MODE, > + DRV260X_STANDBY_MASK, 0); > + if (error) { > dev_err(dev, "Failed to unset standby mode\n"); > regulator_disable(haptics->regulator); > - goto out; > + return error; > } > > gpiod_set_value(haptics->enable_gpio, 1); > } > > -out: > - mutex_unlock(&haptics->input_dev->mutex); > - return ret; > + return 0; > } > > static DEFINE_SIMPLE_DEV_PM_OPS(drv260x_pm_ops, drv260x_suspend, drv260x_resume); Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c index 61b503835aa6..96cd6a078c8a 100644 --- a/drivers/input/misc/drv260x.c +++ b/drivers/input/misc/drv260x.c @@ -537,64 +537,62 @@ static int drv260x_probe(struct i2c_client *client) static int drv260x_suspend(struct device *dev) { struct drv260x_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, - DRV260X_MODE, - DRV260X_STANDBY_MASK, - DRV260X_STANDBY); - if (ret) { + error = regmap_update_bits(haptics->regmap, + DRV260X_MODE, + DRV260X_STANDBY_MASK, + DRV260X_STANDBY); + if (error) { dev_err(dev, "Failed to set standby mode\n"); - goto out; + return error; } gpiod_set_value(haptics->enable_gpio, 0); - 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, DRV260X_MODE, DRV260X_STANDBY_MASK, 0); + return error; } } -out: - mutex_unlock(&haptics->input_dev->mutex); - return ret; + + return 0; } static int drv260x_resume(struct device *dev) { struct drv260x_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, - DRV260X_MODE, - DRV260X_STANDBY_MASK, 0); - if (ret) { + error = regmap_update_bits(haptics->regmap, + DRV260X_MODE, + DRV260X_STANDBY_MASK, 0); + if (error) { dev_err(dev, "Failed to unset standby mode\n"); regulator_disable(haptics->regulator); - goto out; + return error; } gpiod_set_value(haptics->enable_gpio, 1); } -out: - mutex_unlock(&haptics->input_dev->mutex); - return ret; + return 0; } static DEFINE_SIMPLE_DEV_PM_OPS(drv260x_pm_ops, drv260x_suspend, drv260x_resume);
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. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> --- drivers/input/misc/drv260x.c | 50 +++++++++++++++++------------------- 1 file changed, 24 insertions(+), 26 deletions(-)