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 15struct 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 22static 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 28extern void pm_clk_init(struct device *dev); 29extern int pm_clk_create(struct device *dev); 30extern void pm_clk_destroy(struct device *dev); 31extern int pm_clk_add(struct device *dev, const char *con_id); 32extern void pm_clk_remove(struct device *dev, const char *con_id); 33extern int pm_clk_suspend(struct device *dev); 34extern int pm_clk_resume(struct device *dev); 35#else 36static inline bool pm_clk_no_clocks(struct device *dev) 37{ 38 return true; 39} 40static inline void pm_clk_init(struct device *dev) 41{ 42} 43static inline int pm_clk_create(struct device *dev) 44{ 45 return -EINVAL; 46} 47static inline void pm_clk_destroy(struct device *dev) 48{ 49} 50static inline int pm_clk_add(struct device *dev, const char *con_id) 51{ 52 return -EINVAL; 53} 54static 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 62extern void pm_clk_add_notifier(struct bus_type *bus, 63 struct pm_clk_notifier_block *clknb); 64#else 65static 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