forked from mirrors/linux
		
	PM: runtime: add devm_pm_clk_create helper
A typical code pattern for pm_clk_create() call is to call it in the _probe function and to call pm_clk_destroy() both from _probe error path and from _remove function. For some drivers the whole remove function would consist of the call to pm_remove_disable(). Add helper function to replace this bolierplate piece of code. Calling devm_pm_clk_create() removes the need for calling pm_clk_destroy() both in the probe()'s error path and in the remove() function. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20210731195034.979084-3-dmitry.baryshkov@linaro.org Acked-by: Rafael J. Wysocki <rafael@kernel.org> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
		
							parent
							
								
									b3636a3a2c
								
							
						
					
					
						commit
						a649136b17
					
				
					 2 changed files with 22 additions and 0 deletions
				
			
		|  | @ -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); | ||||
| } | ||||
| 
 | ||||
| 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. | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Dmitry Baryshkov
						Dmitry Baryshkov