diff --git a/drivers/i2c/i2c-sensor-detect.c b/drivers/i2c/i2c-sensor-detect.c
index 5aede3ca9cb0afd0bed11a0bf23b141fa0b669bc..c952926c1482308cceab39eeee5aa97a5b6894d2 100644
--- a/drivers/i2c/i2c-sensor-detect.c
+++ b/drivers/i2c/i2c-sensor-detect.c
@@ -32,7 +32,6 @@ int i2c_detect(struct i2c_adapter *adapter,
 	       int (*found_proc) (struct i2c_adapter *, int, int))
 {
 	int addr, i, found, j, err;
-	struct i2c_force_data *this_force;
 	int adapter_id = i2c_adapter_id(adapter);
 	unsigned short *normal_i2c;
 	unsigned short *probe;
@@ -58,13 +57,13 @@ int i2c_detect(struct i2c_adapter *adapter,
 		/* If it is in one of the force entries, we don't do any
 		   detection at all */
 		found = 0;
-		for (i = 0; !found && (this_force = address_data->forces + i, this_force->force); i++) {
-			for (j = 0; !found && (this_force->force[j] != I2C_CLIENT_END); j += 2) {
-				if ( ((adapter_id == this_force->force[j]) ||
-				      (this_force->force[j] == ANY_I2C_BUS)) &&
-				      (addr == this_force->force[j + 1]) ) {
+		for (i = 0; address_data->forces[i]; i++) {
+			for (j = 0; !found && (address_data->forces[i][j] != I2C_CLIENT_END); j += 2) {
+				if ( ((adapter_id == address_data->forces[i][j]) ||
+				      (address_data->forces[i][j] == ANY_I2C_BUS)) &&
+				      (addr == address_data->forces[i][j + 1]) ) {
 					dev_dbg(&adapter->dev, "found force parameter for adapter %d, addr %04x\n", adapter_id, addr);
-					if ((err = found_proc(adapter, addr, this_force->kind)))
+					if ((err = found_proc(adapter, addr, i)))
 						return err;
 					found = 1;
 				}
diff --git a/include/linux/i2c-sensor.h b/include/linux/i2c-sensor.h
index e832d3286a4686e069da641fcf1bddf4248c53d4..4facaa0b905412cd1cf0ad35863e20e307552c57 100644
--- a/include/linux/i2c-sensor.h
+++ b/include/linux/i2c-sensor.h
@@ -22,22 +22,6 @@
 #ifndef _LINUX_I2C_SENSOR_H
 #define _LINUX_I2C_SENSOR_H
 
-/* A structure containing detect information.
-   Force variables overrule all other variables; they force a detection on
-   that place. If a specific chip is given, the module blindly assumes this
-   chip type is present; if a general force (kind == 0) is given, the module
-   will still try to figure out what type of chip is present. This is useful
-   if for some reasons the detect for SMBus address space filled fails.
-   probe: insmod parameter. Initialize this list with I2C_CLIENT_END values.
-     A list of pairs. The first value is a bus number (ANY_I2C_BUS for any
-     I2C bus), the second is the address.
-   kind: The kind of chip. 0 equals any chip.
-*/
-struct i2c_force_data {
-	unsigned short *force;
-	unsigned short kind;
-};
-
 /* A structure containing the detect information.
    normal_i2c: filled in by the module writer. Terminated by I2C_CLIENT_END.
      A list of I2C addresses which should normally be examined.
@@ -50,14 +34,18 @@ struct i2c_force_data {
      I2C bus), the second is the I2C address. These addresses are never
      probed. This parameter overrules 'normal' and  probe', but not the
     'force' lists.
-   force_data: insmod parameters. A list, ending with an element of which
-     the force field is NULL.
+   forces: insmod parameters. A list, ending with a NULL element.
+     Force variables overrule all other variables; they force a detection on
+     that place. If a specific chip is given, the module blindly assumes this
+     chip type is present; if a general force (kind == 0) is given, the module
+     will still try to figure out what type of chip is present. This is useful
+     if for some reasons the detect for SMBus address space filled fails.
 */
 struct i2c_address_data {
 	unsigned short *normal_i2c;
 	unsigned short *probe;
 	unsigned short *ignore;
-	struct i2c_force_data *forces;
+	unsigned short **forces;
 };
 
 #define SENSORS_MODULE_PARM_FORCE(name) \
@@ -88,7 +76,8 @@ struct i2c_address_data {
   I2C_CLIENT_MODULE_PARM(force, \
                       "List of adapter,address pairs to boldly assume " \
                       "to be present"); \
-  static struct i2c_force_data forces[] = {{force,any_chip},{NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_1(chip1) \
@@ -97,9 +86,9 @@ struct i2c_address_data {
                       "List of adapter,address pairs to boldly assume " \
                       "to be present"); \
   SENSORS_MODULE_PARM_FORCE(chip1); \
-  static struct i2c_force_data forces[] = {{force,any_chip},\
-                                                 {force_ ## chip1,chip1}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_2(chip1,chip2) \
@@ -109,10 +98,10 @@ struct i2c_address_data {
                       "to be present"); \
   SENSORS_MODULE_PARM_FORCE(chip1); \
   SENSORS_MODULE_PARM_FORCE(chip2); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_3(chip1,chip2,chip3) \
@@ -123,11 +112,11 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip1); \
   SENSORS_MODULE_PARM_FORCE(chip2); \
   SENSORS_MODULE_PARM_FORCE(chip3); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_4(chip1,chip2,chip3,chip4) \
@@ -139,12 +128,12 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip2); \
   SENSORS_MODULE_PARM_FORCE(chip3); \
   SENSORS_MODULE_PARM_FORCE(chip4); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {force_ ## chip4,chip4}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      force_##chip4, \
+				      NULL}; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_5(chip1,chip2,chip3,chip4,chip5) \
@@ -157,13 +146,13 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip3); \
   SENSORS_MODULE_PARM_FORCE(chip4); \
   SENSORS_MODULE_PARM_FORCE(chip5); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {force_ ## chip4,chip4}, \
-                                                 {force_ ## chip5,chip5}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      force_##chip4, \
+				      force_##chip5, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \
@@ -177,14 +166,14 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip4); \
   SENSORS_MODULE_PARM_FORCE(chip5); \
   SENSORS_MODULE_PARM_FORCE(chip6); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {force_ ## chip4,chip4}, \
-                                                 {force_ ## chip5,chip5}, \
-                                                 {force_ ## chip6,chip6}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      force_##chip4, \
+				      force_##chip5, \
+				      force_##chip6, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_7(chip1,chip2,chip3,chip4,chip5,chip6,chip7) \
@@ -199,15 +188,15 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip5); \
   SENSORS_MODULE_PARM_FORCE(chip6); \
   SENSORS_MODULE_PARM_FORCE(chip7); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {force_ ## chip4,chip4}, \
-                                                 {force_ ## chip5,chip5}, \
-                                                 {force_ ## chip6,chip6}, \
-                                                 {force_ ## chip7,chip7}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      force_##chip4, \
+				      force_##chip5, \
+				      force_##chip6, \
+				      force_##chip7, \
+				      NULL }; \
   SENSORS_INSMOD
 
 #define SENSORS_INSMOD_8(chip1,chip2,chip3,chip4,chip5,chip6,chip7,chip8) \
@@ -223,16 +212,16 @@ struct i2c_address_data {
   SENSORS_MODULE_PARM_FORCE(chip6); \
   SENSORS_MODULE_PARM_FORCE(chip7); \
   SENSORS_MODULE_PARM_FORCE(chip8); \
-  static struct i2c_force_data forces[] = {{force,any_chip}, \
-                                                 {force_ ## chip1,chip1}, \
-                                                 {force_ ## chip2,chip2}, \
-                                                 {force_ ## chip3,chip3}, \
-                                                 {force_ ## chip4,chip4}, \
-                                                 {force_ ## chip5,chip5}, \
-                                                 {force_ ## chip6,chip6}, \
-                                                 {force_ ## chip7,chip7}, \
-                                                 {force_ ## chip8,chip8}, \
-                                                 {NULL}}; \
+  static unsigned short *forces[] = { force, \
+				      force_##chip1, \
+				      force_##chip2, \
+				      force_##chip3, \
+				      force_##chip4, \
+				      force_##chip5, \
+				      force_##chip6, \
+				      force_##chip7, \
+				      force_##chip8, \
+				      NULL }; \
   SENSORS_INSMOD
 
 /* Detect function. It iterates over all possible addresses itself. For