ARM: tegra: use general clock framework for GPU throttling
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / thermal.h
1 /*
2  * arch/arm/mach-tegra/thermal.h
3  *
4  * Copyright (c) 2010-2013 NVIDIA CORPORATION. All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef __MACH_THERMAL_H
18 #define __MACH_THERMAL_H
19
20 #include <linux/therm_est.h>
21 #include <linux/thermal.h>
22
23 struct tegra_cooling_device {
24         char *cdev_type;
25         int *trip_temperatures;
26         int trip_temperatures_num;
27 };
28
29 #define MAX_THROT_TABLE_SIZE    (64)
30 #define NO_CAP                  (ULONG_MAX) /* no cap */
31 #define CPU_THROT_LOW           0 /* lowest throttle freq. only used for CPU */
32
33 #ifdef CONFIG_TEGRA_DUAL_CBUS
34 #ifdef CONFIG_TEGRA_GPU_DVFS
35 #define NUM_OF_CAP_FREQS        5 /* cpu, gpu, c3bus, sclk, emc */
36 #else
37 #define NUM_OF_CAP_FREQS        5 /* cpu, c2bus, c3bus, sclk, emc */
38 #endif
39 #else
40 #define NUM_OF_CAP_FREQS        4 /* cpu, cbus, sclk, emc */
41 #endif
42
43 struct throttle_table {
44         unsigned long cap_freqs[NUM_OF_CAP_FREQS];
45 };
46
47 struct balanced_throttle {
48         struct thermal_cooling_device *cdev;
49         struct list_head node;
50         unsigned long cur_state;
51         int throttle_count;
52         int throt_tab_size;
53         struct throttle_table *throt_tab;
54 };
55
56 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
57 int tegra_throttle_init(struct mutex *cpu_lock);
58 struct thermal_cooling_device *balanced_throttle_register(
59                 struct balanced_throttle *bthrot,
60                 char *type);
61 void tegra_throttle_exit(void);
62 bool tegra_is_throttling(int *count);
63 unsigned long tegra_throttle_governor_speed(unsigned long requested_speed);
64 #else
65 static inline int tegra_throttle_init(struct mutex *cpu_lock)
66 { return 0; }
67 static inline struct thermal_cooling_device *balanced_throttle_register(
68                 struct balanced_throttle *bthrot,
69                 char *type)
70 { return ERR_PTR(-ENODEV); }
71 static inline void tegra_throttle_exit(void)
72 {}
73 static inline bool tegra_is_throttling(int *count)
74 { return false; }
75 static inline unsigned long tegra_throttle_governor_speed(
76         unsigned long requested_speed)
77 { return requested_speed; }
78 #endif /* CONFIG_TEGRA_THERMAL_THROTTLE */
79
80 #endif  /* __MACH_THERMAL_H */