diff options
author | Len Brown <len.brown@intel.com> | 2007-05-10 02:49:01 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-05-10 02:49:01 -0400 |
commit | f697b677620d04d8c77841745727de85f7e948b1 (patch) | |
tree | efec1330b3ecce0daf5c855ae07696e7490fd2ea /drivers | |
parent | de5603748af8bf7deac403e6ba92887f8d18e812 (diff) | |
parent | eaca2d3f6c4de9d4274a4e2be54c9693e76b0303 (diff) |
Pull thermal into release branch
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/thermal.c | 104 |
1 files changed, 2 insertions, 102 deletions
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index 589b98b7b216..1ada017d01ef 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
@@ -59,8 +59,6 @@ | |||
59 | #define ACPI_THERMAL_NOTIFY_CRITICAL 0xF0 | 59 | #define ACPI_THERMAL_NOTIFY_CRITICAL 0xF0 |
60 | #define ACPI_THERMAL_NOTIFY_HOT 0xF1 | 60 | #define ACPI_THERMAL_NOTIFY_HOT 0xF1 |
61 | #define ACPI_THERMAL_MODE_ACTIVE 0x00 | 61 | #define ACPI_THERMAL_MODE_ACTIVE 0x00 |
62 | #define ACPI_THERMAL_MODE_PASSIVE 0x01 | ||
63 | #define ACPI_THERMAL_MODE_CRITICAL 0xff | ||
64 | #define ACPI_THERMAL_PATH_POWEROFF "/sbin/poweroff" | 62 | #define ACPI_THERMAL_PATH_POWEROFF "/sbin/poweroff" |
65 | 63 | ||
66 | #define ACPI_THERMAL_MAX_ACTIVE 10 | 64 | #define ACPI_THERMAL_MAX_ACTIVE 10 |
@@ -86,9 +84,6 @@ static int acpi_thermal_resume(struct acpi_device *device); | |||
86 | static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file); | 84 | static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file); |
87 | static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file); | 85 | static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file); |
88 | static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file); | 86 | static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file); |
89 | static ssize_t acpi_thermal_write_trip_points(struct file *, | ||
90 | const char __user *, size_t, | ||
91 | loff_t *); | ||
92 | static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file); | 87 | static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file); |
93 | static ssize_t acpi_thermal_write_cooling_mode(struct file *, | 88 | static ssize_t acpi_thermal_write_cooling_mode(struct file *, |
94 | const char __user *, size_t, | 89 | const char __user *, size_t, |
@@ -167,7 +162,6 @@ struct acpi_thermal { | |||
167 | unsigned long temperature; | 162 | unsigned long temperature; |
168 | unsigned long last_temperature; | 163 | unsigned long last_temperature; |
169 | unsigned long polling_frequency; | 164 | unsigned long polling_frequency; |
170 | u8 cooling_mode; | ||
171 | volatile u8 zombie; | 165 | volatile u8 zombie; |
172 | struct acpi_thermal_flags flags; | 166 | struct acpi_thermal_flags flags; |
173 | struct acpi_thermal_state state; | 167 | struct acpi_thermal_state state; |
@@ -193,7 +187,6 @@ static const struct file_operations acpi_thermal_temp_fops = { | |||
193 | static const struct file_operations acpi_thermal_trip_fops = { | 187 | static const struct file_operations acpi_thermal_trip_fops = { |
194 | .open = acpi_thermal_trip_open_fs, | 188 | .open = acpi_thermal_trip_open_fs, |
195 | .read = seq_read, | 189 | .read = seq_read, |
196 | .write = acpi_thermal_write_trip_points, | ||
197 | .llseek = seq_lseek, | 190 | .llseek = seq_lseek, |
198 | .release = single_release, | 191 | .release = single_release, |
199 | }; | 192 | }; |
@@ -297,11 +290,6 @@ static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode) | |||
297 | if (ACPI_FAILURE(status)) | 290 | if (ACPI_FAILURE(status)) |
298 | return -ENODEV; | 291 | return -ENODEV; |
299 | 292 | ||
300 | tz->cooling_mode = mode; | ||
301 | |||
302 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling mode [%s]\n", | ||
303 | mode ? "passive" : "active")); | ||
304 | |||
305 | return 0; | 293 | return 0; |
306 | } | 294 | } |
307 | 295 | ||
@@ -889,67 +877,6 @@ static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file) | |||
889 | return single_open(file, acpi_thermal_trip_seq_show, PDE(inode)->data); | 877 | return single_open(file, acpi_thermal_trip_seq_show, PDE(inode)->data); |
890 | } | 878 | } |
891 | 879 | ||
892 | static ssize_t | ||
893 | acpi_thermal_write_trip_points(struct file *file, | ||
894 | const char __user * buffer, | ||
895 | size_t count, loff_t * ppos) | ||
896 | { | ||
897 | struct seq_file *m = file->private_data; | ||
898 | struct acpi_thermal *tz = m->private; | ||
899 | |||
900 | char *limit_string; | ||
901 | int num, critical, hot, passive; | ||
902 | int *active; | ||
903 | int i = 0; | ||
904 | |||
905 | |||
906 | limit_string = kzalloc(ACPI_THERMAL_MAX_LIMIT_STR_LEN, GFP_KERNEL); | ||
907 | if (!limit_string) | ||
908 | return -ENOMEM; | ||
909 | |||
910 | active = kmalloc(ACPI_THERMAL_MAX_ACTIVE * sizeof(int), GFP_KERNEL); | ||
911 | if (!active) { | ||
912 | kfree(limit_string); | ||
913 | return -ENOMEM; | ||
914 | } | ||
915 | |||
916 | if (!tz || (count > ACPI_THERMAL_MAX_LIMIT_STR_LEN - 1)) { | ||
917 | count = -EINVAL; | ||
918 | goto end; | ||
919 | } | ||
920 | |||
921 | if (copy_from_user(limit_string, buffer, count)) { | ||
922 | count = -EFAULT; | ||
923 | goto end; | ||
924 | } | ||
925 | |||
926 | limit_string[count] = '\0'; | ||
927 | |||
928 | num = sscanf(limit_string, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", | ||
929 | &critical, &hot, &passive, | ||
930 | &active[0], &active[1], &active[2], &active[3], &active[4], | ||
931 | &active[5], &active[6], &active[7], &active[8], | ||
932 | &active[9]); | ||
933 | if (!(num >= 5 && num < (ACPI_THERMAL_MAX_ACTIVE + 3))) { | ||
934 | count = -EINVAL; | ||
935 | goto end; | ||
936 | } | ||
937 | |||
938 | tz->trips.critical.temperature = CELSIUS_TO_KELVIN(critical); | ||
939 | tz->trips.hot.temperature = CELSIUS_TO_KELVIN(hot); | ||
940 | tz->trips.passive.temperature = CELSIUS_TO_KELVIN(passive); | ||
941 | for (i = 0; i < num - 3; i++) { | ||
942 | if (!(tz->trips.active[i].flags.valid)) | ||
943 | break; | ||
944 | tz->trips.active[i].temperature = CELSIUS_TO_KELVIN(active[i]); | ||
945 | } | ||
946 | |||
947 | end: | ||
948 | kfree(active); | ||
949 | kfree(limit_string); | ||
950 | return count; | ||
951 | } | ||
952 | |||
953 | static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset) | 880 | static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset) |
954 | { | 881 | { |
955 | struct acpi_thermal *tz = seq->private; | 882 | struct acpi_thermal *tz = seq->private; |
@@ -958,15 +885,10 @@ static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset) | |||
958 | if (!tz) | 885 | if (!tz) |
959 | goto end; | 886 | goto end; |
960 | 887 | ||
961 | if (!tz->flags.cooling_mode) { | 888 | if (!tz->flags.cooling_mode) |
962 | seq_puts(seq, "<setting not supported>\n"); | 889 | seq_puts(seq, "<setting not supported>\n"); |
963 | } | ||
964 | |||
965 | if (tz->cooling_mode == ACPI_THERMAL_MODE_CRITICAL) | ||
966 | seq_printf(seq, "cooling mode: critical\n"); | ||
967 | else | 890 | else |
968 | seq_printf(seq, "cooling mode: %s\n", | 891 | seq_puts(seq, "0 - Active; 1 - Passive\n"); |
969 | tz->cooling_mode ? "passive" : "active"); | ||
970 | 892 | ||
971 | end: | 893 | end: |
972 | return 0; | 894 | return 0; |
@@ -1223,28 +1145,6 @@ static int acpi_thermal_get_info(struct acpi_thermal *tz) | |||
1223 | result = acpi_thermal_set_cooling_mode(tz, ACPI_THERMAL_MODE_ACTIVE); | 1145 | result = acpi_thermal_set_cooling_mode(tz, ACPI_THERMAL_MODE_ACTIVE); |
1224 | if (!result) | 1146 | if (!result) |
1225 | tz->flags.cooling_mode = 1; | 1147 | tz->flags.cooling_mode = 1; |
1226 | else { | ||
1227 | /* Oh,we have not _SCP method. | ||
1228 | Generally show cooling_mode by _ACx, _PSV,spec 12.2 */ | ||
1229 | tz->flags.cooling_mode = 0; | ||
1230 | if (tz->trips.active[0].flags.valid | ||
1231 | && tz->trips.passive.flags.valid) { | ||
1232 | if (tz->trips.passive.temperature > | ||
1233 | tz->trips.active[0].temperature) | ||
1234 | tz->cooling_mode = ACPI_THERMAL_MODE_ACTIVE; | ||
1235 | else | ||
1236 | tz->cooling_mode = ACPI_THERMAL_MODE_PASSIVE; | ||
1237 | } else if (!tz->trips.active[0].flags.valid | ||
1238 | && tz->trips.passive.flags.valid) { | ||
1239 | tz->cooling_mode = ACPI_THERMAL_MODE_PASSIVE; | ||
1240 | } else if (tz->trips.active[0].flags.valid | ||
1241 | && !tz->trips.passive.flags.valid) { | ||
1242 | tz->cooling_mode = ACPI_THERMAL_MODE_ACTIVE; | ||
1243 | } else { | ||
1244 | /* _ACx and _PSV are optional, but _CRT is required */ | ||
1245 | tz->cooling_mode = ACPI_THERMAL_MODE_CRITICAL; | ||
1246 | } | ||
1247 | } | ||
1248 | 1148 | ||
1249 | /* Get default polling frequency [_TZP] (optional) */ | 1149 | /* Get default polling frequency [_TZP] (optional) */ |
1250 | if (tzp) | 1150 | if (tzp) |