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