summaryrefslogtreecommitdiffstats
path: root/abs/core/kernel26.orig/coretemp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/kernel26.orig/coretemp.patch')
-rw-r--r--abs/core/kernel26.orig/coretemp.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/abs/core/kernel26.orig/coretemp.patch b/abs/core/kernel26.orig/coretemp.patch
new file mode 100644
index 0000000..07ce434
--- /dev/null
+++ b/abs/core/kernel26.orig/coretemp.patch
@@ -0,0 +1,86 @@
+diff -ubr orig/linux-2.6.28/Documentation/hwmon/coretemp linux-2.6.28/Documentation/hwmon/coretemp
+--- orig/linux-2.6.28/Documentation/hwmon/coretemp 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/Documentation/hwmon/coretemp 2009-07-18 07:29:37.000000000 +0200
+@@ -4,7 +4,7 @@
+ Supported chips:
+ * All Intel Core family
+ Prefix: 'coretemp'
+- CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
++ CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c
+ Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
+ Volume 3A: System Programming Guide
+ http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
+@@ -14,10 +14,11 @@
+ Description
+ -----------
+
+-This driver permits reading temperature sensor embedded inside Intel Core CPU.
+-Temperature is measured in degrees Celsius and measurement resolution is
+-1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
+-the actual value of temperature register is in fact a delta from TjMax.
++This driver permits reading temperature sensor embedded inside Intel
++Core and Intel Atom CPUs. Temperature is measured in degrees Celsius
++and measurement resolution is 1 degree C. Valid temperatures are from 0
++to TjMax degrees C, because the actual value of temperature register is
++in fact a delta from TjMax.
+
+ Temperature known as TjMax is the maximum junction temperature of processor.
+ Intel defines this temperature as 85C or 100C. At this temperature, protection
+@@ -35,4 +36,5 @@
+
+ The TjMax temperature is set to 85 degrees C if undocumented model specific
+ register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
+-(sometimes) documented in processor datasheet.
++(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C
++as per the specification.
+diff -ubr orig/linux-2.6.28/drivers/hwmon/coretemp.c linux-2.6.28/drivers/hwmon/coretemp.c
+--- orig/linux-2.6.28/drivers/hwmon/coretemp.c 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/drivers/hwmon/coretemp.c 2009-07-18 08:12:16.000000000 +0200
+@@ -1,7 +1,7 @@
+ /*
+ * coretemp.c - Linux kernel module for hardware monitoring
+ *
+- * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
++ * Copyright (C) 2007, 2008 Rudolf Marek <r.marek@assembler.cz>
+ *
+ * Inspired from many hwmon drivers
+ *
+@@ -244,8 +244,14 @@
+ }
+ }
+
++ /* Intel Atom has only fixed TjMax at 95C */
++
++ if (c->x86_model == 0x1c) {
++ data->tjmax = 95000;
++ } else {
++ /* Adjust the TjMax for the rest of Core2 family */
+ data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
+- platform_set_drvdata(pdev, data);
++ }
+
+ /* read the still undocumented IA32_TEMPERATURE_TARGET it exists
+ on older CPUs but not in this register */
+@@ -265,6 +271,8 @@
+ }
+ }
+
++ platform_set_drvdata(pdev, data);
++
+ if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
+ goto exit_dev;
+
+@@ -413,11 +421,11 @@
+ for_each_online_cpu(i) {
+ struct cpuinfo_x86 *c = &cpu_data(i);
+
+- /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */
++ /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
+ if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
+ !((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
+ (c->x86_model == 0x16) || (c->x86_model == 0x17) ||
+- (c->x86_model == 0x1A))) {
++ (c->x86_model == 0x1A) || (c->x86_model == 0x1C))) {
+
+ /* supported CPU not found, but report the unknown
+ family 6 CPU */