diff options
author | Jean Delvare <khali@linux-fr.org> | 2005-07-19 23:51:07 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-09-05 18:14:09 +0200 |
commit | fde0950903ce8cc38a91dd095280decceda2ff82 (patch) | |
tree | 5a970459793ac46ad7082f0d722616730b0589c2 /drivers/hwmon/w83781d.c | |
parent | [PATCH] I2C: Separate non-i2c hwmon drivers from i2c-core (2/9) (diff) | |
download | linux-fde0950903ce8cc38a91dd095280decceda2ff82.tar.xz linux-fde0950903ce8cc38a91dd095280decceda2ff82.zip |
[PATCH] I2C: Separate non-i2c hwmon drivers from i2c-core (3/9)
Convert the 10 ISA hardware monitoring drivers (it87, lm78, pc87360,
sis5595, smsc47b397, smsc47m1, via686a, w83627hf, w83627ehf, w83781d) to
explicitely register with i2c-isa. For hybrid drivers (it87, lm78,
w83781d), we now have two separate instances of i2c_driver, one for the
I2C interface of the chip, and one for ISA interface. In the long run,
the one for ISA will be replaced with a different driver type.
At this point, all drivers are working again, except for missing
dependencies in Kconfig.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/hwmon/w83781d.c')
-rw-r--r-- | drivers/hwmon/w83781d.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c index c83ae769e362..69b061e2dc00 100644 --- a/drivers/hwmon/w83781d.c +++ b/drivers/hwmon/w83781d.c @@ -38,6 +38,7 @@ #include <linux/slab.h> #include <linux/jiffies.h> #include <linux/i2c.h> +#include <linux/i2c-isa.h> #include <linux/i2c-sensor.h> #include <linux/i2c-vid.h> #include <linux/hwmon.h> @@ -276,6 +277,14 @@ static struct i2c_driver w83781d_driver = { .detach_client = w83781d_detach_client, }; +static struct i2c_driver w83781d_isa_driver = { + .owner = THIS_MODULE, + .name = "w83781d-isa", + .attach_adapter = w83781d_attach_adapter, + .detach_client = w83781d_detach_client, +}; + + /* following are the sysfs callback functions */ #define show_in_reg(reg) \ static ssize_t show_##reg (struct device *dev, char *buf, int nr) \ @@ -1002,7 +1011,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind) if (is_isa) if (!request_region(address, W83781D_EXTENT, - w83781d_driver.name)) { + w83781d_isa_driver.name)) { dev_dbg(&adapter->dev, "Request of region " "0x%x-0x%x for w83781d failed\n", address, address + W83781D_EXTENT - 1); @@ -1060,7 +1069,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind) new_client->addr = address; init_MUTEX(&data->lock); new_client->adapter = adapter; - new_client->driver = &w83781d_driver; + new_client->driver = is_isa ? &w83781d_isa_driver : &w83781d_driver; new_client->flags = 0; /* Now, we do the remaining detection. */ @@ -1636,12 +1645,25 @@ static struct w83781d_data *w83781d_update_device(struct device *dev) static int __init sensors_w83781d_init(void) { - return i2c_add_driver(&w83781d_driver); + int res; + + res = i2c_add_driver(&w83781d_driver); + if (res) + return res; + + res = i2c_isa_add_driver(&w83781d_isa_driver); + if (res) { + i2c_del_driver(&w83781d_driver); + return res; + } + + return 0; } static void __exit sensors_w83781d_exit(void) { + i2c_isa_del_driver(&w83781d_isa_driver); i2c_del_driver(&w83781d_driver); } |