lkml.org 
[lkml]   [2002]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[patch 1/3] 2.5.36 i2c core drivers module_init/exit cleanup
Hello Linus,
Cleanup of i2c-core, i2c-proc and i2c-dev to use new module_init and module_exit
functions. Cleanup of old compatability statements.
Albert
--
ac9410@attbi.com
--- linux-2.5.36/drivers/i2c/i2c-core.c.orig 2002-09-09 13:35:03.000000000 -0400
+++ linux/drivers/i2c/i2c-core.c 2002-09-17 23:20:53.000000000 -0400
@@ -21,7 +21,7 @@
All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> */

-/* $Id: i2c-core.c,v 1.83 2002/07/08 01:37:15 mds Exp $ */
+/* $Id: i2c-core.c,v 1.86 2002/09/12 06:47:26 ac9410 Exp $ */

#include <linux/module.h>
#include <linux/kernel.h>
@@ -36,10 +36,6 @@
#include <linux/version.h>
#include <linux/init.h>

-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1)
-#define init_MUTEX(s) do { *(s) = MUTEX; } while(0)
-#endif
-
#include <asm/uaccess.h>

/* ----- global defines ---------------------------------------------------- */
@@ -72,7 +68,7 @@
static int driver_count;

/**** debug level */
-static int i2c_debug=1;
+static int i2c_debug=0;

/* ---------------------------------------------------
* /proc entry declarations
@@ -84,10 +80,6 @@
static int i2cproc_init(void);
static int i2cproc_cleanup(void);

-#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,3,27))
-static void monitor_bus_i2c(struct inode *inode, int fill);
-#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58)) */
-
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,
@@ -99,12 +91,6 @@
read: i2cproc_bus_read,
};

-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,48))
-static struct inode_operations i2cproc_inode_operations = {
- &i2cproc_operations
-};
-#endif
-
static int i2cproc_initialized = 0;

#else /* undef CONFIG_PROC_FS */
@@ -164,16 +150,8 @@
goto ERROR1;
}

-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,48))
proc_entry->proc_fops = &i2cproc_operations;
-#else
- proc_entry->ops = &i2cproc_inode_operations;
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27))
proc_entry->owner = THIS_MODULE;
-#else
- proc_entry->fill_inode = &monitor_bus_i2c;
-#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,58)) */
adap->inode = proc_entry->low_ino;
}

@@ -611,18 +589,6 @@

#ifdef CONFIG_PROC_FS

-#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,3,27))
-/* Monitor access to /proc/bus/i2c*; make unloading i2c-proc impossible
- if some process still uses it or some file in it */
-void monitor_bus_i2c(struct inode *inode, int fill)
-{
- if (fill)
- MOD_INC_USE_COUNT;
- else
- MOD_DEC_USE_COUNT;
-}
-#endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,3,37)) */
-
/* This function generates the output for /proc/bus/i2c */
int read_bus_i2c(char *buf, char **start, off_t offset, int len, int *eof,
void *private)
@@ -658,18 +624,19 @@
struct i2c_client *client;
int i,j,k,order_nr,len=0,len_total;
int order[I2C_CLIENT_MAX];
+#define OUTPUT_LENGTH_PER_LINE 70

- if (count > 4096)
- return -EINVAL;
len_total = file->f_pos + count;
- /* Too bad if this gets longer (unlikely) */
- if (len_total > 4096)
- len_total = 4096;
+ if (len_total > (I2C_CLIENT_MAX * OUTPUT_LENGTH_PER_LINE) )
+ /* adjust to maximum file size */
+ len_total = (I2C_CLIENT_MAX * OUTPUT_LENGTH_PER_LINE);
for (i = 0; i < I2C_ADAP_MAX; i++)
if (adapters[i]->inode == inode->i_ino) {
/* We need a bit of slack in the kernel buffer; this makes the
sprintf safe. */
- if (! (kbuf = kmalloc(count + 80,GFP_KERNEL)))
+ if (! (kbuf = kmalloc(len_total +
+ OUTPUT_LENGTH_PER_LINE,
+ GFP_KERNEL)))
return -ENOMEM;
/* Order will hold the indexes of the clients
sorted by address */
@@ -731,11 +698,7 @@
return -ENOENT;
}
proc_bus_i2c->read_proc = &read_bus_i2c;
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27))
proc_bus_i2c->owner = THIS_MODULE;
-#else
- proc_bus_i2c->fill_inode = &monitor_bus_i2c;
-#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,27)) */
i2cproc_initialized += 2;
return 0;
}
@@ -1492,6 +1455,11 @@
return 0;
}

+static void __exit i2c_exit(void)
+{
+ i2cproc_cleanup();
+}
+
#ifndef MODULE
#ifdef CONFIG_I2C_CHARDEV
extern int i2c_dev_init(void);
@@ -1622,20 +1590,11 @@
EXPORT_SYMBOL(i2c_get_functionality);
EXPORT_SYMBOL(i2c_check_functionality);

-#ifdef MODULE
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");

-int init_module(void)
-{
- return i2c_init();
-}
-
-void cleanup_module(void)
-{
- i2cproc_cleanup();
-}
-#endif
+module_init(i2c_init);
+module_exit(i2c_exit);
--- linux-2.5.36/drivers/i2c/i2c-proc.c.orig 2002-09-17 23:41:39.000000000 -0400
+++ linux/drivers/i2c/i2c-proc.c 2002-09-17 23:43:58.000000000 -0400
@@ -54,8 +54,6 @@
void *newval, size_t newlen,
void **context);

-int __init sensors_init(void);
-
#define SENSORS_ENTRY_MAX 20
static struct ctl_table_header *i2c_entries[SENSORS_ENTRY_MAX];

@@ -815,35 +813,23 @@
return 0;
}

+static void __exit i2c_cleanup(void)
+{
+ if (i2c_initialized >= 1) {
+ unregister_sysctl_table(i2c_proc_header);
+ i2c_initialized--;
+ }
+}
+
EXPORT_SYMBOL(i2c_deregister_entry);
EXPORT_SYMBOL(i2c_detect);
EXPORT_SYMBOL(i2c_proc_real);
EXPORT_SYMBOL(i2c_register_entry);
EXPORT_SYMBOL(i2c_sysctl_real);

-#ifdef MODULE
-
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
MODULE_DESCRIPTION("i2c-proc driver");
MODULE_LICENSE("GPL");

-int i2c_cleanup(void)
-{
- if (i2c_initialized >= 1) {
- unregister_sysctl_table(i2c_proc_header);
- i2c_initialized--;
- }
- return 0;
-}
-
-int init_module(void)
-{
- return sensors_init();
-}
-
-int cleanup_module(void)
-{
- return i2c_cleanup();
-}
-
-#endif /* MODULE */
+module_init(sensors_init);
+module_exit(i2c_cleanup);
--- linux-2.5.36/drivers/i2c/i2c-dev.c.orig 2002-09-17 23:47:41.000000000 -0400
+++ linux/drivers/i2c/i2c-dev.c 2002-09-17 23:53:35.000000000 -0400
@@ -36,9 +36,7 @@
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/version.h>
-#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)
#include <linux/smp_lock.h>
-#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */
#ifdef CONFIG_DEVFS_FS
#include <linux/devfs_fs_kernel.h>
#endif
@@ -52,16 +50,8 @@
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

-#ifdef MODULE
-extern int init_module(void);
-extern int cleanup_module(void);
-#endif /* def MODULE */
-
/* struct file_operations changed too often in the 2.1 series for nice code */

-#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)
-static loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin);
-#endif
static ssize_t i2cdev_read (struct file *file, char *buf, size_t count,
loff_t *offset);
static ssize_t i2cdev_write (struct file *file, const char *buf, size_t count,
@@ -78,23 +68,9 @@
static int i2cdev_command(struct i2c_client *client, unsigned int cmd,
void *arg);

-#ifdef MODULE
-static
-#else
-extern
-#endif
- int __init i2c_dev_init(void);
-static int i2cdev_cleanup(void);
-
static struct file_operations i2cdev_fops = {
-#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)
owner: THIS_MODULE,
-#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */
-#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)
- llseek: i2cdev_lseek,
-#else
llseek: no_llseek,
-#endif
read: i2cdev_read,
write: i2cdev_write,
ioctl: i2cdev_ioctl,
@@ -132,20 +108,6 @@

static int i2cdev_initialized;

-#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)
-/* Note that the lseek function is called llseek in 2.1 kernels. But things
- are complicated enough as is. */
-loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin)
-{
-#ifdef DEBUG
- struct inode *inode = file->f_dentry->d_inode;
- printk(KERN_DEBUG "i2c-dev.o: i2c-%d lseek to %ld bytes relative to %d.\n",
- minor(inode->i_rdev),(long) offset,origin);
-#endif /* DEBUG */
- return -ESPIPE;
-}
-#endif
-
static ssize_t i2cdev_read (struct file *file, char *buf, size_t count,
loff_t *offset)
{
@@ -411,9 +373,6 @@

if (i2cdev_adaps[minor]->inc_use)
i2cdev_adaps[minor]->inc_use(i2cdev_adaps[minor]);
-#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,0)
- MOD_INC_USE_COUNT;
-#endif /* LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,0) */

#ifdef DEBUG
printk(KERN_DEBUG "i2c-dev.o: opened i2c-%d\n",minor);
@@ -429,16 +388,10 @@
#ifdef DEBUG
printk(KERN_DEBUG "i2c-dev.o: Closed: i2c-%d\n", minor);
#endif
-#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,0)
- MOD_DEC_USE_COUNT;
-#else /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */
lock_kernel();
-#endif /* LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,0) */
if (i2cdev_adaps[minor]->dec_use)
i2cdev_adaps[minor]->dec_use(i2cdev_adaps[minor]);
-#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)
unlock_kernel();
-#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */
return 0;
}

@@ -491,6 +444,30 @@
return -1;
}

+static void i2cdev_cleanup(void)
+{
+ int res;
+
+ if (i2cdev_initialized >= 2) {
+ if ((res = i2c_del_driver(&i2cdev_driver))) {
+ printk(KERN_ERR "i2c-dev.o: Driver deregistration failed, "
+ "module not removed.\n");
+ }
+ i2cdev_initialized --;
+ }
+
+ if (i2cdev_initialized >= 1) {
+#ifdef CONFIG_DEVFS_FS
+ devfs_unregister(devfs_handle);
+#endif
+ if ((res = unregister_chrdev(I2C_MAJOR,"i2c"))) {
+ printk(KERN_ERR "i2c-dev.o: unable to release major %d for i2c bus\n",
+ I2C_MAJOR);
+ }
+ i2cdev_initialized --;
+ }
+}
+
int __init i2c_dev_init(void)
{
int res;
@@ -517,50 +494,11 @@
return 0;
}

-int i2cdev_cleanup(void)
-{
- int res;
-
- if (i2cdev_initialized >= 2) {
- if ((res = i2c_del_driver(&i2cdev_driver))) {
- printk(KERN_ERR "i2c-dev.o: Driver deregistration failed, "
- "module not removed.\n");
- return res;
- }
- i2cdev_initialized --;
- }
-
- if (i2cdev_initialized >= 1) {
-#ifdef CONFIG_DEVFS_FS
- devfs_unregister(devfs_handle);
-#endif
- if ((res = unregister_chrdev(I2C_MAJOR,"i2c"))) {
- printk(KERN_ERR "i2c-dev.o: unable to release major %d for i2c bus\n",
- I2C_MAJOR);
- return res;
- }
- i2cdev_initialized --;
- }
- return 0;
-}
-
EXPORT_NO_SYMBOLS;

-#ifdef MODULE
-
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");

-int init_module(void)
-{
- return i2c_dev_init();
-}
-
-int cleanup_module(void)
-{
- return i2cdev_cleanup();
-}
-
-#endif /* def MODULE */
-
+module_init(i2c_dev_init);
+module_exit(i2cdev_cleanup);
\
 
 \ /
  Last update: 2005-03-22 12:53    [W:0.618 / U:0.708 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site