Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 347361
b: refs/heads/master
c: 5d8d2f2
h: refs/heads/master
i:
  347359: 4abc4cd
v: v3
  • Loading branch information
Guenter Roeck authored and Jean Delvare committed Dec 19, 2012
1 parent 50ac11d commit a07044f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 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: 483db43e81f4958e3cd11a990112e8082a6a5261
refs/heads/master: 5d8d2f2bdbd0812dfad05ca37e4b28912fca7e33
3 changes: 2 additions & 1 deletion trunk/Documentation/hwmon/it87
Original file line number Diff line number Diff line change
Expand Up @@ -217,4 +217,5 @@ Temperature offset attributes
The driver supports temp[1-3]_offset sysfs attributes to adjust the reported
temperature for thermal diodes or diode-connected thermal transistors.
If a temperature sensor is configured for thermistors, the attribute values
are ignored.
are ignored. If the thermal sensor type is Intel PECI, the temperature offset
must be programmed to the critical CPU temperature.
20 changes: 17 additions & 3 deletions trunk/drivers/hwmon/it87.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,13 +231,15 @@ static const u8 IT87_REG_TEMP_OFFSET[] = { 0x56, 0x57, 0x59 };
struct it87_devices {
const char *name;
u16 features;
u16 peci_mask;
};

#define FEAT_12MV_ADC (1 << 0)
#define FEAT_NEWER_AUTOPWM (1 << 1)
#define FEAT_OLD_AUTOPWM (1 << 2)
#define FEAT_16BIT_FANS (1 << 3)
#define FEAT_TEMP_OFFSET (1 << 4)
#define FEAT_TEMP_PECI (1 << 5)

static const struct it87_devices it87_devices[] = {
[it87] = {
Expand All @@ -263,12 +265,14 @@ static const struct it87_devices it87_devices[] = {
[it8721] = {
.name = "it8721",
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
| FEAT_TEMP_OFFSET,
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI,
.peci_mask = 0x05,
},
[it8728] = {
.name = "it8728",
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
| FEAT_TEMP_OFFSET,
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI,
.peci_mask = 0x07,
},
[it8782] = {
.name = "it8782",
Expand All @@ -285,6 +289,8 @@ static const struct it87_devices it87_devices[] = {
#define has_newer_autopwm(data) ((data)->features & FEAT_NEWER_AUTOPWM)
#define has_old_autopwm(data) ((data)->features & FEAT_OLD_AUTOPWM)
#define has_temp_offset(data) ((data)->features & FEAT_TEMP_OFFSET)
#define has_temp_peci(data, nr) (((data)->features & FEAT_TEMP_PECI) && \
((data)->peci_mask & (1 << nr)))

struct it87_sio_data {
enum chips type;
Expand All @@ -309,6 +315,7 @@ struct it87_data {
struct device *hwmon_dev;
enum chips type;
u16 features;
u16 peci_mask;

unsigned short addr;
const char *name;
Expand Down Expand Up @@ -617,6 +624,8 @@ static ssize_t show_temp_type(struct device *dev, struct device_attribute *attr,
struct it87_data *data = it87_update_device(dev);
u8 reg = data->sensor; /* In case value is updated while used */

if (has_temp_peci(data, nr) && (reg >> 6 == nr + 1))
return sprintf(buf, "6\n"); /* Intel PECI */
if (reg & (1 << nr))
return sprintf(buf, "3\n"); /* thermal diode */
if (reg & (8 << nr))
Expand All @@ -640,16 +649,20 @@ static ssize_t set_temp_type(struct device *dev, struct device_attribute *attr,
reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);
reg &= ~(1 << nr);
reg &= ~(8 << nr);
if (has_temp_peci(data, nr) && (reg >> 6 == nr + 1 || val == 6))
reg &= 0x3f;
if (val == 2) { /* backwards compatibility */
dev_warn(dev,
"Sensor type 2 is deprecated, please use 4 instead\n");
val = 4;
}
/* 3 = thermal diode; 4 = thermistor; 0 = disabled */
/* 3 = thermal diode; 4 = thermistor; 6 = Intel PECI; 0 = disabled */
if (val == 3)
reg |= 1 << nr;
else if (val == 4)
reg |= 8 << nr;
else if (has_temp_peci(data, nr) && val == 6)
reg |= (nr + 1) << 6;
else if (val != 0)
return -EINVAL;

Expand Down Expand Up @@ -1966,6 +1979,7 @@ static int it87_probe(struct platform_device *pdev)
data->addr = res->start;
data->type = sio_data->type;
data->features = it87_devices[sio_data->type].features;
data->peci_mask = it87_devices[sio_data->type].peci_mask;
data->name = it87_devices[sio_data->type].name;
/*
* IT8705F Datasheet 0.4.1, 3h == Version G.
Expand Down

0 comments on commit a07044f

Please sign in to comment.