Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -36,6 +36,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-sysfs.h>
@@ -242,6 +243,14 @@ static struct i2c_driver it87_driver = {
	.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,
		char *buf)
{
@@ -741,7 +750,7 @@ int it87_detect(struct i2c_adapter *adapter, int address, int kind)

	/* Reserve the ISA region */
	if (is_isa)
		if (!request_region(address, IT87_EXTENT, it87_driver.name))
		if (!request_region(address, IT87_EXTENT, it87_isa_driver.name))
			goto ERROR0;

	/* 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)
	i2c_set_clientdata(new_client, data);
	new_client->addr = address;
	new_client->adapter = adapter;
	new_client->driver = &it87_driver;
	new_client->driver = is_isa ? &it87_isa_driver : &it87_driver;
	new_client->flags = 0;

	/* Now, we do the remaining detection. */
@@ -1172,16 +1181,28 @@ static struct it87_data *it87_update_device(struct device *dev)

static int __init sm_it87_init(void)
{
	int addr;
	int addr, res;

	if (!it87_find(&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)
{
	i2c_isa_del_driver(&it87_isa_driver);
	i2c_del_driver(&it87_driver);
}

+26 −3
Original line number Diff line number Diff line
@@ -23,6 +23,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/hwmon.h>
#include <linux/err.h>
@@ -177,6 +178,14 @@ static struct i2c_driver lm78_driver = {
	.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 */
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)

	/* Reserve the ISA region */
	if (is_isa)
		if (!request_region(address, LM78_EXTENT, lm78_driver.name)) {
		if (!request_region(address, LM78_EXTENT,
				    lm78_isa_driver.name)) {
			err = -EBUSY;
			goto ERROR0;
		}
@@ -543,7 +553,7 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind)
	i2c_set_clientdata(new_client, data);
	new_client->addr = address;
	new_client->adapter = adapter;
	new_client->driver = &lm78_driver;
	new_client->driver = is_isa ? &lm78_isa_driver : &lm78_driver;
	new_client->flags = 0;

	/* Now, we do the remaining detection. */
@@ -788,11 +798,24 @@ static struct lm78_data *lm78_update_device(struct device *dev)

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)
{
	i2c_isa_del_driver(&lm78_isa_driver);
	i2c_del_driver(&lm78_driver);
}

+3 −2
Original line number Diff line number Diff line
@@ -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>
@@ -1344,12 +1345,12 @@ static int __init pc87360_init(void)
		return -ENODEV;
	}

	return i2c_add_driver(&pc87360_driver);
	return i2c_isa_add_driver(&pc87360_driver);
}

static void __exit pc87360_exit(void)
{
	i2c_del_driver(&pc87360_driver);
	i2c_isa_del_driver(&pc87360_driver);
}


+3 −2
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@
#include <linux/ioport.h>
#include <linux/pci.h>
#include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h>
#include <linux/hwmon.h>
#include <linux/err.h>
@@ -790,7 +791,7 @@ static int __devinit sis5595_pci_probe(struct pci_dev *dev,
	normal_isa[0] = addr;

	s_bridge = pci_dev_get(dev);
	if (i2c_add_driver(&sis5595_driver)) {
	if (i2c_isa_add_driver(&sis5595_driver)) {
		pci_dev_put(s_bridge);
		s_bridge = NULL;
	}
@@ -817,7 +818,7 @@ static void __exit sm_sis5595_exit(void)
{
	pci_unregister_driver(&sis5595_pci_driver);
	if (s_bridge != NULL) {
		i2c_del_driver(&sis5595_driver);
		i2c_isa_del_driver(&sis5595_driver);
		pci_dev_put(s_bridge);
		s_bridge = NULL;
	}
+3 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <linux/ioport.h>
#include <linux/jiffies.h>
#include <linux/i2c.h>
#include <linux/i2c-isa.h>
#include <linux/i2c-sensor.h>
#include <linux/hwmon.h>
#include <linux/err.h>
@@ -350,12 +351,12 @@ static int __init smsc47b397_init(void)
	if ((ret = smsc47b397_find(normal_isa)))
		return ret;

	return i2c_add_driver(&smsc47b397_driver);
	return i2c_isa_add_driver(&smsc47b397_driver);
}

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>");
Loading