03c579e2143f7d81216cc7b8cfaf242f2d0308e3
[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 /* Sets clocks and powergating state for a module */
33 int nvhost_module_init(struct platform_device *ndev);
34 void nvhost_module_deinit(struct platform_device *dev);
35 int nvhost_module_suspend(struct platform_device *dev);
36
37 void nvhost_module_reset(struct platform_device *dev);
38 void nvhost_module_busy(struct platform_device *dev);
39 void nvhost_module_idle_mult(struct platform_device *dev, int refs);
40 int nvhost_module_add_client(struct platform_device *dev,
41                 void *priv);
42 void nvhost_module_remove_client(struct platform_device *dev,
43                 void *priv);
44 int nvhost_module_get_rate(struct platform_device *dev,
45                 unsigned long *rate,
46                 int index);
47 int nvhost_module_set_rate(struct platform_device *dev, void *priv,
48                 unsigned long rate, int index, int bBW);
49 int nvhost_module_set_devfreq_rate(struct platform_device *dev, int index,
50                 unsigned long rate);
51
52 static inline bool nvhost_module_powered(struct platform_device *dev)
53 {
54         return !pm_runtime_status_suspended(&dev->dev);
55 }
56
57 static inline void nvhost_module_idle(struct platform_device *dev)
58 {
59         nvhost_module_idle_mult(dev, 1);
60 }
61
62 /* common runtime pm and power domain APIs */
63 int nvhost_module_add_domain(struct generic_pm_domain *domain,
64         struct platform_device *pdev);
65 int nvhost_module_enable_clk(struct device *dev);
66 int nvhost_module_disable_clk(struct device *dev);
67 int nvhost_module_power_on(struct platform_device *pdev);
68 int nvhost_module_power_off(struct platform_device *pdev);
69 int nvhost_module_prepare_poweroff(struct device *dev);
70 int nvhost_module_finalize_poweron(struct device *dev);
71
72 #endif