Introduce FEAT_NEW_TEMPMAP
Several recent chips have a different register definition for temperature to pwm assignment. Introduce FEAT_NEW_TEMPMAP to reflect this and assign to affected chips. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
26
it87.c
26
it87.c
@@ -386,6 +386,7 @@ struct it87_devices {
|
|||||||
#define FEAT_SCALING BIT(22) /* Internal voltage scaling */
|
#define FEAT_SCALING BIT(22) /* Internal voltage scaling */
|
||||||
#define FEAT_FANCTL_ONOFF BIT(23) /* chip has FAN_CTL ON/OFF */
|
#define FEAT_FANCTL_ONOFF BIT(23) /* chip has FAN_CTL ON/OFF */
|
||||||
#define FEAT_11MV_ADC BIT(24)
|
#define FEAT_11MV_ADC BIT(24)
|
||||||
|
#define FEAT_NEW_TEMPMAP BIT(25) /* new temp input selection */
|
||||||
|
|
||||||
static const struct it87_devices it87_devices[] = {
|
static const struct it87_devices it87_devices[] = {
|
||||||
[it87] = {
|
[it87] = {
|
||||||
@@ -565,7 +566,7 @@ static const struct it87_devices it87_devices[] = {
|
|||||||
.features = FEAT_NEWER_AUTOPWM | FEAT_11MV_ADC | FEAT_16BIT_FANS
|
.features = FEAT_NEWER_AUTOPWM | FEAT_11MV_ADC | FEAT_16BIT_FANS
|
||||||
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_FIVE_FANS
|
| FEAT_TEMP_OFFSET | FEAT_TEMP_PECI | FEAT_FIVE_FANS
|
||||||
| FEAT_FIVE_PWM | FEAT_IN7_INTERNAL | FEAT_PWM_FREQ2
|
| FEAT_FIVE_PWM | FEAT_IN7_INTERNAL | FEAT_PWM_FREQ2
|
||||||
| FEAT_AVCC3 | FEAT_SCALING,
|
| FEAT_AVCC3 | FEAT_SCALING | FEAT_NEW_TEMPMAP,
|
||||||
.num_temp_limit = 6,
|
.num_temp_limit = 6,
|
||||||
.peci_mask = 0x07,
|
.peci_mask = 0x07,
|
||||||
},
|
},
|
||||||
@@ -605,7 +606,7 @@ static const struct it87_devices it87_devices[] = {
|
|||||||
.name = "it8655",
|
.name = "it8655",
|
||||||
.suffix = "E",
|
.suffix = "E",
|
||||||
.features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS
|
.features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS
|
||||||
| FEAT_TEMP_OFFSET | FEAT_AVCC3
|
| FEAT_TEMP_OFFSET | FEAT_AVCC3 | FEAT_NEW_TEMPMAP
|
||||||
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_BANK_SEL,
|
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_BANK_SEL,
|
||||||
.num_temp_limit = 6,
|
.num_temp_limit = 6,
|
||||||
},
|
},
|
||||||
@@ -613,7 +614,7 @@ static const struct it87_devices it87_devices[] = {
|
|||||||
.name = "it8665",
|
.name = "it8665",
|
||||||
.suffix = "E",
|
.suffix = "E",
|
||||||
.features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS
|
.features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS
|
||||||
| FEAT_TEMP_OFFSET | FEAT_AVCC3
|
| FEAT_TEMP_OFFSET | FEAT_AVCC3 | FEAT_NEW_TEMPMAP
|
||||||
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_SIX_FANS
|
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL | FEAT_SIX_FANS
|
||||||
| FEAT_SIX_PWM | FEAT_BANK_SEL,
|
| FEAT_SIX_PWM | FEAT_BANK_SEL,
|
||||||
.num_temp_limit = 6,
|
.num_temp_limit = 6,
|
||||||
@@ -622,7 +623,7 @@ static const struct it87_devices it87_devices[] = {
|
|||||||
.name = "it8686",
|
.name = "it8686",
|
||||||
.suffix = "E",
|
.suffix = "E",
|
||||||
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
|
.features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FANS
|
||||||
| FEAT_TEMP_OFFSET | FEAT_SIX_FANS
|
| FEAT_TEMP_OFFSET | FEAT_SIX_FANS | FEAT_NEW_TEMPMAP
|
||||||
| FEAT_IN7_INTERNAL | FEAT_SIX_PWM | FEAT_PWM_FREQ2
|
| FEAT_IN7_INTERNAL | FEAT_SIX_PWM | FEAT_PWM_FREQ2
|
||||||
| FEAT_SIX_TEMP | FEAT_BANK_SEL | FEAT_SCALING | FEAT_AVCC3,
|
| FEAT_SIX_TEMP | FEAT_BANK_SEL | FEAT_SCALING | FEAT_AVCC3,
|
||||||
.num_temp_limit = 6,
|
.num_temp_limit = 6,
|
||||||
@@ -663,6 +664,7 @@ static const struct it87_devices it87_devices[] = {
|
|||||||
#define has_scaling(data) ((data)->features & FEAT_SCALING)
|
#define has_scaling(data) ((data)->features & FEAT_SCALING)
|
||||||
#define has_fanctl_onoff(data) ((data)->features & FEAT_FANCTL_ONOFF)
|
#define has_fanctl_onoff(data) ((data)->features & FEAT_FANCTL_ONOFF)
|
||||||
#define has_11mv_adc(data) ((data)->features & FEAT_11MV_ADC)
|
#define has_11mv_adc(data) ((data)->features & FEAT_11MV_ADC)
|
||||||
|
#define has_new_tempmap(data) ((data)->features & FEAT_NEW_TEMPMAP)
|
||||||
|
|
||||||
struct it87_sio_data {
|
struct it87_sio_data {
|
||||||
enum chips type;
|
enum chips type;
|
||||||
@@ -900,7 +902,7 @@ static void it87_update_pwm_ctrl(struct it87_data *data, int nr)
|
|||||||
{
|
{
|
||||||
data->pwm_ctrl[nr] = it87_read_value(data, data->REG_PWM[nr]);
|
data->pwm_ctrl[nr] = it87_read_value(data, data->REG_PWM[nr]);
|
||||||
if (has_newer_autopwm(data)) {
|
if (has_newer_autopwm(data)) {
|
||||||
if (data->type == it8613)
|
if (has_new_tempmap(data))
|
||||||
data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x38;
|
data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x38;
|
||||||
else
|
else
|
||||||
data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03;
|
data->pwm_temp_map[nr] = data->pwm_ctrl[nr] & 0x03;
|
||||||
@@ -1754,9 +1756,9 @@ static ssize_t show_pwm_temp_map(struct device *dev,
|
|||||||
int map;
|
int map;
|
||||||
|
|
||||||
map = data->pwm_temp_map[nr];
|
map = data->pwm_temp_map[nr];
|
||||||
if (data->type == it8613) {
|
if (has_new_tempmap(data)) {
|
||||||
map >>= 3;
|
map >>= 3;
|
||||||
if (map >= 7)
|
if (map >= 6)
|
||||||
map = 0; /* Should never happen */
|
map = 0; /* Should never happen */
|
||||||
} else {
|
} else {
|
||||||
if (map >= 3)
|
if (map >= 3)
|
||||||
@@ -1781,7 +1783,7 @@ static ssize_t set_pwm_temp_map(struct device *dev,
|
|||||||
if (kstrtol(buf, 10, &val) < 0)
|
if (kstrtol(buf, 10, &val) < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (nr >= 3 && data->type != it8613)
|
if (nr >= 3 && !has_new_tempmap(data))
|
||||||
val -= 3;
|
val -= 3;
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
@@ -1803,14 +1805,14 @@ static ssize_t set_pwm_temp_map(struct device *dev,
|
|||||||
case BIT(5):
|
case BIT(5):
|
||||||
reg = 0x05;
|
reg = 0x05;
|
||||||
break;
|
break;
|
||||||
case BIT(5) | BIT(6):
|
case BIT(6):
|
||||||
reg = 0x06;
|
reg = 0x06;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->type == it8613)
|
if (has_new_tempmap(data))
|
||||||
reg <<= 3;
|
reg <<= 3;
|
||||||
else if (reg > 0x02)
|
else if (reg > 0x02)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -1823,7 +1825,9 @@ static ssize_t set_pwm_temp_map(struct device *dev,
|
|||||||
* otherwise, just store it for later use.
|
* otherwise, just store it for later use.
|
||||||
*/
|
*/
|
||||||
if (data->pwm_ctrl[nr] & 0x80) {
|
if (data->pwm_ctrl[nr] & 0x80) {
|
||||||
data->pwm_ctrl[nr] = (data->pwm_ctrl[nr] & 0xfc) |
|
u8 mask = has_new_tempmap(data) ? 0xc7 : 0xfc;
|
||||||
|
|
||||||
|
data->pwm_ctrl[nr] = (data->pwm_ctrl[nr] & mask) |
|
||||||
data->pwm_temp_map[nr];
|
data->pwm_temp_map[nr];
|
||||||
it87_write_value(data, data->REG_PWM[nr], data->pwm_ctrl[nr]);
|
it87_write_value(data, data->REG_PWM[nr], data->pwm_ctrl[nr]);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user