Commit 81a2f2db authored by Linus Torvalds's avatar Linus Torvalds

Merge

parents 0472fea5 67c8a662
......@@ -38,8 +38,6 @@ obj-$(CONFIG_GAMEPORT) += input/gameport/
obj-$(CONFIG_SERIO) += input/serio/
obj-$(CONFIG_I2O) += message/
obj-$(CONFIG_I2C) += i2c/
obj-$(CONFIG_I2C_MAINBOARD) += i2c/busses/
obj-$(CONFIG_SENSORS) += i2c/chips/
obj-$(CONFIG_PHONE) += telephony/
obj-$(CONFIG_MD) += md/
obj-$(CONFIG_BT) += bluetooth/
......
......@@ -27,15 +27,6 @@
#include <asm/io.h>
#include <asm/pgalloc.h>
#ifdef CONFIG_I2C_MAINBOARD
extern void i2c_mainboard_init_all(void);
#endif
#ifdef CONFIG_SENSORS
extern void sensors_init_all(void);
#endif
#ifdef CONFIG_I2C
extern int i2c_init_all(void);
#endif
#ifdef CONFIG_FB
extern void fbmem_init(void);
#endif
......@@ -708,12 +699,6 @@ int __init chr_dev_init(void)
printk("unable to get major %d for memory devs\n", MEM_MAJOR);
memory_devfs_register();
rand_initialize();
#ifdef CONFIG_I2C
i2c_init_all();
#endif
#ifdef CONFIG_I2C_MAINBOARD
i2c_mainboard_init_all();
#endif
#if defined (CONFIG_FB)
fbmem_init();
#endif
......@@ -728,10 +713,6 @@ int __init chr_dev_init(void)
#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
tapechar_init();
#endif
#ifdef CONFIG_SENSORS
sensors_init_all();
#endif
return 0;
}
......
......@@ -166,8 +166,6 @@ config I2C_IBM_OCP_ADAP
tristate "IBM on-chip I2C Adapter"
depends on I2C_IBM_OCP_ALGO
# This is needed for automatic patch generation: sensors code starts here
# This is needed for automatic patch generation: sensors code ends here
config I2C_CHARDEV
tristate "I2C device interface"
depends on I2C
......
......@@ -18,6 +18,4 @@ obj-$(CONFIG_ITE_I2C_ADAP) += i2c-adap-ite.o
obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
obj-$(CONFIG_I2C_PROC) += i2c-proc.o
# This is needed for automatic patch generation: sensors code starts here
# This is needed for automatic patch generation: sensors code ends here
obj-y += busses/ chips/
......@@ -5,22 +5,8 @@
menu "I2C Hardware Sensors Mainboard support"
config I2C_MAINBOARD
bool "Hardware sensors mainboard support"
depends on EXPERIMENTAL && I2C && I2C_PROC
help
Many modern mainboards have some kind of I2C interface integrated. This
is often in the form of a SMBus, or System Management Bus, which is
basically the same as I2C but which uses only a subset of the I2C
protocol.
You will also want the latest user-space utilties: you can find them
in the lm_sensors package, which you can download at
http://www.lm-sensors.nu
config I2C_AMD756
tristate " AMD 756/766"
depends on I2C_MAINBOARD
help
If you say yes to this option, support will be included for the AMD
756/766/768 mainboard I2C interfaces.
......@@ -37,7 +23,6 @@ config I2C_AMD756
config I2C_AMD8111
tristate " AMD 8111"
depends on I2C_MAINBOARD
help
If you say yes to this option, support will be included for the AMD
8111 mainboard I2C interfaces.
......
......@@ -2,6 +2,5 @@
# Makefile for the kernel hardware sensors bus drivers.
#
obj-$(CONFIG_I2C_MAINBOARD) += i2c-mainboard.o
obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o
obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o
/*
i2c-mainboard.c - Part of lm_sensors, Linux kernel modules for hardware
monitoring
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Not configurable as a module */
#include <linux/init.h>
extern int i2c_amd756_init(void);
int __init i2c_mainboard_init_all(void)
{
#ifdef CONFIG_I2C_AMD756
i2c_amd756_init();
#endif
return 0;
}
......@@ -5,22 +5,8 @@
menu "I2C Hardware Sensors Chip support"
config SENSORS
bool "Hardware sensors chip support"
depends on EXPERIMENTAL && I2C && I2C_PROC
help
Many modern mainboards have some kind of I2C interface integrated.
This is often in the form of a SMBus, or System Management Bus, which
is basically the same as I2C but which uses only a subset of the I2C
protocol.
You will also want the latest user-space utilties: you can find them
in the lm_sensors package, which you can download at
http://www.lm-sensors.nu
config SENSORS_ADM1021
tristate " Analog Devices ADM1021 and compatibles"
depends on SENSORS
help
If you say yes here you get support for Analog Devices ADM1021
and ADM1023 sensor chips and clones: Maxim MAX1617 and MAX1617A,
......@@ -37,7 +23,6 @@ config SENSORS_ADM1021
config SENSORS_LM75
tristate " National Semiconductors LM75 and compatibles"
depends on SENSORS
help
If you say yes here you get support for National Semiconductor LM75
sensor chips and clones: Dallas Semi DS75 and DS1775, TelCon
......@@ -51,4 +36,3 @@ config SENSORS_LM75
http://www.lm-sensors.nu
endmenu
......@@ -2,6 +2,5 @@
# Makefile for the kernel hardware sensors chip drivers.
#
obj-$(CONFIG_SENSORS) += sensors.o
obj-$(CONFIG_SENSORS_ADM1021) += adm1021.o
obj-$(CONFIG_SENSORS_LM75) += lm75.o
......@@ -26,7 +26,6 @@
#include <linux/sensors.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
/* Addresses to scan */
static unsigned short normal_i2c[] = { SENSORS_I2C_END };
......@@ -108,10 +107,6 @@ struct adm1021_data {
remote_temp_offset, remote_temp_offset_prec;
};
int __init sensors_adm1021_init(void);
void __exit sensors_adm1021_exit(void);
static int adm1021_cleanup(void);
static int adm1021_attach_adapter(struct i2c_adapter *adapter);
static int adm1021_detect(struct i2c_adapter *adapter, int address,
unsigned short flags, int kind);
......@@ -178,9 +173,6 @@ static ctl_table adm1021_max_dir_table_template[] = {
{0}
};
/* Used by init/cleanup */
static int __initdata adm1021_initialized = 0;
/* I choose here for semi-static allocation. Complete dynamic
allocation could also be used; the code needed for this would probably
take more memory than the datastructure takes now. */
......@@ -585,46 +577,21 @@ void adm1021_alarms(struct i2c_client *client, int operation, int ctl_name,
}
}
int __init sensors_adm1021_init(void)
static int __init sensors_adm1021_init(void)
{
int res;
printk("adm1021.o version %s (%s)\n", LM_VERSION, LM_DATE);
adm1021_initialized = 0;
if ((res = i2c_add_driver(&adm1021_driver))) {
printk
("adm1021.o: Driver registration failed, module not inserted.\n");
adm1021_cleanup();
return res;
}
adm1021_initialized++;
return 0;
}
void __exit sensors_adm1021_exit(void)
{
adm1021_cleanup();
return i2c_add_driver(&adm1021_driver);
}
static int adm1021_cleanup(void)
static void __exit sensors_adm1021_exit(void)
{
int res;
if (adm1021_initialized >= 1) {
if ((res = i2c_del_driver(&adm1021_driver))) {
printk
("adm1021.o: Driver deregistration failed, module not removed.\n");
return res;
}
adm1021_initialized--;
}
return 0;
i2c_del_driver(&adm1021_driver);
}
MODULE_AUTHOR
("Frodo Looijaard <frodol@dds.nl> and Philip Edelbrock <phil@netroedge.com>");
MODULE_DESCRIPTION("adm1021 driver");
MODULE_LICENSE("GPL");
MODULE_PARM(read_only, "i");
MODULE_PARM_DESC(read_only, "Don't set any values, read only mode");
......
......@@ -25,7 +25,6 @@
#include <linux/sensors.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
/* Addresses to scan */
static unsigned short normal_i2c[] = { SENSORS_I2C_END };
......@@ -66,10 +65,6 @@ struct lm75_data {
u16 temp, temp_os, temp_hyst; /* Register values */
};
int __init sensors_lm75_init(void);
void __exit sensors_lm75_exit(void);
static int lm75_cleanup(void);
static int lm75_attach_adapter(struct i2c_adapter *adapter);
static int lm75_detect(struct i2c_adapter *adapter, int address,
unsigned short flags, int kind);
......@@ -110,9 +105,6 @@ static ctl_table lm75_dir_table_template[] = {
{0}
};
/* Used by init/cleanup */
static int __initdata lm75_initialized = 0;
static int lm75_id = 0;
int lm75_attach_adapter(struct i2c_adapter *adapter)
......@@ -188,10 +180,7 @@ int lm75_detect(struct i2c_adapter *adapter, int address,
type_name = "lm75";
client_name = "LM75 chip";
} else {
#ifdef DEBUG
printk("lm75.o: Internal error: unknown kind (%d)?!?",
kind);
#endif
pr_debug("lm75.o: Internal error: unknown kind (%d)?!?", kind);
goto error1;
}
......@@ -314,10 +303,7 @@ void lm75_update_client(struct i2c_client *client)
if ((jiffies - data->last_updated > HZ + HZ / 2) ||
(jiffies < data->last_updated) || !data->valid) {
#ifdef DEBUG
printk("Starting lm75 update\n");
#endif
pr_debug("Starting lm75 update\n");
data->temp = lm75_read_value(client, LM75_REG_TEMP);
data->temp_os = lm75_read_value(client, LM75_REG_TEMP_OS);
......@@ -359,45 +345,17 @@ void lm75_temp(struct i2c_client *client, int operation, int ctl_name,
int __init sensors_lm75_init(void)
{
int res;
printk("lm75.o version %s (%s)\n", LM_VERSION, LM_DATE);
lm75_initialized = 0;
if ((res = i2c_add_driver(&lm75_driver))) {
printk
("lm75.o: Driver registration failed, module not inserted.\n");
lm75_cleanup();
return res;
}
lm75_initialized++;
return 0;
return i2c_add_driver(&lm75_driver);
}
void __exit sensors_lm75_exit(void)
static void __exit sensors_lm75_exit(void)
{
lm75_cleanup();
i2c_del_driver(&lm75_driver);
}
static int lm75_cleanup(void)
{
int res;
if (lm75_initialized >= 1) {
if ((res = i2c_del_driver(&lm75_driver))) {
printk
("lm75.o: Driver deregistration failed, module not removed.\n");
return res;
}
lm75_initialized--;
}
return 0;
}
EXPORT_NO_SYMBOLS;
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
MODULE_DESCRIPTION("LM75 driver");
MODULE_LICENSE("GPL");
module_init(sensors_lm75_init);
module_exit(sensors_lm75_exit);
/*
sensors.c - Part of lm_sensors, Linux kernel modules for hardware
monitoring
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Not configurable as a module */
#include <linux/init.h>
extern int sensors_adm1021_init(void);
extern int sensors_lm75_init(void);
int __init sensors_init_all(void)
{
#ifdef CONFIG_SENSORS_ADM1021
sensors_adm1021_init();
#endif
#ifdef CONFIG_SENSORS_LM75
sensors_lm75_init();
#endif
return 0;
}
......@@ -605,18 +605,9 @@ int i2c_bit_del_bus(struct i2c_adapter *adap)
return 0;
}
int __init i2c_algo_bit_init (void)
{
printk(KERN_INFO "i2c-algo-bit.o: i2c bit algorithm module version %s (%s)\n", I2C_VERSION, I2C_DATE);
return 0;
}
EXPORT_SYMBOL(i2c_bit_add_bus);
EXPORT_SYMBOL(i2c_bit_del_bus);
#ifdef MODULE
MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C-Bus bit-banging algorithm");
MODULE_LICENSE("GPL");
......@@ -629,13 +620,3 @@ MODULE_PARM_DESC(bit_test, "Test the lines of the bus to see if it is stuck");
MODULE_PARM_DESC(bit_scan, "Scan for active chips on the bus");
MODULE_PARM_DESC(i2c_debug,
"debug level - 0 off; 1 normal; 2,3 more verbose; 9 bit-protocol");
int init_module(void)
{
return i2c_algo_bit_init();
}
void cleanup_module(void)
{
}
#endif
......@@ -520,17 +520,9 @@ int i2c_pcf_del_bus(struct i2c_adapter *adap)
return 0;
}
int __init i2c_algo_pcf_init (void)
{
printk(KERN_INFO "i2c-algo-pcf.o: i2c pcf8584 algorithm module version %s (%s)\n", I2C_VERSION, I2C_DATE);
return 0;
}
EXPORT_SYMBOL(i2c_pcf_add_bus);
EXPORT_SYMBOL(i2c_pcf_del_bus);
#ifdef MODULE
MODULE_AUTHOR("Hans Berglund <hb@spacetec.no>");
MODULE_DESCRIPTION("I2C-Bus PCF8584 algorithm");
MODULE_LICENSE("GPL");
......@@ -541,14 +533,3 @@ MODULE_PARM(i2c_debug,"i");
MODULE_PARM_DESC(pcf_scan, "Scan for active chips on the bus");
MODULE_PARM_DESC(i2c_debug,
"debug level - 0 off; 1 normal; 2,3 more verbose; 9 pcf-protocol");
int init_module(void)
{
return i2c_algo_pcf_init();
}
void cleanup_module(void)
{
}
#endif
......@@ -56,8 +56,8 @@
/* ----- global variables -------------------------------------------------- */
/**** lock for writing to global variables: the adapter & driver list */
struct semaphore adap_lock;
struct semaphore driver_lock;
DECLARE_MUTEX(adap_lock);
DECLARE_MUTEX(driver_lock);
/**** adapter list */
static struct i2c_adapter *adapters[I2C_ADAP_MAX];
......@@ -76,11 +76,6 @@ static int i2c_debug;
*/
#ifdef CONFIG_PROC_FS
int __init i2cproc_init(void);
void __exit i2cproc_exit(void);
static int i2cproc_cleanup(void);
static ssize_t i2cproc_bus_read(struct file * file, char * buf,size_t count,
loff_t *ppos);
static int read_bus_i2c(char *buf, char **start, off_t offset, int len,
......@@ -91,14 +86,6 @@ static int read_bus_i2c(char *buf, char **start, off_t offset, int len,
static struct file_operations i2cproc_operations = {
.read = i2cproc_bus_read,
};
static int i2cproc_initialized = 0;
#else /* undef CONFIG_PROC_FS */
#define i2cproc_init() 0
#define i2cproc_cleanup() 0
#endif /* CONFIG_PROC_FS */
......@@ -136,8 +123,7 @@ int i2c_add_adapter(struct i2c_adapter *adap)
init_MUTEX(&adap->lock);
#ifdef CONFIG_PROC_FS
if (i2cproc_initialized) {
{
char name[8];
struct proc_dir_entry *proc_entry;
......@@ -155,7 +141,6 @@ int i2c_add_adapter(struct i2c_adapter *adap)
proc_entry->owner = THIS_MODULE;
adap->inode = proc_entry->low_ino;
}
#endif /* def CONFIG_PROC_FS */
/* inform drivers of new adapters */
......@@ -234,10 +219,10 @@ int i2c_del_adapter(struct i2c_adapter *adap)
}
}
#ifdef CONFIG_PROC_FS
if (i2cproc_initialized) {
{
char name[8];
sprintf(name,"i2c-%d", i);
remove_proc_entry(name,proc_bus);
remove_proc_entry(name, proc_bus);
}
#endif /* def CONFIG_PROC_FS */
......@@ -681,41 +666,30 @@ ssize_t i2cproc_bus_read(struct file * file, char * buf,size_t count,
return -ENOENT;
}
int i2cproc_init(void)
static int i2cproc_init(void)
{
struct proc_dir_entry *proc_bus_i2c;
i2cproc_initialized = 0;
if (! proc_bus) {
printk(KERN_ERR "i2c-core.o: /proc/bus/ does not exist");
i2cproc_cleanup();
return -ENOENT;
}
proc_bus_i2c = create_proc_entry("i2c",0,proc_bus);
if (!proc_bus_i2c) {
printk(KERN_ERR "i2c-core.o: Could not create /proc/bus/i2c");
i2cproc_cleanup();
return -ENOENT;
}
proc_bus_i2c->read_proc = &read_bus_i2c;
proc_bus_i2c->owner = THIS_MODULE;
i2cproc_initialized += 2;
return 0;
}
int i2cproc_cleanup(void)
static void __exit i2cproc_cleanup(void)
{
if (i2cproc_initialized >= 1) {
remove_proc_entry("i2c",proc_bus);
i2cproc_initialized -= 2;
}
return 0;
}
module_init(i2cproc_init);
module_exit(i2cproc_cleanup);
#endif /* def CONFIG_PROC_FS */
/* ----------------------------------------------------
......@@ -1440,120 +1414,6 @@ int i2c_check_functionality (struct i2c_adapter *adap, u32 func)
return (func & adap_func) == func;
}
static int __init i2c_init(void)
{
printk(KERN_INFO "i2c-core.o: i2c core module version %s (%s)\n", I2C_VERSION, I2C_DATE);
memset(adapters,0,sizeof(adapters));
memset(drivers,0,sizeof(drivers));
adap_count=0;
driver_count=0;
init_MUTEX(&adap_lock);
init_MUTEX(&driver_lock);
i2cproc_init();
return 0;
}
void __exit i2c_exit(void)
{
i2cproc_cleanup();
}
#ifndef MODULE
#ifdef CONFIG_I2C_CHARDEV
extern int i2c_dev_init(void);
#endif
#ifdef CONFIG_I2C_ALGOBIT
extern int i2c_algo_bit_init(void);
#endif
#ifdef CONFIG_I2C_PHILIPSPAR
extern int i2c_bitlp_init(void);
#endif
#ifdef CONFIG_I2C_ELV
extern int i2c_bitelv_init(void);
#endif
#ifdef CONFIG_I2C_VELLEMAN
extern int i2c_bitvelle_init(void);
#endif
#ifdef CONFIG_I2C_BITVIA
extern int i2c_bitvia_init(void);
#endif
#ifdef CONFIG_I2C_ALGOPCF
extern int i2c_algo_pcf_init(void);
#endif
#ifdef CONFIG_I2C_ELEKTOR
extern int i2c_pcfisa_init(void);
#endif
#ifdef CONFIG_I2C_ALGO8XX
extern int i2c_algo_8xx_init(void);
#endif
#ifdef CONFIG_I2C_RPXLITE
extern int i2c_rpx_init(void);
#endif
#ifdef CONFIG_I2C_PROC
extern int sensors_init(void);
#endif
/* This is needed for automatic patch generation: sensors code starts here */
/* This is needed for automatic patch generation: sensors code ends here */
int __init i2c_init_all(void)
{
/* --------------------- global ----- */
i2c_init();
#ifdef CONFIG_I2C_CHARDEV
i2c_dev_init();
#endif
/* --------------------- bit -------- */
#ifdef CONFIG_I2C_ALGOBIT
i2c_algo_bit_init();
#endif
#ifdef CONFIG_I2C_PHILIPSPAR
i2c_bitlp_init();
#endif
#ifdef CONFIG_I2C_ELV
i2c_bitelv_init();
#endif
#ifdef CONFIG_I2C_VELLEMAN
i2c_bitvelle_init();
#endif
/* --------------------- pcf -------- */
#ifdef CONFIG_I2C_ALGOPCF
i2c_algo_pcf_init();
#endif
#ifdef CONFIG_I2C_ELEKTOR
i2c_pcfisa_init();
#endif
/* --------------------- 8xx -------- */
#ifdef CONFIG_I2C_ALGO8XX
i2c_algo_8xx_init();
#endif
#ifdef CONFIG_I2C_RPXLITE
i2c_rpx_init();
#endif
/* -------------- proc interface ---- */
#ifdef CONFIG_I2C_PROC
sensors_init();
#endif
/* This is needed for automatic patch generation: sensors code starts here */
/* This is needed for automatic patch generation: sensors code ends here */
return 0;
}
#endif
EXPORT_SYMBOL(i2c_add_adapter);
EXPORT_SYMBOL(i2c_del_adapter);
EXPORT_SYMBOL(i2c_add_driver);
......@@ -1594,9 +1454,7 @@ EXPORT_SYMBOL(i2c_check_functionality);
MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C-Bus main module");
MODULE_PARM(i2c_debug, "i");
MODULE_PARM_DESC(i2c_debug,"debug level");
MODULE_LICENSE("GPL");
module_init(i2c_init);
module_exit(i2c_exit);
MODULE_PARM(i2c_debug, "i");
MODULE_PARM_DESC(i2c_debug,"debug level");
......@@ -48,10 +48,6 @@
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
int __init i2c_dev_init(void);
void __exit i2c_dev_exit(void);
static int dev_cleanup(void);
/* struct file_operations changed too often in the 2.1 series for nice code */
static ssize_t i2cdev_read (struct file *file, char *buf, size_t count,
......@@ -437,19 +433,6 @@ static int i2cdev_command(struct i2c_client *client, unsigned int cmd,
return -1;
}
static int dev_cleanup(void)
{
int res;
if ((res = i2c_del_driver(&i2cdev_driver))) {
printk(KERN_ERR "i2c-dev.o: Driver deregistration failed, "
"module not removed.\n");
}
devfs_remove("i2c");
unregister_chrdev(I2C_MAJOR,"i2c");
}
int __init i2c_dev_init(void)
{
int res;
......@@ -471,13 +454,13 @@ int __init i2c_dev_init(void)
return 0;
}
void __exit i2c_dev_exit(void)
static void __exit i2c_dev_exit(void)
{
dev_cleanup();
i2c_del_driver(&i2cdev_driver);
devfs_remove("i2c");
unregister_chrdev(I2C_MAJOR,"i2c");
}
EXPORT_NO_SYMBOLS;
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl> and Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C /dev entries driver");
MODULE_LICENSE("GPL");
......
......@@ -159,19 +159,6 @@ static int pcf_isa_init(void)
return 0;
}
static void pcf_isa_exit(void)
{
if (irq > 0) {
disable_irq(irq);
free_irq(irq, 0);
}
if (!mmapped) {
release_region(base , 2);
}
}
static int pcf_isa_reg(struct i2c_client *client)
{
return 0;
......@@ -223,7 +210,7 @@ static struct i2c_adapter pcf_isa_ops = {
.client_unregister = pcf_isa_unreg,
};
int __init i2c_pcfisa_init(void)
static int __init i2c_pcfisa_init(void)
{
#ifdef __alpha__
/* check to see we have memory mapped PCF8584 connected to the
......@@ -281,23 +268,39 @@ int __init i2c_pcfisa_init(void)
}
init_waitqueue_head(&pcf_wait);
if (pcf_isa_init() == 0) {
if (i2c_pcf_add_bus(&pcf_isa_ops) < 0) {
pcf_isa_exit();
return -ENODEV;
}
} else {
if (pcf_isa_init())
return -ENODEV;
}
if (i2c_pcf_add_bus(&pcf_isa_ops) < 0)
goto fail;
printk(KERN_ERR "i2c-elektor.o: found device at %#x.\n", base);
return 0;
fail:
if (irq > 0) {
disable_irq(irq);
free_irq(irq, 0);
}
if (!mmapped)
release_region(base , 2);
return -ENODEV;
}
EXPORT_NO_SYMBOLS;
static void i2c_pcfisa_exit(void)
{
i2c_pcf_del_bus(&pcf_isa_ops);
if (irq > 0) {
disable_irq(irq);
free_irq(irq, 0);
}
if (!mmapped)
release_region(base , 2);
}
#ifdef MODULE
MODULE_AUTHOR("Hans Berglund <hb@spacetec.no>");
MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter");
MODULE_LICENSE("GPL");
......@@ -309,15 +312,5 @@ MODULE_PARM(own, "i");
MODULE_PARM(mmapped, "i");
MODULE_PARM(i2c_debug, "i");
int init_module(void)
{
return i2c_pcfisa_init();
}
void cleanup_module(void)
{
i2c_pcf_del_bus(&pcf_isa_ops);
pcf_isa_exit();
}
#endif
module_init(i2c_pcfisa_init);
module_exit(i2c_pcfisa_exit);
......@@ -163,7 +163,7 @@ static struct i2c_adapter bit_elv_ops = {
bit_elv_unreg,
};
int __init i2c_bitelv_init(void)
static int __init i2c_bitelv_init(void)
{
printk(KERN_INFO "i2c-elv.o: i2c ELV parallel port adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE);
if (base==0) {
......@@ -189,24 +189,17 @@ int __init i2c_bitelv_init(void)
return 0;
}
static void __exit i2c_bitelv_exit(void)
{
i2c_bit_del_bus(&bit_elv_ops);
release_region(base , (base == 0x3bc) ? 3 : 8);
}
#ifdef MODULE
MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C-Bus adapter routines for ELV parallel port adapter");
MODULE_LICENSE("GPL");
MODULE_PARM(base, "i");
int init_module(void)
{
return i2c_bitelv_init();
}
void cleanup_module(void)
{
i2c_bit_del_bus(&bit_elv_ops);
bit_elv_exit();
}
#endif
module_init(i2c_bitelv_init);
module_exit(i2c_bitelv_exit);
......@@ -40,10 +40,6 @@
#define THIS_MODULE NULL
#endif
int __init sensors_init(void);
void __exit i2c_proc_exit(void);
static int proc_cleanup(void);
static int i2c_create_name(char **name, const char *prefix,
struct i2c_adapter *adapter, int addr);
static int i2c_parse_reals(int *nrels, void *buffer, int bufsize,
......@@ -92,7 +88,6 @@ static ctl_table i2c_proc[] = {
static struct ctl_table_header *i2c_proc_header;
static int i2c_initialized;
/* This returns a nice name for a new directory; for example lm78-isa-0310
(for a LM78 chip on the ISA bus at port 0x310), or lm75-i2c-3-4e (for
......@@ -849,10 +844,9 @@ int i2c_detect(struct i2c_adapter *adapter,
return 0;
}
int __init sensors_init(void)
static int __init i2c_proc_init(void)
{
printk(KERN_INFO "i2c-proc.o version %s (%s)\n", I2C_VERSION, I2C_DATE);
i2c_initialized = 0;
if (!
(i2c_proc_header =
register_sysctl_table(i2c_proc, 0))) {
......@@ -860,22 +854,12 @@ int __init sensors_init(void)
return -EPERM;
}
i2c_proc_header->ctl_table->child->de->owner = THIS_MODULE;
i2c_initialized++;
return 0;
}
void __exit i2c_proc_exit(void)
{
proc_cleanup();
}
static int proc_cleanup(void)
static void __exit i2c_proc_exit(void)
{
if (i2c_initialized >= 1) {
unregister_sysctl_table(i2c_proc_header);
i2c_initialized--;
}
return 0;
}
EXPORT_SYMBOL(i2c_deregister_entry);
......@@ -888,5 +872,5 @@ MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
MODULE_DESCRIPTION("i2c-proc driver");
MODULE_LICENSE("GPL");
module_init(sensors_init);
module_init(i2c_proc_init);
module_exit(i2c_proc_exit);
......@@ -126,11 +126,8 @@ void __exit i2c_rpx_exit(void)
i2c_8xx_del_bus(&rpx_ops);
}
#ifdef MODULE
MODULE_AUTHOR("Dan Malek <dmalek@jlc.net>");
MODULE_DESCRIPTION("I2C-Bus adapter routines for MPC8xx boards");
module_init(i2c_rpx_init);
module_exit(i2c_rpx_exit);
#endif
......@@ -102,12 +102,6 @@ static int bit_velle_init(void)
return 0;
}
static void __exit bit_velle_exit(void)
{
release_region( base , (base == 0x3bc)? 3 : 8 );
}
static int bit_velle_reg(struct i2c_client *client)
{
return 0;
......@@ -157,7 +151,7 @@ static struct i2c_adapter bit_velle_ops = {
bit_velle_unreg,
};
int __init i2c_bitvelle_init(void)
static int __init i2c_bitvelle_init(void)
{
printk(KERN_INFO "i2c-velleman.o: i2c Velleman K8000 adapter module version %s (%s)\n", I2C_VERSION, I2C_DATE);
if (base==0) {
......@@ -183,22 +177,17 @@ int __init i2c_bitvelle_init(void)
return 0;
}
#ifdef MODULE
static void __exit i2c_bitvelle_exit(void)
{
i2c_bit_del_bus(&bit_velle_ops);
release_region(base, (base == 0x3bc) ? 3 : 8);
}
MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C-Bus adapter routines for Velleman K8000 adapter");
MODULE_LICENSE("GPL");
MODULE_PARM(base, "i");
int init_module(void)
{
return i2c_bitvelle_init();
}
void cleanup_module(void)
{
i2c_bit_del_bus(&bit_velle_ops);
bit_velle_exit();
}
#endif
module_init(i2c_bitvelle_init);
module_exit(i2c_bitvelle_exit);
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