From owner-freebsd-hardware@FreeBSD.ORG Tue Jan 5 18:27:49 2010 Return-Path: Delivered-To: hardware@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D6792106568F for ; Tue, 5 Jan 2010 18:27:49 +0000 (UTC) (envelope-from lehmann@ans-netz.de) Received: from avocado.salatschuessel.net (avocado.salatschuessel.net [78.111.72.186]) by mx1.freebsd.org (Postfix) with SMTP id 2D91C8FC24 for ; Tue, 5 Jan 2010 18:27:48 +0000 (UTC) Received: (qmail 81896 invoked by uid 89); 5 Jan 2010 18:27:47 -0000 Received: from unknown (HELO kartoffel.salatschuessel.net) (78.111.72.187) by avocado.salatschuessel.net with SMTP; 5 Jan 2010 18:27:47 -0000 Date: Tue, 5 Jan 2010 19:27:46 +0100 From: Oliver Lehmann To: stable@freebsd.org Message-Id: <20100105192746.cc627795.lehmann@ans-netz.de> X-Mailer: Sylpheed 2.7.1 (GTK+ 2.18.5; amd64-portbld-freebsd8.0) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: hardware@freebsd.org Subject: smb driver for Nvidia ION (intel ATOM) chipset X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jan 2010 18:27:49 -0000 Hi, has anyone tried using the nfsmb(4) driver for the Nvidia ION chipset's SMB controller? none3@pci0:0:3:5: class=0x0b4000 card=0x83f91043 chip=0x0aa310de rev=0xb1 hdr=0x00 vendor = 'Nvidia Corp' device = 'NVIDIA nForce System Management Controller (nForce)' class = processor I could try to just change one of the device IDs in pci/nfsmb.c to 0x0aa3 and see if it works but if someone has already tried this and says "won't work" I can avoid maybe crashing my box ;) -- Oliver Lehmann http://www.pofo.de/ http://wishlist.ans-netz.de/ From owner-freebsd-hardware@FreeBSD.ORG Thu Jan 7 05:34:16 2010 Return-Path: Delivered-To: hardware@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F08AA1065693 for ; Thu, 7 Jan 2010 05:34:16 +0000 (UTC) (envelope-from lehmann@ans-netz.de) Received: from avocado.salatschuessel.net (avocado.salatschuessel.net [78.111.72.186]) by mx1.freebsd.org (Postfix) with SMTP id 606C08FC1F for ; Thu, 7 Jan 2010 05:34:16 +0000 (UTC) Received: (qmail 55066 invoked by uid 89); 7 Jan 2010 05:34:14 -0000 Received: from unknown (HELO kartoffel.salatschuessel.net) (78.111.72.187) by avocado.salatschuessel.net with SMTP; 7 Jan 2010 05:34:14 -0000 Date: Thu, 7 Jan 2010 06:34:13 +0100 From: Oliver Lehmann To: stable@freebsd.org Message-Id: <20100107063413.614058fc.lehmann@ans-netz.de> In-Reply-To: <20100105192746.cc627795.lehmann@ans-netz.de> References: <20100105192746.cc627795.lehmann@ans-netz.de> X-Mailer: Sylpheed 2.7.1 (GTK+ 2.18.5; amd64-portbld-freebsd8.0) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: ru@freebsd.org, hardware@freebsd.org Subject: Re: smb driver for Nvidia ION (intel ATOM) chipset X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jan 2010 05:34:17 -0000 Oliver Lehmann wrote: > Hi, > > has anyone tried using the nfsmb(4) driver for the Nvidia ION chipset's > SMB controller? > > none3@pci0:0:3:5: class=0x0b4000 card=0x83f91043 chip=0x0aa310de rev=0xb1 hdr=0x00 > vendor = 'Nvidia Corp' > device = 'NVIDIA nForce System Management Controller (nForce)' > class = processor > > I could try to just change one of the device IDs in pci/nfsmb.c to 0x0aa3 > and see if it works but if someone has already tried this and says "won't > work" I can avoid maybe crashing my box ;) Adjusting the driver was kinda easy but now I'm stuck with no idea what "-c" argument I should use for mbmon.. nfsmb0: port 0x4900-0x493f,0x4d00-0x4d3f,0x4e00-0x4e3f irq 20 at device 3.2 on pci0 smbus0: on nfsmb0 nfsmb1: on nfsmb0 smbus1: on nfsmb1 smb0: on smbus0 smb1: on smbus1 root@nudel nfsmb> mbmon -S -s0 -d SMBus[NVidia nForce2] found, but No HWM available on it!! InitMBInfo: Device not configured Exit 1 root@nudel nfsmb> mbmon -S -s1 -d SMBus[NVidia nForce2] found, but No HWM available on it!! InitMBInfo: Device not configured Exit 1 root@nudel nfsmb> mbmon -S -s1 -c8 1 InitMBInfo: Device not configured Exit 1 root@nudel nfsmb> ru@ provided an smbtest.c to find out where the slave devices are when he initially made the nfsmb driver but the file is gone from his freefall page... Maybe someone saved it somewhere? http://lists.freebsd.org/pipermail/freebsd-current/2005-December/059065.html -- Oliver Lehmann http://www.pofo.de/ http://wishlist.ans-netz.de/ From owner-freebsd-hardware@FreeBSD.ORG Thu Jan 7 18:52:17 2010 Return-Path: Delivered-To: freebsd-hardware@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 645751065676 for ; Thu, 7 Jan 2010 18:52:17 +0000 (UTC) (envelope-from lehmann@ans-netz.de) Received: from avocado.salatschuessel.net (avocado.salatschuessel.net [78.111.72.186]) by mx1.freebsd.org (Postfix) with SMTP id 94D518FC18 for ; Thu, 7 Jan 2010 18:52:16 +0000 (UTC) Received: (qmail 10650 invoked by uid 89); 7 Jan 2010 18:52:14 -0000 Received: from unknown (HELO kartoffel.salatschuessel.net) (78.111.72.187) by avocado.salatschuessel.net with SMTP; 7 Jan 2010 18:52:14 -0000 Date: Thu, 7 Jan 2010 19:52:13 +0100 From: Oliver Lehmann To: Jeremy Chadwick Message-Id: <20100107195213.b2c7e942.lehmann@ans-netz.de> In-Reply-To: <20100107083908.GA58065@icarus.home.lan> References: <20100105192746.cc627795.lehmann@ans-netz.de> <20100107063413.614058fc.lehmann@ans-netz.de> <20100107063831.GA53300@icarus.home.lan> <20100107074805.59556.qmail@avocado.salatschuessel.net> <20100107080914.60245.qmail@avocado.salatschuessel.net> <20100107083908.GA58065@icarus.home.lan> X-Mailer: Sylpheed 2.7.1 (GTK+ 2.18.5; amd64-portbld-freebsd8.0) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Thu__7_Jan_2010_19_52_13_+0100_jDffF=aymMp4.1gV" Cc: ru@freebsd.org, freebsd-stable@freebsd.org, freebsd-hardware@freebsd.org Subject: Re: smb driver for Nvidia ION (intel ATOM) chipset X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jan 2010 18:52:17 -0000 This is a multi-part message in MIME format. --Multipart=_Thu__7_Jan_2010_19_52_13_+0100_jDffF=aymMp4.1gV Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Jeremy Chadwick wrote: > If you'd like, I can code up something that uses LPC/ISA to communicate > with this IC via port 0x290 based on the datasheet. I now was able to "hack up" mbmon to communicate with my it8720 sensor. I've attached the patch for sens_it87.c I also added to Makefile to the DEFS = line "-DIT8720" of course. This made mbmon working with ISA-IO mode working. I'm now getting the following outputs: Temp.= 32.0, 34.0, 22.0; Rot.= 4591, 1298, 0 Vcore = 1.10, 1.81; Volt. = 3.39, 4.95, 11.93, -11.93, -4.99 I can nearly verify all values with the BIOS and they are matching. I XXed in the following output (same as above) all values out I was not able to verify because the BIOS-HWM does not show their values: Temp.= 32.0, XXX, XXX; Rot.= 4591, 1298, 0 Vcore = 1.10, XXXX; Volt. = 3.39, 4.95, 11.93, -11.93, XXXXX For the remaining values I'm pretty sure they are correct. I enabled the 16Bit RPM mode for the 8720. In this case no devisor is needed for calculating the RPM. I was not able to get the 2nd FAN-RPM right in the 8Bit mode. The 1st one was correct even in the 8Bit mode. About the voltage multipliers... I'm not sure about the last one because I'm not able to verify this (I could with a multimeter of course but this would create other deviations). I'm also not sure why the multipliers (for my board?) are different. I wonder why they are hardcoded there anyway. I can imagine that they are depending the board layout or am I mistaken? I mean the IT spec says only that the input of the pins need to be in the range between 0 and VCC. So I can choose whatever multiplier I like as long as the resulting voltage keeps within this range. Keeping the measured voltage somewhere in the middle of 0 and VCC with the multiplier for the expected value makes sense but this is no "must be" I guess Now - since ISA-IO is working I want to get smbus working too ;) First I patched src/sys/pci/nfsmb.c to detect the known remaning nforce SMB controllers including mine. I then added the device-id of this controller to the pci_pm.h file of mbmon to make it detect my controller. But now it still fails to find the it87 sensor on the bus. I guess the bus can have many "slaves" and mbmon just needs to test all to find out which identifies itself as it87? (reading from Adress 0x58 should return 0x90 - at least in ISA mode) root@nudel xmbmon205> ./mbmon -S -D -p it87 Probe Request: it87 >>> Testing Reg's at SMBus <<< SMBus slave 0xA0(0x50) found... SMBus slave 0xA2(0x51) found... SMBus slave 0xA4(0x52) found... SMBus slave 0xA6(0x53) found... SMBus slave 0xA8(0x54) found... SMBus slave 0xAA(0x55) found... SMBus slave 0xAC(0x56) found... SMBus slave 0xAE(0x57) found... SMBus[NVidia nForce2] found, but No HWM available on it!! InitMBInfo: Device not configured Exit 1 root@nudel xmbmon205> ./mbmon -S -s1 -D -p it87 Probe Request: it87 >>> Testing Reg's at SMBus <<< SMBus slave 0xA0(0x50) found... SMBus slave 0xA2(0x51) found... SMBus slave 0xE0(0x70) found... SMBus[NVidia nForce2] found, but No HWM available on it!! InitMBInfo: Device not configured Exit 1 root@nudel xmbmon205> But it looks like at least the smb detection code for it87 is not working for mine... Any ideas how to proceed here? (I have basic C skills and know something about electronics (can build a Z80 SBC for example ;)) -- Oliver Lehmann http://www.pofo.de/ http://wishlist.ans-netz.de/ --Multipart=_Thu__7_Jan_2010_19_52_13_+0100_jDffF=aymMp4.1gV Content-Type: text/x-diff; name="sens_it87.c.diff" Content-Disposition: attachment; filename="sens_it87.c.diff" Content-Transfer-Encoding: 7bit --- sens_it87.c.orig 2010-01-07 19:34:04.000000000 +0100 +++ sens_it87.c 2010-01-07 19:15:11.647304000 +0100 @@ -0,0 +1,242 @@ +/* + * Integrated Technology Express IT8705F/IT8712F hardware monitor chip + * + *************************************************************** + * Before calling these routines, one must call method->Open() * + * After calling these routines, one must call method->Close() * + *************************************************************** + * + +Integrated Technology Express + Chip Temp Volt Fan SMBus IOport + it8705 3 8 3 yes yes + it8712 3 8 3 yes yes + +SiS + Chip Temp Volt Fan SMBus IOport + sis950 3 8 3 yes yes + + * + * by YRS + */ + + +#include +#include "sensors.h" + +/* external (global) data */ +extern int smb_slave; +extern LM_METHODS method_isa, method_smb; +extern int numSMBSlave, canSMBSlave[128]; + + +#define IT87_ADDR_START 0x50 /*0x50-0x5E*/ +#define IT87_ADDR_END 0x5E + +#define IT87_SMBADDR 0x48 +#define IT87_REGCHIP 0x58 +#define IT87_CHIPID 0x90 + +/* temp nr=0,1,2; volt nr=0,1,...6; fan nr=0,1,2 */ +#define IT87_TEMP(nr) (0x29 + (nr)) +#define IT87_VOLT(nr) (0x20 + (nr)) +#define IT87_FAN(nr) (0x0D + (nr)) +#define IT87_FANX(nr) (0x18 + (nr)) +#define IT87_FANDIV 0x0B +#define IT87_FANDIV16 0x0C + +static int it87_probe(LM_METHODS *); +static float it87_temp(LM_METHODS *, int); +static int it87_fanrpm(LM_METHODS *, int); +static float it87_volt(LM_METHODS *, int); + +SENSOR it87 = { + "Int.Tec.Exp. Chip IT8705F/IT8712F or SIS950", + it87_probe, + it87_temp, + it87_volt, + it87_fanrpm +}; + + +#define IT87_chkRegNum 8 + +/* Register checked for probing */ +static int chkReg[] = { + 0x00, 0x01, 0x02, 0x03, + 0x0A, 0x48, 0x50, 0x51, + 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2A, 0x2B, + 0x0B, 0x0D, 0x0E, 0x0F, + -1 }; + + +/* + * return 0 if not probed + */ +static int it87_probe(LM_METHODS *method) +{ + int n, save; + + if (method != &method_isa && method != &method_smb) + return 0; + + save = smb_slave; + + if (method == &method_smb) { + for (n = IT87_ADDR_START; n <= IT87_ADDR_END;) { + if (!(smb_slave = get_smb_slave(n, IT87_ADDR_END))) + goto ret0; + else if (smb_slave != 2 * method->Read(IT87_SMBADDR)) + goto ret0; + else { + if (method->Read(IT87_REGCHIP) == IT87_CHIPID + && chkReg_Probe(smb_slave, + "Probing ITE7805/7812/SIS950 chip:\n", chkReg, method) + >= IT87_chkRegNum) + goto ret1; + else + n = smb_slave + 2; + } + } + goto ret0; + } else { + if (method->Read(IT87_REGCHIP) == IT87_CHIPID + && chkReg_Probe(0, "Probing ITE7805/7812/SIS950 chip:\n", + chkReg, method) >= IT87_chkRegNum) + goto ret1; + } + +ret0: + smb_slave = save; + return 0; +ret1: + if (method == &method_smb) + kill_smb_slave(smb_slave); + return 1; +} + + +/* + * \retval 0xFFFF no sensor + * \retval other temperature + * no = 0,1,2,... + */ +static float it87_temp( LM_METHODS *method, int no ) +{ + if (no < 0 || 2 < no) + return 0xFFFF; + + return (float) method->Read(IT87_TEMP(no)); +} + + +/* + * \retval 0x0000FFFF no sensor + * no = 0,1,2,... + */ +static float it87_volt(LM_METHODS *method, int no) +{ + float fac; + + if (no < 0 || 6 < no) + return 0xFFFF; + + switch (no) { + case 0: + case 1: + case 2: + fac = 0.016; + break; + case 3: + fac = 0.016 * 1.68; + break; + case 4: +#ifdef IT8720 + fac = 0.016 * 5.524; +#else + fac = 0.016 * 3.80; +#endif + break; + case 5: +#ifdef IT8720 + fac = - 0.016 * 5.524; +#else + fac = - 0.016 * 3.477; +#endif + break; + case 6: +#ifdef IT8720 + fac = - 0.016 * 2.31; +#else + fac = - 0.016 * 1.505; +#endif + + } + + return (float) method->Read(IT87_VOLT(no)) * fac; +} + + +/* + Controlling Fan Divisor for 1st/2nd fans: CR = 0x0B. + lowest three bits for fan1, next three bits for fan2 + + 7 3 0 + +-+-+-+-+-+-+-+-+ xxx = 000,..,111 div1fac = 1,..,128 + | |y y y|x x x| yyy = 000,..,111 div2fac = 1,..,128 + +-+-+-+-+-+-+-+-+ initial values: xx=001, yy=001 + + No divisor available for fan3. + + */ + +/* + * \retval 0x0000FFFF no sensor + * no = 0,1,2,... + * + * Clock is 22.5kHz (22,500 x 60 = 1350000 counts/minute) + */ +static int it87_fanrpm(LM_METHODS *method, int no) +{ + int r, n; + static int div[3] = {1,1,1}; + + if (no < 0 || 2 < no) + return 0xFFFF; + +#ifndef IT8720 + n = method->Read(IT87_FANDIV); + div[0] = n & 0x07; + div[1] = (n >> 3) & 0x07; + + r = method->Read(IT87_FAN(no)); + if (r == 0xFF) { + /* change divisor for the sake of next call ! */ + if (no != 2) { + if (div[no] < 7) + ++(div[no]); + else + div[no] = 0; + r = (n & 0x3F) | div[0] | (div[1] << 3); + method->Write(IT87_FANDIV, r); + } + return 0xFFFF; + } else if (r == 0) { + return 0xFFFF; + } +#else + div[no] = 1; + method->Write(0x0C,1|0x07); + n = method->Read(IT87_FANDIV16); + if(n & 0x07) { + r = method->Read(IT87_FAN(no)); + r |= method->Read(IT87_FANX(no))<<8; + } + if(r == 0 || r == 0xFFFF) + return 0xFFFF; +#endif + + return 1350000 / (r * (1 << div[no])); +} --Multipart=_Thu__7_Jan_2010_19_52_13_+0100_jDffF=aymMp4.1gV Content-Type: text/x-diff; name="nfsmb.c.diff" Content-Disposition: attachment; filename="nfsmb.c.diff" Content-Transfer-Encoding: 7bit --- nfsmb.c.orig 2010-01-07 19:35:04.000000000 +0100 +++ nfsmb.c 2010-01-07 06:27:34.000000000 +0100 @@ -65,6 +65,10 @@ #define NFSMB_DEVICEID_NF4_55_SMB 0x0368 #define NFSMB_DEVICEID_NF4_61_SMB 0x03eb #define NFSMB_DEVICEID_NF4_65_SMB 0x0446 +#define NFSMB_DEVICEID_NF4_67_SMB 0x0542 +#define NFSMB_DEVICEID_NF4_73_SMB 0x07d8 +#define NFSMB_DEVICEID_NF4_78S_SMB 0x0752 +#define NFSMB_DEVICEID_NF4_79_SMB 0x0aa2 /* PCI Configuration space registers */ #define NF2PCI_SMBASE_1 PCIR_BAR(4) @@ -158,6 +162,10 @@ case NFSMB_DEVICEID_NF4_55_SMB: case NFSMB_DEVICEID_NF4_61_SMB: case NFSMB_DEVICEID_NF4_65_SMB: + case NFSMB_DEVICEID_NF4_67_SMB: + case NFSMB_DEVICEID_NF4_73_SMB: + case NFSMB_DEVICEID_NF4_78S_SMB: + case NFSMB_DEVICEID_NF4_79_SMB: device_set_desc(dev, "nForce2/3/4 MCP SMBus Controller"); return (BUS_PROBE_DEFAULT); } @@ -245,6 +253,10 @@ case NFSMB_DEVICEID_NF4_55_SMB: case NFSMB_DEVICEID_NF4_61_SMB: case NFSMB_DEVICEID_NF4_65_SMB: + case NFSMB_DEVICEID_NF4_67_SMB: + case NFSMB_DEVICEID_NF4_73_SMB: + case NFSMB_DEVICEID_NF4_78S_SMB: + case NFSMB_DEVICEID_NF4_79_SMB: /* Trying to add secondary device as slave */ nfsmb_sc->subdev = device_add_child(dev, "nfsmb", -1); if (!nfsmb_sc->subdev) { --Multipart=_Thu__7_Jan_2010_19_52_13_+0100_jDffF=aymMp4.1gV-- From owner-freebsd-hardware@FreeBSD.ORG Thu Jan 7 18:56:51 2010 Return-Path: Delivered-To: freebsd-hardware@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7A43A1065672 for ; Thu, 7 Jan 2010 18:56:51 +0000 (UTC) (envelope-from lehmann@ans-netz.de) Received: from avocado.salatschuessel.net (avocado.salatschuessel.net [78.111.72.186]) by mx1.freebsd.org (Postfix) with SMTP id D76098FC12 for ; Thu, 7 Jan 2010 18:56:50 +0000 (UTC) Received: (qmail 10864 invoked by uid 89); 7 Jan 2010 18:56:49 -0000 Received: from unknown (HELO kartoffel.salatschuessel.net) (78.111.72.187) by avocado.salatschuessel.net with SMTP; 7 Jan 2010 18:56:49 -0000 Date: Thu, 7 Jan 2010 19:56:49 +0100 From: Oliver Lehmann To: Oliver Lehmann Message-Id: <20100107195649.8b9c8cd8.lehmann@ans-netz.de> In-Reply-To: <20100107195213.b2c7e942.lehmann@ans-netz.de> References: <20100105192746.cc627795.lehmann@ans-netz.de> <20100107063413.614058fc.lehmann@ans-netz.de> <20100107063831.GA53300@icarus.home.lan> <20100107074805.59556.qmail@avocado.salatschuessel.net> <20100107080914.60245.qmail@avocado.salatschuessel.net> <20100107083908.GA58065@icarus.home.lan> <20100107195213.b2c7e942.lehmann@ans-netz.de> X-Mailer: Sylpheed 2.7.1 (GTK+ 2.18.5; amd64-portbld-freebsd8.0) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Thu__7_Jan_2010_19_56_49_+0100_1xWs2Z6hAlUn4Cch" Cc: ru@freebsd.org, freebsd-stable@freebsd.org, Jeremy Chadwick , freebsd-hardware@freebsd.org Subject: Re: smb driver for Nvidia ION (intel ATOM) chipset X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jan 2010 18:56:51 -0000 This is a multi-part message in MIME format. --Multipart=_Thu__7_Jan_2010_19_56_49_+0100_1xWs2Z6hAlUn4Cch Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Oliver Lehmann wrote: > I've attached the patch for sens_it87.c Which was broken.... I attached the correct one. -- Oliver Lehmann http://www.pofo.de/ http://wishlist.ans-netz.de/ --Multipart=_Thu__7_Jan_2010_19_56_49_+0100_1xWs2Z6hAlUn4Cch Content-Type: text/x-diff; name="sens_it87.c.diff" Content-Disposition: attachment; filename="sens_it87.c.diff" Content-Transfer-Encoding: 7bit --- sens_it87.c.orig 2003-10-13 09:11:20.000000000 +0200 +++ sens_it87.c 2010-01-07 19:55:47.000000000 +0100 @@ -41,7 +41,9 @@ #define IT87_TEMP(nr) (0x29 + (nr)) #define IT87_VOLT(nr) (0x20 + (nr)) #define IT87_FAN(nr) (0x0D + (nr)) +#define IT87_FANX(nr) (0x18 + (nr)) #define IT87_FANDIV 0x0B +#define IT87_FANDIV16 0x0C static int it87_probe(LM_METHODS *); static float it87_temp(LM_METHODS *, int); @@ -151,13 +153,26 @@ fac = 0.016 * 1.68; break; case 4: +#ifdef IT8720 + fac = 0.016 * 5.524; +#else fac = 0.016 * 3.80; +#endif break; case 5: +#ifdef IT8720 + fac = - 0.016 * 5.524; +#else fac = - 0.016 * 3.477; +#endif break; case 6: +#ifdef IT8720 + fac = - 0.016 * 2.31; +#else fac = - 0.016 * 1.505; +#endif + } return (float) method->Read(IT87_VOLT(no)) * fac; @@ -191,6 +206,7 @@ if (no < 0 || 2 < no) return 0xFFFF; +#ifndef IT8720 n = method->Read(IT87_FANDIV); div[0] = n & 0x07; div[1] = (n >> 3) & 0x07; @@ -210,6 +226,17 @@ } else if (r == 0) { return 0xFFFF; } +#else + div[no] = 1; + method->Write(0x0C,1|0x07); + n = method->Read(IT87_FANDIV16); + if(n & 0x07) { + r = method->Read(IT87_FAN(no)); + r |= method->Read(IT87_FANX(no))<<8; + } + if(r == 0 || r == 0xFFFF) + return 0xFFFF; +#endif return 1350000 / (r * (1 << div[no])); } --Multipart=_Thu__7_Jan_2010_19_56_49_+0100_1xWs2Z6hAlUn4Cch--