Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 126966
b: refs/heads/master
c: bc27490
h: refs/heads/master
v: v3
  • Loading branch information
Hans de Goede authored and Jean Delvare committed Jan 7, 2009
1 parent a183ce6 commit 306cf24
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 79 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: ce0bfa5ee25ddbe4072b16054e809f552bf72320
refs/heads/master: bc27490f9164281b9e1768a5df8e0951541f90a1
121 changes: 43 additions & 78 deletions trunk/drivers/hwmon/f71882fg.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,15 @@
#define F71882FG_REG_TEMP_HIGH(nr) (0x81 + 2 * (nr))
#define F71882FG_REG_TEMP_STATUS 0x62
#define F71882FG_REG_TEMP_BEEP 0x63
#define F71882FG_REG_TEMP_HYST1 0x6C
#define F71882FG_REG_TEMP_HYST23 0x6D
#define F71882FG_REG_TEMP_HYST(nr) (0x6C + (nr))
#define F71882FG_REG_TEMP_TYPE 0x6B
#define F71882FG_REG_TEMP_DIODE_OPEN 0x6F

#define F71882FG_REG_PWM(nr) (0xA3 + (16 * (nr)))
#define F71882FG_REG_PWM_TYPE 0x94
#define F71882FG_REG_PWM_ENABLE 0x96

#define F71882FG_REG_FAN_HYST0 0x98
#define F71882FG_REG_FAN_HYST1 0x99
#define F71882FG_REG_FAN_HYST(nr) (0x98 + (nr))

#define F71882FG_REG_POINT_PWM(pwm, point) (0xAA + (point) + (16 * (pwm)))
#define F71882FG_REG_POINT_TEMP(pwm, point) (0xA6 + (point) + (16 * (pwm)))
Expand Down Expand Up @@ -144,7 +142,7 @@ struct f71882fg_data {
u8 temp[4];
u8 temp_ovt[4];
u8 temp_high[4];
u8 temp_hyst[4];
u8 temp_hyst[2]; /* 2 hysts stored per reg */
u8 temp_type[4];
u8 temp_status;
u8 temp_beep;
Expand Down Expand Up @@ -688,13 +686,11 @@ static struct f71882fg_data *f71882fg_update_device(struct device *dev)
F71882FG_REG_TEMP_HIGH(nr));
}

/* Have to hardcode hyst*/
data->temp_hyst[1] = f71882fg_read8(data,
F71882FG_REG_TEMP_HYST1) >> 4;
/* Hyst temps 2 & 3 stored in same register */
reg = f71882fg_read8(data, F71882FG_REG_TEMP_HYST23);
data->temp_hyst[2] = reg & 0x0F;
data->temp_hyst[3] = reg >> 4;
/* hyst */
data->temp_hyst[0] =
f71882fg_read8(data, F71882FG_REG_TEMP_HYST(0));
data->temp_hyst[1] =
f71882fg_read8(data, F71882FG_REG_TEMP_HYST(1));

/* Have to hardcode type, because temp1 is special */
reg = f71882fg_read8(data, F71882FG_REG_TEMP_TYPE);
Expand All @@ -715,10 +711,11 @@ static struct f71882fg_data *f71882fg_update_device(struct device *dev)

data->pwm_enable = f71882fg_read8(data,
F71882FG_REG_PWM_ENABLE);
data->pwm_auto_point_hyst[0] = f71882fg_read8(data,
F71882FG_REG_FAN_HYST0);
data->pwm_auto_point_hyst[1] = f71882fg_read8(data,
F71882FG_REG_FAN_HYST1);
data->pwm_auto_point_hyst[0] =
f71882fg_read8(data, F71882FG_REG_FAN_HYST(0));
data->pwm_auto_point_hyst[1] =
f71882fg_read8(data, F71882FG_REG_FAN_HYST(1));

for (nr = 0; nr < nr_fans; nr++) {
data->pwm_auto_point_mapping[nr] =
f71882fg_read8(data,
Expand Down Expand Up @@ -1011,7 +1008,11 @@ static ssize_t show_temp_max_hyst(struct device *dev, struct device_attribute
int temp_max_hyst;

mutex_lock(&data->update_lock);
temp_max_hyst = (data->temp_high[nr] - data->temp_hyst[nr]) * 1000;
if (nr & 1)
temp_max_hyst = data->temp_hyst[nr / 2] >> 4;
else
temp_max_hyst = data->temp_hyst[nr / 2] & 0x0f;
temp_max_hyst = (data->temp_high[nr] - temp_max_hyst) * 1000;
mutex_unlock(&data->update_lock);

return sprintf(buf, "%d\n", temp_max_hyst);
Expand All @@ -1033,26 +1034,15 @@ static ssize_t store_temp_max_hyst(struct device *dev, struct device_attribute
val = SENSORS_LIMIT(val, data->temp_high[nr] - 15,
data->temp_high[nr]);
val = data->temp_high[nr] - val;
data->temp_hyst[nr] = val;

/* convert value to register contents */
switch (nr) {
case 1:
reg = f71882fg_read8(data, F71882FG_REG_TEMP_HYST1);
reg = (reg & 0x0f) | (val << 4);
break;
case 2:
reg = f71882fg_read8(data, F71882FG_REG_TEMP_HYST23);
reg = (reg & 0xf0) | val;
break;
case 3:
reg = f71882fg_read8(data, F71882FG_REG_TEMP_HYST23);
reg = (reg & 0x0f) | (val << 4);
break;
}

f71882fg_write8(data, (nr <= 1) ? F71882FG_REG_TEMP_HYST1 :
F71882FG_REG_TEMP_HYST23, reg);
reg = f71882fg_read8(data, F71882FG_REG_TEMP_HYST(nr / 2));
if (nr & 1)
reg = (reg & 0x0f) | (val << 4);
else
reg = (reg & 0xf0) | val;
f71882fg_write8(data, F71882FG_REG_TEMP_HYST(nr / 2), reg);
data->temp_hyst[nr / 2] = reg;

mutex_unlock(&data->update_lock);
return ret;
Expand Down Expand Up @@ -1091,7 +1081,11 @@ static ssize_t show_temp_crit_hyst(struct device *dev, struct device_attribute
int temp_crit_hyst;

mutex_lock(&data->update_lock);
temp_crit_hyst = (data->temp_ovt[nr] - data->temp_hyst[nr]) * 1000;
if (nr & 1)
temp_crit_hyst = data->temp_hyst[nr / 2] >> 4;
else
temp_crit_hyst = data->temp_hyst[nr / 2] & 0x0f;
temp_crit_hyst = (data->temp_ovt[nr] - temp_crit_hyst) * 1000;
mutex_unlock(&data->update_lock);

return sprintf(buf, "%d\n", temp_crit_hyst);
Expand Down Expand Up @@ -1320,20 +1314,10 @@ static ssize_t show_pwm_auto_point_temp_hyst(struct device *dev,
int point = to_sensor_dev_attr_2(devattr)->nr;

mutex_lock(&data->update_lock);
switch (nr) {
case 0:
result = data->pwm_auto_point_hyst[0] & 0x0f;
break;
case 1:
result = data->pwm_auto_point_hyst[0] >> 4;
break;
case 2:
result = data->pwm_auto_point_hyst[1] & 0x0f;
break;
case 3:
result = data->pwm_auto_point_hyst[1] >> 4;
break;
}
if (nr & 1)
result = data->pwm_auto_point_hyst[nr / 2] >> 4;
else
result = data->pwm_auto_point_hyst[nr / 2] & 0x0f;
result = 1000 * (data->pwm_auto_point_temp[nr][point] - result);
mutex_unlock(&data->update_lock);

Expand All @@ -1348,6 +1332,7 @@ static ssize_t store_pwm_auto_point_temp_hyst(struct device *dev,
int nr = to_sensor_dev_attr_2(devattr)->index;
int point = to_sensor_dev_attr_2(devattr)->nr;
long val = simple_strtol(buf, NULL, 10) / 1000;
u8 reg;

mutex_lock(&data->update_lock);
data->pwm_auto_point_temp[nr][point] =
Expand All @@ -1356,34 +1341,14 @@ static ssize_t store_pwm_auto_point_temp_hyst(struct device *dev,
data->pwm_auto_point_temp[nr][point]);
val = data->pwm_auto_point_temp[nr][point] - val;

if (nr == 0 || nr == 1) {
data->pwm_auto_point_hyst[0] =
f71882fg_read8(data, F71882FG_REG_FAN_HYST0);
} else {
data->pwm_auto_point_hyst[1] =
f71882fg_read8(data, F71882FG_REG_FAN_HYST1);
}
switch (nr) {
case 0:
val = (data->pwm_auto_point_hyst[0] & 0xf0) | val;
break;
case 1:
val = (data->pwm_auto_point_hyst[0] & 0x0f) | (val << 4);
break;
case 2:
val = (data->pwm_auto_point_hyst[1] & 0xf0) | val;
break;
case 3:
val = (data->pwm_auto_point_hyst[1] & 0x0f) | (val << 4);
break;
}
if (nr == 0 || nr == 1) {
f71882fg_write8(data, F71882FG_REG_FAN_HYST0, val);
data->pwm_auto_point_hyst[0] = val;
} else {
f71882fg_write8(data, F71882FG_REG_FAN_HYST1, val);
data->pwm_auto_point_hyst[1] = val;
}
reg = f71882fg_read8(data, F71882FG_REG_FAN_HYST(nr / 2));
if (nr & 1)
reg = (reg & 0x0f) | (val << 4);
else
reg = (reg & 0xf0) | val;

f71882fg_write8(data, F71882FG_REG_FAN_HYST(nr / 2), reg);
data->pwm_auto_point_hyst[nr / 2] = reg;
mutex_unlock(&data->update_lock);

return count;
Expand Down

0 comments on commit 306cf24

Please sign in to comment.