ARM: tegra: fix balanced throttling behaviour
[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-2012 NVIDIA Corporation.
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                  0 /* no cap. cannot be used for CPU */
31 #define CPU_THROT_LOW           0 /* lowest throttle freq. only used for CPU */
32
33 #ifdef CONFIG_TEGRA_DUAL_CBUS
34 #define NUM_OF_CAP_FREQS        5 /* cpu, c2bus, c3bus, sclk, emc */
35 #else
36 #define NUM_OF_CAP_FREQS        4 /* cpu, cbus, sclk, emc */
37 #endif
38
39 struct throttle_table {
40         unsigned long cap_freqs[NUM_OF_CAP_FREQS];
41 };
42
43 struct balanced_throttle {
44         struct thermal_cooling_device *cdev;
45         struct list_head node;
46         unsigned long cur_state;
47         unsigned long cpu_cap_freq;
48         int throttle_count;
49         int throt_tab_size;
50         struct throttle_table *throt_tab;
51 };
52
53 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
54 int tegra_throttle_init(struct mutex *cpu_lock);
55 struct thermal_cooling_device *balanced_throttle_register(
56                 struct balanced_throttle *bthrot,
57                 char *type);
58 void tegra_throttle_exit(void);
59 bool tegra_is_throttling(int *count);
60 unsigned int tegra_throttle_governor_speed(unsigned int requested_speed);
61 #else
62 static inline int tegra_throttle_init(struct mutex *cpu_lock)
63 { return 0; }
64 static inline struct thermal_cooling_device *balanced_throttle_register(
65                 struct balanced_throttle *bthrot,
66                 char *type)
67 { return ERR_PTR(-ENODEV); }
68 static inline void tegra_throttle_exit(void)
69 {}
70 static inline bool tegra_is_throttling(int *count)
71 { return false; }
72 static inline unsigned int tegra_throttle_governor_speed(
73         unsigned int requested_speed)
74 { return requested_speed; }
75 #endif /* CONFIG_TEGRA_THERMAL_THROTTLE */
76
77 #endif  /* __MACH_THERMAL_H */