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