ARM: tegra: thermal: Refactor struct balanced_throttle
[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 enum thermal_device_id {
24         THERMAL_DEVICE_ID_NULL = 0,
25         THERMAL_DEVICE_ID_NCT_EXT = 1,
26         THERMAL_DEVICE_ID_NCT_INT = 2,
27         THERMAL_DEVICE_ID_TSENSOR = 3,
28         THERMAL_DEVICE_ID_THERM_EST_SKIN = 4,
29 };
30
31 #define THERMAL_DEVICE_MAX      (5)
32
33 enum cooling_device_id {
34         CDEV_BTHROT_ID_TJ      = 0x00010000,
35         CDEV_EDPTABLE_ID_EDP   = 0x00030000,
36         CDEV_EDPTABLE_ID_EDP_0 = 0x00030000,
37         CDEV_EDPTABLE_ID_EDP_1 = 0x00030001,
38         CDEV_EDPTABLE_ID_EDP_2 = 0x00030002,
39         CDEV_EDPTABLE_ID_EDP_3 = 0x00030003,
40         CDEV_EDPTABLE_ID_EDP_4 = 0x00030004,
41 };
42
43 struct tegra_thermal_bind {
44         enum thermal_device_id tdev_id;
45         enum cooling_device_id cdev_id;
46         int type;
47         int (*get_trip_temp) (void *, long);
48         int (*get_trip_size) (void);
49         struct passive_params {
50                 long trip_temp;
51                 int tc1;
52                 int tc2;
53                 long passive_delay;
54         } passive;
55 };
56
57 struct tegra_thermal_device {
58         char *name;
59         enum thermal_device_id id;
60         void *data;
61         int (*get_temp) (void *, long *);
62         int (*set_limits) (void *, long, long);
63         int (*set_alert)(void *, void (*)(void *), void *);
64         struct thermal_zone_device *thz;
65         struct list_head node;
66 };
67
68 struct tegra_cooling_device {
69         enum cooling_device_id id;
70         char *cdev_type;
71         int *trip_temperatures;
72         int trip_temperatures_num;
73 };
74
75 #define MAX_THROT_TABLE_SIZE    (64)
76
77 struct throttle_table {
78         unsigned int cpu_freq;
79         int core_cap_level;
80 };
81
82 struct balanced_throttle {
83         struct thermal_cooling_device *cdev;
84         struct list_head node;
85         int is_throttling;
86         int throttle_count;
87         int throttle_index;
88         int throt_tab_size;
89         struct throttle_table *throt_tab;
90 };
91
92 #ifdef CONFIG_TEGRA_THERMAL_THROTTLE
93 int tegra_throttle_init(struct mutex *cpu_lock);
94 struct thermal_cooling_device *balanced_throttle_register(
95                 struct balanced_throttle *bthrot,
96                 char *type);
97 void tegra_throttle_exit(void);
98 bool tegra_is_throttling(int *count);
99 unsigned int tegra_throttle_governor_speed(unsigned int requested_speed);
100 #else
101 static inline int tegra_throttle_init(struct mutex *cpu_lock)
102 { return 0; }
103 static inline struct thermal_cooling_device *balanced_throttle_register(
104                 struct balanced_throttle *bthrot,
105                 char *type)
106 { return ERR_PTR(-ENODEV); }
107 static inline void tegra_throttle_exit(void)
108 {}
109 static inline bool tegra_is_throttling(int *count)
110 { return false; }
111 static inline unsigned int tegra_throttle_governor_speed(
112         unsigned int requested_speed)
113 { return requested_speed; }
114 #endif /* CONFIG_TEGRA_THERMAL_THROTTLE */
115
116 #ifdef CONFIG_TEGRA_THERMAL
117 int tegra_thermal_init(struct tegra_thermal_bind *thermal_binds);
118 int tegra_thermal_device_register(struct tegra_thermal_device *device);
119 int tegra_thermal_exit(void);
120 #else
121 static inline int tegra_thermal_init(struct tegra_thermal_bind *thermal_binds)
122 { return 0; }
123 static inline int tegra_thermal_device_register(struct tegra_thermal_device *device)
124 { return 0; }
125 static inline int tegra_thermal_exit(void)
126 { return 0; }
127 #endif
128
129 #endif  /* __MACH_THERMAL_H */