On Wed 28 Jul 07:24 PDT 2021, Dmitry Baryshkov wrote: > Add devm_pm_clk_create helper, devres-enabled version of the > pm_clk_create(), which will call pm_clk_destroy at the correct time. > As with path 1, please describe why this is a good thing. (I definitely think it is, but I've been part of the discussion leading up to this patch) > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > --- > drivers/base/power/clock_ops.c | 17 +++++++++++++++++ > include/linux/pm_clock.h | 5 +++++ > 2 files changed, 22 insertions(+) > > diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c > index 0251f3e6e61d..4110c19c08dc 100644 > --- a/drivers/base/power/clock_ops.c > +++ b/drivers/base/power/clock_ops.c > @@ -519,6 +519,23 @@ void pm_clk_destroy(struct device *dev) > } > EXPORT_SYMBOL_GPL(pm_clk_destroy); > > +static void pm_clk_destroy_action(void *data) > +{ > + pm_clk_destroy(data); > +} > + As this is an addition to the API, it deserves some kerneldoc. Regards, Bjorn > +int devm_pm_clk_create(struct device *dev) > +{ > + int ret; > + > + ret = pm_clk_create(dev); > + if (ret) > + return ret; > + > + return devm_add_action_or_reset(dev, pm_clk_destroy_action, dev); > +} > +EXPORT_SYMBOL_GPL(devm_pm_clk_create); > + > /** > * pm_clk_suspend - Disable clocks in a device's PM clock list. > * @dev: Device to disable the clocks for. > diff --git a/include/linux/pm_clock.h b/include/linux/pm_clock.h > index 8ddc7860e131..ada3a0ab10bf 100644 > --- a/include/linux/pm_clock.h > +++ b/include/linux/pm_clock.h > @@ -47,6 +47,7 @@ extern void pm_clk_remove(struct device *dev, const char *con_id); > extern void pm_clk_remove_clk(struct device *dev, struct clk *clk); > extern int pm_clk_suspend(struct device *dev); > extern int pm_clk_resume(struct device *dev); > +extern int devm_pm_clk_create(struct device *dev); > #else > static inline bool pm_clk_no_clocks(struct device *dev) > { > @@ -83,6 +84,10 @@ static inline void pm_clk_remove(struct device *dev, const char *con_id) > static inline void pm_clk_remove_clk(struct device *dev, struct clk *clk) > { > } > +static inline int devm_pm_clk_create(struct device *dev) > +{ > + return -EINVAL; > +} > #endif > > #ifdef CONFIG_HAVE_CLK > -- > 2.30.2 >