From: greg@kroah.com (Greg KH)
To: linux-kernel@vger.kernel.org, sensors@Stimpy.netroedge.com
Cc: khali@linux-fr.org
Subject: [PATCH] I2C: Improve it87 super-i/o detection
Date: Thu, 19 May 2005 06:25:31 +0000 [thread overview]
Message-ID: <11059983962750@kroah.com> (raw)
In-Reply-To: <11059983963929@kroah.com>
ChangeSet 1.2329.2.9, 2005/01/14 14:44:10-08:00, khali@linux-fr.org
[PATCH] I2C: Improve it87 super-i/o detection
This patch improves the detection of Super-I/O it87 chips (IT8712F,
IT8705F).
* Find the IT8712F and IT8705F address through Super-I/O (as opposed to
IT8712F only so far).
* Verify that the device is activated. Print info lines if a
disactivated or unconfigured chip is found.
* Print an info line when finding either chip, with device name,
address and revision.
* Rearrange code in it87_find() (error path).
* (bonus) Get rid of the useless i2c_client id.
Successfully tested on two IT8712F and one IT8705F, thanks to Jonas
Munsin, Rudolf Marek and Karine Proot.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/i2c/chips/it87.c | 53 +++++++++++++++++++++++++++++------------------
1 files changed, 33 insertions(+), 20 deletions(-)
diff -Nru a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c
--- a/drivers/i2c/chips/it87.c 2005-01-17 13:20:06 -08:00
+++ b/drivers/i2c/chips/it87.c 2005-01-17 13:20:06 -08:00
@@ -56,6 +56,7 @@
#define VAL 0x2f /* The value to read/write */
#define PME 0x04 /* The device with the fan registers in it */
#define DEVID 0x20 /* Register: Device ID */
+#define DEVREV 0x22 /* Register: Device Revision */
static inline int
superio_inb(int reg)
@@ -64,6 +65,16 @@
return inb(VAL);
}
+static int superio_inw(int reg)
+{
+ int val;
+ outb(reg++, REG);
+ val = inb(VAL) << 8;
+ outb(reg, REG);
+ val |= inb(VAL);
+ return val;
+}
+
static inline void
superio_select(void)
{
@@ -87,9 +98,8 @@
outb(0x02, VAL);
}
-/* just IT8712F for now - this should be extended to support the other
- chips as well */
#define IT8712F_DEVID 0x8712
+#define IT8705F_DEVID 0x8705
#define IT87_ACT_REG 0x30
#define IT87_BASE_REG 0x60
@@ -228,8 +238,6 @@
.detach_client = it87_detach_client,
};
-static int it87_id;
-
static ssize_t show_in(struct device *dev, char *buf, int nr)
{
struct it87_data *data = it87_update_device(dev);
@@ -673,25 +681,33 @@
/* SuperIO detection - will change normal_isa[0] if a chip is found */
static int it87_find(int *address)
{
- u16 val;
+ int err = -ENODEV;
superio_enter();
- chip_type = (superio_inb(DEVID) << 8) |
- superio_inb(DEVID + 1);
- if (chip_type != IT8712F_DEVID) {
- superio_exit();
- return -ENODEV;
- }
+ chip_type = superio_inw(DEVID);
+ if (chip_type != IT8712F_DEVID
+ && chip_type != IT8705F_DEVID)
+ goto exit;
superio_select();
- val = (superio_inb(IT87_BASE_REG) << 8) |
- superio_inb(IT87_BASE_REG + 1);
- superio_exit();
- *address = val & ~(IT87_EXTENT - 1);
+ if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
+ pr_info("it87: Device not activated, skipping\n");
+ goto exit;
+ }
+
+ *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
if (*address = 0) {
- return -ENODEV;
+ pr_info("it87: Base address not set, skipping\n");
+ goto exit;
}
- return 0;
+
+ err = 0;
+ pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
+ chip_type, *address, superio_inb(DEVREV) & 0x0f);
+
+exit:
+ superio_exit();
+ return err;
}
/* This function is called by i2c_detect */
@@ -800,10 +816,7 @@
/* Fill in the remaining client fields and put it into the global list */
strlcpy(new_client->name, name, I2C_NAME_SIZE);
-
data->type = kind;
-
- new_client->id = it87_id++;
data->valid = 0;
init_MUTEX(&data->update_lock);
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org, sensors@Stimpy.netroedge.com
Cc: khali@linux-fr.org
Subject: [PATCH] I2C: Improve it87 super-i/o detection
Date: Mon, 17 Jan 2005 13:46:36 -0800 [thread overview]
Message-ID: <11059983962750@kroah.com> (raw)
In-Reply-To: <11059983963929@kroah.com>
ChangeSet 1.2329.2.9, 2005/01/14 14:44:10-08:00, khali@linux-fr.org
[PATCH] I2C: Improve it87 super-i/o detection
This patch improves the detection of Super-I/O it87 chips (IT8712F,
IT8705F).
* Find the IT8712F and IT8705F address through Super-I/O (as opposed to
IT8712F only so far).
* Verify that the device is activated. Print info lines if a
disactivated or unconfigured chip is found.
* Print an info line when finding either chip, with device name,
address and revision.
* Rearrange code in it87_find() (error path).
* (bonus) Get rid of the useless i2c_client id.
Successfully tested on two IT8712F and one IT8705F, thanks to Jonas
Munsin, Rudolf Marek and Karine Proot.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/i2c/chips/it87.c | 53 +++++++++++++++++++++++++++++------------------
1 files changed, 33 insertions(+), 20 deletions(-)
diff -Nru a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c
--- a/drivers/i2c/chips/it87.c 2005-01-17 13:20:06 -08:00
+++ b/drivers/i2c/chips/it87.c 2005-01-17 13:20:06 -08:00
@@ -56,6 +56,7 @@
#define VAL 0x2f /* The value to read/write */
#define PME 0x04 /* The device with the fan registers in it */
#define DEVID 0x20 /* Register: Device ID */
+#define DEVREV 0x22 /* Register: Device Revision */
static inline int
superio_inb(int reg)
@@ -64,6 +65,16 @@
return inb(VAL);
}
+static int superio_inw(int reg)
+{
+ int val;
+ outb(reg++, REG);
+ val = inb(VAL) << 8;
+ outb(reg, REG);
+ val |= inb(VAL);
+ return val;
+}
+
static inline void
superio_select(void)
{
@@ -87,9 +98,8 @@
outb(0x02, VAL);
}
-/* just IT8712F for now - this should be extended to support the other
- chips as well */
#define IT8712F_DEVID 0x8712
+#define IT8705F_DEVID 0x8705
#define IT87_ACT_REG 0x30
#define IT87_BASE_REG 0x60
@@ -228,8 +238,6 @@
.detach_client = it87_detach_client,
};
-static int it87_id;
-
static ssize_t show_in(struct device *dev, char *buf, int nr)
{
struct it87_data *data = it87_update_device(dev);
@@ -673,25 +681,33 @@
/* SuperIO detection - will change normal_isa[0] if a chip is found */
static int it87_find(int *address)
{
- u16 val;
+ int err = -ENODEV;
superio_enter();
- chip_type = (superio_inb(DEVID) << 8) |
- superio_inb(DEVID + 1);
- if (chip_type != IT8712F_DEVID) {
- superio_exit();
- return -ENODEV;
- }
+ chip_type = superio_inw(DEVID);
+ if (chip_type != IT8712F_DEVID
+ && chip_type != IT8705F_DEVID)
+ goto exit;
superio_select();
- val = (superio_inb(IT87_BASE_REG) << 8) |
- superio_inb(IT87_BASE_REG + 1);
- superio_exit();
- *address = val & ~(IT87_EXTENT - 1);
+ if (!(superio_inb(IT87_ACT_REG) & 0x01)) {
+ pr_info("it87: Device not activated, skipping\n");
+ goto exit;
+ }
+
+ *address = superio_inw(IT87_BASE_REG) & ~(IT87_EXTENT - 1);
if (*address == 0) {
- return -ENODEV;
+ pr_info("it87: Base address not set, skipping\n");
+ goto exit;
}
- return 0;
+
+ err = 0;
+ pr_info("it87: Found IT%04xF chip at 0x%x, revision %d\n",
+ chip_type, *address, superio_inb(DEVREV) & 0x0f);
+
+exit:
+ superio_exit();
+ return err;
}
/* This function is called by i2c_detect */
@@ -800,10 +816,7 @@
/* Fill in the remaining client fields and put it into the global list */
strlcpy(new_client->name, name, I2C_NAME_SIZE);
-
data->type = kind;
-
- new_client->id = it87_id++;
data->valid = 0;
init_MUTEX(&data->update_lock);
next prev parent reply other threads:[~2005-05-19 6:25 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-17 21:45 [BK PATCH] I2C fixes for 2.6.11-rc1 Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: add MODULE_DEVICE_TABLE to via686a.c driver Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C support for Intel ICH7 - 2.6.10 - resubmit Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: it87 fan update Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: adm1026.c fixes Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: Fix bogus bitmask in lm63 debug message Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: Cleanups to the eeprom driver Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: fix it87 sensor driver stops CPU fan Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` [PATCH] I2C: add EMC6D100 support in lm85 driver Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 21:46 ` Greg KH [this message]
2005-05-19 6:25 ` [PATCH] I2C: Improve it87 super-i/o detection Greg KH
2005-01-17 21:46 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between transactions Greg KH
2005-05-19 6:25 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between Greg KH
2005-01-17 21:46 ` [PATCH] I2C-MPC: Convert to platform_device driver Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-17 22:12 ` [BK PATCH] I2C fixes for 2.6.11-rc1 Greg KH
2005-05-19 6:25 ` Greg KH
-- strict thread matches above, loose matches on Subject: below --
2005-05-19 6:25 [PATCH] I2C-MPC: use wait_event_interruptible_timeout Kumar Gala
2005-05-19 6:25 ` Greg KH
2005-05-19 6:25 ` Kumar Gala
2005-01-14 3:35 [PATCH] I2C-MPC: Convert to platform_device driver Kumar Gala
2005-05-19 6:25 ` Kumar Gala
2005-01-14 3:35 ` Kumar Gala
2005-01-14 18:42 ` Greg KH
2005-05-19 6:25 ` Greg KH
2005-01-14 18:42 ` Greg KH
2005-01-14 0:21 [PATCH] I2C-MPC: use wait_event_interruptible_timeout between transactions Kumar Gala
2005-05-19 6:25 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between Kumar Gala
2005-01-14 0:21 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between transactions Kumar Gala
2005-01-14 18:41 ` Greg KH
2005-05-19 6:25 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between Greg KH
2005-01-14 18:41 ` [PATCH] I2C-MPC: use wait_event_interruptible_timeout between transactions 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=11059983962750@kroah.com \
--to=greg@kroah.com \
--cc=khali@linux-fr.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sensors@Stimpy.netroedge.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.