diff --git a/TODO b/TODO index 4a936824..4ec6ab14 100644 --- a/TODO +++ b/TODO @@ -3,6 +3,9 @@ Many, many things. Most notably: KERNEL MODULES ============== +* linux/Documentation/devices.txt lists i2c0, i2c1 etc. instead of i2c-0, i2c-1 +* LM78 detection: Tom Webster has proven that the reset bit in the + id register can be one (strange!) * Check for kernel 2.0.8 warnings * Increase use count of adapter driver if directory of chip is entered * maxilife.c: Introduce new insmod variables diff --git a/i2c/MODIFICATIONS b/i2c/MODIFICATIONS index 45517a60..d055b0e4 100644 --- a/i2c/MODIFICATIONS +++ b/i2c/MODIFICATIONS @@ -17,6 +17,8 @@ Here come the changes: ! Fixed i2c_probe bug +! Changed to init_MUTEX and a compatibility line in i2c-core.c + * Algo-bit now scans the bus before registering the adapter. * Bit-lp and bit-velle don't increase module usage counts diff --git a/i2c/i2c-core.c b/i2c/i2c-core.c index 271bc1c9..7a43665f 100644 --- a/i2c/i2c-core.c +++ b/i2c/i2c-core.c @@ -26,6 +26,10 @@ #include #include "i2c.h" + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1)) +#define init_MUTEX(s) do { *(s) = MUTEX; } while(0) +#endif /* ----- global defines ---------------------------------------------------- */ @@ -138,7 +142,7 @@ int i2c_add_adapter(struct i2c_adapter *adap) #ifdef I2C_SPINLOCK adap->lock = (spinlock_t)SPIN_LOCK_UNLOCKED; #else - adap->lock = MUTEX; + init_MUTEX(&adap->lock); #endif /* inform drivers of new adapters */ diff --git a/kernel/chips/adm1021.c b/kernel/chips/adm1021.c index 5e43a5cf..b699cebc 100644 --- a/kernel/chips/adm1021.c +++ b/kernel/chips/adm1021.c @@ -26,6 +26,7 @@ #include "i2c.h" #include "i2c-isa.h" #include "version.h" +#include "compat.h" /* Addresses to scan */ static unsigned short normal_i2c[] = {SENSORS_I2C_END}; @@ -269,7 +270,7 @@ static int adm1021_detect(struct i2c_adapter *adapter, int address, int kind) adm1021_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/adm9240.c b/kernel/chips/adm9240.c index 0c353511..1b984f27 100644 --- a/kernel/chips/adm9240.c +++ b/kernel/chips/adm9240.c @@ -419,7 +419,7 @@ static int adm9240_detect(struct i2c_adapter *adapter, int address, int kind) adm9240_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/bt869.c b/kernel/chips/bt869.c index b9d0cdcb..bb0d95ed 100644 --- a/kernel/chips/bt869.c +++ b/kernel/chips/bt869.c @@ -28,6 +28,7 @@ #include "i2c.h" #include "i2c-isa.h" #include "version.h" +#include "compat.h" /* Addresses to scan */ static unsigned short normal_i2c[] = {SENSORS_I2C_END}; @@ -227,7 +228,7 @@ printk("bt869.o: probing address %d .\n",address); bt869_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/eeprom.c b/kernel/chips/eeprom.c index 0697c099..16aac7c4 100644 --- a/kernel/chips/eeprom.c +++ b/kernel/chips/eeprom.c @@ -26,6 +26,7 @@ #include "i2c.h" #include "i2c-isa.h" #include "version.h" +#include "compat.h" /* Addresses to scan */ static unsigned short normal_i2c[] = {SENSORS_I2C_END}; @@ -224,7 +225,7 @@ int eeprom_detect(struct i2c_adapter *adapter, int address, int kind) eeprom_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/gl518sm.c b/kernel/chips/gl518sm.c index cbe7d82b..b475d88a 100644 --- a/kernel/chips/gl518sm.c +++ b/kernel/chips/gl518sm.c @@ -348,7 +348,7 @@ static int gl518_detect(struct i2c_adapter *adapter, int address, int kind) gl518_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/icspll.c b/kernel/chips/icspll.c index 8860922c..5b25db05 100644 --- a/kernel/chips/icspll.c +++ b/kernel/chips/icspll.c @@ -176,7 +176,7 @@ int icspll_attach_adapter(struct i2c_adapter *adapter) new_client->driver = &icspll_driver; strcpy(new_client->name,"ICSPLL chip"); data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* fill data structure so unknown registers are 0xFF */ data->data[0] = ICSPLL_SIZE; for(i = 1; i <= ICSPLL_SIZE; i++) diff --git a/kernel/chips/lm75.c b/kernel/chips/lm75.c index 54967f04..ce15cc5d 100644 --- a/kernel/chips/lm75.c +++ b/kernel/chips/lm75.c @@ -25,6 +25,7 @@ #include "i2c.h" #include "i2c-isa.h" #include "version.h" +#include "compat.h" /* Addresses to scan */ static unsigned short normal_i2c[] = {SENSORS_I2C_END}; @@ -204,7 +205,7 @@ int lm75_detect(struct i2c_adapter *adapter, int address, int kind) lm75_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/lm78.c b/kernel/chips/lm78.c index c35bf1b4..765d4e23 100644 --- a/kernel/chips/lm78.c +++ b/kernel/chips/lm78.c @@ -357,7 +357,7 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind) data = (struct lm78_data *) (((struct isa_client *) new_client) + 1); new_client->addr = 0; ((struct isa_client *) new_client)->isa_addr = address; - data->lock = MUTEX; + init_MUTEX(&data->lock); } else { data = (struct lm78_data *) (((struct i2c_client *) new_client) + 1); new_client->addr = address; @@ -428,7 +428,7 @@ int lm78_detect(struct i2c_adapter *adapter, int address, int kind) lm78_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/lm80.c b/kernel/chips/lm80.c index 078e30fe..7699bfd7 100644 --- a/kernel/chips/lm80.c +++ b/kernel/chips/lm80.c @@ -357,7 +357,7 @@ int lm80_detect(struct i2c_adapter *adapter, int address, int kind) lm80_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/ltc1710.c b/kernel/chips/ltc1710.c index b1b74258..a8d334ed 100644 --- a/kernel/chips/ltc1710.c +++ b/kernel/chips/ltc1710.c @@ -48,6 +48,7 @@ #include "i2c.h" #include "i2c-isa.h" #include "version.h" +#include "compat.h" /* Addresses to scan */ static unsigned short normal_i2c[] = {SENSORS_I2C_END}; @@ -206,7 +207,7 @@ int ltc1710_detect(struct i2c_adapter *adapter, int address, int kind) ltc1710_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/maxilife.c b/kernel/chips/maxilife.c index f31d6112..e54675e1 100644 --- a/kernel/chips/maxilife.c +++ b/kernel/chips/maxilife.c @@ -415,8 +415,8 @@ int maxi_new_client(struct i2c_adapter *adapter, new_client->driver = &maxi_driver; data = new_client->data; data->valid = 0; - data->lock = MUTEX; - data->update_lock = MUTEX; + init_MUTEX(&data->lock); + init_MUTEX(&data->update_lock); return 0; } diff --git a/kernel/chips/sis5595.c b/kernel/chips/sis5595.c index 2b2886a0..14d125d4 100644 --- a/kernel/chips/sis5595.c +++ b/kernel/chips/sis5595.c @@ -358,7 +358,7 @@ int sis5595_detect(struct i2c_adapter *adapter, int address, int kind) data = (struct sis5595_data *) (((struct isa_client *) new_client) + 1); new_client->addr = 0; ((struct isa_client *) new_client)->isa_addr = address; - data->lock = MUTEX; + init_MUTEX(&data->lock); new_client->data = data; new_client->adapter = adapter; new_client->driver = &sis5595_driver; @@ -402,7 +402,7 @@ int sis5595_detect(struct i2c_adapter *adapter, int address, int kind) sis5595_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/chips/w83781d.c b/kernel/chips/w83781d.c index 28a77c46..78f5fc40 100644 --- a/kernel/chips/w83781d.c +++ b/kernel/chips/w83781d.c @@ -693,7 +693,7 @@ int w83781d_detect(struct i2c_adapter *adapter, int address, int kind) data = (struct w83781d_data *) (((struct i2c_client *) new_client) + 1); new_client->addr = address; } - data->lock = MUTEX; + init_MUTEX(&data->lock); new_client->data = data; new_client->adapter = adapter; new_client->driver = &w83781d_driver; @@ -777,7 +777,7 @@ int w83781d_detect(struct i2c_adapter *adapter, int address, int kind) w83781d_list[i] = new_client; new_client->id = i; data->valid = 0; - data->update_lock = MUTEX; + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) diff --git a/kernel/include/compat.h b/kernel/include/compat.h index a5ba748d..46bcddd5 100644 --- a/kernel/include/compat.h +++ b/kernel/include/compat.h @@ -89,4 +89,8 @@ #define iounmap vfree #endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,1)) +#define init_MUTEX(s) do { *(s) = MUTEX; } while(0) +#endif + #endif /* SENSORS_COMPAT_H */