diff options
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 @@ | |||
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/jiffies.h> | 39 | #include <linux/jiffies.h> |
40 | #include <linux/i2c.h> | 40 | #include <linux/i2c.h> |
41 | #include <linux/i2c-isa.h> | ||
41 | #include <linux/i2c-sensor.h> | 42 | #include <linux/i2c-sensor.h> |
42 | #include <linux/i2c-vid.h> | 43 | #include <linux/i2c-vid.h> |
43 | #include <linux/hwmon.h> | 44 | #include <linux/hwmon.h> |
@@ -276,6 +277,14 @@ static struct i2c_driver w83781d_driver = { | |||
276 | .detach_client = w83781d_detach_client, | 277 | .detach_client = w83781d_detach_client, |
277 | }; | 278 | }; |
278 | 279 | ||
280 | static struct i2c_driver w83781d_isa_driver = { | ||
281 | .owner = THIS_MODULE, | ||
282 | .name = "w83781d-isa", | ||
283 | .attach_adapter = w83781d_attach_adapter, | ||
284 | .detach_client = w83781d_detach_client, | ||
285 | }; | ||
286 | |||
287 | |||
279 | /* following are the sysfs callback functions */ | 288 | /* following are the sysfs callback functions */ |
280 | #define show_in_reg(reg) \ | 289 | #define show_in_reg(reg) \ |
281 | static ssize_t show_##reg (struct device *dev, char *buf, int nr) \ | 290 | 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) | |||
1002 | 1011 | ||
1003 | if (is_isa) | 1012 | if (is_isa) |
1004 | if (!request_region(address, W83781D_EXTENT, | 1013 | if (!request_region(address, W83781D_EXTENT, |
1005 | w83781d_driver.name)) { | 1014 | w83781d_isa_driver.name)) { |
1006 | dev_dbg(&adapter->dev, "Request of region " | 1015 | dev_dbg(&adapter->dev, "Request of region " |
1007 | "0x%x-0x%x for w83781d failed\n", address, | 1016 | "0x%x-0x%x for w83781d failed\n", address, |
1008 | address + W83781D_EXTENT - 1); | 1017 | address + W83781D_EXTENT - 1); |
@@ -1060,7 +1069,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind) | |||
1060 | new_client->addr = address; | 1069 | new_client->addr = address; |
1061 | init_MUTEX(&data->lock); | 1070 | init_MUTEX(&data->lock); |
1062 | new_client->adapter = adapter; | 1071 | new_client->adapter = adapter; |
1063 | new_client->driver = &w83781d_driver; | 1072 | new_client->driver = is_isa ? &w83781d_isa_driver : &w83781d_driver; |
1064 | new_client->flags = 0; | 1073 | new_client->flags = 0; |
1065 | 1074 | ||
1066 | /* Now, we do the remaining detection. */ | 1075 | /* Now, we do the remaining detection. */ |
@@ -1636,12 +1645,25 @@ static struct w83781d_data *w83781d_update_device(struct device *dev) | |||
1636 | static int __init | 1645 | static int __init |
1637 | sensors_w83781d_init(void) | 1646 | sensors_w83781d_init(void) |
1638 | { | 1647 | { |
1639 | return i2c_add_driver(&w83781d_driver); | 1648 | int res; |
1649 | |||
1650 | res = i2c_add_driver(&w83781d_driver); | ||
1651 | if (res) | ||
1652 | return res; | ||
1653 | |||
1654 | res = i2c_isa_add_driver(&w83781d_isa_driver); | ||
1655 | if (res) { | ||
1656 | i2c_del_driver(&w83781d_driver); | ||
1657 | return res; | ||
1658 | } | ||
1659 | |||
1660 | return 0; | ||
1640 | } | 1661 | } |
1641 | 1662 | ||
1642 | static void __exit | 1663 | static void __exit |
1643 | sensors_w83781d_exit(void) | 1664 | sensors_w83781d_exit(void) |
1644 | { | 1665 | { |
1666 | i2c_isa_del_driver(&w83781d_isa_driver); | ||
1645 | i2c_del_driver(&w83781d_driver); | 1667 | i2c_del_driver(&w83781d_driver); |
1646 | } | 1668 | } |
1647 | 1669 | ||