ARM: tegra: update balanced throttling table
[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_ARCH_TEGRA_12x_SOC
34 #define GBUS_CNT                1
35 #else
36 #define GBUS_CNT                0
37 #endif
38
39 #ifdef CONFIG_TEGRA_DUAL_CBUS
40 #define CBUS_CNT                2
41 #else
42 #define CBUS_CNT                1
43 #endif
44
45 /* cpu, gpu(0|1), cbus(1|2), sclk, emc */
46 #define NUM_OF_CAP_FREQS        (1 + GBUS_CNT + CBUS_CNT + 1 + 1)
47
48 struct throttle_table {
49         unsigned long cap_freqs[NUM_OF_CAP_FREQS];
50 };
51
52 struct balanced_throttle {
53         struct thermal_cooling_device *cdev;
54         struct list_head node;
55         unsigned long cur_state;
56         int throttle_count;
57         int throt_tab_size;
58         struct throttle_table *throt_tab;
59 };
60
61 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
62 int tegra_throttle_init(struct mutex *cpu_lock);
63 struct thermal_cooling_device *balanced_throttle_register(
64                 struct balanced_throttle *bthrot,
65                 char *type);
66 void tegra_throttle_exit(void);
67 bool tegra_is_throttling(int *count);
68 unsigned long tegra_throttle_governor_speed(unsigned long requested_speed);
69 #else
70 static inline int tegra_throttle_init(struct mutex *cpu_lock)
71 { return 0; }
72 static inline struct thermal_cooling_device *balanced_throttle_register(
73                 struct balanced_throttle *bthrot,
74                 char *type)
75 { return ERR_PTR(-ENODEV); }
76 static inline void tegra_throttle_exit(void)
77 {}
78 static inline bool tegra_is_throttling(int *count)
79 { return false; }
80 static inline unsigned long tegra_throttle_governor_speed(
81         unsigned long requested_speed)
82 { return requested_speed; }
83 #endif /* CONFIG_TEGRA_THERMAL_THROTTLE */
84
85 #endif  /* __MACH_THERMAL_H */