video: tegra: host: handle !PM_RUNTIME
[linux-3.10.git] / drivers / video / tegra / host / nvhost_acm.h
1 /*
2  * drivers/video/tegra/host/nvhost_acm.h
3  *
4  * Tegra Graphics Host Automatic Clock Management
5  *
6  * Copyright (c) 2010-2012, NVIDIA Corporation.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms and conditions of the GNU General Public License,
10  * version 2, as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef __NVHOST_ACM_H
22 #define __NVHOST_ACM_H
23
24 #include <linux/workqueue.h>
25 #include <linux/wait.h>
26 #include <linux/mutex.h>
27 #include <linux/clk.h>
28 #include <linux/pm_domain.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/nvhost.h>
31
32 extern const struct dev_pm_ops nvhost_module_pm_ops;
33
34 /* Sets clocks and powergating state for a module */
35 int nvhost_module_init(struct platform_device *ndev);
36 void nvhost_module_deinit(struct platform_device *dev);
37 int nvhost_module_suspend(struct platform_device *dev);
38
39 void nvhost_module_reset(struct platform_device *dev);
40 void nvhost_module_busy(struct platform_device *dev);
41 void nvhost_module_idle_mult(struct platform_device *dev, int refs);
42 int nvhost_module_add_client(struct platform_device *dev,
43                 void *priv);
44 void nvhost_module_remove_client(struct platform_device *dev,
45                 void *priv);
46 int nvhost_module_get_rate(struct platform_device *dev,
47                 unsigned long *rate,
48                 int index);
49 int nvhost_module_set_rate(struct platform_device *dev, void *priv,
50                 unsigned long rate, int index, int bBW);
51 int nvhost_module_set_devfreq_rate(struct platform_device *dev, int index,
52                 unsigned long rate);
53
54 static inline bool nvhost_module_powered(struct platform_device *dev)
55 {
56         return !pm_runtime_status_suspended(&dev->dev);
57 }
58
59 static inline void nvhost_module_idle(struct platform_device *dev)
60 {
61         nvhost_module_idle_mult(dev, 1);
62 }
63
64 /* common runtime pm and power domain APIs */
65 int nvhost_module_add_domain(struct generic_pm_domain *domain,
66         struct platform_device *pdev);
67 int nvhost_module_enable_clk(struct device *dev);
68 int nvhost_module_disable_clk(struct device *dev);
69 int nvhost_module_power_on(struct platform_device *pdev);
70 int nvhost_module_power_off(struct platform_device *pdev);
71 int nvhost_module_prepare_poweroff(struct device *dev);
72 int nvhost_module_finalize_poweron(struct device *dev);
73
74 #endif