drivers: skin: Skin prediction algorithm
[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
22 enum thermal_device_id {
23         THERMAL_DEVICE_ID_NULL = 0x0,
24         THERMAL_DEVICE_ID_NCT_EXT = 0x1,
25         THERMAL_DEVICE_ID_NCT_INT = 0x2,
26         THERMAL_DEVICE_ID_TSENSOR = 0x4,
27         THERMAL_DEVICE_ID_SKIN = 0x8,
28 };
29
30 #define THERMAL_DEVICE_MAX      (4)
31
32 enum balanced_throttle_id {
33         BALANCED_THROTTLE_ID_TJ,
34         BALANCED_THROTTLE_ID_SKIN,
35 };
36
37 struct skin_therm_est_subdevice {
38         enum thermal_device_id id;
39         long coeffs[HIST_LEN];
40 };
41
42 /* All units in millicelsius */
43 struct tegra_thermal_data {
44         enum thermal_device_id shutdown_device_id;
45         long temp_shutdown;
46 #if defined(CONFIG_TEGRA_EDP_LIMITS) || defined(CONFIG_TEGRA_THERMAL_THROTTLE)
47         enum thermal_device_id throttle_edp_device_id;
48 #endif
49 #ifdef CONFIG_TEGRA_EDP_LIMITS
50         long edp_offset;
51         long hysteresis_edp;
52 #endif
53 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
54         long temp_throttle;
55         int tc1;
56         int tc2;
57         long passive_delay;
58 #endif
59 #ifdef CONFIG_TEGRA_SKIN_THROTTLE
60         enum thermal_device_id skin_device_id;
61         long temp_throttle_skin;
62         int tc1_skin;
63         int tc2_skin;
64         int passive_delay_skin;
65
66         long skin_temp_offset;
67         long skin_period;
68         int skin_devs_size;
69         struct skin_therm_est_subdevice skin_devs[];
70 #endif
71 };
72
73 struct tegra_thermal_device {
74         char *name;
75         enum thermal_device_id id;
76         void *data;
77         long offset;
78         int (*get_temp) (void *, long *);
79         int (*get_temp_low)(void *, long *);
80         int (*set_limits) (void *, long, long);
81         int (*set_alert)(void *, void (*)(void *), void *);
82         int (*set_shutdown_temp)(void *, long);
83 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
84         struct thermal_zone_device *thz;
85 #endif
86         struct list_head node;
87 };
88
89 struct throttle_table {
90         unsigned int cpu_freq;
91         int core_cap_level;
92 };
93
94 #define MAX_THROT_TABLE_SIZE    (32)
95
96 struct balanced_throttle {
97         enum balanced_throttle_id id;
98
99         int is_throttling;
100         int throttle_index;
101         struct thermal_cooling_device *cdev;
102
103         struct list_head node;
104
105         int throt_tab_size;
106         struct throttle_table throt_tab[MAX_THROT_TABLE_SIZE];
107 };
108
109 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
110 int balanced_throttle_register(struct balanced_throttle *bthrot);
111 #else
112 static inline int balanced_throttle_register(struct balanced_throttle *bthrot)
113 { return 0; }
114 #endif
115
116 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
117 int tegra_thermal_init(struct tegra_thermal_data *data,
118                                 struct balanced_throttle *throttle_list,
119                                 int throttle_list_size);
120 int tegra_thermal_device_register(struct tegra_thermal_device *device);
121 int tegra_thermal_exit(void);
122 #else
123 static inline int tegra_thermal_init(struct tegra_thermal_data *data,
124                                         struct balanced_throttle throttle_list,
125                                         int throttle_list_size);
126 { return 0; }
127 static int tegra_thermal_device_register(struct tegra_thermal_device *device)
128 { return 0; }
129 static inline int tegra_thermal_exit(void)
130 { return 0; }
131 #endif
132
133 #endif  /* __MACH_THERMAL_H */