patch-2.4.25 linux-2.4.25/drivers/i2c/i2c-core.c
Next file: linux-2.4.25/drivers/i2c/i2c-dev.c
Previous file: linux-2.4.25/drivers/i2c/i2c-algo-sgi.c
Back to the patch index
Back to the overall index
- Lines: 437
- Date:
2004-02-18 05:36:31.000000000 -0800
- Orig file:
linux-2.4.24/drivers/i2c/i2c-core.c
- Orig date:
2003-08-25 04:44:41.000000000 -0700
diff -urN linux-2.4.24/drivers/i2c/i2c-core.c linux-2.4.25/drivers/i2c/i2c-core.c
@@ -33,13 +33,8 @@
/* ----- compatibility stuff ----------------------------------------------- */
-#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 ---------------------------------------------------- */
@@ -84,10 +79,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 +90,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 +149,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;
}
@@ -188,7 +165,7 @@
drivers[j]->attach_adapter(adap);
DRV_UNLOCK();
- DEB(printk("i2c-core.o: adapter %s registered as adapter %d.\n",
+ DEB(printk(KERN_DEBUG "i2c-core.o: adapter %s registered as adapter %d.\n",
adap->name,i));
return 0;
@@ -214,7 +191,7 @@
if (adap == adapters[i])
break;
if (I2C_ADAP_MAX == i) {
- printk( "i2c-core.o: unregister_adapter adap [%s] not found.\n",
+ printk(KERN_WARNING "i2c-core.o: unregister_adapter adap [%s] not found.\n",
adap->name);
res = -ENODEV;
goto ERROR0;
@@ -229,7 +206,7 @@
for (j = 0; j < I2C_DRIVER_MAX; j++)
if (drivers[j] && (drivers[j]->flags & I2C_DF_DUMMY))
if ((res = drivers[j]->attach_adapter(adap))) {
- printk("i2c-core.o: can't detach adapter %s "
+ printk(KERN_WARNING "i2c-core.o: can't detach adapter %s "
"while detaching driver %s: driver not "
"detached!",adap->name,drivers[j]->name);
goto ERROR1;
@@ -247,7 +224,7 @@
* must be deleted, as this would cause invalid states.
*/
if ((res=client->driver->detach_client(client))) {
- printk("i2c-core.o: adapter %s not "
+ printk(KERN_ERR "i2c-core.o: adapter %s not "
"unregistered, because client at "
"address %02x can't be detached. ",
adap->name, client->addr);
@@ -266,7 +243,7 @@
adap_count--;
ADAP_UNLOCK();
- DEB(printk("i2c-core.o: adapter unregistered: %s\n",adap->name));
+ DEB(printk(KERN_DEBUG "i2c-core.o: adapter unregistered: %s\n",adap->name));
return 0;
ERROR0:
@@ -305,7 +282,7 @@
DRV_UNLOCK(); /* driver was successfully added */
- DEB(printk("i2c-core.o: driver %s registered.\n",driver->name));
+ DEB(printk(KERN_DEBUG "i2c-core.o: driver %s registered.\n",driver->name));
ADAP_LOCK();
@@ -340,7 +317,7 @@
* attached. If so, detach them to be able to kill the driver
* afterwards.
*/
- DEB2(printk("i2c-core.o: unregister_driver - looking for clients.\n"));
+ DEB2(printk(KERN_DEBUG "i2c-core.o: unregister_driver - looking for clients.\n"));
/* removing clients does not depend on the notify flag, else
* invalid operation might (will!) result, when using stale client
* pointers.
@@ -350,7 +327,7 @@
struct i2c_adapter *adap = adapters[k];
if (adap == NULL) /* skip empty entries. */
continue;
- DEB2(printk("i2c-core.o: examining adapter %s:\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: examining adapter %s:\n",
adap->name));
if (driver->flags & I2C_DF_DUMMY) {
/* DUMMY drivers do not register their clients, so we have to
@@ -359,7 +336,7 @@
* this or hell will break loose...
*/
if ((res = driver->attach_adapter(adap))) {
- printk("i2c-core.o: while unregistering "
+ printk(KERN_WARNING "i2c-core.o: while unregistering "
"dummy driver %s, adapter %s could "
"not be detached properly; driver "
"not unloaded!",driver->name,
@@ -372,13 +349,13 @@
struct i2c_client *client = adap->clients[j];
if (client != NULL &&
client->driver == driver) {
- DEB2(printk("i2c-core.o: "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: "
"detaching client %s:\n",
client->name));
if ((res = driver->
detach_client(client)))
{
- printk("i2c-core.o: while "
+ printk(KERN_ERR "i2c-core.o: while "
"unregistering driver "
"`%s', the client at "
"address %02x of "
@@ -400,7 +377,7 @@
driver_count--;
DRV_UNLOCK();
- DEB(printk("i2c-core.o: driver unregistered: %s\n",driver->name));
+ DEB(printk(KERN_DEBUG "i2c-core.o: driver unregistered: %s\n",driver->name));
return 0;
}
@@ -436,10 +413,10 @@
if (adapter->client_register)
if (adapter->client_register(client))
- printk("i2c-core.o: warning: client_register seems "
+ printk(KERN_DEBUG "i2c-core.o: warning: client_register seems "
"to have failed for client %02x at adapter %s\n",
client->addr,adapter->name);
- DEB(printk("i2c-core.o: client [%s] registered to adapter [%s](pos. %d).\n",
+ DEB(printk(KERN_DEBUG "i2c-core.o: client [%s] registered to adapter [%s](pos. %d).\n",
client->name, adapter->name,i));
if(client->flags & I2C_CLIENT_ALLOW_USE)
@@ -470,7 +447,7 @@
if (adapter->client_unregister != NULL)
if ((res = adapter->client_unregister(client))) {
- printk("i2c-core.o: client_unregister [%s] failed, "
+ printk(KERN_ERR "i2c-core.o: client_unregister [%s] failed, "
"client not detached",client->name);
return res;
}
@@ -478,7 +455,7 @@
adapter->clients[i] = NULL;
adapter->client_count--;
- DEB(printk("i2c-core.o: client [%s] unregistered.\n",client->name));
+ DEB(printk(KERN_DEBUG "i2c-core.o: client [%s] unregistered.\n",client->name));
return 0;
}
@@ -611,18 +588,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)
@@ -727,16 +692,12 @@
}
proc_bus_i2c = create_proc_entry("i2c",0,proc_bus);
if (!proc_bus_i2c) {
- printk("i2c-core.o: Could not create /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;
-#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;
}
@@ -764,7 +725,7 @@
int ret;
if (adap->algo->master_xfer) {
- DEB2(printk("i2c-core.o: master_xfer: %s with %d msgs.\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: master_xfer: %s with %d msgs.\n",
adap->name,num));
I2C_LOCK(adap);
@@ -773,7 +734,7 @@
return ret;
} else {
- printk("i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
+ printk(KERN_ERR "i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
adap->id);
return -ENOSYS;
}
@@ -791,7 +752,7 @@
msg.len = count;
(const char *)msg.buf = buf;
- DEB2(printk("i2c-core.o: master_send: writing %d bytes on %s.\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: master_send: writing %d bytes on %s.\n",
count,client->adapter->name));
I2C_LOCK(adap);
@@ -803,7 +764,7 @@
*/
return (ret == 1 )? count : ret;
} else {
- printk("i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
+ printk(KERN_ERR "i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
client->adapter->id);
return -ENOSYS;
}
@@ -821,14 +782,14 @@
msg.len = count;
msg.buf = buf;
- DEB2(printk("i2c-core.o: master_recv: reading %d bytes on %s.\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: master_recv: reading %d bytes on %s.\n",
count,client->adapter->name));
I2C_LOCK(adap);
ret = adap->algo->master_xfer(adap,&msg,1);
I2C_UNLOCK(adap);
- DEB2(printk("i2c-core.o: master_recv: return:%d (count:%d, addr:0x%02x)\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: master_recv: return:%d (count:%d, addr:0x%02x)\n",
ret, count, client->addr));
/* if everything went ok (i.e. 1 msg transmitted), return #bytes
@@ -836,7 +797,7 @@
*/
return (ret == 1 )? count : ret;
} else {
- printk("i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
+ printk(KERN_ERR "i2c-core.o: I2C adapter %04x: I2C level transfers not supported\n",
client->adapter->id);
return -ENOSYS;
}
@@ -849,7 +810,7 @@
int ret = 0;
struct i2c_adapter *adap = client->adapter;
- DEB2(printk("i2c-core.o: i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg));
+ DEB2(printk(KERN_DEBUG "i2c-core.o: i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg));
switch ( cmd ) {
case I2C_RETRIES:
adap->retries = arg;
@@ -894,7 +855,7 @@
if (((adap_id == address_data->force[i]) ||
(address_data->force[i] == ANY_I2C_BUS)) &&
(addr == address_data->force[i+1])) {
- DEB2(printk("i2c-core.o: found force parameter for adapter %d, addr %04x\n",
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found force parameter for adapter %d, addr %04x\n",
adap_id,addr));
if ((err = found_proc(adapter,addr,0,0)))
return err;
@@ -912,7 +873,7 @@
if (((adap_id == address_data->ignore[i]) ||
((address_data->ignore[i] == ANY_I2C_BUS))) &&
(addr == address_data->ignore[i+1])) {
- DEB2(printk("i2c-core.o: found ignore parameter for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found ignore parameter for adapter %d, "
"addr %04x\n", adap_id ,addr));
found = 1;
}
@@ -924,7 +885,7 @@
((address_data->ignore_range[i]==ANY_I2C_BUS))) &&
(addr >= address_data->ignore_range[i+1]) &&
(addr <= address_data->ignore_range[i+2])) {
- DEB2(printk("i2c-core.o: found ignore_range parameter for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found ignore_range parameter for adapter %d, "
"addr %04x\n", adap_id,addr));
found = 1;
}
@@ -939,7 +900,7 @@
i += 1) {
if (addr == address_data->normal_i2c[i]) {
found = 1;
- DEB2(printk("i2c-core.o: found normal i2c entry for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found normal i2c entry for adapter %d, "
"addr %02x", adap_id,addr));
}
}
@@ -950,7 +911,7 @@
if ((addr >= address_data->normal_i2c_range[i]) &&
(addr <= address_data->normal_i2c_range[i+1])) {
found = 1;
- DEB2(printk("i2c-core.o: found normal i2c_range entry for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found normal i2c_range entry for adapter %d, "
"addr %04x\n", adap_id,addr));
}
}
@@ -962,7 +923,7 @@
((address_data->probe[i] == ANY_I2C_BUS))) &&
(addr == address_data->probe[i+1])) {
found = 1;
- DEB2(printk("i2c-core.o: found probe parameter for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found probe parameter for adapter %d, "
"addr %04x\n", adap_id,addr));
}
}
@@ -974,7 +935,7 @@
(addr >= address_data->probe_range[i+1]) &&
(addr <= address_data->probe_range[i+2])) {
found = 1;
- DEB2(printk("i2c-core.o: found probe_range parameter for adapter %d, "
+ DEB2(printk(KERN_DEBUG "i2c-core.o: found probe_range parameter for adapter %d, "
"addr %04x\n", adap_id,addr));
}
}
@@ -1101,8 +1062,8 @@
{
union i2c_smbus_data data;
int i;
- if (length > 32)
- length = 32;
+ if (length > I2C_SMBUS_BLOCK_MAX)
+ length = I2C_SMBUS_BLOCK_MAX;
for (i = 1; i <= length; i++)
data.block[i] = values[i-1];
data.block[0] = length;
@@ -1116,8 +1077,8 @@
{
union i2c_smbus_data data;
int i;
- if (length > 32)
- length = 32;
+ if (length > I2C_SMBUS_I2C_BLOCK_MAX)
+ length = I2C_SMBUS_I2C_BLOCK_MAX;
for (i = 1; i <= length; i++)
data.block[i] = values[i-1];
data.block[0] = length;
@@ -1186,15 +1147,15 @@
break;
case I2C_SMBUS_BLOCK_DATA:
if (read_write == I2C_SMBUS_READ) {
- printk("i2c-core.o: Block read not supported under "
- "I2C emulation!\n");
- return -1;
+ printk(KERN_ERR "i2c-core.o: Block read not supported "
+ "under I2C emulation!\n");
+ return -1;
} else {
msg[0].len = data->block[0] + 2;
- if (msg[0].len > 34) {
- printk("i2c-core.o: smbus_access called with "
+ if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
+ printk(KERN_ERR "i2c-core.o: smbus_access called with "
"invalid block write size (%d)\n",
- msg[0].len);
+ data->block[0]);
return -1;
}
for (i = 1; i <= msg[0].len; i++)
@@ -1202,7 +1163,7 @@
}
break;
default:
- printk("i2c-core.o: smbus_access called with invalid size (%d)\n",
+ printk(KERN_ERR "i2c-core.o: smbus_access called with invalid size (%d)\n",
size);
return -1;
}
@@ -1264,7 +1225,7 @@
static int __init i2c_init(void)
{
- printk(KERN_INFO "i2c-core.o: i2c core module\n");
+ 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;
@@ -1427,9 +1388,10 @@
#ifdef MODULE
MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
MODULE_DESCRIPTION("I2C-Bus main module");
+MODULE_LICENSE("GPL");
+
MODULE_PARM(i2c_debug, "i");
MODULE_PARM_DESC(i2c_debug,"debug level");
-MODULE_LICENSE("GPL");
int init_module(void)
{
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)