提交 91749996 编写于 作者: J Jean Delvare 提交者: Greg Kroah-Hartman

[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: NJean Delvare <khali@linux-fr.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 80ce3b7d
...@@ -4,18 +4,18 @@ Kernel driver it87 ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册