ARM: tegra: Object based balanced 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-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 /* All units in millicelsius */
21 struct tegra_thermal_data {
22         long temp_shutdown;
23         long temp_offset;
24 #ifdef CONFIG_TEGRA_EDP_LIMITS
25         long edp_offset;
26         long hysteresis_edp;
27 #endif
28 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
29         long temp_throttle;
30         int tc1;
31         int tc2;
32         long passive_delay;
33 #endif
34 };
35
36 struct tegra_thermal_device {
37         char *name;
38         void *data;
39         long offset;
40         int (*get_temp) (void *, long *);
41         int (*get_temp_low)(void *, long *);
42         int (*set_limits) (void *, long, long);
43         int (*set_alert)(void *, void (*)(void *), void *);
44         int (*set_shutdown_temp)(void *, long);
45 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
46         struct thermal_zone_device *thz;
47 #endif
48 };
49
50 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
51 struct throttle_table {
52         unsigned int cpu_freq;
53         int core_cap_level;
54 };
55
56 struct balanced_throttle {
57         int id;
58         struct throttle_table *throt_tab;
59         int throt_tab_size;
60
61         int is_throttling;
62         int throttle_index;
63         struct thermal_cooling_device *cdev;
64
65         struct list_head node;
66 };
67
68 struct balanced_throttle *balanced_throttle_register(
69                                         int id,
70                                         struct throttle_table *table,
71                                         int tab_size);
72 #endif
73
74 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
75 int tegra_thermal_init(struct tegra_thermal_data *data);
76 int tegra_thermal_set_device(struct tegra_thermal_device *device);
77 int tegra_thermal_exit(void);
78 #else
79 static inline int tegra_thermal_init(struct tegra_thermal_data *data)
80 { return 0; }
81 static inline int tegra_thermal_set_device(struct tegra_thermal_device *dev)
82 { return 0; }
83 static inline int tegra_thermal_exit(void)
84 { return 0; }
85 #endif
86
87 #endif  /* __MACH_THERMAL_H */