hwmon: (lm85) extend to support EMC6D103 chips
The interface is identical EMC6D102, so all that needs to be added are some definitions and their uses. Registers apparently missing in EMC6D103S/EMC6D103:A2 compared to EMC6D103:A0, EMC6D103:A1, and EMC6D102 (according to the data sheets), but used unconditionally in the driver: 62[5:7], 6D[0:7], and 6E[0:7]. For that reason, EMC6D103S chips don't get enabled for the time being. Signed-off-by: Jan Beulich <jbeulich@novell.com> (Guenter Roeck: Replaced EMC6D103_A2 with EMC6D103S per EMC6D103S datasheet) Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com> Cc: stable@kernel.org
This commit is contained in:
committed by
Guenter Roeck
parent
4eb2abcd09
commit
f065a93e16
@@ -575,7 +575,7 @@ config SENSORS_LM85
|
|||||||
help
|
help
|
||||||
If you say yes here you get support for National Semiconductor LM85
|
If you say yes here you get support for National Semiconductor LM85
|
||||||
sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
|
sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
|
||||||
EMC6D101 and EMC6D102.
|
EMC6D101, EMC6D102, and EMC6D103.
|
||||||
|
|
||||||
This driver can also be built as a module. If so, the module
|
This driver can also be built as a module. If so, the module
|
||||||
will be called lm85.
|
will be called lm85.
|
||||||
|
@@ -41,7 +41,7 @@ static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
|
|||||||
enum chips {
|
enum chips {
|
||||||
any_chip, lm85b, lm85c,
|
any_chip, lm85b, lm85c,
|
||||||
adm1027, adt7463, adt7468,
|
adm1027, adt7463, adt7468,
|
||||||
emc6d100, emc6d102
|
emc6d100, emc6d102, emc6d103
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The LM85 registers */
|
/* The LM85 registers */
|
||||||
@@ -90,6 +90,9 @@ enum chips {
|
|||||||
#define LM85_VERSTEP_EMC6D100_A0 0x60
|
#define LM85_VERSTEP_EMC6D100_A0 0x60
|
||||||
#define LM85_VERSTEP_EMC6D100_A1 0x61
|
#define LM85_VERSTEP_EMC6D100_A1 0x61
|
||||||
#define LM85_VERSTEP_EMC6D102 0x65
|
#define LM85_VERSTEP_EMC6D102 0x65
|
||||||
|
#define LM85_VERSTEP_EMC6D103_A0 0x68
|
||||||
|
#define LM85_VERSTEP_EMC6D103_A1 0x69
|
||||||
|
#define LM85_VERSTEP_EMC6D103S 0x6A /* Also known as EMC6D103:A2 */
|
||||||
|
|
||||||
#define LM85_REG_CONFIG 0x40
|
#define LM85_REG_CONFIG 0x40
|
||||||
|
|
||||||
@@ -348,6 +351,7 @@ static const struct i2c_device_id lm85_id[] = {
|
|||||||
{ "emc6d100", emc6d100 },
|
{ "emc6d100", emc6d100 },
|
||||||
{ "emc6d101", emc6d100 },
|
{ "emc6d101", emc6d100 },
|
||||||
{ "emc6d102", emc6d102 },
|
{ "emc6d102", emc6d102 },
|
||||||
|
{ "emc6d103", emc6d103 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, lm85_id);
|
MODULE_DEVICE_TABLE(i2c, lm85_id);
|
||||||
@@ -1250,6 +1254,20 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
|
|||||||
case LM85_VERSTEP_EMC6D102:
|
case LM85_VERSTEP_EMC6D102:
|
||||||
type_name = "emc6d102";
|
type_name = "emc6d102";
|
||||||
break;
|
break;
|
||||||
|
case LM85_VERSTEP_EMC6D103_A0:
|
||||||
|
case LM85_VERSTEP_EMC6D103_A1:
|
||||||
|
type_name = "emc6d103";
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
* Registers apparently missing in EMC6D103S/EMC6D103:A2
|
||||||
|
* compared to EMC6D103:A0, EMC6D103:A1, and EMC6D102
|
||||||
|
* (according to the data sheets), but used unconditionally
|
||||||
|
* in the driver: 62[5:7], 6D[0:7], and 6E[0:7].
|
||||||
|
* So skip EMC6D103S for now.
|
||||||
|
case LM85_VERSTEP_EMC6D103S:
|
||||||
|
type_name = "emc6d103s";
|
||||||
|
break;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dev_dbg(&adapter->dev,
|
dev_dbg(&adapter->dev,
|
||||||
@@ -1283,6 +1301,7 @@ static int lm85_probe(struct i2c_client *client,
|
|||||||
case adt7468:
|
case adt7468:
|
||||||
case emc6d100:
|
case emc6d100:
|
||||||
case emc6d102:
|
case emc6d102:
|
||||||
|
case emc6d103:
|
||||||
data->freq_map = adm1027_freq_map;
|
data->freq_map = adm1027_freq_map;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1468,7 +1487,7 @@ static struct lm85_data *lm85_update_device(struct device *dev)
|
|||||||
/* More alarm bits */
|
/* More alarm bits */
|
||||||
data->alarms |= lm85_read_value(client,
|
data->alarms |= lm85_read_value(client,
|
||||||
EMC6D100_REG_ALARM3) << 16;
|
EMC6D100_REG_ALARM3) << 16;
|
||||||
} else if (data->type == emc6d102) {
|
} else if (data->type == emc6d102 || data->type == emc6d103) {
|
||||||
/* Have to read LSB bits after the MSB ones because
|
/* Have to read LSB bits after the MSB ones because
|
||||||
the reading of the MSB bits has frozen the
|
the reading of the MSB bits has frozen the
|
||||||
LSBs (backward from the ADM1027).
|
LSBs (backward from the ADM1027).
|
||||||
|
Reference in New Issue
Block a user