Commit 32dd7c40 authored by Guenter Roeck's avatar Guenter Roeck

hwmon: (it87) Add feature flag for VID support

Newer chips don't typically support VID inputs or control.
Add a feature flag for VID support to simplify adding support for
new chips.
Reviewed-by: default avatarJean Delvare <jdelvare@suse.de>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 9faf28ca
...@@ -254,6 +254,7 @@ struct it87_devices { ...@@ -254,6 +254,7 @@ struct it87_devices {
#define FEAT_TEMP_OLD_PECI (1 << 6) #define FEAT_TEMP_OLD_PECI (1 << 6)
#define FEAT_FAN16_CONFIG (1 << 7) /* Need to enable 16-bit fans */ #define FEAT_FAN16_CONFIG (1 << 7) /* Need to enable 16-bit fans */
#define FEAT_FIVE_FANS (1 << 8) /* Supports five fans */ #define FEAT_FIVE_FANS (1 << 8) /* Supports five fans */
#define FEAT_VID (1 << 9) /* Set if chip supports VID */
static const struct it87_devices it87_devices[] = { static const struct it87_devices it87_devices[] = {
[it87] = { [it87] = {
...@@ -262,22 +263,23 @@ static const struct it87_devices it87_devices[] = { ...@@ -262,22 +263,23 @@ static const struct it87_devices it87_devices[] = {
}, },
[it8712] = { [it8712] = {
.name = "it8712", .name = "it8712",
.features = FEAT_OLD_AUTOPWM, /* may need to overwrite */ .features = FEAT_OLD_AUTOPWM | FEAT_VID,
/* may need to overwrite */
}, },
[it8716] = { [it8716] = {
.name = "it8716", .name = "it8716",
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
| FEAT_FAN16_CONFIG | FEAT_FIVE_FANS, | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
}, },
[it8718] = { [it8718] = {
.name = "it8718", .name = "it8718",
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS, | FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
.old_peci_mask = 0x4, .old_peci_mask = 0x4,
}, },
[it8720] = { [it8720] = {
.name = "it8720", .name = "it8720",
.features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
| FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS, | FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
.old_peci_mask = 0x4, .old_peci_mask = 0x4,
}, },
...@@ -353,6 +355,7 @@ static const struct it87_devices it87_devices[] = { ...@@ -353,6 +355,7 @@ static const struct it87_devices it87_devices[] = {
((data)->old_peci_mask & (1 << nr))) ((data)->old_peci_mask & (1 << nr)))
#define has_fan16_config(data) ((data)->features & FEAT_FAN16_CONFIG) #define has_fan16_config(data) ((data)->features & FEAT_FAN16_CONFIG)
#define has_five_fans(data) ((data)->features & FEAT_FIVE_FANS) #define has_five_fans(data) ((data)->features & FEAT_FIVE_FANS)
#define has_vid(data) ((data)->features & FEAT_VID)
struct it87_sio_data { struct it87_sio_data {
enum chips type; enum chips type;
...@@ -1822,19 +1825,17 @@ static int __init it87_find(unsigned short *address, ...@@ -1822,19 +1825,17 @@ static int __init it87_find(unsigned short *address,
if (sio_data->type != it8603) if (sio_data->type != it8603)
sio_data->skip_in |= (1 << 9); sio_data->skip_in |= (1 << 9);
/* Read GPIO config and VID value from LDN 7 (GPIO) */ if (!(it87_devices[sio_data->type].features & FEAT_VID))
if (sio_data->type == it87) {
/* The IT8705F doesn't have VID pins at all */
sio_data->skip_vid = 1; sio_data->skip_vid = 1;
/* Read GPIO config and VID value from LDN 7 (GPIO) */
if (sio_data->type == it87) {
/* The IT8705F has a different LD number for GPIO */ /* The IT8705F has a different LD number for GPIO */
superio_select(5); superio_select(5);
sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f; sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f;
} else if (sio_data->type == it8783) { } else if (sio_data->type == it8783) {
int reg25, reg27, reg2a, reg2c, regef; int reg25, reg27, reg2a, reg2c, regef;
sio_data->skip_vid = 1; /* No VID */
superio_select(GPIO); superio_select(GPIO);
reg25 = superio_inb(IT87_SIO_GPIO1_REG); reg25 = superio_inb(IT87_SIO_GPIO1_REG);
...@@ -1900,7 +1901,6 @@ static int __init it87_find(unsigned short *address, ...@@ -1900,7 +1901,6 @@ static int __init it87_find(unsigned short *address,
} else if (sio_data->type == it8603) { } else if (sio_data->type == it8603) {
int reg27, reg29; int reg27, reg29;
sio_data->skip_vid = 1; /* No VID */
superio_select(GPIO); superio_select(GPIO);
reg27 = superio_inb(IT87_SIO_GPIO3_REG); reg27 = superio_inb(IT87_SIO_GPIO3_REG);
...@@ -1936,16 +1936,7 @@ static int __init it87_find(unsigned short *address, ...@@ -1936,16 +1936,7 @@ static int __init it87_find(unsigned short *address,
superio_select(GPIO); superio_select(GPIO);
reg = superio_inb(IT87_SIO_GPIO3_REG); reg = superio_inb(IT87_SIO_GPIO3_REG);
if (sio_data->type == it8721 || sio_data->type == it8728 || if (!sio_data->skip_vid) {
sio_data->type == it8771 || sio_data->type == it8772 ||
sio_data->type == it8781 || sio_data->type == it8782) {
/*
* IT8721F/IT8758E, IT8728F, IT8772F, IT8781F, and
* IT8782F don't have VID pins at all, not sure about
* the IT8771F.
*/
sio_data->skip_vid = 1;
} else {
/* We need at least 4 VID pins */ /* We need at least 4 VID pins */
if (reg & 0x0f) { if (reg & 0x0f) {
pr_info("VID is disabled (pins used for GPIO)\n"); pr_info("VID is disabled (pins used for GPIO)\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment