lm_sensors: add some upstream patches

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2011-02-08 13:26:53 +01:00
parent ad4d4a694a
commit 1dd216b9bd
2 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,140 @@
diff -Naur lm_sensors-3.2.0-old/CHANGES lm_sensors-3.2.0-new/CHANGES
--- lm_sensors-3.2.0-old/CHANGES 2011-01-19 19:04:13.000000000 -0800
+++ lm_sensors-3.2.0-new/CHANGES 2011-01-19 19:04:29.000000000 -0800
@@ -18,6 +18,7 @@
Add support for Intel PCH (SMBus)
Add support for SMSC EMC1403 and EMC1404
Fix detection of RB-C3 AMD Family 10h CPU
+ Implement universal detection for coretemp
Add support for SMSC EMC2103
Add support for Fintek F71889ED
Add support for ITE IT8721F
diff -Naur lm_sensors-3.2.0-old/prog/detect/sensors-detect lm_sensors-3.2.0-new/prog/detect/sensors-detect
--- lm_sensors-3.2.0-old/prog/detect/sensors-detect 2011-01-19 19:04:13.000000000 -0800
+++ lm_sensors-3.2.0-new/prog/detect/sensors-detect 2011-01-19 19:04:29.000000000 -0800
@@ -23,7 +23,7 @@
require 5.004;
use strict;
-use Fcntl;
+use Fcntl qw(:DEFAULT :seek);
use File::Basename;
# We will call modprobe, which typically lives in either /sbin,
@@ -2025,13 +2025,9 @@
driver => "k10temp",
detect => \&fam11h_pci_detect,
}, {
- name => "Intel Core family thermal sensor",
+ name => "Intel digital thermal sensor",
driver => "coretemp",
- detect => sub { coretemp_detect(0); },
- }, {
- name => "Intel Atom thermal sensor",
- driver => "coretemp",
- detect => sub { coretemp_detect(1); },
+ detect => \&coretemp_detect,
}, {
name => "Intel AMB FB-DIMM thermal sensor",
driver => "i5k_amb",
@@ -2293,10 +2289,10 @@
while (<INPUTFILE>) {
if (m/^processor\s*:\s*(\d+)/) {
push @cpu, $entry if scalar keys(%{$entry}); # Previous entry
- $entry = {}; # New entry
+ $entry = { nr => $1 }; # New entry
next;
}
- if (m/^(vendor_id|cpu family|model|model name|stepping)\s*:\s*(.+)$/) {
+ if (m/^(vendor_id|cpu family|model|model name|stepping|cpuid level)\s*:\s*(.+)$/) {
my $k = $1;
my $v = $2;
$v =~ s/\s+/ /g; # Merge multiple spaces
@@ -2465,6 +2461,15 @@
$modules_list{$normalized} = 1;
}
+# udev may take some time to create device nodes when loading modules
+sub udev_settle
+{
+ if (!(-x "/sbin/udevadm" && system("/sbin/udevadm settle") == 0)
+ && !(-x "/sbin/udevsettle" && system("/sbin/udevsettle") == 0)) {
+ sleep(1);
+ }
+}
+
sub initialize_modules_supported
{
foreach my $chip (@chip_ids) {
@@ -5754,23 +5759,33 @@
return;
}
+sub cpuid
+{
+ my ($cpu_nr, $eax) = @_;
+
+ sysopen(CPUID, "/dev/cpu/$cpu_nr/cpuid", O_RDONLY) or return;
+ binmode CPUID;
+ sysseek(CPUID, $eax, SEEK_SET)
+ or die "Cannot seek /dev/cpu/$cpu_nr/cpuid";
+ sysread(CPUID, my $data, 16)
+ or die "Cannot read /dev/cpu/$cpu_nr/cpuid";
+ close CPUID;
+
+ return unpack("L4", $data);
+}
+
sub coretemp_detect
{
- my $chip = shift;
my $probecpu;
foreach $probecpu (@cpu) {
next unless $probecpu->{vendor_id} eq 'GenuineIntel' &&
- $probecpu->{'cpu family'} == 6;
- return 9 if $chip == 0 &&
- ($probecpu->{model} == 14 || # Pentium M DC
- $probecpu->{model} == 15 || # Core 2 DC 65nm
- $probecpu->{model} == 0x16 || # Core 2 SC 65nm
- $probecpu->{model} == 0x17 || # Penryn 45nm
- $probecpu->{model} == 0x1a || # Nehalem
- $probecpu->{model} == 0x1e); # Lynnfield
- return 9 if $chip == 1 &&
- ($probecpu->{model} == 0x1c); # Atom
+ $probecpu->{'cpuid level'} >= 6;
+
+ # Now we check for the DTS flag
+ my @regs = cpuid($probecpu->{nr}, 6);
+ return unless @regs == 4;
+ return 9 if ($regs[0] & (1 << 0)); # eax, bit 0
}
return;
}
@@ -6124,6 +6139,12 @@
print "Some south bridges, CPUs or memory controllers contain embedded sensors.\n".
"Do you want to scan for them? This is totally safe. (YES/no): ";
unless (<STDIN> =~ /^\s*n/i) {
+ # Load the cpuid driver if needed
+ unless (-e "/dev/cpu/$cpu[0]->{nr}/cpuid") {
+ load_module("cpuid");
+ udev_settle();
+ }
+
$| = 1;
foreach my $entry (@cpu_ids) {
scan_cpu($entry);
@@ -6199,12 +6220,7 @@
$by_default = 1 if dmi_match('board_vendor', 'asustek', 'tyan',
'supermicro');
- # udev may take some time to create the device node
- if (!(-x "/sbin/udevadm" && system("/sbin/udevadm settle") == 0)
- && !(-x "/sbin/udevsettle" && system("/sbin/udevsettle") == 0)) {
- sleep(1);
- }
-
+ udev_settle();
for (my $dev_nr = 0; $dev_nr < @i2c_adapters; $dev_nr++) {
next unless exists $i2c_adapters[$dev_nr];
scan_i2c_adapter($dev_nr, $by_default);

View File

@ -0,0 +1,12 @@
diff -Naur lm_sensors-3.2.0-old/etc/sensors.conf.default lm_sensors-3.2.0-new/etc/sensors.conf.default
--- lm_sensors-3.2.0-old/etc/sensors.conf.default 2011-02-07 19:37:38.000000000 -0800
+++ lm_sensors-3.2.0-new/etc/sensors.conf.default 2011-02-07 19:38:19.000000000 -0800
@@ -285,7 +285,7 @@
# set in8_max 3.0 * 1.10
-chip "w83627ehf-*" "w83627dhg-*" "w83667hg-*"
+chip "w83627ehf-*" "w83627dhg-*" "w83667hg-*" "nct6775-*" "nct6776-*"
label in0 "Vcore"
label in2 "AVCC"