mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
hwmon: (it87) describe per-chip PWM temperature maps
Add a per-chip count for PWM temperature mapping sources and use it when reporting and validating mappings. Keep existing chips on their previous three-source defaults. This prepares the driver for chips with a different number of mapping sources. Signed-off-by: benoit.masson <yahoo@perenite.com> Signed-off-by: Jerome Tollet <jerome.tollet@gmail.com> Link: https://patch.msgid.link/619425df92463b3c3f9e90f00c527c4009599ea8.1788040385.git.jerome.tollet@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
e9e597193e
commit
28e3190620
|
|
@ -292,6 +292,7 @@ struct it87_devices {
|
|||
const char *name;
|
||||
const char * const model;
|
||||
u32 features;
|
||||
u8 num_temp_map;
|
||||
u8 peci_mask;
|
||||
u8 old_peci_mask;
|
||||
u8 smbus_bitmap; /* SMBus enable bits in extra config register */
|
||||
|
|
@ -335,12 +336,14 @@ static const struct it87_devices it87_devices[] = {
|
|||
.model = "IT87F",
|
||||
.features = FEAT_OLD_AUTOPWM | FEAT_FANCTL_ONOFF,
|
||||
/* may need to overwrite */
|
||||
.num_temp_map = 3,
|
||||
},
|
||||
[it8712] = {
|
||||
.name = "it8712",
|
||||
.model = "IT8712F",
|
||||
.features = FEAT_OLD_AUTOPWM | FEAT_VID | FEAT_FANCTL_ONOFF,
|
||||
/* may need to overwrite */
|
||||
.num_temp_map = 3,
|
||||
},
|
||||
[it8716] = {
|
||||
.name = "it8716",
|
||||
|
|
@ -348,6 +351,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
|
||||
| FEAT_FAN16_CONFIG | FEAT_FIVE_FANS | FEAT_PWM_FREQ2
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
},
|
||||
[it8718] = {
|
||||
.name = "it8718",
|
||||
|
|
@ -355,6 +359,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
|
||||
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS
|
||||
| FEAT_PWM_FREQ2 | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.old_peci_mask = 0x4,
|
||||
},
|
||||
[it8720] = {
|
||||
|
|
@ -363,6 +368,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
|
||||
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS
|
||||
| FEAT_PWM_FREQ2 | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.old_peci_mask = 0x4,
|
||||
},
|
||||
[it8721] = {
|
||||
|
|
@ -372,6 +378,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI
|
||||
| FEAT_FAN16_CONFIG | FEAT_FIVE_FANS | FEAT_IN7_INTERNAL
|
||||
| FEAT_PWM_FREQ2 | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x05,
|
||||
.old_peci_mask = 0x02, /* Actually reports PCH */
|
||||
},
|
||||
|
|
@ -382,6 +389,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_FIVE_FANS
|
||||
| FEAT_IN7_INTERNAL | FEAT_PWM_FREQ2
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8732] = {
|
||||
|
|
@ -391,6 +399,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI
|
||||
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_FOUR_FANS
|
||||
| FEAT_FOUR_PWM | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
.old_peci_mask = 0x02, /* Actually reports PCH */
|
||||
},
|
||||
|
|
@ -404,6 +413,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
/* 12mV ADC (OHM) */
|
||||
/* 16 bit fans (OHM) */
|
||||
/* three fans, always 16 bit (guesswork) */
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8772] = {
|
||||
|
|
@ -416,6 +426,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
/* 12mV ADC (HWSensors4, OHM) */
|
||||
/* 16 bit fans (HWSensors4, OHM) */
|
||||
/* three fans, always 16 bit (datasheet) */
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8781] = {
|
||||
|
|
@ -424,6 +435,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
|
||||
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_PWM_FREQ2
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.old_peci_mask = 0x4,
|
||||
},
|
||||
[it8782] = {
|
||||
|
|
@ -432,6 +444,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
|
||||
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_PWM_FREQ2
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.old_peci_mask = 0x4,
|
||||
},
|
||||
[it8783] = {
|
||||
|
|
@ -440,6 +453,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
|
||||
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_PWM_FREQ2
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.old_peci_mask = 0x4,
|
||||
},
|
||||
[it8786] = {
|
||||
|
|
@ -448,6 +462,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
|
||||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_IN7_INTERNAL
|
||||
| FEAT_PWM_FREQ2 | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8790] = {
|
||||
|
|
@ -456,6 +471,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
|
||||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_IN7_INTERNAL
|
||||
| FEAT_PWM_FREQ2 | FEAT_FANCTL_ONOFF | FEAT_NOCONF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8792] = {
|
||||
|
|
@ -465,6 +481,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI
|
||||
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_FANCTL_ONOFF
|
||||
| FEAT_NOCONF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
.old_peci_mask = 0x02, /* Actually reports PCH */
|
||||
},
|
||||
|
|
@ -474,6 +491,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
|
||||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_IN7_INTERNAL
|
||||
| FEAT_AVCC3 | FEAT_PWM_FREQ2,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8620] = {
|
||||
|
|
@ -483,6 +501,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_SIX_FANS
|
||||
| FEAT_IN7_INTERNAL | FEAT_SIX_PWM | FEAT_PWM_FREQ2
|
||||
| FEAT_SIX_TEMP | FEAT_VIN3_5V | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8622] = {
|
||||
|
|
@ -492,6 +511,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_FIVE_FANS
|
||||
| FEAT_FIVE_PWM | FEAT_IN7_INTERNAL | FEAT_PWM_FREQ2
|
||||
| FEAT_AVCC3 | FEAT_VIN3_5V | FEAT_FOUR_TEMP,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
.smbus_bitmap = BIT(1) | BIT(2),
|
||||
},
|
||||
|
|
@ -502,6 +522,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_SIX_FANS
|
||||
| FEAT_IN7_INTERNAL | FEAT_SIX_PWM | FEAT_PWM_FREQ2
|
||||
| FEAT_SIX_TEMP | FEAT_VIN3_5V | FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
},
|
||||
[it8689] = {
|
||||
|
|
@ -511,6 +532,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_SIX_FANS | FEAT_IN7_INTERNAL
|
||||
| FEAT_SIX_PWM | FEAT_PWM_FREQ2 | FEAT_SIX_TEMP | FEAT_AVCC3
|
||||
| FEAT_FANCTL_ONOFF,
|
||||
.num_temp_map = 3,
|
||||
.smbus_bitmap = BIT(1) | BIT(2),
|
||||
},
|
||||
[it87952] = {
|
||||
|
|
@ -520,6 +542,7 @@ static const struct it87_devices it87_devices[] = {
|
|||
| FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI
|
||||
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_FANCTL_ONOFF
|
||||
| FEAT_NOCONF,
|
||||
.num_temp_map = 3,
|
||||
.peci_mask = 0x07,
|
||||
.old_peci_mask = 0x02, /* Actually reports PCH */
|
||||
},
|
||||
|
|
@ -589,6 +612,7 @@ struct it87_data {
|
|||
int sioaddr;
|
||||
enum chips type;
|
||||
u32 features;
|
||||
u8 num_temp_map;
|
||||
u8 peci_mask;
|
||||
u8 old_peci_mask;
|
||||
|
||||
|
|
@ -1693,16 +1717,18 @@ static ssize_t show_pwm_temp_map(struct device *dev,
|
|||
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
|
||||
struct it87_data *data = it87_update_device(dev);
|
||||
int nr = sensor_attr->index;
|
||||
u8 num_map;
|
||||
int map;
|
||||
|
||||
if (IS_ERR(data))
|
||||
return PTR_ERR(data);
|
||||
|
||||
num_map = data->num_temp_map;
|
||||
map = data->pwm_temp_map[nr];
|
||||
if (map >= 3)
|
||||
if (map >= num_map)
|
||||
map = 0; /* Should never happen */
|
||||
if (nr >= 3) /* pwm channels 3..6 map to temp4..6 */
|
||||
map += 3;
|
||||
if (nr >= num_map) /* pwm channels 3..6 map to temp4..6 */
|
||||
map += num_map;
|
||||
|
||||
return sprintf(buf, "%d\n", (int)BIT(map));
|
||||
}
|
||||
|
|
@ -1714,6 +1740,7 @@ static ssize_t set_pwm_temp_map(struct device *dev,
|
|||
struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
|
||||
struct it87_data *data = dev_get_drvdata(dev);
|
||||
int nr = sensor_attr->index;
|
||||
u8 num_map = data->num_temp_map;
|
||||
long val;
|
||||
int err;
|
||||
u8 reg;
|
||||
|
|
@ -1721,8 +1748,8 @@ static ssize_t set_pwm_temp_map(struct device *dev,
|
|||
if (kstrtol(buf, 10, &val) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (nr >= 3)
|
||||
val -= 3;
|
||||
if (nr >= num_map)
|
||||
val -= num_map;
|
||||
|
||||
switch (val) {
|
||||
case BIT(0):
|
||||
|
|
@ -3461,6 +3488,7 @@ static int it87_probe(struct platform_device *pdev)
|
|||
struct resource *res;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct it87_sio_data *sio_data = dev_get_platdata(dev);
|
||||
const struct it87_devices *chip;
|
||||
int enable_pwm_interface;
|
||||
struct device *hwmon_dev;
|
||||
int err;
|
||||
|
|
@ -3483,9 +3511,11 @@ static int it87_probe(struct platform_device *pdev)
|
|||
data->type = sio_data->type;
|
||||
data->smbus_bitmap = sio_data->smbus_bitmap;
|
||||
data->ec_special_config = sio_data->ec_special_config;
|
||||
data->features = it87_devices[sio_data->type].features;
|
||||
data->peci_mask = it87_devices[sio_data->type].peci_mask;
|
||||
data->old_peci_mask = it87_devices[sio_data->type].old_peci_mask;
|
||||
chip = &it87_devices[sio_data->type];
|
||||
data->features = chip->features;
|
||||
data->peci_mask = chip->peci_mask;
|
||||
data->old_peci_mask = chip->old_peci_mask;
|
||||
data->num_temp_map = chip->num_temp_map;
|
||||
/*
|
||||
* IT8705F Datasheet 0.4.1, 3h == Version G.
|
||||
* IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user