Hi, On Tue, Mar 23, 2021 at 9:58 PM Matti Vaittinen <matti.vaitti...@fi.rohmeurope.com> wrote: > > Few drivers implement remove call-back only for ensuring a delayed > work gets cancelled prior driver removal. Clean-up these by switching > to use devm_delayed_work_autocancel() instead. > > This change is compile-tested only. All testing is appreciated. > > Signed-off-by: Matti Vaittinen <matti.vaitti...@fi.rohmeurope.com> > Acked-by: Sebastian Reichel <sebastian.reic...@collabora.com> > --- > Changelog from RFCv2: > - RFC dropped. No functional changes. > > drivers/power/supply/axp20x_usb_power.c | 15 +++++---------- > drivers/power/supply/bq24735-charger.c | 18 ++++++------------ > drivers/power/supply/ltc2941-battery-gauge.c | 20 +++++++------------- > drivers/power/supply/sbs-battery.c | 16 +++++----------- > 4 files changed, 23 insertions(+), 46 deletions(-) > > diff --git a/drivers/power/supply/axp20x_usb_power.c > b/drivers/power/supply/axp20x_usb_power.c > index 8933ae26c3d6..4259709e3491 100644 > --- a/drivers/power/supply/axp20x_usb_power.c > +++ b/drivers/power/supply/axp20x_usb_power.c > @@ -8,6 +8,7 @@ > > #include <linux/bitops.h> > #include <linux/device.h> > +#include <linux/devm-helpers.h> > #include <linux/init.h> > #include <linux/interrupt.h> > #include <linux/kernel.h> > @@ -646,21 +647,16 @@ static int axp20x_usb_power_probe(struct > platform_device *pdev) > } > } > > + ret = devm_delayed_work_autocancel(&pdev->dev, &power->vbus_detect, > + axp20x_usb_power_poll_vbus); > + if (ret) > + return ret;
This doesn't look right. The IRQ is requested before this, and the delayed_work struct is initialized even earlier, so you'd be re-initializing the struct, with the work item potentially running or queued up already. ChenYu > if (axp20x_usb_vbus_needs_polling(power)) > queue_delayed_work(system_power_efficient_wq, > &power->vbus_detect, 0); > > return 0; > } > > -static int axp20x_usb_power_remove(struct platform_device *pdev) > -{ > - struct axp20x_usb_power *power = platform_get_drvdata(pdev); > - > - cancel_delayed_work_sync(&power->vbus_detect); > - > - return 0; > -} > - > static const struct of_device_id axp20x_usb_power_match[] = { > { > .compatible = "x-powers,axp202-usb-power-supply", > @@ -680,7 +676,6 @@ MODULE_DEVICE_TABLE(of, axp20x_usb_power_match); > > static struct platform_driver axp20x_usb_power_driver = { > .probe = axp20x_usb_power_probe, > - .remove = axp20x_usb_power_remove, > .driver = { > .name = DRVNAME, > .of_match_table = axp20x_usb_power_match,