1 /* 2 * pm_clock.h - Definitions and headers related to device clocks. 3 * 4 * Copyright (C) 2011 Rafael J. Wysocki <rjw@sisk.pl>, Renesas Electronics Corp. 5 * 6 * This file is released under the GPLv2. 7 */ 8 9 #ifndef _LINUX_PM_CLOCK_H 10 #define _LINUX_PM_CLOCK_H 11 12 #include <linux/device.h> 13 #include <linux/notifier.h> 14 15 struct pm_clk_notifier_block { 16 struct notifier_block nb; 17 struct dev_pm_domain *pm_domain; 18 char *con_ids[]; 19 }; 20 21 #ifdef CONFIG_PM_CLK 22 static inline bool pm_clk_no_clocks(struct device *dev) 23 { 24 return dev && dev->power.subsys_data 25 && list_empty(&dev->power.subsys_data->clock_list); 26 } 27 28 extern void pm_clk_init(struct device *dev); 29 extern int pm_clk_create(struct device *dev); 30 extern void pm_clk_destroy(struct device *dev); 31 extern int pm_clk_add(struct device *dev, const char *con_id); 32 extern void pm_clk_remove(struct device *dev, const char *con_id); 33 extern int pm_clk_suspend(struct device *dev); 34 extern int pm_clk_resume(struct device *dev); 35 #else 36 static inline bool pm_clk_no_clocks(struct device *dev) 37 { 38 return true; 39 } 40 static inline void pm_clk_init(struct device *dev) 41 { 42 } 43 static inline int pm_clk_create(struct device *dev) 44 { 45 return -EINVAL; 46 } 47 static inline void pm_clk_destroy(struct device *dev) 48 { 49 } 50 static inline int pm_clk_add(struct device *dev, const char *con_id) 51 { 52 return -EINVAL; 53 } 54 static inline void pm_clk_remove(struct device *dev, const char *con_id) 55 { 56 } 57 #define pm_clk_suspend NULL 58 #define pm_clk_resume NULL 59 #endif 60 61 #ifdef CONFIG_HAVE_CLK 62 extern void pm_clk_add_notifier(struct bus_type *bus, 63 struct pm_clk_notifier_block *clknb); 64 #else 65 static inline void pm_clk_add_notifier(struct bus_type *bus, 66 struct pm_clk_notifier_block *clknb) 67 { 68 } 69 #endif 70 71 #endif 72