Commit fde09509 authored by Jean Delvare's avatar Jean Delvare Committed by Greg Kroah-Hartman

[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: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 400c455e
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/i2c-vid.h> #include <linux/i2c-vid.h>
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
...@@ -242,6 +243,14 @@ static struct i2c_driver it87_driver = { ...@@ -242,6 +243,14 @@ static struct i2c_driver it87_driver = {
.detach_client = it87_detach_client, .detach_client = it87_detach_client,
}; };
static struct i2c_driver it87_isa_driver = {
.owner = THIS_MODULE,
.name = "it87-isa",
.attach_adapter = it87_attach_adapter,
.detach_client = it87_detach_client,
};
static ssize_t show_in(struct device *dev, struct device_attribute *attr, static ssize_t show_in(struct device *dev, struct device_attribute *attr,
char *buf) char *buf)
{ {
...@@ -741,7 +750,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind) ...@@ -741,7 +750,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind)
/* Reserve the ISA region */ /* Reserve the ISA region */
if (is_isa) if (is_isa)
if (!request_region(address, IT87_EXTENT, it87_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 /* Probe whether there is anything available on this address. Already
...@@ -787,7 +796,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind) ...@@ -787,7 +796,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind)
i2c_set_clientdata(new_client, data); i2c_set_clientdata(new_client, data);
new_client->addr = address; new_client->addr = address;
new_client->adapter = adapter; new_client->adapter = adapter;
new_client->driver = &it87_driver; new_client->driver = is_isa ? &it87_isa_driver : &it87_driver;
new_client->flags = 0; new_client->flags = 0;
/* Now, we do the remaining detection. */ /* Now, we do the remaining detection. */
...@@ -1172,16 +1181,28 @@ static struct it87_data *it87_update_device(struct device *dev) ...@@ -1172,16 +1181,28 @@ 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; int addr, res;
if (!it87_find(&addr)) { if (!it87_find(&addr)) {
normal_isa[0] = addr; normal_isa[0] = addr;
} }
return i2c_add_driver(&it87_driver);
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;
}
return 0;
} }
static void __exit sm_it87_exit(void) static void __exit sm_it87_exit(void)
{ {
i2c_isa_del_driver(&it87_isa_driver);
i2c_del_driver(&it87_driver); i2c_del_driver(&it87_driver);
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -177,6 +178,14 @@ static struct i2c_driver lm78_driver = { ...@@ -177,6 +178,14 @@ static struct i2c_driver lm78_driver = {
.detach_client = lm78_detach_client, .detach_client = lm78_detach_client,
}; };
static struct i2c_driver lm78_isa_driver = {
.owner = THIS_MODULE,
.name = "lm78-isa",
.attach_adapter = lm78_attach_adapter,
.detach_client = lm78_detach_client,
};
/* 7 Voltages */ /* 7 Voltages */
static ssize_t show_in(struct device *dev, char *buf, int nr) static ssize_t show_in(struct device *dev, char *buf, int nr)
{ {
...@@ -488,7 +497,8 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind) ...@@ -488,7 +497,8 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind)
/* Reserve the ISA region */ /* Reserve the ISA region */
if (is_isa) if (is_isa)
if (!request_region(address, LM78_EXTENT, lm78_driver.name)) { if (!request_region(address, LM78_EXTENT,
lm78_isa_driver.name)) {
err = -EBUSY; err = -EBUSY;
goto ERROR0; goto ERROR0;
} }
...@@ -543,7 +553,7 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind) ...@@ -543,7 +553,7 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind)
i2c_set_clientdata(new_client, data); i2c_set_clientdata(new_client, data);
new_client->addr = address; new_client->addr = address;
new_client->adapter = adapter; new_client->adapter = adapter;
new_client->driver = &lm78_driver; new_client->driver = is_isa ? &lm78_isa_driver : &lm78_driver;
new_client->flags = 0; new_client->flags = 0;
/* Now, we do the remaining detection. */ /* Now, we do the remaining detection. */
...@@ -788,11 +798,24 @@ static struct lm78_data *lm78_update_device(struct device *dev) ...@@ -788,11 +798,24 @@ static struct lm78_data *lm78_update_device(struct device *dev)
static int __init sm_lm78_init(void) static int __init sm_lm78_init(void)
{ {
return i2c_add_driver(&lm78_driver); int res;
res = i2c_add_driver(&lm78_driver);
if (res)
return res;
res = i2c_isa_add_driver(&lm78_isa_driver);
if (res) {
i2c_del_driver(&lm78_driver);
return res;
}
return 0;
} }
static void __exit sm_lm78_exit(void) static void __exit sm_lm78_exit(void)
{ {
i2c_isa_del_driver(&lm78_isa_driver);
i2c_del_driver(&lm78_driver); i2c_del_driver(&lm78_driver);
} }
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/i2c-vid.h> #include <linux/i2c-vid.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
...@@ -1344,12 +1345,12 @@ static int __init pc87360_init(void) ...@@ -1344,12 +1345,12 @@ static int __init pc87360_init(void)
return -ENODEV; return -ENODEV;
} }
return i2c_add_driver(&pc87360_driver); return i2c_isa_add_driver(&pc87360_driver);
} }
static void __exit pc87360_exit(void) static void __exit pc87360_exit(void)
{ {
i2c_del_driver(&pc87360_driver); i2c_isa_del_driver(&pc87360_driver);
} }
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -790,7 +791,7 @@ static int __devinit sis5595_pci_probe(struct pci_dev *dev, ...@@ -790,7 +791,7 @@ static int __devinit sis5595_pci_probe(struct pci_dev *dev,
normal_isa[0] = addr; normal_isa[0] = addr;
s_bridge = pci_dev_get(dev); s_bridge = pci_dev_get(dev);
if (i2c_add_driver(&sis5595_driver)) { if (i2c_isa_add_driver(&sis5595_driver)) {
pci_dev_put(s_bridge); pci_dev_put(s_bridge);
s_bridge = NULL; s_bridge = NULL;
} }
...@@ -817,7 +818,7 @@ static void __exit sm_sis5595_exit(void) ...@@ -817,7 +818,7 @@ static void __exit sm_sis5595_exit(void)
{ {
pci_unregister_driver(&sis5595_pci_driver); pci_unregister_driver(&sis5595_pci_driver);
if (s_bridge != NULL) { if (s_bridge != NULL) {
i2c_del_driver(&sis5595_driver); i2c_isa_del_driver(&sis5595_driver);
pci_dev_put(s_bridge); pci_dev_put(s_bridge);
s_bridge = NULL; s_bridge = NULL;
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -350,12 +351,12 @@ static int __init smsc47b397_init(void) ...@@ -350,12 +351,12 @@ static int __init smsc47b397_init(void)
if ((ret = smsc47b397_find(normal_isa))) if ((ret = smsc47b397_find(normal_isa)))
return ret; return ret;
return i2c_add_driver(&smsc47b397_driver); return i2c_isa_add_driver(&smsc47b397_driver);
} }
static void __exit smsc47b397_exit(void) static void __exit smsc47b397_exit(void)
{ {
i2c_del_driver(&smsc47b397_driver); i2c_isa_del_driver(&smsc47b397_driver);
} }
MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>"); MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>");
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -592,12 +593,12 @@ static int __init sm_smsc47m1_init(void) ...@@ -592,12 +593,12 @@ static int __init sm_smsc47m1_init(void)
return -ENODEV; return -ENODEV;
} }
return i2c_add_driver(&smsc47m1_driver); return i2c_isa_add_driver(&smsc47m1_driver);
} }
static void __exit sm_smsc47m1_exit(void) static void __exit sm_smsc47m1_exit(void)
{ {
i2c_del_driver(&smsc47m1_driver); i2c_isa_del_driver(&smsc47m1_driver);
} }
MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>"); MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>");
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -846,7 +847,7 @@ static int __devinit via686a_pci_probe(struct pci_dev *dev, ...@@ -846,7 +847,7 @@ static int __devinit via686a_pci_probe(struct pci_dev *dev,
normal_isa[0] = addr; normal_isa[0] = addr;
s_bridge = pci_dev_get(dev); s_bridge = pci_dev_get(dev);
if (i2c_add_driver(&via686a_driver)) { if (i2c_isa_add_driver(&via686a_driver)) {
pci_dev_put(s_bridge); pci_dev_put(s_bridge);
s_bridge = NULL; s_bridge = NULL;
} }
...@@ -873,7 +874,7 @@ static void __exit sm_via686a_exit(void) ...@@ -873,7 +874,7 @@ static void __exit sm_via686a_exit(void)
{ {
pci_unregister_driver(&via686a_pci_driver); pci_unregister_driver(&via686a_pci_driver);
if (s_bridge != NULL) { if (s_bridge != NULL) {
i2c_del_driver(&via686a_driver); i2c_isa_del_driver(&via686a_driver);
pci_dev_put(s_bridge); pci_dev_put(s_bridge);
s_bridge = NULL; s_bridge = NULL;
} }
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/err.h> #include <linux/err.h>
...@@ -847,12 +848,12 @@ static int __init sensors_w83627ehf_init(void) ...@@ -847,12 +848,12 @@ static int __init sensors_w83627ehf_init(void)
&& w83627ehf_find(0x4e, &normal_isa[0])) && w83627ehf_find(0x4e, &normal_isa[0]))
return -ENODEV; return -ENODEV;
return i2c_add_driver(&w83627ehf_driver); return i2c_isa_add_driver(&w83627ehf_driver);
} }
static void __exit sensors_w83627ehf_exit(void) static void __exit sensors_w83627ehf_exit(void)
{ {
i2c_del_driver(&w83627ehf_driver); i2c_isa_del_driver(&w83627ehf_driver);
} }
MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>"); MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/i2c-vid.h> #include <linux/i2c-vid.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
...@@ -1507,12 +1508,12 @@ static int __init sensors_w83627hf_init(void) ...@@ -1507,12 +1508,12 @@ static int __init sensors_w83627hf_init(void)
} }
normal_isa[0] = addr; normal_isa[0] = addr;
return i2c_add_driver(&w83627hf_driver); return i2c_isa_add_driver(&w83627hf_driver);
} }
static void __exit sensors_w83627hf_exit(void) static void __exit sensors_w83627hf_exit(void)
{ {
i2c_del_driver(&w83627hf_driver); i2c_isa_del_driver(&w83627hf_driver);
} }
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, " MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>, "
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h> #include <linux/i2c-sensor.h>
#include <linux/i2c-vid.h> #include <linux/i2c-vid.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
...@@ -276,6 +277,14 @@ static struct i2c_driver w83781d_driver = { ...@@ -276,6 +277,14 @@ static struct i2c_driver w83781d_driver = {
.detach_client = w83781d_detach_client, .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 */ /* following are the sysfs callback functions */
#define show_in_reg(reg) \ #define show_in_reg(reg) \
static ssize_t show_##reg (struct device *dev, char *buf, int nr) \ 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,7 +1011,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
if (is_isa) if (is_isa)
if (!request_region(address, W83781D_EXTENT, if (!request_region(address, W83781D_EXTENT,
w83781d_driver.name)) { w83781d_isa_driver.name)) {
dev_dbg(&adapter->dev, "Request of region " dev_dbg(&adapter->dev, "Request of region "
"0x%x-0x%x for w83781d failed\n", address, "0x%x-0x%x for w83781d failed\n", address,
address + W83781D_EXTENT - 1); address + W83781D_EXTENT - 1);
...@@ -1060,7 +1069,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind) ...@@ -1060,7 +1069,7 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
new_client->addr = address; new_client->addr = address;
init_MUTEX(&data->lock); init_MUTEX(&data->lock);
new_client->adapter = adapter; new_client->adapter = adapter;
new_client->driver = &w83781d_driver; new_client->driver = is_isa ? &w83781d_isa_driver : &w83781d_driver;
new_client->flags = 0; new_client->flags = 0;
/* Now, we do the remaining detection. */ /* Now, we do the remaining detection. */
...@@ -1636,12 +1645,25 @@ static struct w83781d_data *w83781d_update_device(struct device *dev) ...@@ -1636,12 +1645,25 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
static int __init static int __init
sensors_w83781d_init(void) 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 static void __exit
sensors_w83781d_exit(void) sensors_w83781d_exit(void)
{ {
i2c_isa_del_driver(&w83781d_isa_driver);
i2c_del_driver(&w83781d_driver); i2c_del_driver(&w83781d_driver);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment