public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Frank Sorenson <frank@tuxrocks.com>
To: Dmitry Torokhov <dtor_core@ameritech.net>
Cc: LKML <linux-kernel@vger.kernel.org>, Massimo Dal Zotto <dz@debian.org>
Subject: Re: [PATCH 0/5] I8K driver facelift
Date: Sat, 12 Mar 2005 20:41:14 -0700	[thread overview]
Message-ID: <4233B65A.4030302@tuxrocks.com> (raw)
In-Reply-To: <200502240110.16521.dtor_core@ameritech.net>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dmitry Torokhov wrote:
| Hi,
|
| here are some changes that freshen I8K driver (Dell Inspiron/Latitude
| platform driver). The patches have been tested on Inspiron 8100.
<snip>
| Please consider for inclusion.
|
| Thanks!

These patches look pretty good.  A few comments (with a patch--tested on
my Inspiron 9200):

- - The "return i8k_smm(&regs) < 0 ? : regs.eax;" construction is nice and
tidy, but it isn't passing on the return value of the called function,
and is returning TRUE or 1 on failure.  This makes it difficult to check
the return value for valid data.  Old behavior returned negative, so
I'll return -1.

- - The I8K_VERSION string should probably be changed to something more
unique.  The version maintained outside the kernel tree by Massimo Dal
Zotto (http://www.debian.org/~dz/i8k/) is up to 1.25, so 1.14 isn't very
distinguishing.  Maybe just use the date?  Not sure here...

- - Also, some newer Dell laptops require a different function to get the
Dell signature, so the i8k_get_dell_signature test should check both
(borrowing some code from the out-of-kernel version).

- - Some newer Dell laptops report DMI_SYS_VENDOR as "Dell Inc." rather
than "Dell Computer"

- - Some of the Dell motherboards provide more than 1 temperature sensor.
~ How about a generic i8k_get_temp function, and i8k_get_cpu_temp just
calls that with sensor 0.

- - Also, I've added detection of the number of temperature sensors and
fans at init time.  This way, we aren't hardcoded to 1 sensor and 2
fans.  I couldn't figure out how to set up the sysfs entries
dynamically, but that probably should happen too.

- - Some boards don't need the I8K_FAN_MULT to get the right fan RPM (I
don't think my fans are rotating at over 90,000 RPM)!  I guess we'll
need to address this sometime, but I have not done so.

Patch follows:

Signed-off-by: Frank Sorenson <frank@tuxrocks.com>

- --- 2.6.11-a/drivers/char/i8k.c	2005-03-12 18:47:55.000000000 -0700
+++ 2.6.11-b/drivers/char/i8k.c	2005-03-12 20:29:01.000000000 -0700
@@ -28,7 +28,7 @@

~ #include <linux/i8k.h>

- -#define I8K_VERSION		"1.14 21/02/2005"
+#define I8K_VERSION		"2005-03-12"

~ #define I8K_SMM_FN_STATUS	0x0025
~ #define I8K_SMM_POWER_STATUS	0x0069
@@ -36,7 +36,8 @@
~ #define I8K_SMM_GET_FAN		0x00a3
~ #define I8K_SMM_GET_SPEED	0x02a3
~ #define I8K_SMM_GET_TEMP	0x10a3
- -#define I8K_SMM_GET_DELL_SIG	0xffa3
+#define I8K_SMM_GET_DELL_SIG1	0xfea3
+#define I8K_SMM_GET_DELL_SIG2	0xffa3
~ #define I8K_SMM_BIOS_VERSION	0x00a6

~ #define I8K_FAN_MULT		30
@@ -55,6 +56,8 @@
~ #define I8K_TEMPERATURE_BUG	1

~ static char bios_version[4];
+static int num_temps = 0;
+static int num_fans = 0;

~ MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)");
~ MODULE_DESCRIPTION("Driver for accessing SMM BIOS on Dell laptops");
@@ -201,10 +204,10 @@
~  */
~ static int i8k_get_fan_status(int fan)
~ {
- -	struct smm_regs regs = { .eax = I8K_SMM_GET_FAN, };
+	struct smm_regs regs = { .eax = I8K_SMM_GET_FAN, .ebx = (fan & 0xff)};

~ 	regs.ebx = fan & 0xff;
- -	return i8k_smm(&regs) < 0 ? : regs.eax & 0xff;
+	return i8k_smm(&regs) < 0 ? -1 : regs.eax & 0xff;
~ }

~ /*
@@ -215,7 +218,7 @@
~ 	struct smm_regs regs = { .eax = I8K_SMM_GET_SPEED, };

~ 	regs.ebx = fan & 0xff;
- -	return i8k_smm(&regs) < 0 ? : (regs.eax & 0xffff) * I8K_FAN_MULT;
+	return i8k_smm(&regs) < 0 ? -1 : (regs.eax & 0xffff) * I8K_FAN_MULT;
~ }

~ /*
@@ -228,15 +231,15 @@
~ 	speed = (speed < 0) ? 0 : ((speed > I8K_FAN_MAX) ? I8K_FAN_MAX : speed);
~ 	regs.ebx = (fan & 0xff) | (speed << 8);

- -	return i8k_smm(&regs) < 0 ? : i8k_get_fan_status(fan);
+	return i8k_smm(&regs) < 0 ? -1 : i8k_get_fan_status(fan);
~ }

~ /*
~  * Read the cpu temperature.
~  */
- -static int i8k_get_cpu_temp(void)
+static int i8k_get_temp(int sensor)
~ {
- -	struct smm_regs regs = { .eax = I8K_SMM_GET_TEMP, };
+	struct smm_regs regs = { .eax = I8K_SMM_GET_TEMP, .ebx = sensor };
~ 	int rc;
~ 	int temp;

@@ -268,9 +271,14 @@
~ 	return temp;
~ }

- -static int i8k_get_dell_signature(void)
+static int i8k_get_cpu_temp(void)
+{
+	return i8k_get_temp(0);
+}
+
+static int i8k_get_dell_sig_aux(int fn)
~ {
- -	struct smm_regs regs = { .eax = I8K_SMM_GET_DELL_SIG, };
+	struct smm_regs regs = { .eax = fn, };
~ 	int rc;

~ 	if ((rc = i8k_smm(&regs)) < 0)
@@ -279,6 +287,17 @@
~ 	return regs.eax == 1145651527 && regs.edx == 1145392204 ? 0 : -1;
~ }

+static int i8k_get_dell_signature(void)
+{
+	int rc;
+
+	if (((rc=i8k_get_dell_sig_aux(I8K_SMM_GET_DELL_SIG1)) < 0) &&
+	    ((rc=i8k_get_dell_sig_aux(I8K_SMM_GET_DELL_SIG2)) < 0)) {
+		return rc;
+	}
+	return 0;
+}
+
~ static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
~ 		     unsigned long arg)
~ {
@@ -506,6 +525,13 @@
~ 		},
~ 	},
~ 	{
+		.ident = "Dell Inspiron",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron"),
+		},
+	},
+	{
~ 		.ident = "Dell Latitude",
~ 		.matches = {
~ 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer"),
@@ -587,6 +613,11 @@
~ 	if (i8k_probe())
~ 		return -ENODEV;

+	while (i8k_get_temp(num_temps) >= 0) num_temps ++;
+	printk(KERN_INFO "i8k: found %d temperature sensors\n", num_temps);
+	while (i8k_get_fan_status(num_fans) >= 0) num_fans ++;
+	printk(KERN_INFO "i8k: found %d fans\n", num_fans);
+
~ 	/* Register the proc entry */
~ 	proc_i8k = create_proc_entry("i8k", 0, NULL);
~ 	if (!proc_i8k)



Frank
- --
Frank Sorenson - KD7TZK
Systems Manager, Computer Science Department
Brigham Young University
frank@tuxrocks.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFCM7ZZaI0dwg4A47wRAok1AKDLYIrMXLphYAeAq98OXYqxk6U1vACfQpld
qczdJm2992BjeQ/iU9RP+k4=
=nNut
-----END PGP SIGNATURE-----

  parent reply	other threads:[~2005-03-13  3:41 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-24  6:10 [PATCH 0/5] I8K driver facelift Dmitry Torokhov
2005-02-24  6:11 ` [PATCH 1/5] I8K - pass though Lindent Dmitry Torokhov
2005-02-24  6:12   ` [PATCH 2/5] I8K - use standard DMI functions Dmitry Torokhov
2005-02-24  6:12     ` [PATCH 3/5] I8K - switch to seq_file Dmitry Torokhov
2005-02-24  6:14       ` [PATCH 4/5] I8K - switch to module_{init|exit} Dmitry Torokhov
2005-02-24  6:14         ` [PATCH 5/5] I8K - convert to platform device (sysfs) Dmitry Torokhov
2005-03-13  3:41 ` Frank Sorenson [this message]
2005-03-13  3:59   ` [PATCH 0/5] I8K driver facelift Dmitry Torokhov
2005-03-15  8:12   ` Valdis.Kletnieks
2005-03-15 10:59     ` Giuseppe Bilotta
2005-03-15 17:30       ` Valdis.Kletnieks
2005-03-15 22:34         ` Frank Sorenson
2005-03-16 21:38   ` Frank Sorenson
2005-03-17  6:40     ` Dmitry Torokhov
2005-03-17  9:37       ` Frank Sorenson
2005-03-17 15:05         ` Dmitry Torokhov
2005-03-17  9:46       ` Frank Sorenson
2005-03-21  5:12         ` Dmitry Torokhov
2005-03-21 22:53           ` Frank Sorenson
2005-03-21 23:55             ` Dmitry Torokhov
2005-03-24  7:25       ` Greg KH
2005-03-24  7:39         ` Dmitry Torokhov
2005-03-24  8:00           ` Greg KH
2005-03-24 14:44             ` Dmitry Torokhov
2005-03-17  8:16     ` Valdis.Kletnieks
2005-03-24  7:24       ` Greg KH
2005-04-13  6:33         ` Dmitry Torokhov
2005-04-13  8:00           ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4233B65A.4030302@tuxrocks.com \
    --to=frank@tuxrocks.com \
    --cc=dtor_core@ameritech.net \
    --cc=dz@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox