forked from Minki/linux
[PATCH] hwmon: Support the VRM 10 mode of the ADT7463
Support the VRM 10 mode of the ADT7463. Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
07421cabdc
commit
9c516ef496
@ -443,7 +443,17 @@ show_fan_offset(4);
|
|||||||
static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
|
static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
struct lm85_data *data = lm85_update_device(dev);
|
struct lm85_data *data = lm85_update_device(dev);
|
||||||
return sprintf(buf, "%ld\n", (long) vid_from_reg(data->vid, data->vrm));
|
int vid;
|
||||||
|
|
||||||
|
if (data->type == adt7463 && (data->vid & 0x80)) {
|
||||||
|
/* 6-pin VID (VRM 10) */
|
||||||
|
vid = vid_from_reg(data->vid & 0x3f, data->vrm);
|
||||||
|
} else {
|
||||||
|
/* 5-pin VID (VRM 9) */
|
||||||
|
vid = vid_from_reg(data->vid & 0x1f, data->vrm);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf(buf, "%d\n", vid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
|
static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL);
|
||||||
@ -1176,17 +1186,14 @@ static int lm85_detect(struct i2c_adapter *adapter, int address,
|
|||||||
device_create_file(&new_client->dev, &dev_attr_in1_input);
|
device_create_file(&new_client->dev, &dev_attr_in1_input);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in2_input);
|
device_create_file(&new_client->dev, &dev_attr_in2_input);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in3_input);
|
device_create_file(&new_client->dev, &dev_attr_in3_input);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in4_input);
|
|
||||||
device_create_file(&new_client->dev, &dev_attr_in0_min);
|
device_create_file(&new_client->dev, &dev_attr_in0_min);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in1_min);
|
device_create_file(&new_client->dev, &dev_attr_in1_min);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in2_min);
|
device_create_file(&new_client->dev, &dev_attr_in2_min);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in3_min);
|
device_create_file(&new_client->dev, &dev_attr_in3_min);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in4_min);
|
|
||||||
device_create_file(&new_client->dev, &dev_attr_in0_max);
|
device_create_file(&new_client->dev, &dev_attr_in0_max);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in1_max);
|
device_create_file(&new_client->dev, &dev_attr_in1_max);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in2_max);
|
device_create_file(&new_client->dev, &dev_attr_in2_max);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in3_max);
|
device_create_file(&new_client->dev, &dev_attr_in3_max);
|
||||||
device_create_file(&new_client->dev, &dev_attr_in4_max);
|
|
||||||
device_create_file(&new_client->dev, &dev_attr_temp1_input);
|
device_create_file(&new_client->dev, &dev_attr_temp1_input);
|
||||||
device_create_file(&new_client->dev, &dev_attr_temp2_input);
|
device_create_file(&new_client->dev, &dev_attr_temp2_input);
|
||||||
device_create_file(&new_client->dev, &dev_attr_temp3_input);
|
device_create_file(&new_client->dev, &dev_attr_temp3_input);
|
||||||
@ -1224,6 +1231,15 @@ static int lm85_detect(struct i2c_adapter *adapter, int address,
|
|||||||
device_create_file(&new_client->dev, &dev_attr_temp2_auto_temp_crit);
|
device_create_file(&new_client->dev, &dev_attr_temp2_auto_temp_crit);
|
||||||
device_create_file(&new_client->dev, &dev_attr_temp3_auto_temp_crit);
|
device_create_file(&new_client->dev, &dev_attr_temp3_auto_temp_crit);
|
||||||
|
|
||||||
|
/* The ADT7463 has an optional VRM 10 mode where pin 21 is used
|
||||||
|
as a sixth digital VID input rather than an analog input. */
|
||||||
|
data->vid = lm85_read_value(new_client, LM85_REG_VID);
|
||||||
|
if (!(kind == adt7463 && (data->vid & 0x80))) {
|
||||||
|
device_create_file(&new_client->dev, &dev_attr_in4_input);
|
||||||
|
device_create_file(&new_client->dev, &dev_attr_in4_min);
|
||||||
|
device_create_file(&new_client->dev, &dev_attr_in4_max);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Error out and cleanup code */
|
/* Error out and cleanup code */
|
||||||
@ -1382,11 +1398,18 @@ static struct lm85_data *lm85_update_device(struct device *dev)
|
|||||||
irrelevant. So it is left in 4*/
|
irrelevant. So it is left in 4*/
|
||||||
data->adc_scale = (data->type == emc6d102 ) ? 16 : 4;
|
data->adc_scale = (data->type == emc6d102 ) ? 16 : 4;
|
||||||
|
|
||||||
for (i = 0; i <= 4; ++i) {
|
data->vid = lm85_read_value(client, LM85_REG_VID);
|
||||||
|
|
||||||
|
for (i = 0; i <= 3; ++i) {
|
||||||
data->in[i] =
|
data->in[i] =
|
||||||
lm85_read_value(client, LM85_REG_IN(i));
|
lm85_read_value(client, LM85_REG_IN(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(data->type == adt7463 && (data->vid & 0x80))) {
|
||||||
|
data->in[4] = lm85_read_value(client,
|
||||||
|
LM85_REG_IN(4));
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i <= 3; ++i) {
|
for (i = 0; i <= 3; ++i) {
|
||||||
data->fan[i] =
|
data->fan[i] =
|
||||||
lm85_read_value(client, LM85_REG_FAN(i));
|
lm85_read_value(client, LM85_REG_FAN(i));
|
||||||
@ -1450,13 +1473,20 @@ static struct lm85_data *lm85_update_device(struct device *dev)
|
|||||||
/* Things that don't change often */
|
/* Things that don't change often */
|
||||||
dev_dbg(&client->dev, "Reading config values\n");
|
dev_dbg(&client->dev, "Reading config values\n");
|
||||||
|
|
||||||
for (i = 0; i <= 4; ++i) {
|
for (i = 0; i <= 3; ++i) {
|
||||||
data->in_min[i] =
|
data->in_min[i] =
|
||||||
lm85_read_value(client, LM85_REG_IN_MIN(i));
|
lm85_read_value(client, LM85_REG_IN_MIN(i));
|
||||||
data->in_max[i] =
|
data->in_max[i] =
|
||||||
lm85_read_value(client, LM85_REG_IN_MAX(i));
|
lm85_read_value(client, LM85_REG_IN_MAX(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(data->type == adt7463 && (data->vid & 0x80))) {
|
||||||
|
data->in_min[4] = lm85_read_value(client,
|
||||||
|
LM85_REG_IN_MIN(4));
|
||||||
|
data->in_max[4] = lm85_read_value(client,
|
||||||
|
LM85_REG_IN_MAX(4));
|
||||||
|
}
|
||||||
|
|
||||||
if ( data->type == emc6d100 ) {
|
if ( data->type == emc6d100 ) {
|
||||||
for (i = 5; i <= 7; ++i) {
|
for (i = 5; i <= 7; ++i) {
|
||||||
data->in_min[i] =
|
data->in_min[i] =
|
||||||
@ -1478,8 +1508,6 @@ static struct lm85_data *lm85_update_device(struct device *dev)
|
|||||||
lm85_read_value(client, LM85_REG_TEMP_MAX(i));
|
lm85_read_value(client, LM85_REG_TEMP_MAX(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
data->vid = lm85_read_value(client, LM85_REG_VID);
|
|
||||||
|
|
||||||
for (i = 0; i <= 2; ++i) {
|
for (i = 0; i <= 2; ++i) {
|
||||||
int val ;
|
int val ;
|
||||||
data->autofan[i].config =
|
data->autofan[i].config =
|
||||||
|
Loading…
Reference in New Issue
Block a user