mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 10:57:46 +00:00
hwmon: (lm90) Introduce chip parameter structure
Instead of using switch/case and if statements in probe, define chip specific functionality in a parameter structure array. Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
parent
15b66ab690
commit
4667bcb8d8
1 changed files with 60 additions and 32 deletions
|
@ -189,6 +189,63 @@ static const struct i2c_device_id lm90_id[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, lm90_id);
|
MODULE_DEVICE_TABLE(i2c, lm90_id);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* chip type specific parameters
|
||||||
|
*/
|
||||||
|
struct lm90_params {
|
||||||
|
u32 flags; /* Capabilities */
|
||||||
|
u16 alert_alarms; /* Which alarm bits trigger ALERT# */
|
||||||
|
/* Upper 8 bits for max6695/96 */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct lm90_params lm90_params[] = {
|
||||||
|
[adm1032] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[adt7461] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[lm86] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7b,
|
||||||
|
},
|
||||||
|
[lm90] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7b,
|
||||||
|
},
|
||||||
|
[lm99] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7b,
|
||||||
|
},
|
||||||
|
[max6646] = {
|
||||||
|
.flags = LM90_HAVE_LOCAL_EXT,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[max6657] = {
|
||||||
|
.flags = LM90_HAVE_LOCAL_EXT,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[max6659] = {
|
||||||
|
.flags = LM90_HAVE_LOCAL_EXT | LM90_HAVE_EMERGENCY,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[max6680] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
[max6696] = {
|
||||||
|
.flags = LM90_HAVE_LOCAL_EXT | LM90_HAVE_EMERGENCY
|
||||||
|
| LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3,
|
||||||
|
.alert_alarms = 0x187c,
|
||||||
|
},
|
||||||
|
[w83l771] = {
|
||||||
|
.flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT,
|
||||||
|
.alert_alarms = 0x7c,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Client data (each client gets its own)
|
* Client data (each client gets its own)
|
||||||
*/
|
*/
|
||||||
|
@ -199,7 +256,7 @@ struct lm90_data {
|
||||||
char valid; /* zero until following fields are valid */
|
char valid; /* zero until following fields are valid */
|
||||||
unsigned long last_updated; /* in jiffies */
|
unsigned long last_updated; /* in jiffies */
|
||||||
int kind;
|
int kind;
|
||||||
int flags;
|
u32 flags;
|
||||||
|
|
||||||
u8 config_orig; /* Original configuration register value */
|
u8 config_orig; /* Original configuration register value */
|
||||||
u16 alert_alarms; /* Which alarm bits trigger ALERT# */
|
u16 alert_alarms; /* Which alarm bits trigger ALERT# */
|
||||||
|
@ -1201,39 +1258,10 @@ static int lm90_probe(struct i2c_client *new_client,
|
||||||
|
|
||||||
/* Different devices have different alarm bits triggering the
|
/* Different devices have different alarm bits triggering the
|
||||||
* ALERT# output */
|
* ALERT# output */
|
||||||
switch (data->kind) {
|
data->alert_alarms = lm90_params[data->kind].alert_alarms;
|
||||||
case lm90:
|
|
||||||
case lm99:
|
|
||||||
case lm86:
|
|
||||||
data->alert_alarms = 0x7b;
|
|
||||||
break;
|
|
||||||
case max6696:
|
|
||||||
data->alert_alarms = 0x187c;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
data->alert_alarms = 0x7c;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set chip capabilities */
|
/* Set chip capabilities */
|
||||||
if (data->kind != max6657 && data->kind != max6659
|
data->flags = lm90_params[data->kind].flags;
|
||||||
&& data->kind != max6646 && data->kind != max6696)
|
|
||||||
data->flags |= LM90_HAVE_OFFSET;
|
|
||||||
|
|
||||||
if (data->kind == max6657 || data->kind == max6659
|
|
||||||
|| data->kind == max6646 || data->kind == max6696)
|
|
||||||
data->flags |= LM90_HAVE_LOCAL_EXT;
|
|
||||||
|
|
||||||
if (data->kind != max6657 && data->kind != max6659
|
|
||||||
&& data->kind != max6646 && data->kind != max6680
|
|
||||||
&& data->kind != max6696)
|
|
||||||
data->flags |= LM90_HAVE_REM_LIMIT_EXT;
|
|
||||||
|
|
||||||
if (data->kind == max6659 || data->kind == max6696)
|
|
||||||
data->flags |= LM90_HAVE_EMERGENCY;
|
|
||||||
|
|
||||||
if (data->kind == max6696)
|
|
||||||
data->flags |= LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3;
|
|
||||||
|
|
||||||
/* Initialize the LM90 chip */
|
/* Initialize the LM90 chip */
|
||||||
lm90_init_client(new_client);
|
lm90_init_client(new_client);
|
||||||
|
|
Loading…
Reference in a new issue