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 + * Copyright (C) 2007, 2008 Rudolf Marek * * 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 */