Avoid critical temp shutdowns on specific ThinkPad T4x(p) and R50p

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This came in in OpenSUSE 10.3. When we still had overriden thermal polling
frequency (what we probably will do again soon). It has been tested that
specific ThinkPads do not throw a thermal event when exceeding the passive
trip point. Even thermal polling was not enough...
As no other solution has been found meanwhile and it seems Windows is also
using a virtual passive trip point:
[Bug 10658] thermal shutdown - Dell Precision M20, Latitude D610
http://bugzilla.kernel.org/show_bug.cgi?id=10658
it would be great to get this integrated into the mainline kernel.

BTW, the patch from Matthew in above bug, will this in some way be
integerated mainline? Otherwise we'll have to maintain this one ourself.

         Thomas

From: Thomas Renninger <trenn@xxxxxxx>
Subject: Avoid critical temp shutdowns on specific ThinkPad T4x(p) and R50p
References: https://bugzilla.novell.com/show_bug.cgi?id=333043

---
 drivers/acpi/thermal.c |   73 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

Index: linux-2.6.25-SL110_BRANCH/drivers/acpi/thermal.c
===================================================================
--- linux-2.6.25-SL110_BRANCH.orig/drivers/acpi/thermal.c
+++ linux-2.6.25-SL110_BRANCH/drivers/acpi/thermal.c
@@ -42,6 +42,7 @@
 #include <linux/kmod.h>
 #include <linux/seq_file.h>
 #include <linux/reboot.h>
+#include <linux/dmi.h>
 #include <asm/uaccess.h>
 #include <linux/thermal.h>
 #include <acpi/acpi_bus.h>
@@ -1576,6 +1577,66 @@ static int acpi_thermal_get_info(struct
 	return 0;
 }
 
+static struct dmi_system_id thermal_psv_dmi_table[] = {
+	{
+		.ident = "IBM ThinkPad T41",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T41"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad T42",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T42"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad T43",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T43"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad T41p",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T41p"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad T42p",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T42p"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad T43p",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad T43p"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad R40",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad R40"),
+		},
+	},
+	{
+		.ident = "IBM ThinkPad R50p",
+		.matches = {
+			DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
+			DMI_MATCH(DMI_PRODUCT_VERSION,"ThinkPad R50p"),
+		},
+	},
+	{},
+};
+
 static int acpi_thermal_add(struct acpi_device *device)
 {
 	int result = 0;
@@ -1606,6 +1667,18 @@ static int acpi_thermal_add(struct acpi_
 	if (result)
 		goto free_memory;
 
+	if (dmi_check_system(thermal_psv_dmi_table)) {
+		if (tz->trips.passive.flags.valid &&
+		    tz->trips.passive.temperature > CELSIUS_TO_KELVIN(85)) {
+			printk (KERN_INFO "Adjust passive trip point from %lu"
+				" to %lu\n",
+				KELVIN_TO_CELSIUS(tz->trips.passive.temperature),
+				KELVIN_TO_CELSIUS(tz->trips.passive.temperature - 150));
+			tz->trips.passive.temperature -= 150;
+			acpi_thermal_set_polling(tz, 5);
+		}
+	}
+
 	result = acpi_thermal_add_fs(device);
 	if (result)
 		goto unregister_thermal_zone;
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux