Skip to content

Commit

Permalink
[PATCH] hwmon: Drop legacy ISA address support from it87
Browse files Browse the repository at this point in the history
Drop legacy ISA address support from the it87 driver. All supported
chips are Super-I/O chips, so the device ISA address can be safely read
from Super-I/O space rather than blindly assumed.

Two nearby inaccurate documentation statements have been fixed as well:
* The IT8705F doesn't have an SMBus interface.
* The SiS950 doesn't have a distinct prefix.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Jean Delvare authored and Greg Kroah-Hartman committed Oct 28, 2005
1 parent 80ce3b7 commit 9174999
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 44 deletions.
8 changes: 4 additions & 4 deletions Documentation/hwmon/it87
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ Kernel driver it87
Supported chips:
* IT8705F
Prefix: 'it87'
Addresses scanned: from Super I/O config space, or default ISA 0x290 (8 I/O ports)
Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: Publicly available at the ITE website
http://www.ite.com.tw/
* IT8712F
Prefix: 'it8712'
Addresses scanned: I2C 0x28 - 0x2f
from Super I/O config space, or default ISA 0x290 (8 I/O ports)
from Super I/O config space (8 I/O ports)
Datasheet: Publicly available at the ITE website
http://www.ite.com.tw/
* SiS950 [clone of IT8705F]
Prefix: 'sis950'
Addresses scanned: from Super I/O config space, or default ISA 0x290 (8 I/O ports)
Prefix: 'it87'
Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: No longer be available

Author: Christophe Gauthron <chrisg@0-in.com>
Expand Down
51 changes: 11 additions & 40 deletions drivers/hwmon/it87.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
it87.c - Part of lm_sensors, Linux kernel modules for hardware
monitoring.
Supports: IT8705F Super I/O chip w/LPC interface & SMBus
Supports: IT8705F Super I/O chip w/LPC interface
IT8712F Super I/O chip w/LPC interface & SMBus
Sis950 A clone of the IT8705F
Expand Down Expand Up @@ -47,7 +47,7 @@
/* Addresses to scan */
static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
0x2e, 0x2f, I2C_CLIENT_END };
static unsigned short isa_address = 0x290;
static unsigned short isa_address;

/* Insmod parameters */
I2C_CLIENT_INSMOD_2(it87, it8712);
Expand Down Expand Up @@ -706,7 +706,7 @@ static int it87_isa_attach_adapter(struct i2c_adapter *adapter)
}

/* SuperIO detection - will change isa_address if a chip is found */
static int __init it87_find(int *address)
static int __init it87_find(unsigned short *address)
{
int err = -ENODEV;

Expand Down Expand Up @@ -757,34 +757,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind)
if (!request_region(address, IT87_EXTENT, it87_isa_driver.name))
goto ERROR0;

/* Probe whether there is anything available on this address. Already
done for SMBus and Super-I/O clients */
if (kind < 0) {
if (is_isa && !chip_type) {
#define REALLY_SLOW_IO
/* We need the timeouts for at least some IT87-like chips. But only
if we read 'undefined' registers. */
i = inb_p(address + 1);
if (inb_p(address + 2) != i
|| inb_p(address + 3) != i
|| inb_p(address + 7) != i) {
err = -ENODEV;
goto ERROR1;
}
#undef REALLY_SLOW_IO

/* Let's just hope nothing breaks here */
i = inb_p(address + 5) & 0x7f;
outb_p(~i & 0x7f, address + 5);
if ((inb_p(address + 5) & 0x7f) != (~i & 0x7f)) {
outb_p(i, address + 5);
err = -ENODEV;
goto ERROR1;
}
}
}

/* OK. For now, we presume we have a valid client. We now create the
/* For now, we presume we have a valid client. We create the
client structure, even though we cannot fill it completely yet.
But it allows us to access it87_{read,write}_value. */

Expand Down Expand Up @@ -1182,20 +1155,18 @@ static struct it87_data *it87_update_device(struct device *dev)

static int __init sm_it87_init(void)
{
int addr, res;

if (!it87_find(&addr)) {
isa_address = addr;
}
int res;

res = i2c_add_driver(&it87_driver);
if (res)
return res;

res = i2c_isa_add_driver(&it87_isa_driver);
if (res) {
i2c_del_driver(&it87_driver);
return res;
if (!it87_find(&isa_address)) {
res = i2c_isa_add_driver(&it87_isa_driver);
if (res) {
i2c_del_driver(&it87_driver);
return res;
}
}

return 0;
Expand Down

0 comments on commit 9174999

Please sign in to comment.