Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 7171
b: refs/heads/master
c: ef8dec5
h: refs/heads/master
i:
  7169: e5c4b00
  7167: 4561ccd
v: v3
  • Loading branch information
Jean Delvare authored and Greg Kroah-Hartman committed Sep 5, 2005
1 parent 948af63 commit b6fe817
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 80 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9fc6adfa9adf2be84119a3c2592287f33bd1dff2
refs/heads/master: ef8dec5d8b3e96e359f377f35cd8caff42fe6d58
13 changes: 6 additions & 7 deletions trunk/drivers/i2c/i2c-sensor-detect.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
133 changes: 61 additions & 72 deletions trunk/include/linux/i2c-sensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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) \
Expand Down Expand Up @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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) \
Expand All @@ -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
Expand Down

0 comments on commit b6fe817

Please sign in to comment.