[PATCH] hwmon: Drop legacy ISA address support from it87
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>
This commit is contained in:
parent
80ce3b7d0f
commit
9174999628
@ -4,18 +4,18 @@ Kernel driver it87
|
|||||||
Supported chips:
|
Supported chips:
|
||||||
* IT8705F
|
* IT8705F
|
||||||
Prefix: 'it87'
|
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
|
Datasheet: Publicly available at the ITE website
|
||||||
http://www.ite.com.tw/
|
http://www.ite.com.tw/
|
||||||
* IT8712F
|
* IT8712F
|
||||||
Prefix: 'it8712'
|
Prefix: 'it8712'
|
||||||
Addresses scanned: I2C 0x28 - 0x2f
|
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
|
Datasheet: Publicly available at the ITE website
|
||||||
http://www.ite.com.tw/
|
http://www.ite.com.tw/
|
||||||
* SiS950 [clone of IT8705F]
|
* SiS950 [clone of IT8705F]
|
||||||
Prefix: 'sis950'
|
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: No longer be available
|
Datasheet: No longer be available
|
||||||
|
|
||||||
Author: Christophe Gauthron <chrisg@0-in.com>
|
Author: Christophe Gauthron <chrisg@0-in.com>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
it87.c - Part of lm_sensors, Linux kernel modules for hardware
|
it87.c - Part of lm_sensors, Linux kernel modules for hardware
|
||||||
monitoring.
|
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
|
IT8712F Super I/O chip w/LPC interface & SMBus
|
||||||
Sis950 A clone of the IT8705F
|
Sis950 A clone of the IT8705F
|
||||||
|
|
||||||
@ -47,7 +47,7 @@
|
|||||||
/* Addresses to scan */
|
/* Addresses to scan */
|
||||||
static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
|
static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
|
||||||
0x2e, 0x2f, I2C_CLIENT_END };
|
0x2e, 0x2f, I2C_CLIENT_END };
|
||||||
static unsigned short isa_address = 0x290;
|
static unsigned short isa_address;
|
||||||
|
|
||||||
/* Insmod parameters */
|
/* Insmod parameters */
|
||||||
I2C_CLIENT_INSMOD_2(it87, it8712);
|
I2C_CLIENT_INSMOD_2(it87, it8712);
|
||||||
@ -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 */
|
/* 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;
|
int err = -ENODEV;
|
||||||
|
|
||||||
@ -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))
|
if (!request_region(address, IT87_EXTENT, it87_isa_driver.name))
|
||||||
goto ERROR0;
|
goto ERROR0;
|
||||||
|
|
||||||
/* Probe whether there is anything available on this address. Already
|
/* For now, we presume we have a valid client. We create the
|
||||||
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
|
|
||||||
client structure, even though we cannot fill it completely yet.
|
client structure, even though we cannot fill it completely yet.
|
||||||
But it allows us to access it87_{read,write}_value. */
|
But it allows us to access it87_{read,write}_value. */
|
||||||
|
|
||||||
@ -1182,20 +1155,18 @@ static struct it87_data *it87_update_device(struct device *dev)
|
|||||||
|
|
||||||
static int __init sm_it87_init(void)
|
static int __init sm_it87_init(void)
|
||||||
{
|
{
|
||||||
int addr, res;
|
int res;
|
||||||
|
|
||||||
if (!it87_find(&addr)) {
|
|
||||||
isa_address = addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = i2c_add_driver(&it87_driver);
|
res = i2c_add_driver(&it87_driver);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
res = i2c_isa_add_driver(&it87_isa_driver);
|
if (!it87_find(&isa_address)) {
|
||||||
if (res) {
|
res = i2c_isa_add_driver(&it87_isa_driver);
|
||||||
i2c_del_driver(&it87_driver);
|
if (res) {
|
||||||
return res;
|
i2c_del_driver(&it87_driver);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user