xref: /linux-6.15/include/linux/pm_clock.h (revision 3efeeaf8)
155716d26SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2b5e8d269SRafael J. Wysocki /*
3b5e8d269SRafael J. Wysocki  * pm_clock.h - Definitions and headers related to device clocks.
4b5e8d269SRafael J. Wysocki  *
5b5e8d269SRafael J. Wysocki  * Copyright (C) 2011 Rafael J. Wysocki <[email protected]>, Renesas Electronics Corp.
6b5e8d269SRafael J. Wysocki  */
7b5e8d269SRafael J. Wysocki 
8b5e8d269SRafael J. Wysocki #ifndef _LINUX_PM_CLOCK_H
9b5e8d269SRafael J. Wysocki #define _LINUX_PM_CLOCK_H
10b5e8d269SRafael J. Wysocki 
11b5e8d269SRafael J. Wysocki #include <linux/device.h>
12b5e8d269SRafael J. Wysocki #include <linux/notifier.h>
13b5e8d269SRafael J. Wysocki 
14b5e8d269SRafael J. Wysocki struct pm_clk_notifier_block {
15b5e8d269SRafael J. Wysocki 	struct notifier_block nb;
16b5e8d269SRafael J. Wysocki 	struct dev_pm_domain *pm_domain;
17b5e8d269SRafael J. Wysocki 	char *con_ids[];
18b5e8d269SRafael J. Wysocki };
19b5e8d269SRafael J. Wysocki 
20245bd6f6SGeert Uytterhoeven struct clk;
21245bd6f6SGeert Uytterhoeven 
2275f50400SRajendra Nayak #ifdef CONFIG_PM
2375f50400SRajendra Nayak extern int pm_clk_runtime_suspend(struct device *dev);
2475f50400SRajendra Nayak extern int pm_clk_runtime_resume(struct device *dev);
2575f50400SRajendra Nayak #define USE_PM_CLK_RUNTIME_OPS \
2675f50400SRajendra Nayak 	.runtime_suspend = pm_clk_runtime_suspend, \
2775f50400SRajendra Nayak 	.runtime_resume = pm_clk_runtime_resume,
2875f50400SRajendra Nayak #else
2975f50400SRajendra Nayak #define USE_PM_CLK_RUNTIME_OPS
3075f50400SRajendra Nayak #endif
3175f50400SRajendra Nayak 
32b5e8d269SRafael J. Wysocki #ifdef CONFIG_PM_CLK
pm_clk_no_clocks(struct device * dev)33b5e8d269SRafael J. Wysocki static inline bool pm_clk_no_clocks(struct device *dev)
34b5e8d269SRafael J. Wysocki {
35b5e8d269SRafael J. Wysocki 	return dev && dev->power.subsys_data
36b5e8d269SRafael J. Wysocki 		&& list_empty(&dev->power.subsys_data->clock_list);
37b5e8d269SRafael J. Wysocki }
38b5e8d269SRafael J. Wysocki 
39b5e8d269SRafael J. Wysocki extern void pm_clk_init(struct device *dev);
40b5e8d269SRafael J. Wysocki extern int pm_clk_create(struct device *dev);
41b5e8d269SRafael J. Wysocki extern void pm_clk_destroy(struct device *dev);
42b5e8d269SRafael J. Wysocki extern int pm_clk_add(struct device *dev, const char *con_id);
43245bd6f6SGeert Uytterhoeven extern int pm_clk_add_clk(struct device *dev, struct clk *clk);
4402113ba9SJon Hunter extern int of_pm_clk_add_clks(struct device *dev);
4502113ba9SJon Hunter extern void pm_clk_remove_clk(struct device *dev, struct clk *clk);
46b5e8d269SRafael J. Wysocki extern int pm_clk_suspend(struct device *dev);
47b5e8d269SRafael J. Wysocki extern int pm_clk_resume(struct device *dev);
48a649136bSDmitry Baryshkov extern int devm_pm_clk_create(struct device *dev);
49b5e8d269SRafael J. Wysocki #else
pm_clk_no_clocks(struct device * dev)50b5e8d269SRafael J. Wysocki static inline bool pm_clk_no_clocks(struct device *dev)
51b5e8d269SRafael J. Wysocki {
52b5e8d269SRafael J. Wysocki 	return true;
53b5e8d269SRafael J. Wysocki }
pm_clk_init(struct device * dev)54b5e8d269SRafael J. Wysocki static inline void pm_clk_init(struct device *dev)
55b5e8d269SRafael J. Wysocki {
56b5e8d269SRafael J. Wysocki }
pm_clk_create(struct device * dev)57b5e8d269SRafael J. Wysocki static inline int pm_clk_create(struct device *dev)
58b5e8d269SRafael J. Wysocki {
59b5e8d269SRafael J. Wysocki 	return -EINVAL;
60b5e8d269SRafael J. Wysocki }
pm_clk_destroy(struct device * dev)61b5e8d269SRafael J. Wysocki static inline void pm_clk_destroy(struct device *dev)
62b5e8d269SRafael J. Wysocki {
63b5e8d269SRafael J. Wysocki }
pm_clk_add(struct device * dev,const char * con_id)64b5e8d269SRafael J. Wysocki static inline int pm_clk_add(struct device *dev, const char *con_id)
65b5e8d269SRafael J. Wysocki {
66b5e8d269SRafael J. Wysocki 	return -EINVAL;
67b5e8d269SRafael J. Wysocki }
68245bd6f6SGeert Uytterhoeven 
pm_clk_add_clk(struct device * dev,struct clk * clk)69245bd6f6SGeert Uytterhoeven static inline int pm_clk_add_clk(struct device *dev, struct clk *clk)
70245bd6f6SGeert Uytterhoeven {
71245bd6f6SGeert Uytterhoeven 	return -EINVAL;
72245bd6f6SGeert Uytterhoeven }
of_pm_clk_add_clks(struct device * dev)7302113ba9SJon Hunter static inline int of_pm_clk_add_clks(struct device *dev)
7402113ba9SJon Hunter {
7502113ba9SJon Hunter 	return -EINVAL;
7602113ba9SJon Hunter }
77b5e8d269SRafael J. Wysocki #define pm_clk_suspend	NULL
78b5e8d269SRafael J. Wysocki #define pm_clk_resume	NULL
pm_clk_remove_clk(struct device * dev,struct clk * clk)7902113ba9SJon Hunter static inline void pm_clk_remove_clk(struct device *dev, struct clk *clk)
8002113ba9SJon Hunter {
8102113ba9SJon Hunter }
devm_pm_clk_create(struct device * dev)82a649136bSDmitry Baryshkov static inline int devm_pm_clk_create(struct device *dev)
83a649136bSDmitry Baryshkov {
84a649136bSDmitry Baryshkov 	return -EINVAL;
85a649136bSDmitry Baryshkov }
86b5e8d269SRafael J. Wysocki #endif
87b5e8d269SRafael J. Wysocki 
88b5e8d269SRafael J. Wysocki #ifdef CONFIG_HAVE_CLK
89*db2292b0SGreg Kroah-Hartman extern void pm_clk_add_notifier(const struct bus_type *bus,
90b5e8d269SRafael J. Wysocki 					struct pm_clk_notifier_block *clknb);
91b5e8d269SRafael J. Wysocki #else
pm_clk_add_notifier(const struct bus_type * bus,struct pm_clk_notifier_block * clknb)92*db2292b0SGreg Kroah-Hartman static inline void pm_clk_add_notifier(const struct bus_type *bus,
93b5e8d269SRafael J. Wysocki 					struct pm_clk_notifier_block *clknb)
94b5e8d269SRafael J. Wysocki {
95b5e8d269SRafael J. Wysocki }
96b5e8d269SRafael J. Wysocki #endif
97b5e8d269SRafael J. Wysocki 
98b5e8d269SRafael J. Wysocki #endif
99